除以 2 时钟和相应的复位生成

Divide by 2 clock and corresponding reset generation

我的问题是关于在 verilog 中使用 generate a synthesized divide by 2 clock 和相应的 reset。

我们可以使用 verilog

生成一个除以 2 的时钟,如下所示
module frquency_divider_by2(
  input      rst_n,
  input      clk_rx,
  output reg clk_tx
);

always @ (posedge clk_rx) begin
  if (~rst_n) begin
    clk_tx <= 1'b0;
  end
  else begin
    clk_tx <= ~clk_tx;
  end
end

endmodule

我的问题是如何使用rst_n

生成相应的重置(由使用clk_tx的触发器使用)

谁能帮我做同样的事情。

感谢您的帮助

clk_tx 的两个上升沿后异步应用重置和释放。等待 2 个上升沿会阻止复位在时钟周期的几分之一内变为低电平。

output reg rst2_n;
reg temp;

always @ (posedge clk_rx, negedge rst_n ) begin
  if (~rst_n) begin
    {rst2_n,temp} <= 2'b0;
  end
  else begin
   {rst2_n,temp} <= {temp, 1'b1};
  end
end

对于同步复位,您需要检查更快时钟的任何部分是否为低电平,在综合期间您需要检查 cdc(时钟域交叉)。

output reg rst2_n;
reg [1:0] sync_reset_n;
always @ (posedge clk_rx) begin
  sync_reset_n[1:0] <= {sync_reset_n[0], rst_n};
  rst2_n            <= &sync_reset_n ; //AND BIT reduction
end