1

我的问题是关于在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 的触发器使用)

任何人都可以帮助我。

我感谢您的帮助

4

1 回答 1

3

在 .的两个上升沿后异步应用复位和释放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
于 2015-06-15T07:51:05.987 回答