锁存器(latch),触发器(flip-flop),寄存器(register)

       锁存器(Latch):锁存器是电平触发的存储单元,数据存储的动作(状态转换)取决于输入时钟(或者使能)信号的电平值,即当锁存器处于使能状态时,输出才会随着数据输入发生变化。

典型结构:SR-Latch

      触发器(Flip-Flop):触发器是边沿敏感的存储单元,数据存储的动作(状态转换)由某一信号的上升或者下降沿进行同步的(限制存储单元状态转换在一个很短的时间内) 。(钟控 D 触发器其实就是 D 锁存器,边沿 D 触发器才是真正的 D 触发器)。

      寄存器(Register):用来暂时存放参与运算的数据和运算结果。在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。

        区别与联系:由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把 n 个触发器的时钟端口连接起来就能构成一个存储 n 位二进制码的寄存器。
       从寄存数据的角度来讲,寄存器和锁存器的功能是相同的;它们的区别在于寄存器是同步时钟控制,而锁存器是电位信号控制。 

       锁存器不同于触发器,锁存器在不锁存数据时,输出端的信号随输入信号变化,就像信号通过一个缓存器一样;一旦锁存信号起锁存作用,则数据被锁住,输入信号不起作用。因此锁存器也称为透明锁存器,指的是不锁存是输出对输入是透明的。
        一般的设计规则是:在绝大多数设计中避免产生锁存器。它会让您设计的时序完蛋,并且它的隐蔽性很强,非老手不能查出。锁存器最大的危害在于不能过滤毛刺 (使能信号有效时,输出状态可能随输入多次变化,产生空翻) 。这对于下一级电路是极其危险的。所以,只要能用 D 触发器的地方,就不用锁存器。

    (verilog代码中 if...else...不配对容易产生latch。良好的RTL Coding Style下 if  else 需要配对)。

      always块描述组合逻辑时,如果always块中敏感变量里漏掉了某个变量,这意味着当这个变量发生变化时,always块也不会被重新执行。这可能会导致该模块综合后出现锁存器或其他电路。

猜你喜欢

转载自blog.csdn.net/llxxyy507/article/details/82350378
今日推荐