同步复位就是指复位信号只有在时钟上升沿到来时,才能有效
module flip_flop
( input wire sys_clk,
input wire sys_rset_n,
input wire key_in,
output reg led_out
);
always@(posedge sys_clk )//上升沿,同步复位
if(sys_rset_n == 1'b0)
led_out<= 1'b0;
else
led_out<= key_in;
endmodule

仅在时钟信号的上升沿时刻 led_out=key_in 延迟一个单位
测试文件
`timescale 1ns/1ns
module tb_flip_flop();
reg sys_clk;
reg sys_rset_n;
reg key_in;
wire led_out;
initial
begin
sys_clk=1'b1;
sys_rset_n<=1'b0;
key_in=1'b0;
#20
sys_rset_n<=1'b1;
#210
sys_rset_n<=1'b0;
#40
sys_rset_n<=1'b1;
end
always #10 sys_clk=~sys_clk;
always #20 key_in<={$random}%2;
initial
begin
$timeformat(-9,0,"ns",6); //时间尺度10e-9ns,小数点后位数0, 打印的最小数字字符
$monitor("@time %t:key_in=%b led_out=%b ",$time,key_in,led_out);
end
flip_flop flip_flop_inst
(
.sys_clk(sys_clk),
.sys_rset_n(sys_rset_n),
.key_in(key_in),
.led_out(led_out)
);
endmodule
异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。
module flip_flop
( input wire sys_clk,
input wire sys_rset_n,
input wire key_in,
output reg led_out
);
always@(posedge sys_clk or negedge sys_rset_n)//时钟上升沿或者复位信号的下降沿执行,异步复位
if(sys_rset_n == 1'b0)
led_out<= 1'b0;
else
led_out<= key_in;
endmodule

寄存器一次延迟
led_out 为key_in延迟一次,在复位信号有效时,上升沿到来,led_out=key_in,并延迟一个单位,在复位信号的下降沿,led_out=key_in,为低电平。
直到复位信号再次变为高电平后,等待时钟信号的上升沿时刻,led_out=key_in,延迟一个时间单位并保持。
该博客介绍了同步复位和异步复位的概念及其在FPGA设计中的实现。同步复位只在时钟上升沿有效,确保了数据在稳定时钟边沿转换,而异步复位则在复位信号下降沿即生效,不受时钟控制,可用于快速响应系统复位需求。文中通过Verilog代码示例展示了两种复位方式如何影响信号延迟和系统状态。
同步复位与异步复位&spm=1001.2101.3001.5002&articleId=123599132&d=1&t=3&u=c83496a920ee4ad594f8c51bf600b37d)
588

被折叠的 条评论
为什么被折叠?



