先来一个小结:
触发器构成寄存器(有时钟;通常为边沿D触发器,数据先有效,控制信号后有效)。
锁存器由钟控D触发器(无时钟;控制信号先有效,数据后有效;由于不锁存数据的时候输出随输入变化而变化,输出有毛刺,在FPGA中尽量避免使用)。
本文参考了以下链接:
链接1
链接2
链接3
链接4
链接5

1、基本概念

(1)触发器:触发器是边沿敏感的存储单元,数据存储的动作由某一信号的上升或者下降沿进行同步的。触发器是计算机记忆装置的基本单元,一个触发器能储存一位二进制代码。寄存器是由触发器组成的。一个触发器可以组成一个一位的寄存器,多个触发器可以组成一个多位的寄存器。存储器是由大量寄存器组成的,其中每一个寄存器就称为一个存储单元。它可以存放一个有独立意义的二进制代码。
https://zhidao.baidu.com/question/624038919527248132.html

(2)寄存器:一般是边沿触发的触发器,在时序电路中寄存器的作用就是只在时钟的边沿有效传输data(满足建立时间和保持时间使得数据是稳定被采得)。在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能够构成一个存储n位二进制码的寄存器。

(3)锁存器:由电平触发,比如JK和RS等。一般用在传输门和反向器。由若干钟控D触发器构成的一次能存储多位二进制代码的时序逻辑电路。数据有效比时钟信号有效晚(也就是先时钟信号有效,后数据有效)。这意味着时钟信号先到,数据信号后到。其优点是面积小,但是时序分析困难。

注意:
1)通常所说的锁存器,大多是电平敏感型D触发器,而通常所说的寄存器是边沿敏感型D触发器。钟控D触发器是D锁存器,边沿D触发器才是真正的D触发器,钟控D触发器在使能情况下输出随输入变化,边沿触发器只有在边沿跳变的情况下输出才变化。
2)D触发器上电时Q和Q非的电平是怎样的?
D触发器刚上电的时候是不定的,只有当有反馈后才知道。可以在R、S端加RC延时电路来预知初始态。
感觉这与建立时间和保持时间有关系。不过不确定

2、寄存器和锁存器的区别

(1) 寄存器是同步时钟控制,而锁存器是电位信号控制。锁存器一般由电平信号控制,属于电平敏感型。寄存器一般由时钟信号控制,属于边沿敏感型。
(2) 寄存器的输出端平时不随输入端的变化而变化,只有在时钟有效时才将输入端的数据送输出端(打入寄存器),而锁存器的输出端平时总随输入端变化而变化,只有当锁存器信号到达时,才将输出端的状态锁存起来,使其不再随输入端的变化而变化。
可见,寄存器和锁存器具有不同的应用场合,取决于控制方式以及控制信号和数据之间的时间关系:若数据有效一定滞后于控制信号有效(锁存信号(控制信号)来了以后,才将输出端的状态/数据锁存起来),只能使用锁存器;如果数据提前于控制信号而到达且要求同步操作,则可以用寄存器来存放数据。
换言之,控制信号/时钟信号先来,数据后来,用锁存器;
控制信号/时钟信号后来,数据先来,用寄存器。

3、锁存器与触发器的区别

锁存器不同于触发器,它不在锁存数据时,输出端的信号随输入信号变化,就想信号通过一个缓冲器一样;一旦锁存信号起锁存作用,则数据被锁住,输入信号不起作用。锁存器也称为透明锁存器,指的是不锁存时输出对于输入是透明的。

1、 锁存器同所有的输入信号相关,当输入信号变化时锁存器就变化,没有时钟端;触发器受时钟控制,只有在时钟触发时才采样当前的输入,产生输出。
2、 锁存器是电平触发,非同步控制。在使能信号有效时锁存器相当于通路,在使能信号无效时锁存器保持输出状态。触发器由时钟沿触发,同步控制。
3、 锁存器对输入电平敏感(输出随输入的变化而变化),受布线延迟影响较大,很难保证输出没有毛刺产生;触发器则不易产生毛刺。
4