集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1278|回复: 0

关于锁存器,应该要知道

[复制链接]
月影星痕 发表于 2019-9-1 09:12:18 | 显示全部楼层 |阅读模式


锁存器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
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-4-30 15:48 , Processed in 0.054542 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表