关于锁存器,应该要知道


锁存器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还是要尽可能的敬而远之。


版权所有权归卿萃科技 杭州FPGA事业部,转载请注明出处

作者:杭州卿萃科技ALIFPGA

原文地址:杭州卿萃科技FPGA极客空间 微信公众号

扫描二维码关注杭州卿萃科技FPGA极客空间


 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值