[整理]一个有关Latch(锁存器)的有趣问题

起源

今天诳论坛,突然发现了一个有关latch的问题,由于对D Flip-Flop和Latch还有些疑问,就点击了进去,一看果然有些意思,也挺有学习意义的,于是本文就诞生了。喊出口号~Just note it.

有意思的问题图


两个问题。

  • 上面左边描述的电路,如果不加else q<=0;,会生成latch吗?
  • 上面右边描述的电路,如果不加else q<=0;,会生成latch吗?

集思广益

论坛上还是有很多的大神和前辈的,几个回答相当不错,有着极强指导意义,让人不禁思考问题,然后开始默默思考人生。噗呜,不多说了,我们来看下参考。(有删减哦,在此谢过原大大提供自己的见解)

老阮(一看名字就知道是个老油条,手动滑稽):

  • 时序电路,生成触发器,触发器是有使能端的,使能端无效时数据不变,这是触发器的特性。
  • 组合逻辑,由于数据要保持不变,只能通过锁存器来保存。
  • 第一个代码,由于是时序逻辑,生成的触发器在enable无效时就可以保存数据。跟锁存器无关。
  • 第二个代码就是在enable为低时,数据不变,因此要生成锁存器。

看起来很有道理呢,分析的较为详细了,就此问题详细介绍了两者的区别,很有指导意义啊。

——————————我是各楼主的分隔线——————————

chengroc(英文字母的ID呢,看起来貌似是姓成呢,就叫程先生吧,什么你说两个cheng不一样,哎呀不要在意这些细节,看下面)

  • latch其实比dff结构更简单啊
  • 数字设计中如果你能控制好时序,有意识地用latch也不是不可以。但同时也会增加后面时序分析的工作量。前端设计与后端时序分析要传递的信息量比较多,也容易遗漏,但也可以做好。
  • 就怕无意识地用了latch,例如本想实现一个组合逻辑功能,却因为条件没有写完备导致出现了latch,后端再一疏忽,导致完全不可控。
  • 而用dff实现数据保持的功能,问题就简化多了

程先生简单的说明了下latch和dff呢,虽然并不深入,但对现在的我而言,嗯是够用了,后面我再深入的去看D触发器和锁存器的一些知识点。

——————————我是各楼主的分隔线——————————

walkman416(字母数字组合,好常见的组合方式,就叫他walkman好了)

  • 个人理解: 所谓生成latch其实是针对使用always语句描述一个组合逻辑而言,因为如果描述时序逻辑总是使用时钟或者时钟+复位作为敏感列表条件,所生成的电路总是组合逻辑+DFF;如果是描述组合逻辑,敏感列表中必然没有时钟复位,而是组合逻辑的输入信号。在FPGA设计,避免使用latch,不利于时序分析和仿真。 楼上有提到latch比DFF省资源, 这个在FPGA设计中其实还好, 因为在FPGA中DFF就是一个专用的硬件资源,并且数量也比较多。
  • 使用always描述组合逻辑时,好的习惯是使用always @(*)作为敏感列表, 并且需要检查每个分支都有明确的赋值,从而避免生成latch.

哎呀说的真好,我等下也要总结下呢,walkman,好样的!

理解总结

  1. 看always敏感信息,如果是边沿触发,那么为时序逻辑,本问题中不会产生latch。但是我是强迫症啊喂,写了if不写else都是耍流氓啊喂,为了代码的整体性还是补齐else的好,可以写else ;也可以写else q<=q;,总之补齐就好,这样说不定还有写别的什么好处我不知道呢,后续知道了再补上。
  2. FPGA中现在对latch的理解不够深入,还是少用的好,也尽量的避免latch的产生,毕竟和ASIC有些区别,DFF在FPGA中可以算是一种基本逻辑了。
  3. Walkman说的不错,组合逻辑时,可以使用[email protected](*)作为敏感列表,并且检查每个else或者case分支都有明确的赋值。

希望对阅读的你有着帮助,欢迎探讨。如果有什么觉得不对的,一定不要客气的留言回复大力拍砖~

时间: 2024-12-24 19:33:35

[整理]一个有关Latch(锁存器)的有趣问题的相关文章

如何整理一个被测对象的特性

一.罗列用户角色 1.用户角色的来源包括但不限于: 直接使用者 利益相关者,例如网站运营人员 二.抽取用户故事 1.作为一个<角色>, 我想要<活动>, 以便于<商业价值> 三.梳理用户故事中包含的业务规则 哪些业务规则,支持了用户故事的达成. 四.设定唯一编号 1.制定一套编码规则. 2.对梳理出的业务规则,确定唯一对应的编码. 原文地址:https://www.cnblogs.com/Flint/p/9751132.html

FPGA基础知识(四)锁存器、触发器、寄存器和缓冲器的区别

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

FPGA基础知识10(锁存器、触发器、寄存器和缓冲器的区别)

需求说明:IC设计基础 内容       :锁存器.触发器.寄存器和缓冲器的区别 来自       :时间的诗 原文:http://www.cnblogs.com/wwping/articles/2261312.html 一.锁存器 锁存器(latch)---对脉冲电平敏感,在时钟脉冲的电平作用下改变状态 锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,仅当锁存器处于使能状态时,输出才会随着数据输入发生变化. 锁存器不同于触发器,它不在锁存数据时,输出端的信号随

iOS开发笔记 整理(全)

退回输入键盘 - (BOOL)textFieldShouldReturn:(id)textField{ [textField resignFirstResponder]; } CGRect CGRect frame = CGRectMake (origin.x,origin.y, size.width, size.height):矩形 NSStringFromCGRect(someCG) 把CGRect结构转变为格式化字符串: CGRectFromString(aString) 由字符串恢复出矩

C#通用类Helper整理

★前言     最近下载了tita_chou在CSDN上传的一个资源,是在工作中整理的C#帮助类,里面包含了很多实用的类,想到我之前收集过自己用到少的可怜的类,心生敬意啊.当粗略的查看了那个资源,发现有一些是重复的,有一些我的里面有的那个没有,于是乎就萌生了重新整理一个属于自己的帮助类,于是乎就花了几个晚上的时间,重新过了一遍,还借用SandCastle工具生成了帮助文档(CHM),这一个开源的工具,感觉生成帮助文档挺方便的,下面会介绍这个工具. ★为什么要整理      为什么要整理这个帮助类

收集整理的非常有用的PHP函数

项目中经常会需要一些让人头疼的函数,作为开发者应该整理一个自己的函数库,在需要之时复制过来即可.本文作者收集整理数十个PHP项目中常用的函数,保证能正常运行,你只要复制粘贴到你项目中即可. 1.PHP加密解密 PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密. 1 function encryptDecrypt($key, $string, $decrypt){ 2 if($decrypt){ 3 $decrypt

一个网站的诞生01--缘由

大概在半年前,我觉得需要做一个网站,寻找新奇有趣的餐厅. 喜欢美食的人,在中意餐厅吃久了,总想找新餐厅换换口味,试试新菜和新的食材. 寻找新餐厅并不容易,甚至是艰难.由于众所周知的原因,网上流传的餐厅文,美食文,常常不可信,编排越精美,越可能是软广---大家天天都很忙,很少有闲心做这么精美的文宣.我跟这些美食文找过,失望大于希望,成功率不到一半.而且,魔都太大,打听到的餐厅,总要去试吃一下,来来回回总跑上几个小时吧?时间很宝贵,这么做太不划算了! 上海的餐厅大众点评网收集的最齐全,如果我把它上面

一个校园实验室的纳新试题——(2)我的服务端开发笔试题

晚上整理 一个校园实验室的纳新题——(1)资源整理 http://www.cnblogs.com/corvoh/p/4869403.html 服务端开发笔试题 1.简述const与define的区别. 在PHP中定义常量时,const与define的区别: 用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时 要比define快得多.在PHP 5.3.0 以后,可以使用const关键字在类定义的外部定义常量,先前版本const 关键字只能

Android studio导出AAR包问题整理。

最近因为项目需求开始整理一个SDK 以AAR的方式提供出去.在整理的过程中遇到了很多坑. 以下是一些总结希望能帮助遇到同样问题的人. 1.怎么导出AAR,这种文章太多了,我贴一个大家可以做参考. http://blog.csdn.net/g777520/article/details/53331797 如果不关心 怎么生成jar包就直接往下滑,看第二节.基本操作就在这儿了. 2. 第一步的操作导出的AAR只是当前lib的代码内容,当前lib所依赖的其他lib或者依赖(jar包除外)都不会被打进A