在 Verilog 中用来暂时存放参与运算的数据和运算结果的变量。一个变量声明为寄存器时,它既可以被综合成触发器,也可能被综合成 Latch,甚至是 wire 型变量。但是大多数情况下我们希望它被综合成触发器,但是有时候由于代码书写问题,它会被综合成不期望的 Latch 结构。
Latch 的主要危害有:
1)输入状态可能多次变化,容易产生毛刺,增加了下一级电路的不确定性;2)在大部分 FPGA 的资源中,可能需要比触发器更多的资源去实现 Latch 结构;3)锁存器的出现使得静态时序分析变得更加复杂。
Latch 多用于门控时钟(clock gating)的控制,一般设计时,我们应当避免 Latch 的产生。
避免此类 latch 的方法主要有 2 种,一种是补全 if-else 结构,或者对信号赋初值。
为避免 latch 的产生,在组合逻辑中,需要注意以下几点:
1)if-else 或 case 语句,结构一定要完整2)不要将赋值信号放在赋值源头,或条件判断中3)敏感信号列表建议多用 always@*)
latch的好处:
因为使用latch可以timing borrow,在高速电路设计中(timing会很紧),有时候就需要用latch。
参考:
https://www.runoob.com/w3cnote/verilog-latch.html
https://blog.csdn.net/weixin_30314813/article/details/94942012