flip-flop和latch到底有什么区别

如题所述

filp-flop是触发器,在时钟信号有效时候才检测输入改变输出
latch是锁存器,是组合逻辑,不依赖时钟信号,总是根据输入改变输出
FPGA设计中总是讲到要避免使用latch,那么使用latch到底有什么坏处呢?这个问题想了很久也没有得到一个令自己满意的答案,这里我先把自己的一些看法表述一下,请大家就这个问题讨论讨论。
latch和flip-flop都是时序逻辑,区别为:latch同其所有的输入信号相关,当输入信号变化时latch就变化,没有时钟端;flip-flop受时钟控制,只有在时钟触发时才采样当前的输入,产生输出。当然因为二者都是时序逻辑,所以输出不但同当前的输入相关还同上一时间的输出相关。
latch缺点:
1、没有时钟端,不受系统同步时钟的控制,无法实现同步操作;
2、对输入电平敏感,受布线延迟影响较大,很难保证输出没有毛刺产生;
在xilinx和altera器件的slice和LE中都能够同时支持生产d-latch和d-ff,在这一层面上二者有什么区别暂时没有想到。如果使用门电路来搭建latch和ff,则latch消耗的门资源比ff要少,这是latch比ff优越的地方。
------------------------------------------------
简单回答就是Latch是异步电路,flip-flop是同步电路
既然是同步电路,肯定有clock端了,而latch就没有
但是在IC设计中,latch相对flip-flop只占用其三分之一的硅
面积。
register一般是由Latch or flip-flop实现的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-04-18
filp-flop是触发器,在时钟信号有效时候才检测输入改变输出
latch是锁存器,是组合逻辑,不依赖时钟信号,总是根据输入改变输出本回答被网友采纳
第2个回答  2018-03-31

用法不一样

flip-flop英 [ˈflipflɔp] 美 [ˈflɪpˌflɑp]

n.后滚翻,噼啪(声)

adv.连续啪啪作声地;

vt.使翻转;使突然转变;

[例句]Finally, Computer simulation has shown that above flip-flop and 

adiabatic variable counter are stable with lower power consumption.

最后用计算机模拟程序检验绝热触发器和可变计数电路的结果。

[其他]第三人称单数:flip-flops 复数:flip-flops 现在分词:flip-flopping 过去式:flip-flopped 

过去分词:flip-flopped

本回答被网友采纳
第3个回答  2018-12-08
锁存器(latch):电平敏感存储器
触发器 : 由时钟跳变沿触发的存储器
第4个回答  2018-03-16
首先理解双稳态元件,两个首尾相连的反相器就构成了双稳态元件。Q是~Q的输入,~Q是Q的输入,这个状态非常稳定,所以用双稳态元件保存数据很理想。
Latch(锁存器)也就是由双稳态元件构成,简单的RS锁存器就是两个与非门构成的。如果加上使能信号来控制,则需要四个与非门构成两级双稳态电路。把S端接D,R接~D就构成了D锁存器。锁存器是对电平敏感的。假设一个D锁存器是高电平有效的,那么在使能信号为高电平期间,输入端D的任何变化都会反映到输出端Q,可以理解为锁存器变成了有延迟的导线。使能信号为低电平时,与非门的特性把输入屏蔽了,输入D无论怎样变化都不会改变输出D的值,此时我们就说输出D被锁存。
锁存器也可以是低电平有效,把高电平有效的锁存器电路的使能信号反相即可。
由于锁存器是电平控制的,所以缺点很多。比如输出容易受到干扰,当使能信号出现一个毛刺时可能就把输出改变了;时序分析比较困难,因为整个使能信号有效期间都会受输入影响;无法异步复位,上电后初始状态不可控;FPGA都是由查找表和触发器构成的,没有直接的锁存器,为了生成锁存器需要很多资源。
为了改善锁存器的缺点,就出现了flip-flop(触发器),它对使能信号边沿敏感而不是电平敏感。构成触发器的一个简单思路就是用两个使能信号相反的锁存器构成。假设一个D触发器对上升沿敏感,那么它的前一部分是低电平有效的D锁存器,后一部分是高电平有效的D锁存器。当使能信号为低时,前一个锁存器是有效的,输入会传输到它的输出,假设为Qtemp。后一个锁存器无效,输出不变。当使能信号拉高,即产生一个上升沿。后一个锁存器有效,Qtemp被传输到输出。前一个锁存器此时无效,无论怎么改变输入,都不影响Qtemp,而Qtemp不变则输出不变。由此可以看出,只有上升沿的一瞬间会改变输出的状态,其他任何时候输出都是被锁存的。下降沿敏感触发器把锁存器反过来就是了。
触发器工作时要满足一定的时序要求,即数据的建立时间和保持时间。在有效边沿来临之前,数据就必须提前稳定好,这是为了让第一个锁存器得到稳定的Qtemp,提前的时间称为建立时间(setup)。有效沿产生时,输入还需保持不变一段时间,因为实际方波并不是理想的直上直下,而是曲线变化,这个叫保持时间(hold on)。由于有这两个时间存在,具体数值和制造工艺有关,所以时钟频率有上限,一个时钟周期的时间最小不能小于它俩之和。
触发器只在边沿有效,故不易受干扰(一般毛刺时间很短,不满足建立和保持的时序要求);在第二个锁存器输入端可以加入异步复位;只用分析时钟边沿的输入等等,解决了锁存器的那些缺点。存储单元推荐使用触发器,避免使用锁存器。
触发器的作用:所有存储器件里,触发器最快,一个时钟周期就能传递数据,常构成寄存器。
触发器的名字解释:flip有向上跳和啪嗒啪嗒地动的意思,flop有向下跳和啪啪翻动的意思。合在一起flip-flop就是形容方波信号反复的上升下降或者时钟啪嗒的声音(我猜的),中文翻译成触发器。trigger也有触发器的意思,但是用的比较少。
两者与verilog的关系:verilog允许使用always来描述组合逻辑,而组合逻辑只与当前输入有关,任意输入都有一个确定的输出。下面是一个描述2选1多路选择器的错误例子。
always@(a, b, c) if(c) out = a;
本来想让c=1时,输出a;c=0时,输出b。但忘记写 else out = b; 这种情况就是输入条件没写全,造成综合器无法判断c=0时的逻辑。综合器会认为c=0时输出保持不变,即自动推断出else out = out;从而硬件电路上就产生了一个锁存器来使得输出保持不变即out = out。这样组合逻辑引入了时序元件,变成了时序电路,可能违背了设计者的初衷。再看这句话,语法没任何问题,所以EDA软件不会发出警告。为了避免这种情况,用always写组合逻辑一定要覆盖所有输入的组合。
在systemverilog中,将always分成了always_comb、always_latch和always_ff。它们明确地告诉了EDA软件,这里需要生成组合逻辑、锁存器和触发器。如果有
always_comb if(c) out = a; // always_comb会自动推断敏感变量
这种组合逻辑产生锁存器的行为,EDA软件就会报错。
总结:推荐使用触发器,避免使用锁存器,除非确实需要产生锁存器。
相似回答