除以 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
我的问题是关于在 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