../src/lowrisc_ip_usbdev_0.1/rtl/usbdev_flop_2syncpulse.sv Cov: 100%

   1: // Copyright lowRISC contributors.
   2: // Licensed under the Apache License, Version 2.0, see LICENSE for details.
   3: // SPDX-License-Identifier: Apache-2.0
   4: //
   5: // Generic double-synchronizer flop followed by pulse generation
   6: 
   7: module usbdev_flop_2syncpulse #(
   8:   parameter int unsigned Width = 16
   9: ) (
  10:   input  logic             clk_i,    // receive clock
  11:   input  logic             rst_ni,
  12:   input  logic [Width-1:0] d,
  13:   output logic [Width-1:0] q
  14: );
  15: 
  16:   // double-flop synchronizer cell
  17:   logic [Width-1:0] d_sync;
  18:   prim_flop_2sync #(.Width (Width)) prim_flop_2sync (
  19:     .clk_i,
  20:     .rst_ni,
  21:     .d,
  22:     .q (d_sync)
  23:   );
  24: 
  25:   // delay d_sync by 1 cycle
  26:   logic [Width-1:0] d_sync_q;
  27:   always_ff @(posedge clk_i or negedge rst_ni) begin
  28:     if (!rst_ni) begin
  29:       d_sync_q <= '0;
  30:     end else begin
  31:       d_sync_q <= d_sync;
  32:     end
  33:   end
  34: 
  35:   // rising edge detection
  36:   assign q = d_sync & ~d_sync_q;
  37: 
  38: endmodule
  39: