0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

latch和寄存器有什么区别 锁存器的危害分析

西西 来源:博客园 作者:lianjiehere 2020-10-05 14:28 次阅读

一直都知道fpga中有latch这么一回事,但是一直都不太清楚到底什么是锁存器,它是怎么产生的,它到底和寄存器有多少区别,它怎么消除。为什么说他不好?

一,是什么

锁存器是一种在异步时序电路系统中,对输入信号电平敏感的单元,用来存储信息。一个锁存器可以存储1bit的信息,通常,锁存器会多个一起出现,如4位锁存器,8位锁存器。

锁存器在数据未锁存时,输出端的信号随输入信号变化,就像信号通过一个缓冲器,一旦锁存信号有效,则数据被锁存,输入信号不起作用。因此,锁存器也被称为透明锁存器,指的是不锁存时输出对于输入是透明的。

二 锁存器与寄存器的区别:

两者都是基本存储单元,单锁存器是电平触发的存储器,触发器是边沿触发的存储器。本质是,两者的基本功能是一样的,都可以存储数据。意思是说一个是组合逻辑的,一个是在时序电路中用的,时钟出发的。

三,锁存器的危害:

对毛刺敏感,不能异步复位,所以上电以后处于不确定的状态;

Latch会使静态时序分析变得非常复杂;

在PLD芯片中,基本的单元是由查找表和触发器组成的,若生成锁存器反而需要更多的资源。

第三条也是最基本的原因。

四,产生的原因 ********ps重重之重

上面说了那没多只是觉得网上的没把锁存器说明白。下面的才是重点。

1,case

2,if-------else if

3,always@(敏感信号表)

五 解决

1.case——————加default:

关于defalut的情况:一是可以 default:data=1‘bx;这个x表示未知,在综合时可以避免产生锁存器。在仿真时是红线表示。

二是 default:data=0;这样产生一个默认的情况。

2.if-----------------------一定要有else语句。

3.always---------如是说道:在赋值表达式右边参与赋值的信号都必须在always@(敏感电平列表)中列出。

如果在赋值表达式右端引用了敏感电平列表中没有列出的信号,那么在综合时,将会为该没有列出的信号隐含地产生一个透明锁存器。

4. 付初值。好用的

,我们讨论一下到底锁存器是不是就是没用的

1. Latch的本质

Latch作为一种电路单元,必然有其存在的理由及应用场景,在实际应用中,有些设计不可避免的要使用Latch,特别是总线应用上,例如,地址锁存器,数据锁存器,复位信号锁存器等。但是在更多的情况下,很容易产生未预料到的锁存器,使逻辑功能不满足要求,浪费大量时间。比较好的应用规则是:要学会分析是否需要Latch以及代码是否会产生意外的Latch。

通过Verilog HDL实现序列最大值搜索程序,并保持检测到的最大值

  • [plain] view plaincopymodule two_max(
  • a,rst_n,abmax
  • );
  • input [7:0] a;
  • input rst_n;
  • output [7:0] abmax;
  • reg [7:0] abmax_tmp;
  • always @ (a or rst_n) begin
  • if (!rst_n)
  • abmax_tmp = 8‘h00;
  • else
  • if (a》abmax_tmp)
  • abmax_tmp = a;
  • end
  • endmodule

上述代码在ISE中的综合结果会给出设计中包含Latch的警告。但实际上,abmax_tmp锁存器正是我们需要的,所以,虽然有警告,但是代码设计是没有问题的。将上述代码的if语句补全:

  • [plain] view plaincopyif (a 》 abmax_tmp)
  • abmax_tmp = a;
  • else
  • abmax_tmp = abmax_tmp;

经过综合后,仍然有Latch的警告。无论Latch是否是用户需要的,ISE都会给出警告,主要原因就是Latch对整个设计的时序性能影响较大。所以,在设计中要尽量避免Latch,但是确实需要使用的情况,也可以使用。

2. “不期望”latch

指的是与设计意图不符,产生的Latch。主要问题在于设计人员没有合理使用Verilog HDL语言,常见的原因是对条件语句(if、casse)的分支描述不完整。典型例子:用Verilog HDL实现一个锁存器,当输入数据大于127时,将输入数据输出,否则输出0

  • [plain] view plaincopymodule latch_demo(
  • din,dout
  • );
  • input [7:0] din;
  • output [7:0] dout;
  • reg [7:0] dout;
  • always @ (din) begin
  • if (din》127)
  • dout 《= din;
  • end
  • endmodule

综合后的结果,在比较器后面级联了锁存器,这是因为if语句缺少else分支造成的。查看仿真结果,当输入小于127时,输出保持了上次的127,不是0,没有达到设计要求。修改方法很简单,就是讲if-else补全。

  • [plain] view plaincopyif (din 》 127 )
  • dout = din;
  • else
  • dout = 0;

在ISE中综合后的结果中,可以看到补全if-else后,在比较器后面级联了与门,代替原来的锁存器,仿真结果也正确。

至此,可以得到一个结论:Latch作为一种基本电路单元,会影响到电路的时序性能,应该尽量避免使用,但出现Latch造成设计与意图不符的情况,是由于设计人员代码不正确造成的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120255
  • 锁存器
    +关注

    关注

    8

    文章

    906

    浏览量

    41497
  • 异步时序
    +关注

    关注

    0

    文章

    6

    浏览量

    8637
  • Latch
    +关注

    关注

    1

    文章

    48

    浏览量

    16213
  • 单锁存器
    +关注

    关注

    0

    文章

    2

    浏览量

    1617
收藏 人收藏

    评论

    相关推荐

    FPGA的设计中为什么避免使用

    文章都对个误解,我们后面会详细说明。 这篇文章,我们包含如下内容: ①
    的头像 发表于 11-16 11:42 8465次阅读
    FPGA的设计中为什么避免使用<b class='flag-5'>锁</b><b class='flag-5'>存</b><b class='flag-5'>器</b>

    、触发寄存器和缓冲区别

    位二进制数,所以由N个或触发可以构成N位寄存器。工程中的寄存器一般按计算机中字节的位数设
    发表于 10-09 16:19

    寄存器和触发区别

    寄存器:registerlatch触发:flipflop 一、
    发表于 07-03 11:50

    触发寄存器三者的区别

    的角度来年,寄存器的功能是相同的,它们的区别在于寄存器是同步时钟控制,而
    发表于 09-11 08:14

    Verilog基本功--flipflop和latch以及register的区别

    触发:flipfloplatch寄存器:register
    发表于 08-27 08:30

    寄存器的作用哪些?

    寄存器的作用哪些? 寄存器用途  1.可将寄存器内的数据执行算术及逻辑运算;  2.寄存器
    发表于 03-08 14:35 1.6w次阅读

    累加寄存器吗_寄存器、累加、暂存什么区别

    本文首先对寄存器、累加、暂存做个哥介绍,其次解答了累加是不是寄存器,最后阐述了寄存器、累加
    发表于 04-11 16:31 9524次阅读

    Latch和触发Flip-flop区别

    本文首先介绍了Latch结构和
    的头像 发表于 04-18 14:10 13.2w次阅读
    <b class='flag-5'>锁</b><b class='flag-5'>存</b><b class='flag-5'>器</b><b class='flag-5'>Latch</b>和触发<b class='flag-5'>器</b>Flip-flop<b class='flag-5'>有</b>何<b class='flag-5'>区别</b>

    寄存器哪些区别

    首先应该明确和触发也是由与非门之类的东西构成。尤其是
    的头像 发表于 08-12 10:26 4675次阅读

    如何使用的Time Borrowing技术来替代关键路径中的寄存器

    在ASIC中用到的地方很多,Time Borrowing是使用的典型应用之一,在深度
    的头像 发表于 06-14 16:56 1805次阅读

    、触发寄存器的关联与区别及其相应的verilog描述

    1:、触发寄存器的关联与区别 首先应该明确
    的头像 发表于 12-19 12:25 1.2w次阅读

    Verilog中 /触发/寄存器区别

    latch):是电平触发的存储单元,数据存储的动作(状态转换)取决于输入时钟(或者使能)信号的电平值,尽当
    发表于 01-31 14:57 1988次阅读

    什么是寄存器区别

    Latch)是一种基本的数字电路元件,用于存储二进制数字的状态信息,并能够在需要时通过加电或控制信号的作用保持状态。它通常由几个逻辑门组成,可以实现简单的存储、移位、计数等功能
    的头像 发表于 04-09 18:45 9790次阅读

    带输入的8位移位寄存器数据表

    电子发烧友网站提供《带输入的8位移位寄存器数据表.pdf》资料免费下载
    发表于 05-13 11:15 0次下载
    带输入<b class='flag-5'>锁</b><b class='flag-5'>存</b><b class='flag-5'>器</b>的8位移位<b class='flag-5'>寄存器</b>数据表

    、触发寄存器区别

    在数字电路和计算机系统中,、触发寄存器都是关键的存储元件,它们在功能、结构和使用场景上存在一定的差异。本文将对这三者进行详细的介绍
    的头像 发表于 05-23 15:28 2230次阅读