【Verilog HDL】设计硬件电路时,如何避免生成锁存器?

这个问题很简单,前面的很多博文也多多少少提到了这个问题,(如:Verilog HDL 使用规范(一)),今天就系统地理一遍。


Verilog HDL设计中容易犯的一个通病就是不正确使用语言,生成了并不想要的锁存器。下面给出两种情形:

情形一:

不恰当地使用 if 语句

1.1 有锁存器的代码:

always @(al or b)
begin
    if(al) q <= b;

end

这个“always”块中,if语句保证了只有al = 1时, q才取 d 的值。这段程序没有写出al = 0时的结果,那么当al = 0时会怎么样呢?变量q保持原来的值。

1.2 无锁存器的代码:

always @(al or b)
begin
    if(al) q <= b;
    else q <= 0;

end

这个“always”块中,相对于上一段代码的不同之处在于当al = 0 时,给了q一个值0。


总结上面的两段代码,如果在给定的条件下变量没有赋值,这个变量就会保持原值,也就是会生成一个锁存器。

如果设计人员希望当al = 0时,q值为0,else项就必不可少了,注意1.2的代码中的“always”块,整个Verilog HDL程序模块被综合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李锐博恩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值