|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
锁存器latch,在数字电路中经常遇到,它和触发器FF有着本质的区别。
这里为读者介绍FPGA中避免锁存器的方法。
在组合逻辑进程中,if语句一定要有else。并且所有的信号都要在if的所有分支中被赋值。
always @( * )
begin
if ( sig_a == 1‘b1 )
sig_b = sig_c;
end
这个是绝对会产生latch的。
这种情况要想避免锁存器的出现,应当为if语句增加else语句。
下面也会产生latch。也就是说在组合逻辑进程中不能出现自己赋值给自己或者间接出现自己赋值给自己的情况。
always @( * )
begin
if ( rst == 1‘b1 )
counter = 32’h00000000;
else
counter = counter + 1;
end
但如果是时序逻辑进程,则不存在该问题。
case语句的default一定不能少!
原因和if语句相同,这里不再多说了。
需要提醒的是,在时序逻辑进程中,default语句也一定要加上,这是一个很好的习惯。
组合逻辑进程敏感变量不能少也不能多。
verilog2001语法中可以直接用 * 。latch有弊就一定有利。在FPGA的LE中,总存在一个latch和一个D触发器,在支持DDR的IOE(IOB)中也存在着一个latch来实现DDIO。在我们平时的设计中,对latch还是要尽可能的敬而远之。
————————————————
版权声明:本文为CSDN博主「ALIFPGA」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/woshifennu1234/article/details/81805163[sub][/sub][sup][/sup][strike][/strike] |
|