触发器大家可能再熟悉不过了,就拿D触发器来说,触发器是边沿敏感器件,会在时钟的上升沿(或者下降沿)将输入数据打入触发器(满足建立保持时间的情况下),在下一个上升沿到来前一直保持该数据。
Lacth是锁存器,是一种电平敏感器件。在输入信号未锁存时,输出跟随输入变化,此时锁存器是”透明的“,相当于信号经过一个缓冲器。一旦触发电平有效,输出锁存该时刻的输入,触发电平未解除之前输入信号不再有作用。
在一些教材中都会避免设计中产生锁存器,原因是在同步电路中锁存器会产生不好的效果,比如对毛刺敏感、上电后处于不定态、不能异步复位等,同时还会使静态时序分析变得困难。在FPGA中没有锁存器这种资源,需要用寄存器来组成锁存器,从而会消耗更多的逻辑资源。在ASIC设计中,锁存器会带来额外的延时,不利于提高系统的工作频率。
当然锁存器不是一无是处,锁存器在异步电路中还是很有用的,由于我们设计的大多是同步电路,所以要避免锁存器的产生。
Latch是在组合逻辑电路中产生的,时序逻辑电路不会产生latch。当然组合逻辑产生latch主要是由于代码编写不规范导致的,主要是包括以下几个方面:
在设计组合逻辑电路时要注意以上几点问题,规范编写代码。同时在组合逻辑中一定要避免输出信号处于未知状态,让输出在任何条件下都有一个已知的状态就可以避免Latch的产生。Latch作为一种基本电路单元,会影响到电路的时序性能,应尽量避免使用,但出现Latch造成设计与意图不符的情况,是由于设计人员代码不规范造成的。但也随着综合器越来越优化使之可以更精准的识别出该代码是否为设计者真正想要的Latch,并给出必要的提示。