基本概念
锁存器(latch):、在电平信号的作用下改变状态,是一种电平触发的存储单元。锁存器的数据存储动作取决于输入使能信号的电平值,仅当锁存器处于使能状态时,输出数据才会随着数据输入发生变化,否则处于锁存状态。
输出端的状态不会随输入端的状态变化而变化,仅在有锁存信号时输入的状态才被保存到输出,直到下一个锁存信号到来时才改变。
以D锁存器为例
当CP = 1 时,输出端的状态随输入端的状态而改变。Q n+1 = D ,存入新的数据;当CP = 0 时,无论 D 如何变化,输出端的状态保持不变。Q n+1 = Q n,存入的数据不变。
触发器(FF):当收到输入时钟脉冲时,便会根据规则改变状态,然后保持这种状态直到收到下一个触发脉冲信号到来,边沿敏感。
以边沿触发D触发器为例
边沿触发器而言,只有当时钟从0跳变到1时,才会引起输出的改变。边沿触发的D型触发器,它由两级R-S触发器按如下方式连接而成,时钟信号在第一级中进行了取反操作。
- 非工作状态下,其数据和时钟输入均为0,且Q的输出也为0
- 使数据端输入1,则改变了第一级触发器的状态,因为时钟输入取反变为1。但是第二级触发器状态保持不变,因为时钟输入仍然为0。
- 把时钟输入变为1,这就引起了第二级触发器输出的改变,使Q输出变为1。
- 只有在时钟输入从0变为1的瞬间,Q的输出才发生改变。
寄存器(register):存储电路通常是由触发器构成的,因为一个触发器能存储一位二进制数,所以N个触发器就可以构成N位寄存器,可以将寄存器理解成多个触发器构成的暂存单元。
锁存器与触发器区别
- 触发器(寄存器)由同步时钟信号控制的,需要时钟信号;而锁存器是由电平使能信号控制的,不需要时钟信号。在FPGA的可用资源中,触发器资源非常常见,但是锁存器则很少,需要由一个逻辑门和触发器来构成,浪费较多资源。
- latch是电平触发的,锁存器的输出对输入透明的,输入是什么,输出就是什么,这就是锁存器不稳定的原因;而触发器是由两个锁存器构成的一个主从触发器,输出对输入是不透明的,必须在时钟的上升/下降沿才会将输入体现到输出,所以能够消除输入的毛刺信号。
锁存器与触发器不同应用场合
- 若数据信号有效性滞后于控制信号有效,则选择锁存器;若数据信号提前于控制信号到达并且要求同步操作,则采用触发器(寄存器)。
锁存器产生条件
组合逻辑中case结构缺乏default
组合逻辑中if-else结构描述不全
组合逻辑always()中敏感列表不全
组合逻辑是否会生成锁存器,其根本原因是该组合逻辑存在保持功能!
锁存器危害
- 对毛刺敏感,不能异步复位,所以上电以后可能处于不确定的状态;
- Latch会使静态时序分析变得非常复杂;
- DFT处理复杂
- FPGA基本的单元是由查找表和触发器组成的,若生成锁存器反而需要更多的资源。CPU设计有些充分利用锁存器特性,在实际应用中,有些设计不可避免的要使用Latch,特别是总线应用上,例如,地址锁存器,数据锁存器,复位信号锁存器等。
参考文档
【1】触发器(寄存器)与锁存器的异同
【2】寄存器,触发器,锁存器之间的区别与联系
【3】边沿触发-D型触发器
【4】RS锁存器和D锁存器的电路结构及工作原理
【5】实例解析Verilog综合出锁存器的问题
【6】latch和寄存器有什么区别 锁存器的危害分析