[整理]一个有关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,好样的!
理解总结
- 看always敏感信息,如果是边沿触发,那么为时序逻辑,本问题中不会产生latch。但是我是强迫症啊喂,写了if不写else都是耍流氓啊喂,为了代码的整体性还是补齐else的好,可以写
else ;
也可以写else q<=q;
,总之补齐就好,这样说不定还有写别的什么好处我不知道呢,后续知道了再补上。 - FPGA中现在对latch的理解不够深入,还是少用的好,也尽量的避免latch的产生,毕竟和ASIC有些区别,DFF在FPGA中可以算是一种基本逻辑了。
- Walkman说的不错,组合逻辑时,可以使用
always@(*)
作为敏感列表,并且检查每个else或者case分支都有明确的赋值。
希望对阅读的你有着帮助,欢迎探讨。如果有什么觉得不对的,一定不要客气的留言回复大力拍砖~
[整理]一个有关Latch(锁存器)的有趣问题的更多相关文章
- 【转载】FPGA 中的latch 锁存器
以下这篇文章讲述了锁存器的一些概念和注意事项.原文标题及链接: FPGA 中的latch 锁存器 - 快乐至永远上的博客 - 与非博客 - 与网 http://www.eefocus.com/liuy ...
- Go.js 没有中文文档 也没有中文demo 学起来很费劲 给大家整理一个算是详细的文档
<!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...
- latch相关视图整理
latch相关视图整理(原创) V$LATCH V$LATCH视图在选取X$KSLLT记录时,进行了Group By及SUM运算,从而得出了一个汇总信息,保存了自实例启动后各类栓锁的统计信息.常用于当 ...
- iOS 资源大全整理
这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ...
- 一个五年 Android 开发者百度、阿里、聚美、映客的面试心经
花絮 也许会有人感叹某些人的运气比较好,但是他们不曾知道对方吃过多少苦,受过多少委屈.某些时候就是需要我们用心去发现突破点,然后顺势而上,抓住机遇,那么你将会走向另外一条大道,成就另外一个全新的自我. ...
- PHP如何判断一个gif图片是否为动画?
首先想到的是用getimagesize()看看type,发现都是gif. 然后想gif动画是gif89格式的,发现文件开头是gif89,但是很多透明图片也是用的gif89格式. 看来必须分析文件的祯了 ...
- php : 收集整理的非常有用的函数
项目中经常会需要一些让人头疼的函数,作为开发者应该整理一个自己的函数库,在需要之时复制过来即可.以下是收集整理数十个PHP项目中常用的函数 1.PHP加密解密 PHP加密和解密函数可以用来加密一些有用 ...
- 关于一个通俗易懂的FFT的C语言实现教程
找到一个通俗易懂并且神奇并且有趣的FFT算法C语言实现教程:http://www.katjaas.nl/FFTimplement/FFTimplement.html 只要对矩阵比较熟悉就能在教程的辅助 ...
- C#通用类Helper整理
★前言 最近下载了tita_chou在CSDN上传的一个资源,是在工作中整理的C#帮助类,里面包含了很多实用的类,想到我之前收集过自己用到少的可怜的类,心生敬意啊.当粗略的查看了那个资源,发现 ...
随机推荐
- maven多项目配置实践
工具:IntelliJ IDEA 1.新建maven项目top 略 提示:不使用任何模版 2.在上面的maven项目的目录下(虽然这不一定是必须的),新建另一个maven项目secend. 同上 3. ...
- Codeforces Round #232 (Div. 2) D. On Sum of Fractions
D. On Sum of Fractions Let's assume that v(n) is the largest prime number, that does not exceed n; u ...
- 小结一下: web中的人民币
在编辑器中 shift+4 以为得到的是 两杠人民币符号(¥)---->但是.....在ie6,7,8下怎么不是呀? 对比一下下图: 下面那个是ok的哈: 要用时可以复制一下: ¥ 完 ...
- 【原创】Android内存管理-OnTrimMemory
Application中有两个与内存管理相关的方法:onLowMemory()和 onTrimMemory(int level),源码如下 @CallSuper public void onLowMe ...
- ReadReadMe
∮博客说明 §标题格式说明(只在这篇文档中说明一次) 此站博客分两类 普通博客,补丁博客 普通博客标题格式为 NumberType_Title Number: 博客编号 ,按时间编号,编号只在 ...
- 答:SQLServer DBA 三十问之六:Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;
6. Job信息我们可以通过哪些表获取:系统正在运行的语句可以通过哪些视图获取:如何获取某个T-SQL语句的IO.Time等信息: 我的MSDB数据库中有全部的表: sys.all_columns,s ...
- 关于asp.net 开发的小技巧—让传值对象化
前端:前端 定义一个对象, 传值时实例此对象,序列化成json字符串 代码如下: 定义js对象: ///定义一个查询条件对象 var SearchCondition=function(){ this. ...
- 代理模式(Proxy pattern)
代理模式(proxy pattern):作用:为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端对象和目标对象之间起中介的作用. 代理模式涉及到的角色: 抽象角色:声明真实对象和代理对象 ...
- ES6学习笔记(2)
变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,被称为解构(Destructuring); 数组的解构赋值 let [a, b, c] = [1, 2, 3]; cons ...
- 浅述python中argsort()函数的用法
由于想使用python用训练好的caffemodel来对很多图片进行批处理分类,学习过程中,碰到了argsort函数,因此去查了相关文献,也自己在python环境下进行了测试,大概了解了其相关的用处, ...