module async_rst_cdc_sync_rst(
input clk,
input async_rst,
output sync_rst
);
reg reset;
reg reset_d;
always@(posedge clk or posedge async_rst)
if(async_rst)
reset <= 1'b1;
else
reset <= async_rst;
always@(posedge clk or posedge async_rst)
if(async_rst)
reset_d <= 1'b1;
else
reset_d <= reset;
assign sync_rst = reset | reset_d;
endmodule
`timescale 1ns/1ps
module tb_uut();
reg clk;
reg async_rst;
wire sync_rst;
initial begin
clk = 0;
forever begin
end
end
initial begin
async_rst = 0;
end
async_rst_cdc_sync_rst uut(
.clk ( clk ),
.async_rst ( async_rst ),
.sync_rst ( sync_rst )
);
endmodule
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e5bfcafaa3be9e82ee65fd7598dc1c61.png)