热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

flipflop和latch以及register的区别

触发器:flipflop锁存器:latch寄存器:register锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,尽当锁存器处于使能状态时输出才会

触发器:flipflop

锁存器:latch

寄存器:register

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

    
触发器是边沿敏感的存储单元,数据存储的动作有某一信号的上升或者下降沿进行同步的。
    
寄存器用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储>1>位二进制数,所以由>N>个锁存器或触发器可以构成>N>位寄存器。 触发器是在时钟的沿进行数据的锁存的,而锁存器是用电平使能来锁存数据的。所以触发器的>Q>输出端在每一个时钟沿都会被更新,而锁存器只能在使能电平有效器件才会被更新。 有一些教科书里的触发器实际是锁存器。在>FPGA>设计中建议如果不是必须那么应该尽量使用触发器而不是锁存器。

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

20>触发器和>D >锁存器的区别。

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

21latch>和>filp-flop>的异同

      都是时序逻辑,但latch>受所有的输入信号控制,只要输入信号变化,latch>就变化。也正因为如此,>latch>很容易出毛刺。>flip-flop>是触发器,只有在被时钟触发时才采样当前的输入,产生输出。如果使用门电路来搭建>latch>和>ff>,则>latch>消耗的门资源比>ff>要少。但是你用的如果是 fpga>,那么内部一般带>DFF>单元,反而用触发器更好。

22latch>与>register>的区别>,

      为什么现在多用register.>行为级描述中>latch>如何产生的行为级描述中>latch>一般是由于>if>货>case>逻辑表述不完全产生的。

异同:

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

2、 latch容易产生毛刺(>glitch>),>DFF>则不易产生毛刺。

3、 如果使用门电路来搭建>latch>和>DFF>,则>latch>消耗的门资源比>DFF>要少,这是>latch>比>DFF>优越的地方。所以,在>ASIC>中使用 >latch>的集成度比>DFF>高,但在>FPGA>中正好相反,因为>FPGA>中没有标准的>latch>单元,但有>DFF>单元,一个>LATCH>需要多个>LE>才能实现。

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

一般的设计规则是:在绝大多数设计中避免产生>latch>。它会让您设计的时序完蛋,并且它的隐蔽性很强,非老手不能查出。latch>最大的危害在于不能过滤毛刺。这对于下一级电路是极其危险的。所以,只要能用D>触发器的地方,就不用>latch>。有些地方没有时钟,也只能用>latch>了。比如现在用一个>clk>接到>latch>的使能端>(>假设是高电平使能>),>这样需要的>setup>时间,就是数据在时钟的下降沿之前需要的时间,但是如果是一个DFF>,那么>setup>时间就是在时钟的上升沿需要的时间。这就说明如果数据晚于控制信号的情况下,只能用 >latch,>这种情况就是,前面所提到的>latch timing borrow。基本上相当于借了一个高电平时间。也就是说,>latch>借的时间也是有限的。

关 于latch>的讨论 >latch>和>flip-flop>都是时序逻辑,区别为:>latch>同其所有的输入信号相关,当输入信号变化时latch>就变化,没有时钟端;>flip- flop>受时钟控制,只有在时钟触发时才采样当前的输入,产生输出。当然因为二者都是时序逻辑,所以输出不但同当前的输入相关还同上一时间的输出相关。
1>、没有时钟端,不受系统同步时钟的控制,无法实现同步操作;

2>、对输入电平敏感,受布线延迟影响较大,很难保证输出没有毛刺产生;
在 >xilinx>和>altera>器件的>slice>和>LE>中都能够同时支持生产>d-latch>和>d-ff>,在这一层面上二者有什么区别暂时没有想到。如果使用门电路来搭建latch>和>ff>,则>latch>消耗的门资源比>ff>要少,这是>latch>比>ff>优越的地方。 >latch>的最大缺点就是没有时钟端,和当前我们尽可能采用时序电路的设计思路不符。 >latch>是电平触发,相当于有一个使能端,且在激活之后(在使能电平的时候)相当于导线了,随输出而变化,在非使能状态下是保持原来的信号,这就可以看出和>flip-flop>的差别,其实很多时候>latch>是不能代替>ff>的 

1.latch对毛刺敏感
2.>在>ASIC>中使用>latch>的集成度比>DFF>高,但在>FPGA>中正好相反,因为>FPGA>中没有标准的>latch>单元,但有>DFF>单元,一个>LATCH>需要多个>LE>才能实现
3.latch>将静态时序分析变得极为复杂
4. 目前>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>了。 

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

标签: 无标签latch>与>DFF>的区别收集了一下网上资源,总结如下:

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

2latch>容易产生毛刺(>glitch>),>DFF>则不易产生毛刺。

3、如果使用门电路来搭建latch>和>DFF>,则>latch>消耗的门资源比>DFF>要少,这是>latch>比>DFF>优越的地方。所以,在>ASIC>中使用>latch>的集成度比>DFF>高,但在>FPGA>中正好相反,因为>FPGA>中没有标准的>latch>单元,但有>DFF>单元,一个>LATCH>需要多个>LE>才能实现。

4latch>将静态时序分析变得极为复杂。一般的设计规则是:在绝大多数设计中避免产生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
  if(enable) 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>。

 

使用条件语句不当在设计中生成了原本没有想到的锁存器:、

1:在一个>always>语句中不正确使用>if>语句

Always @ (al or d)                            always @ (al or d)

begin                                           
  begin

  if(al)  q<= d;                                   
if(al) q <= d;

end                                                  
else q <= 0;

                                                      end

       在这个always>块中,>if>语句只保证了当>al=1>时q>才取>d>的值。这段程序并没有给出当>al=0>时q>的取值,那么当>al=0>时q>取何值?在>always>块中在给定的条件下变量没有被赋值,那么变量将保持原值,也就是说将会生成一个锁存器。     

如果当设计人员希望当al=0>时,>q>的值为>0>,则>else>项就必不可少了。请注意看右边的>always>块,整个>verilog>程序模块综合出来后,>always>块对应的部分不会生成锁存器。 

Verilog HDL>程序的另一种偶然生成锁存器是在使用case>语句时缺少>default>项的情况下发生的。

Case>语句的功能是:在某个信号取不同的值时,给另一个信号赋不同的值。如下,如果sel=00>,q>取a>值,而>sel=11>,q>取b>值。这个例子不清楚的是:如果>sel>取>00>和>11>以外的值时>q>将赋予什么值?在这个例子中,默认q>保持原值,这就会自动生成锁存器。

always @ (sel[1:0] or a or b)       always @ (sel[1:0] or a or b)

case(sel[1:0])                             case(sel[1:0])

2’b00:  q <= a;                            2’b00:  q <= a;

2’b11:  q <= b;                            2’b11:  q <= b;

endcase                                    
default: q <= ‘b0;       

                                               
endcase

有锁存器                                  无锁存器

      避免生成锁存器的方法:如果用到if>语句,最好写上>sles>项;如果用>case>语句,最好写上>default>项。遵循上面两条原则,就可以避免发生这种错误,使设计者更加明确设计目标,同时也增强了>verilog>程序的可读性。


推荐阅读
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
author-avatar
景圣南_863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有