verilog设计过程寄存器使用#1的问题

verilog代码中使用#1延迟

有这样子的一种“神话”,为了修正非阻塞赋值的问题,要求加上#1 delay。因此在一般的非阻塞赋值中经常会看到#1的延迟,工程师的解释是为了防止非阻塞赋值奔溃。实际上,加不加#1都不会导致非阻塞赋值奔溃!在非阻塞赋值的RHS加#1延迟,既有好的原因,也有很多坏的原因。

好的原因1:在非阻塞赋值上加#1,输出变化会有一个时间单位的延迟,便于查看波形。例如,看一下下面的寄存器模型:

`timescale 1ns/1ns
module	delay_test ( q , d , clk , rst_n);
	input     clk , rst_n;
	input               d;
	output      reg     q;
	always@(posedge clk or negedge rst_n) begin
		if(!rst_n)	q <= #1 1'b0 ;
		else	    q <= #1 d    ;
	end
endmodule

这个模型在posedge clk之后或在negedge rst_n之后让输出延迟1时间单位(1ns)。这个延迟有效地实现了1ns的clk-to-q 或者rst-to-q 的延迟,查看波形时更容易理解,因为这个延迟让我们更容易理解波形。波形上的小延迟也可以让人更容易地看到时序逻辑输出在时钟沿之前的值,通过把波形查看工具的一条竖线放在时钟沿上,在波形工具左侧就会把每个信号对应的值显示出来,然后把竖线移动到时钟沿1ns之后的位置,就可以看到因为时钟信号更改后的值。

好的原因2ÿ

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟花一时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值