数字电路中应避免产生不必要的锁存器 Latch

锁存器(Latch)是数字逻辑电路中很重要的一种基本电路,常见的锁存器包括三个端口:数据输入口、数据输出口、使能端。当使能端为高电平时,输入口的数据直接送到输出口,此时输入输出口可以看成是直接连通的;当使能端为低电平时,输出口的数据保持之前的数据不变,无论输入口的数据怎么变化,输出都保持不变,就是把原来的状态锁存下来了(所以才叫锁存器)。锁存器与触发器的区别在于:锁存器是电平触发,而触发器是边沿触发。锁存器在不锁存数据时,输出随输入变化;但一旦数据锁存时,输入对输出不产生任何影响。

在FPGA电路设计中,不规范的描述语言可能会产生意想不到的锁存器,而设计者往往并没有注意到自己的设计会被综合出锁存器,导致综合出的电路出现逻辑错误。

在数字电路中,产生意外的锁存器的情况一般有以下两种:

1. if……else……结构中缺少else

先看一个实际的例子:

用quartus综合一下这两个电路,看看产生的RTL图是怎样的:

左边的电路:

右边的电路:

由RTL视图可以直观的看出,左边的电路没有生成锁存器,而右边的电路生成了一个我们不想要的锁存器(q1$latch)。左边的电路是时序逻辑,生成触发器,而触发器是有使能端(en)的,使能端无效时就可以保存数据,无需锁存器。右边的电路是组合逻辑,在en为低电平时,输出q1要保持不变,而组合逻辑没有存储元件,只能生成锁存器来保持数据。所以在时序逻辑中,不完整的 if…else… 结构并不会生成锁存器,而组合逻辑中不完整的 if…else… 结构就会生成锁存器。为了避免我们设计的组合逻辑中出现不想要的锁存器,在使用 if…else… 结构时一定要写完整。把刚才例子中右边的电路写完整,并查看其RTL视图如下:

写完整后,就没有生成锁存器,而是生成了一个二选一的选择器,这正是我们想要设计的。

2. case结构中的分支没有包含所有情况且没有default语句

case结构中一般要加上default语句,以保证出现意外情况也可以作出相应的反应。如果没有加default并且case分支不完整,当出现case分支中没有列出的情况时,电路状态保持原来的状态不变,于是就会生成锁存器来保存状态,如下图的电路所示:

图中case分支中只写了(se=0)的情况,而(se=1)的情况未给出,且没有写default,于是当(se=1)时,q1保持原来的值不变,这样就产生了锁存器(q1$latch)。

如果将case分支补全,或者加上default语句,则如下图所示:

补全case分支后,就不会生成锁存器了。

同样,只有在组合逻辑中的case结构才有可能产生锁存器,而在时序逻辑电路中,即使case结构中的分支不完整,也不会产生锁存器,如下图所示:

实际上,在时序逻辑中,由于触发器具有锁存数据的功能,所以不会生成锁存器,锁存器只会在组合逻辑电路中产生。

因此,在设计组合逻辑电路时,要注意将 if…else… 结构中的else写完整,case结构中一定要加上default语句,这样可以减少综合出锁存器的可能性。

时间: 2024-07-31 20:03:14

数字电路中应避免产生不必要的锁存器 Latch的相关文章

数字电路中的竞争冒险以及解决

前言 竞争冒险在<数字电子技术基础>中有详细的阐述,由于学过很久了,现在再翻开复习复习,总结总结. 在组合电路中,当输入信号改变状态时,输出端可能出现虚假信号(过渡干扰脉冲),这对电路来说是不利的. 在数字电路中,任何一个门电路只要有两个输入信号同时向相反方向变化(由01变成10,或者相反),其输出端就可能产生干扰脉冲. 信号由于经由不同路径传输达到某一汇合点的时间有先有后的现象,就称之为竞争,英文名Race;由于竞争现象所引起的电路输出发生瞬间错误的现象,就称之为冒险,英文名Hazard或者

jquery ajax 在submit按钮的click处理中应注意的地方

html文件: <form action="/index.php/welcome/personpost"> ................ <input type="submit" id="personsub"  value="提交" /> </form> js文件: $(document).ready(function() { $("#personsub").live

编写高质量代码改善C#程序的157个建议——建议49:在Dispose模式中应提取一个受保护的虚方法

建议49:在Dispose模式中应提取一个受保护的虚方法 在标准的Dispose模式中,真正的IDisposable接口的Dispose方法并没有做实际的清理工作,它其实是调用了下面的这个带bool参数且受保护的的虚方法: /// <summary> /// 非密封类修饰用protected virtual /// 密封类修饰用private /// </summary> /// <param name="disposing"></param&

Web响应式设计中应避免的八大误区

开发一个带有响应式交互设计的网站变得非常有意义,因为其可以在不同的设备运行,因此,你可以节约针对不同平台开发不同网站的成本.但是,要做最大限度相应的网页设计,有些误区你应当避免. 不要优先为桌面版设计 开发者通常会犯的一个常见错误是,但他们设计网站时优先考虑桌面版,因为在这些人严重,将基于桌面版的网站转变为针对其他设备的响应式web设 计 是件很轻松愉快的事情.但是,这个发生在计划规划阶段的错误本身会变成一个非常巨大的问题.甚至会造成返工,当然,大量的错误也会蔓延出来. 然而,基于移动设备开发网

北京Python筛选过程中应注意什么

计算机初级爱好者普遍喜欢Python,因为Python干净利索,简单直接.它编写代码的速度非常的快,而且非常注重代码的可读性,非常适合多人参与的项目.很多人选择了培训,那么北京Python培训筛选过程中应注意什么? 第一点:虽然不靠谱的机构很多,但不能说没有.还是那句话,主要还是得看自己,不努力,在哪都学不会.无论是学哪门语言,基础知识非常重要.因此,找有丰富编程经验的老师带着你会少走很多弯路,你的进步速度也会快很多. 第二点:很多培训机构,无论是英语.IT.金融等行业,都是为就业提高自己的职业

挖掘肖特基二极管在数字电路中的详细应用

1.肖特基二极管应用于双电源供电 目前带主控器的电子设计中,基本都会用到实时时钟(RTC),RTC需要额外的钮扣电池来供电,以免系统掉电后,时间信息丢失.同时系统启动后,为了延长电池的使用时间,往往会让主系统供电.因此,RTC往往需要双电源供电,而二极管由于它的单向导通性,可以起到电源隔离的作用.以小信号肖特基二极管BAT54C为例,其正向压降最大只有0.24v(正向电流0.1ma时),RTC电流消耗也是ua级的,加入肖特基二极管隔离电源后,也是能完全满足要求的. 2.肖特基二极管用作与门 如下

建站过程中应注意的问题

创建企业网站就如同写一篇文章,第一步要写好提纲,确立主题.企业网站的题材确定后,要想合理地组织内容并且吸引人们登陆网站进行查询和浏览,就需要建立企业网站的索引.索引应该能够将网站的主体明确表示出来.网站在设立栏目时要紧扣企业确立的主题,设立最近更新或网站指南栏目:设立企业可以下载的文件.产品资料等文本文档和及时响应浏览者常见问题回答栏目. 1.网站目录结构的确立 网站的目录是指建立网站时创建的目录.目录结构可能对于浏览者来说没有很大的影响,可对于网络维护人员的上传维护,将来的内容增加.移植有很大

软件测试过程中应注意的风险

在编写测试计划的时候要考虑可能发生的风险,并提出应对措施.那么到底都有哪些风险要注意呢?如何解决呢?以下列出了一些方案: 设计方面: 风险:(1)没有详细设计说明书; 解决方案:测试人员要在开发阶段对相关设计及需求文档进行分析,对大体模块功能进行分类,分析业务逻辑,在不清楚的地方及时与开发人员沟通. 风险:(2)没有统一的界面设计规范. 解决方案:与项目负责人确认测试标准. 开发方面: 风险:(1)所有模块开发没有统一设计,开发人员有自己的设计方式; 解决方案:与项目负责人确认标准方式,与标准方

ERP实施顾问工作中应努力做到哪些?

1.树立并分享信誉 准确的为自己定位,并积极树立自己的信誉.从这样两个角度去考虑问题,一是从高层管理者的角度去思考行业竞争和公司运作的问题,一是从专业.细致的角度去考虑单据.报表.界面等数据处理的问题.当你在这些问题上充分展示了你的专业水准并发挥了你的作用时,信誉自然树立起来了. 同时要注意与客户分享信誉.树立信誉的目的是更好更快地完成任务,并不是要与客户争夺项目控制权.比较谁在项目中的贡献更大.谁更高明.因此,不要归功于己,把荣誉与客户方同事一起分享反而更能建立信誉. 2.建立客户信心 即便以