Verilog:避免Latch

一、什么是锁存器?锁存器与触发器的区别
锁存器与触发器最大区别在于,锁存器是电平触发,而触发器是边沿触发。锁存器在不锁存数据时,输出随输入变化,但一旦数据锁存时,输入对输出不产生任何影响。
latch的危害:

1.输入状态可能多次变化,容易产生毛刺,增加了下一级电路的不确定性;
2.在大部分 FPGA 的资源中,可能需要比触发器更多的资源去实现 Latch 结构;
3.锁存器的出现使得静态时序分析变得更加复杂

在组合逻辑中,不完整的if-else结构,会产生latch。
避免此类latch的方法主要有两种,一种是补全if-else结构,或者对信号赋初值。
但是在时序逻辑中,不完整的if-else结构,不会产生latch,这是因为,q寄存器具有存储功能,且其值在时钟的边沿下才会改变。

case 语句产生 Latch 的原理几乎和 if 语句一致。在组合逻辑中,当 case 选项列表不全且没有加 default 关键字,或有多个赋值语句不完整时,也会产生 Latch。
消除此种 latch 的方法也是 2 种,将 case 选项列表补充完整,或对信号赋初值。
补充完整 case 选项列表时,可以罗列所有的选项结果,也可以用 default 关键字来代替其他选项结果。
总之,为避免 latch 的产生,在组合逻辑中,需要注意以下几点:

1)if-else 或 case 语句,结构一定要完整
2)不要将赋值信号放在赋值源头,或条件判断中
3)敏感信号列表建议多用 always@(*)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值