【问题标题】:Divide by 2 clock and corresponding reset generation除以 2 时钟和相应的复位产生
【发布时间】:2015-06-16 16:17:50
【问题描述】:

我的问题是关于在 verilog 中使用生成可合成的 2 时钟分频和相应的复位。

我们可以使用 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 的触发器使用)

任何人都可以帮助我吗?

感谢您的帮助

【问题讨论】:

    标签: verilog reset clock synthesis asic


    【解决方案1】:

    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
    

    【讨论】:

    • 感谢您的回答。
    • 我认为异步重置的时钟应该是 clk_rx。 @摩根。
    • @srikanth,你绝对正确。更新了答案。重置应该在使用它的时钟域上安全释放。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2014-02-27
    • 2012-10-27
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    相关资源
    最近更新 更多