我的问题是关于使用2个时钟产生可合成的除法和verilog中的相应复位。
我们可以使用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的flops使用)
任何人都可以帮助我。
感谢您的帮助
答案 0 :(得分: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