触发器和锁存器的概念及FPGA中的使用

来源:互联网 发布:科比0506赛季详细数据 编辑:程序博客网 时间:2024/06/09 20:44

在《深入理解Atera FPGA应用设计》的书中第3.6节详细介绍了在代码中使用寄存器而不是锁存器的原因。这里在这个基础上整理了网上的一些资料供参考。


1. 锁存器latch和触发器flip-flop的基本概念

(1)锁存器(latch)---对脉冲电平敏感,在时钟脉冲的电平作用下改变状态。

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


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


如下图所示的是一个那个常见的SR锁存器。E就是锁存器的使能或者输入时钟信号。通过与门控制S、R信号的输入,实际上是个门控。



(2)触发器(flip-flop,简称FF)---对脉冲边沿敏感,其状态只在时钟脉冲的上升沿或下降沿的瞬间改变。

触发器(Flip-Flop,简写为 FF),也叫双稳态门,又称双稳态触发器(能在0和1两种状态下维持稳定)。是一种可以在两种状态下运行的数字逻辑电路。触发器一直保持它们的状态,直到它们收到输入脉冲,又称为触发。当收到输入脉冲时,触发器输出就会根据规则改变状态,然后保持这种状态直到收到另一个触发。


如下图所示为主从SR触发器。只有当CLK的时钟上升沿(或者下降沿)才能触发输出信号的改变,当然输入信号仍然是靠CLK的电平来触发的。



2. 在FPGA不使用锁存器的原因

在ASIC设计中,单个锁存器Latch消耗的门电路比触发器FF少很多,所以ASIC中使用很常见。同时,锁存器比FF快,所以用在地址锁存是很合适的。锁存器在CPU设计中很常见,正是由于它的应用使得CPU的速度比外部IO部件逻辑快许多。


但是,在FPGA设计中(尤其是Altera公司的芯片),单个latch和ff消耗的逻辑资源是差不多的。所以,在设计中使用latch并不会节约资源。并且latch在FPGA中会带来如下问题。


a. latch是透明传输的,因此会带来毛刺,而触发器并不是透明传输的,不会带来毛刺;
b. 由于latch的结构特点,整个系统的静态时序分析会非常麻烦,所以,一般编译软件会给出警告;
c. 在FPGA中,生成一个latch需要一个逻辑单元和一个触发器,消耗的资源反而要多;

因此,在设计中,我们尽量不要使用latch。


3. 生成latch的情况

大家都知道尽量不要在设计中使用latch,但是更多情况下是我们无意间生成的latch。一般生成latch的情况有两种。


(1)if...else if...else语句中,缺了最后else语句;
(2)case语句缺了default语句;


这是很好理解的,如果出现以上两种情况,quartus编译器必须要生成一个锁存器来锁存住信号。并且,在状态机的设计中,缺少default语句会导致状态机陷入不存在的状态而引起状态机锁死,无法跳出;


参考链接:

1. http://blog.csdn.net/guqian110/article/details/10189301
2. http://blog.csdn.net/surgeddd/article/details/4683657

0 0
原创粉丝点击