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

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

3天内不再提示

硬件中常见的基本存储元件的定义

FPGA设计论坛 来源:FPGA设计论坛 作者:FPGA设计论坛 2022-07-03 10:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

说说latch与verilog的联系。

还是照惯例,首先必须放上关于latch的定义和解释。ALTERArecommended HDL coding中提到:

A latch is a small combinational loop that holds the value of a signal until a new value is assigned.

从上可以看出,latch是一个记忆元件或者说是存储单元,他能保持信号的值

同时在网上找了找关于latch的中文定义。

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

从一般情况来看,锁存器多数是有电平锁存的。当电平无效时,输出信号随输入信号变化,就像通过了缓冲器;当电平有效时,输出信号被锁存。

看了很多关于verilog的语法资料,大多其中并没有谈到latch,latch和verilog发生联系是在用verilog进行FPGA或者ASIC设计时。而在此由于本人正式学习用verilog进行FPGA设计,

而涉及到的书中均提到要采用同步设计,避免采用latch。从网上找了找为什么不使用latch的原因:

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

所以又可以得出一条指导性的原则:

在能使用DFF或者寄存器的时候,坚决不使用latch

说了latch的定义和latch的危害,现在要来说说latch的产生和避免

查阅资料,结合自己的理解,总结出无意生成latch的三大原因:

1、不完整的if或者case结构

2、不完整的敏感信号列表

latch的出现总是与不完整有关,组合电路本应该是完整的,最理想的写法可能是一个输入对应一个输出,当一个输入没有相应的输出或者引起输出的信号没有作为输入的时候,Latch产生了!

先解释第一点不完整的if结构,例如:

if(a)

begin

out = 1'b1;

end

当a为1时输出为1,当a为0时由于没有相应的译码语句,所以输出将保持,此时将生成latch而不是原来想要的组合电路。

而对于不完整的case语句,例如:

always@( * )

case(a)

3'b000: b = 8'd1;

3'b001: b = 8'd5;

3'b010: b = 8'd8;

3'b011: b = 8'd17;

endcase

此时语句中没有default,当a为4、5、6、7时没有响应的译码语句,输出将保持,此时将生成latch。

对于第二点不完整的敏感信号表,夏雨闻老师的书中有提到:

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

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

所以得出指导性的原则:

务必写好if和case所有的分支,务必写全敏感信号列表!

关于硬件中常见的基本存储元件的定义、中英文对应的名字会模糊,今天特地查明具体定义。

0d86f950-f9bc-11ec-ba43-dac502259ad0.png

触发器:flipflop

锁存器:latch

寄存器:register

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

触发器是边沿敏感的存储单元,数据存储的动作由某一信号的上升或者下降沿进行同步的。


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

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

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

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

21、latch和filp-flop的异同

都是时序逻辑,但latch受所有的输入信号控制,只要输入信号变化,latch就变化。也正因为如此,latch很容易出毛刺。

flip-flop是触发器,只有在被时钟触发时才采样当前的输入,产生输出。如果使用门电路来搭建latch和ff,则latch消耗的门资源比ff要少。但是你用的如果是 fpga,那么内部一般带DFF单元,反而用触发器更好。

22、latch与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的区别收集了一下网上资源,总结如下:

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借的时间也是有限的。在if语句和case不全很容易产生latch,需要注意。VIA题目这两个代码哪个综合更容易产生latch:

代码1
always@(enableorinaorinb)
begin
if(enable)begin
data_out=ina;
end
elsebegin
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@(alord)always@(alord)

begin begin

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

end elseq<= 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]oraorb)always@(sel[1:0]oraorb)

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程序的可读性。

原文标题:FPGA学习-verilog(flipflop和latch以及register的区别)

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静

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

    关注

    1664

    文章

    22504

    浏览量

    639305
  • 寄存器
    +关注

    关注

    31

    文章

    5620

    浏览量

    130428
  • 硬件
    +关注

    关注

    12

    文章

    3635

    浏览量

    69172
  • 锁存器
    +关注

    关注

    8

    文章

    958

    浏览量

    45477

原文标题:FPGA学习-verilog(flipflop和latch以及register的区别)

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    半导体中常见的载流子散射机制

    半导体中的载流子在热平衡条件下的热运动没有确定的方向性,因此,在没有外场作用时,净电流为零;在有外电场作用时,半导体载流子会加速作定向运动,从而形成净电流。但载流子在外场下的这种运动会受到散射的限制,本节将介绍半导体中常见的载流子散射机制及其对电学输运性质的影响。
    的头像 发表于 04-20 14:30 175次阅读
    半导体<b class='flag-5'>中常见</b>的载流子散射机制

    新思科技发布全新软件定义硬件辅助验证解决方案

    新思科技(Synopsys, Inc., 纳斯达克代码:SNPS)宣布对其业界领先的硬件辅助验证(HAV)产品组合进行升级,包括全新硬件平台和功能,以支持从数据中心到边缘计算对 AI 芯片验证
    的头像 发表于 03-17 17:17 672次阅读

    学习电子电路中常见的问题

    电子电路作为现代科技的基础,其学习过程中常会遇到各种理论和实践问题。无论是初学者还是有一定经验的工程师,都可能面临电路设计、元器件选型、信号处理等方面的困惑。本文将系统梳理电子电路学习中常见的典型
    的头像 发表于 01-20 07:38 472次阅读

    请问单片机常见硬件抗干扰技术有哪些?

    形成干扰的基本要素有哪些? 单片机常见硬件抗干扰技术有哪些?
    发表于 01-07 07:15

    深入解析IPM器件数据手册中的电流定义:Ic、Icp、Io(peak)和Io(rms)

    在设计和应用IPM器件时,电流参数是影响性能的关键指标之一。然而,不同电流参数的含义可能会对应用设计产生重要影响。本文将详细解析IPM数据手册中常见的几种电流定义,包括IC、ICP、IO(peak
    的头像 发表于 12-03 17:07 7454次阅读
    深入解析IPM器件数据手册中的电流<b class='flag-5'>定义</b>:Ic、Icp、Io(peak)和Io(rms)

    晶振使用中常见问题与解决方法

    一、频偏造成的使用异常异常现象:色彩图像不正常;音频杂音,无数据传输,距离短,遥控无反应。常见处理:换一个就OK根本原因:晶振负载电容同电路不匹配。解决办法:调整电路匹配电容大小,或换用不同负载电容
    的头像 发表于 11-21 15:37 4271次阅读
    晶振使用<b class='flag-5'>中常见</b>问题与解决方法

    硬件消抖方案元件参数的计算方法

    硬件消抖是通过电路设计消除机械开关(如按键、继电器等)在闭合或断开时产生的抖动信号。以下是常见硬件消抖方案及其元件参数计算方法: 1. RC滤波消抖(低通滤波) 原理:利用电容的充放
    发表于 11-19 06:31

    常见的电能质量在线监测装置硬件故障有哪些?

    电能质量在线监测装置的硬件故障多集中在 信号采集、电源供给、数据传输、存储显示 及 连接与接地 等核心环节,故障类型与硬件模块的工作环境(如电磁干扰、温湿度)、老化程度、安装工艺直接相关。以下是
    的头像 发表于 09-24 18:25 1346次阅读
    <b class='flag-5'>常见</b>的电能质量在线监测装置<b class='flag-5'>硬件</b>故障有哪些?

    自动驾驶中常提的硬件在环是个啥?

    [首发于智驾最前沿微信公众号]在谈及自动驾驶技术时,经常会提及一个技术,那就是硬件在环,所谓的硬件在环是个啥?对于自动驾驶来说有啥作用?今天智驾最前沿就带大家来聊聊这一技术。 所谓硬件在环
    的头像 发表于 08-14 08:54 1470次阅读

    CPM系列核心板,一款存储灵活的嵌入式核心板

    在嵌入式产品开发中,存储空间不足是一个常见问题。一旦硬件设计定型,后期想扩容往往面临成本飙升、周期拉长、可靠性风险等难题。本文将介绍一种创新的解决方案,帮助开发者灵活应对存储空间不足的
    的头像 发表于 08-13 11:34 585次阅读
    CPM系列核心板,一款<b class='flag-5'>存储</b>灵活的嵌入式核心板

    IEC 62353中常用的术语和定义

    本文详细解读IEC 62353标准中的关键术语,包括被测设备(DUT/EUT)、应用部分(B/BF/CF型)、泄漏电流、微电击与宏电击等定义,帮助理解医疗电气设备安全测试要求。
    的头像 发表于 07-29 17:27 879次阅读

    【HarmonyOS 5】鸿蒙中常见的标题栏布局方案

    【HarmonyOS 5】鸿蒙中常见的标题栏布局方案 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、问题背景: 鸿蒙中常见的标题栏:矩形区域,左边
    的头像 发表于 07-11 18:30 1006次阅读
    【HarmonyOS 5】鸿蒙<b class='flag-5'>中常见</b>的标题栏布局方案

    无法将元件彼此靠近放置的解决方案

    本文介绍了在 PCB 上无法将一个元件靠近另一个元件放置的常见场景。
    的头像 发表于 07-02 10:50 3302次阅读
    无法将<b class='flag-5'>元件</b>彼此靠近放置的解决方案

    SMT 料号怎么构成?这些常见电子元件别再傻傻分不清

    一站式PCBA加工厂家今天为大家讲讲SMT料号基本组成及常见电子元件有哪些?SMT料号基本组成及常见电子元件类型。在电子制造中,SMT料号(Surface Mount Technolo
    的头像 发表于 05-12 09:26 2988次阅读
    SMT 料号怎么构成?这些<b class='flag-5'>常见</b>电子<b class='flag-5'>元件</b>别再傻傻分不清