锁存器Latch和触发器Flip-flop的区别

article/2025/4/11 7:56:12

锁存器Latch概述

锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。锁存,就是把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存,其次完成高速的控制器与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个I/O口既能输出也能输入的问题。锁存器是利用电平控制数据的输入,它包括不带使能控制的锁存器和带使能控制的锁存器。

锁存器Latch结构

latch:锁存器,是由电平触发,结构图如下:
  在这里插入图片描述

锁存器latch的优缺点

优点:

1、面积比ff小

门电路是构建组合逻辑电路的基础,而锁存器和触发器是构建时序逻辑电路的基础。门电路是由晶体管构成的,锁存器是由门电路构成的,而触发器是由锁存器构成的。也就是晶体管-》门电路-》锁存器-》触发器,前一级是后一级的基础。latch完成同一个功能所需要的门较触发器要少,所以在asic中用的较多。

2、速度比ff快

用在地址锁存是很合适的,不过一定要保证所有的latch信号源的质量,锁存器在CPU设计中很常见,正是由于它的应用使得CPU的速度比外部IO部件逻辑快许多。

缺点:

1、电平触发,非同步设计,受布线延迟影响较大,很难保证输出没有毛刺产生

2、latch将静态时序分析变得极为复杂

触发器Flip-flop结构

lip-flop:触发器,是时钟边沿触发,可存储1bitdata,是register的基本组成单位,结构图如下:
在这里插入图片描述

flip-flop的优缺点

优点:

1、边沿触发,同步设计,不容易受毛刺的印象

2、时序分析简单

缺点:

1、面积比latch大,消耗的门电路比latch多

锁存器Latch和触发器flipflop的区别

1、锁存器Latch和触发器flipflop

锁存器能根据输入端把结果自行保持;触发器是指由时钟边沿触发的存储器单元;由敏感信号(电平,边沿)控制的锁存器就是触发器;

2、写电路时,产生锁存器的原因

if语句中,没有写else,默认保持原值,产生锁存器,可能不是想要的结果;

case语句中,没有写完整default项,也容易产生锁存器;

例子:

always@(aorb)

begin

if(a)q=b;

end

产生了锁存器,如下:
  在这里插入图片描述
没有锁存器的情况

always@(aorb)

begin

if(a)q=b;

elseq=0;

end
在这里插入图片描述

3、避免使用D锁存器,尽量使用D触发器

D锁存器

moduletest_latch(y,a,b);

outputy;inputa;inputb;regy;

always@(aorb)begin

if(a==1’b1)

y=b;

endendmodule

在这里插入图片描述

D触发器

moduletest_d(y,clk,a,b);

outputy;inputclk;inputa;inputb;regy;

always@(posedgeclk)begin

if(a==1‘b1)

y=b;

endendmodule

在这里插入图片描述

从图8可知,例10对应的电路是D触发器。信号a被综合成D触发器的使能端,只有在时钟上沿到来且a为高时,b信号的值才能传递给a;只要在时钟上升沿期间信号b是稳定,即使在其他时候b还有毛刺,经过D触发器后数据是稳定的,毛刺被滤除。




一、锁存器

锁存器(latch)—对脉冲电平敏感,在时钟脉冲的电平作用下改变状态 锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,仅当锁存器处于使能状态时,输出才会随着数据输入发生变化。 锁存器不同于触发器,它不在锁存数据时,输出端的信号随输入信号变化,就像信号通过一个缓冲器一样;一旦锁存信号起锁存作用,则数据被锁住,输入信号不起作用。锁存器也称为透明锁存器,指的是不锁存时输出对于输入是透明的。

锁存器(latch):我听过的最多的就是它是电平触发的,呵呵。锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,当锁存器处于使能状态时,输出才会随着数据输入发生变化。(简单地说,它有两个输入,分别是一个有效信号EN,一个输入数据信号DATA_IN,它有一个输出Q,它的功能就是在EN有效的时候把DATA_IN的值传给Q,也就是锁存的过程)。

应用场合:数据有效迟后于时钟信号有效。这意味着时钟信号先到,数据信号后到。在某些运算器电路中有时采用锁存器作为数据暂存器。

缺点:时序分析较困难。

不要锁存器的原因有二:1、锁存器容易产生毛刺,2、锁存器在ASIC设计中应该说比ff要简单,但是在FPGA的资源中,大部分器件没有锁存器这个东西,所以需要用一个逻辑门和ff来组成锁存器,这样就浪费了资源。

优点:面积小。锁存器比FF快,所以用在地址锁存是很合适的,不过一定要保证所有的latch信号源的质量,锁存器在CPU设计中很常见,正是由于它的应用使得CPU的速度比外部IO部件逻辑快许多。latch完成同一个功能所需要的门较触发器要少,所以在asic中用的较多。
在这里插入图片描述

二、触发器

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

触发器(flip-flops)电路相互关联,从而为使用内存芯片和微处理器的数字集成电路(IC)形成逻辑门。它们可用来存储一比特的数据。该数据可表示音序器的状态、计数器的价值、在计算机内存的ASCII字符或任何其他的信息。 有几种不同类型的触发器(flip-flops)电路具有指示器,如T(切换)、S-R(设置/重置)J-K(也可能称为Jack Kilby)和D(延迟)。典型的触发器包括零个、一个或两个输入信号,以及时钟信号和输出信号。一些触发器还包括一个重置当前输出的明确输入信号。第一个电子触发器是在1919年由W.H.Eccles和F.W.Jordan发明的。

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

T触发器(Toggle Flip-Flop,or Trigger Flip-Flop)设有一个输入和输出,当时钟频率由0转为1时,如果T和Q不相同时,其输出值会是1。输入端T为1的时候,输出端的状态Q发生反转;输入端T为0的时候,输出端的状态Q保持不变。把JK触发器的J和K输入点连接在一起,即构成一个T触发器。

应用场合:时钟有效迟后于数据有效。这意味着数据信号先建立,时钟信号后建立。在CP上升沿时刻打入到寄存器。 三、寄存器

寄存器(register):用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果,它被广泛的用于各类数字系统和计算机中。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。 工程中的寄存器一般按计算机中字节的位数设计,所以一般有8位寄存器、16位寄存器等。

对寄存器中的触发器只要求它们具有置1、置0的功能即可,因而无论是用同步RS结构触发器,还是用主从结构或边沿触发结构的触发器,都可以组成寄存器。一般由D触发器组成,有公共输入/输出使能控制端和时钟,一般把使能控制端作为寄存器电路的选择信号,把时钟控制端作为数据输入控制信号。
在这里插入图片描述

锁存器与触发器的区别

锁存器和触发器是具有记忆功能的二进制存贮器件,是组成各种时序逻辑电路的基本器件之一。区别为:latch同其所有的输入信号相关,当输入信号变化时latch就变化,没有时钟端;flip-flop受时钟控制,只有在时钟触发时才采样当前的输入,产生输出。当然因为latch和flip-flop二者都是时序逻辑,所以输出不但同当前的输入相关还同上一时间的输出相关。

1、latch由电平触发,非同步控制。在使能信号有效时latch相当于通路,在使能信号无效时latch保持输出状态。DFF由时钟沿触发,同步控制。

2、latch对输入电平敏感,受布线延迟影响较大,很难保证输出没有毛刺产生;DFF则不易产生毛刺。

3、如果使用门电路来搭建latch和DFF,则latch消耗的门资源比DFF要少,这是latch比DFF优越的地方。所以,在ASIC中使用 latch的集成度比DFF高,但在FPGA中正好相反,因为FPGA中没有标准的latch单元,但有DFF单元,一个LATCH需要多个LE才能实现。latch是电平触发,相当于有一个使能端,且在激活之后(在使能电平的时候)相当于导线了,随输出而变化。在非使能状态下是保持原来的信号,这就可以看出和flip-flop的差别,其实很多时候latch是不能代替ff的。

4、latch将静态时序分析变得极为复杂。

5、目前latch只在极高端的电路中使用,如intel 的P4等CPU。 FPGA中有latch单元,寄存器单元就可以配置成latch单元,在xilinx v2p的手册将该单元配置成为register/latch单元,附件是xilinx半个slice的结构图。其它型号和厂家的FPGA没有去查证。——个人认为xilinx是能直接配的而altera或许比较麻烦,要几个LE才行,然而也非xilinx的器件每个slice都可以这样配置,altera的只有DDR接口中有专门的latch单元,一般也只有高速电路中会采用latch的设计。altera的LE是没有latch的结构的,又查了sp3和sp2e,别的不查了,手册上说支持这种配置。有关altera的表述wangdian说的对,altera的ff不能配置成latch,它使用查找表来实现latch。

一般的设计规则是:在绝大多数设计中避免产生latch。它会让您设计的时序完蛋,并且它的隐蔽性很强,非老手不能查出。latch最大的危害在于不能过滤毛刺。这对于下一级电路是极其危险的。所以,只要能用D触发器的地方,就不用latch。

有些地方没有时钟,也只能用latch了。比如现在用一个clk接到latch的使能端(假设是高电平使能),这样需要的setup时间,就是数据在时钟的下降沿之前需要的时间,但是如果是一个DFF,那么setup时间就是在时钟的上升沿需要的时间。这就说明如果数据晚于控制信号的情况下,只能用latch,这种情况就是,前面所提到的latch TIming borrow。基本上相当于借了一个高电平时间。也就是说,latch借的时间也是有限的。

在if语句和case不全很容易产生latch,需要注意。VIA题目这两个代码哪个综合更容易产生latch: 代码1

always@(enable or ina or inb)

begin

begin

data_out = ina;

end

else

begin

data_out = inb;

end

end

代码2

input[3:0] data_in;

always@(data_in)

begin

case(data_in)

0 : out1 = 1‘b1;

1,3 : out2 = 1’b1;

2,4,5,6,7 : out3 = 1‘b1;

default: out4 = 1’b1;

endcase

end

答案是代码2在综合时更容易产生latch。

对latch进行STA的分析其实也是可以,但是要对工具相当熟悉才行,不过很容易出错。当前PrimeTIme是支持进行latch分析的,现在一些综合工具内置的STA分析功能也支持,比如RTL compiler, Design Compiler。除了ASIC里可以节省资源以外,latch在同步设计里出现的可能还是挺小的,现在处理过程中大都放在ff里打一下。

锁存器电平触发会把输入端的毛刺带入输出;而触发器由于边沿作用可以有效抑制输入端干扰。

在 CMOS 芯片内部经常使用锁存器, 但是在PCB板级结构上, 建议用触发器在时钟边沿上锁存数据。这是因为在锁存器闸门开启期间数据的变化会直接反映到输出端, 所以要注意控制闸门信号的脉冲宽度,而对于触发器,只考虑时钟的边沿。

门电路是构建组合逻辑电路的基础,而锁存器和触发器是构建时序逻辑电路的基础。门电路是由晶体管构成的,锁存器是由门电路构成的,而触发器是由锁存器构成的。也就是晶体管-》门电路-》锁存器-》触发器,前一级是后一级的基础。锁存器和触发器它们的输出都不仅仅取决于目前的输入,而且和之前的输入和输出都有关系。

它们之间的不同在于:锁存器没有时钟信号,而触发器常常有时钟触发信号。 锁存器是异步的,就是说在输入信号改变后,输出信号也随之很快做出改变非常快。而另外一方面,今天许多计算机是同步的,这就意味着所有的时序电路的输出信号随着全局的时钟信号同时做出改变。触发器是一个同步版锁存器。 触发器泛指一类电路结构,它可以由触发信号 (如: 时钟、置位、复位等) 改变输出状态, 并保持这个状态直到下一个或另一个触发信号来到时。触发信号可以用电平或边沿操作,锁存器是触发器的一种应用类型。

寄存器与锁存器的功能是提供数据寄存和锁存。

寄存功能是指把数据暂时保存,需要时取出。锁存功能是指总线电路中,锁定数据输出,使输出端不随输入端变化。

D触发器和D锁存器的区别

钟控D触发器其实就是D锁存器,边沿D触发器才是真正的D触发器,钟控D触发器在使能情况下输出随输入变化,边沿触发器只有在边沿跳变的情况下输出才变化。

两个锁存器可以构成一个触发器,归根到底还是dff是边沿触发的,而latch是电平触发的。锁存器的输出对输入透明的,输入是什么,输出就是什么,这就是锁存器不稳定的原因,而触发器是由两个锁存器构成的一个主从触发器,输出对输入是不透明的,必须在时钟的上升/下降沿才会将输入体现到输出,所以能够消除输入的毛刺信号。


http://chatgpt.dhexx.cn/article/b3SJts06.shtml

相关文章

Python 官方研讨会:彻底移除 GIL 真的可行么?

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 忽见陌头杨柳色,悔教夫婿觅封侯。 作者:Łukasz Langa 译者:豌豆花下猫,来源:Python猫 原文…

吴恩达:告别,大数据

编译丨维克多、王晔 来源丨AI科技评论 吴恩达是人工智能(AI)和机器学习领域国际最权威的学者之一,最近一年里,他一直在提“以数据为中心的AI”,希望将大家的目光从以模型为中心转向以数据为中心。 最近,在接…

2017年Python从入门到实战教程-徐培成-专题视频课程

2017年Python从入门到实战教程—5702人已学习 课程介绍 通过《2017年Python从入门到实战教程》这系列课程,大家可以掌握python开发。适合任何初级或者转行的人学习。 课程收益 徐培成老师通过通俗易懂的方式,让你彻底掌握Python,本教程适…

入门深度学习——基础知识总结(python代码实现)

入门深度学习——基础知识总结(python代码实现) 目前,AI基本上可以说是烂大街了。几乎什么都可以说使用了AI技术,听起来很拉风,很nb的样子。而其中目前最为火热的非深度学习(Deep Learning)莫属…

程序员现状思考及Python教程

经常听到一些同行说: 某个公司薪资上调30-50%,我可以跳槽入吗? 最近收到几个比较好的offer!该去哪家?纠结! 目前岗位和环境对自己成长非常慢!更看不到公司的前景特别迷茫! 想成为…

大数据因果推理与学习入门综合概述

在《原因与结果经济学》的开篇,给读者回答以下几个问题。 定期接受代谢综合征体检就能长寿吗?看电视会导致孩子学习能力下降吗?上录取分数高的大学收入就会更高吗?想必很多人的回答都是肯定的。 不过,经济学的权威研…

2018 大数据学习入门必备规划

大数据方向的工作目前分为三个主要方向: 01.大数据工程师 02.数据分析师 03.大数据科学家 04.其他(数据挖掘本质算是机器学习,不过和数据相关,也可以理解为大数据的一个方向吧) 一、大数据工程师的技能要求 二、大数据学习路径 三、学习资源推荐(书籍、博客、网站)…

Python 数据分析师必备的入门学习路线和技能

最近几年,做的这些项目,大多与数据分析与算法应用相关。岗位虽然是算法工程师,但是与数据分析打得交道也很多,双管齐下,最后才能确保算法的落地。在几年前,我还想当然地认为做算法的就应该偏重算法研究与应…

Python入门经典(2K超清)

我在多次python培训时,对学员讲解编程对人生具有重大影响。曾经大学毕业时也迷茫过,不知道以后要干嘛。面对招聘会上密密麻麻的人群,经不知所措。自从接触python编程后,我对这门快速,高效程序语言表示惊讶,…

python入门学习笔记

python入门学习笔记目录 1.编程概论1.1 注释1.2 打印与标记符1.2.1 打印 print1.2.2标记符 1.3 代码行1.3.1 单行语句1.3.2 多行语句1.3.3 缩进1.3.4 复合语句 1.4 关键字1.5 基本对象数据类型1.5.1type() 函数1.5.2 isinstance() 判断函数1.5.3 type 与 isinstance 1.6 常量与…

Python机器学习:适合入门的8个项目

再多的理论也不能代替动手实践。 教科书和课程会让你误以为精通,因为材料就在你面前。但当你尝试去应用它时,可能会发现它比看起来更难。而「项目」可帮助你快速提高应用的 ML 技能,同时让你有机会探索有趣的主题。 此外,你可以将…

python基础入门级别的宝库。

刚刚开始学python的跟狗头军师一起来学习吧。 更加方便的使用pythonpython的安装编译器的选择 python安装完了,接下来就是常用基础语法知识点了,没学过的可以学一学,学过的捧个人场。python的直接输出python注释功能python数据类型语法if判断…

大数据入门必须知道八大实战项目

大数据如果应用不当可能很容易失控,并可能消耗企业资源和预算。在这里将介绍避免混乱的一些大数据的最佳实践。   大数据可以为用户提供卓越的洞察力,也有可能让企业不堪重负。而企业根据其收集数据做出自己的选择。企业面临的主要问题是大数据是由技术专业人员收集的技术解…

html js比较字符串,js字符串和数字的比较

在进行比较时js会先将两边的类型自动转成一致再对比。 1. 纯数字之间的比较 2 < 5 //true; 直接进行比较。 2. 纯数字与数字型字符串之间比较 js会优先选择将字符串转成数字 2 < 5 // true 3. 数字和其它字符串比较 数字和其它字符串进行比较时&#xff0c;js会将其它字符…

JS中字符串比较大小判断的问题(转数字比较)

因为最近你在写JS页面&#xff0c;有时候需要写到验证&#xff0c;就遇到比较的问题&#xff1a; JS验证代码如下&#xff1a; 页面效果&#xff1a; &#xff08;前面开始的时间段3-9&#xff0c;21-23会出现验证&#xff0c;10-20不会&#xff09; 问题原因&#xff1a;得到…

js坑之数字型字符串比对只比较第一位数字

这是我今天接手项目里面求最大值的一段代码&#xff1a; var dataY this.getDataY(); // 判断点击类型if (this.datatype 0) {var max 0;dataY.forEach(x > {if (x > max) {max x;}});} 其中dataY是一个数组&#xff0c;最大值为max&#xff0c;咋一看好像没啥问题。…

JS比较字符串大小

JavaScript中可以直接使用大于(>)、小于(<)运算符进行字符串大小比较。此方法会根据第一个不同的字符的ascii码进行比较。 例: (function(){console.log(123>5); // 输出&#xff1a;false 第一个字符ascii相比较 1 < 5console.log(5>6); // 输出&#xff…

JavaScript 中的字符串比较

今天收到一个测试的BUG&#xff0c;自己重测了下&#xff0c;没问题&#xff0c;测试当我面测试了下&#xff0c;发现的确是问题的&#xff0c;问题根源是俩个input框value的值做比较&#xff0c;我console.log(val1); console.log(val2);console.log(val1>val2);值分别是 3…

JS字符串数值比较大小问题

对于JS字符串的比较大小问题&#xff1a;如果比较的字符串位数一致&#xff0c;没有问题。但是如果比较的位数不一致&#xff0c;就会以位数的第一位开始比较&#xff01; let a 62; let b 41; console.log(a>b) // true;let aa 6; let bb 41; console.log(aa>bb) /…

js字符串的比较

字符串的比较规则&#xff1a; 逐字符比较&#xff0c;先拿各自的第一个字符比较&#xff0c;第一个字符相等了&#xff0c;再拿各自的第二个字符比较 <script>var a11var b9console.log(a>b)// 字符串是逐字符进行比较的,输出为flase&#xff0c;因为1和9比完大小就…