触发器:flipflop,
锁存器:latch,
寄存器:register
锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,尽当锁存器处于使能状态时,输出才会随着数据输入发生变化。
触发器是边沿敏感的存储单元,数据存储的动作有某一信号的上升或者下降沿进行同步的。
寄存器用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。
触发器是在时钟的沿进行数据的锁存的,而锁存器是用电平使能来锁存数据的。所以触发器的Q输出端在每一个时钟沿都会被更新,而锁存器只能在使能电平有效器件才会被更新。在FPGA设计中建议如果不是必须那么应该尽量使用触发器而不是锁存器。
锁存器
latch : PROCESS (enable,q)
BEGIN
IF (enable = '1') THEN
q <= data;
END IF;
END PROCESS latch;
如果去掉q,会变成触发器
latch : PROCESS (enable)
BEGIN
IF (enable = '1') THEN
q <= data;
END IF;
END PROCESS latch;
等同下面
latch : PROCESS (enable)
BEGIN
IF (enable'EVENT and enable='1') THEN
q <= data;
END IF;
END PROCESS latch;