文章目录
- 1 定义
- 1.1 锁存器(latch)
- 1.2 触发器(flip-flop)
- 1.3 寄存器(register)
- 2 比较
- 2.1 锁存器(Latch)危害即产生原因
- 2.2 寄存器和锁存器的区别
- 2.3 锁存器和触发器的区别
- 3 结构
- 3.1 锁存器基本结构
- 3.2 触发器基本结构
- 参考
1 定义
1.1 锁存器(latch)
锁存器是一种由电平触发的存储单元,为异步电路,数据存储的动作取决于输入信号的电平值,只要输入发生变化,输出即随之发生变化。
1.2 触发器(flip-flop)
触发器是边沿敏感的存储单元,数据存储的动作由某一信号的上升或者下降沿进行同步的,即输出数据只在信号的上升沿或者下降沿到来时被改变。
1.3 寄存器(register)
1、寄存器用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果,是一种常用的时序逻辑电路,但这种逻辑电路只包含存储电路。
2、寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。
2 比较
2.1 锁存器(Latch)危害即产生原因
1、危害:
- 锁存器容易产生毛刺;
- 锁存器的出现使得静态时序分析变得更加复杂;
- 锁存器在ASIC设计中应该说比ff要简单,但是在FPGA的资源中,大部分器件没有锁存器这个东西,所以需要用一个逻辑门和ff来组成锁存器,这样就浪费了资源;
2、产生原因:
- 不完整的if或者case语句;
- 不完整的敏感信号列表;
- 输入信号没有对应的输出;
3,综合来看,锁存器的产生总是与电路的不完整有关系,因此在编写verilog代码时,最好对于if语句和case语句一定要做到完全描述,最常用的方法就是总是加上else和default。
2.2 寄存器和锁存器的区别
- 寄存器受同步时钟信号控制,而锁存器受输入信号控制,前者是边缘敏感型电路,后者则是电平敏感型电路。
- 寄存器的输出端平时不随输入端的变化而变化,只有在时钟有效时才将输入端的数据送输出端(打入寄存器),而锁存器的输出端平时总随输入端变化而变化,只有当锁存器信号到达时,才将输出端的状态锁存起来,使其不再随输入端的变化而变化。
2.3 锁存器和触发器的区别
- 锁存器同所有的输入信号相关,当输入信号变化时锁存器就变化,没有时钟端;触发器受时钟控制,只有在时钟触发时才采样当前的输入,产生输出。
- 锁存器是电平触发,非同步控制。在使能信号有效时锁存器相当于通路,在使能信号无效时锁存器保持输出状态。触发器由时钟沿触发,同步控制。
- 锁存器对输入电平敏感(输出随输入的变化而变化),受布线延迟影响较大,很难保证输出没有毛刺产生;触发器则不易产生毛刺。
3 结构
3.1 锁存器基本结构
1、锁存器分为普通锁存器和门控锁存器,普通锁存器无控制信号,输出状态始终直接由输入决定。而在实际的数字系统中,为了协调各部分的工作,往往需要有一个特定的控制信号去控制锁存器状态转换的时间,在控制信号无效时,输出保持不变,不随输入变换;当控制信号有效时,输出由输入决定,跟随输入变化。
3.2 触发器基本结构
触发器为边缘敏感型,因此其分为上升沿触发和下降沿触发。
参考
https://blog.csdn.net/h_kingone/article/details/56671517
https://blog.csdn.net/Times_poem/article/details/85986055