锁存器

关于锁存器问题的讨论

孤街浪徒 提交于 2020-03-17 07:06:05
很多同学提问到锁存器的相关问题,说明大家对这方面知识还不是很了解,今天我们就来探讨一下。 上图是两个没有else的代码,其等效于下图的代码。 也就是说,当if条件里面没有写else时,默认是表示“保持不变”的意思。 接下来,我们来讨论一下,硬件中是如何实现“保持不变”的。 左边是时序时序逻辑的代码,右边是该代码所对应的硬件电路。特别注意图中红色的那个线,那个就是保持不变的“反馈”。由图中可以看出,当时钟上升沿的时候,当选择器的结果赋值给信号b;非上升沿的时候,b一直保持不变,因此红色线在此期间也是保持不变的。当a为0的时候,选择器选择当前b的结果,然后在下一个时钟上升沿赋给信号b。 由引可见,实现“保持不变”的关键在于D寄存器。 众所周知,组合逻辑代码是没有D寄存器的,那么它又是如何实现保持不变呢?这个就会用到锁存器了。 上图是组合逻辑代码,及其对应电路。为了让信号b保持不变,就要用到一个叫“锁存器”的器件。当a为1时,b就会等于1;当a为0时,b会保持不变。 关于锁存器的危害,可以参考MDY的“大串讲”视频,总之我们知道锁存器是不好东西的,尽量不要有锁存器,也就是说组合逻辑里,要让“if else”条件补全。 常见问题 问1:是不是所有的代码,if else都需要补全呢? 答:如前面所讨论的,对于时序逻辑可以由D寄存器实现“保持不变”,所以时序逻辑是不需要补全的

蓝桥杯单片机训练[1]---锁存器控制

半世苍凉 提交于 2020-02-26 11:46:34
竞赛板上有四片74573锁存器,由138译码器进行输入控制,Y4C-Y7C分别连接LED,ULN2003,数码管位选控制器,段选控制器。 由138真值表可得译码器输入三位二进制数决定对应引脚的低电平,其余引脚为高电平,经或非门门0变为1,对应锁存器打开。 Y4 Y5 Y6 Y7导通时138输入为4,5,6,7,对应二进制为100,101,110,111 138译码器的控制位从高到低为CBA,连接到P2口高三位,锁存器控制代码如下: void CTL138(u8 n) { P2 &= 0x1f; //关闭所有锁存器 P2 |= n<<5; //将n移到高三位,选通锁存器 P2 &= 0x1f; //关闭所有锁存器 } 锁存器选通前后均进行关闭操作是为了避免其他数据串入对应锁存器。 下面我们利用锁存器控制函数实现对一些外设的的控制 首先是ULN2003,这其实就是一个反向驱动器,顾名思义,输入与输出是反向的。 废话不多说,直接上代码 void ULN2003(u8 n) { switch(n) { case 0: P0&=~0x40;break;//关蜂鸣器 case 1: P0|=0x40;break; case 2: P0&=~0x10;break;//关继电器 case 3: P0|=0x10;break; } CTL138(5); } 此外,板子如果不关LED锁存器不赋初值的话

《编码》读书笔记:从无到有构建计算机系统

人走茶凉 提交于 2020-02-10 07:49:47
1 简单的电报系统: 按键、发声装置,电池和一些导线即可构成: 当电报机的键按下时,发生器的电磁铁将可动棒拖下发出“滴”的声音;当键放开时,棒弹回初始位置,发出“嗒”的声音。快速的“嘀嗒”为点,慢速的则为划。 2 继电器 电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。这样吸合、释放,从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。 长距离导线会有很大的电阻,会导致电流越来越小。下图中的继电器系统就是为了增大电流。 上述通信系统中的继电器的简单实现: 3 逻辑代数与电路 逻辑代数是分析和设计逻辑电路的数学基础。逻辑代数是由英国科学家乔治·布尔(George·Boole)创立的,故又称布尔代数。 4 逻辑门 (logic gates) 逻辑门和通常让水和人通过的门十分相似。逻辑门通过阻挡或允许电流通过在逻辑中执行简单的任务。 (1)与门

新概念51单片机C语言教程纠错(2)

自古美人都是妖i 提交于 2020-01-28 17:46:34
emmmmmmm,过年期间没怎么学51,最近几天被肺炎吓到了家里,才想起来拿起书本看一看,这一次的课本错误在按键部分,仍是郭天祥的《新概念51单片C语言教程》。 课本P82中间的例4.1.1给我们介绍了按键的用法,但是例子跑出来的仿真让人哭笑不得。下面上图!!P1是上电状态,P2是按动按键状态。 主要的现象是,在刚刚上电时点亮了两个数码管,而且没有什么具体意义,在按下按键时,可以实现数字加一(按动LCDEN),但是松开按键就会变成刚刚上电的样子。 在书中的代码示例是(左侧),更改后代码为右侧: 郭天祥代码的意思是,先打开数字锁存器(dula=1),然后输入数字(P0=table[]),再打开位置锁存器,把显示数字的位置移动,以便放入个位数字,这个想法是正确的。但是我们看到,郭先把数字放了进去,再去打开数位锁存器,这就造成了个位数挤到十位数,十位数初始没地放的情况,因而其仿真上电后是一团乱麻,只有在按着按键提供num时,程序才会正常工作。 右侧代码的改进之处是:先消影,打开数位锁存器,不会让十位数被挤走;这样就做到了“数有其位”,同时保证上电数字正确。 视频是修改代码后的演示。按动第一个按键实现加一,第二个减一,第三个清零,第四个基于单片机时钟实现每秒加一。 CSDN视频1 附:亲测可用的TX-1C开发板proteus仿真文件和几个跑过可用的hex文件。 欢迎下载:https:/

时钟与复位

痞子三分冷 提交于 2020-01-25 18:01:10
内容: 主要涵盖了设计者在设计模块或者知识产权(Intellectual Preoperty)时所要用到的一些建议。 同步设计(对ASIC时序控制最安全的方法): 由单个主时钟和主置位/复位信号驱动设计中所有的时序器件。 一、避免使用行波计数器 含义:即使用触发器输出作为下一级触发器的时钟输入端 缺点: 由于第一个触发器的输出响应导致第二个触发器的时钟输入相对于时钟信号产生偏移(延迟); 无法 在每个时钟边沿都激活 :由于延迟问题,当时钟发生跳变时,第一个触发器的输出未发生变化,从而导致第二个触发器的时钟输入变化较时钟信号晚;在每个时钟边沿都激活?可能在某几个时钟边沿激活?考虑的是第二个触发器的激活? 优点:能够减少电路的漏电流并降低电路的功耗,在低功耗设计中会取得很好的效果; 二、避免使用门控时钟 前端设计注意:含门控时钟的设计在仿真过程中可能工作正常,但是综合时会出现问题; 含义:在时钟线上使用门控单元,使用门控逻辑使能信号开关时钟; 优点:能够有效减少功耗,当时钟被门控电路关闭后,门控时钟在根部将时钟关闭,该时钟网络和其中的寄存器都会停止翻转,从而减少功耗; 同步设计中的功耗来源: 在每个时钟边沿变化的组合逻辑所产生的功耗(由触发器驱动这些逻辑组合); 由触发器产生的功耗(及时在触发器的输入和内部状态不发生变化,该功耗仍存在); 时钟树产生的功耗(通常占到总功耗的50%);

接口知识点总结

浪尽此生 提交于 2020-01-22 03:20:19
数据传送三种方式:查询、中断和DMA AD主要技术指标:分辨率、转换时间、量程、绝对精度、相对精度、线性度 接口概念 微机接口就是微处理器CPU与“外部世界”的连接电路,是CPU与外界进行信息交换的中转站。其中外部世界指除CPU本身以外的所有设备或电流,包括存储器、I/O设备、控制设备、测量设备、通信设备、多媒体设备、A/D与D/A转换器等。 比如源程序或原始数据要通过接口从输入设备送进去,运算结果要通过接口向输出设备送出来;控制命令通过接口发出去,现场状态通过接口取进来,这些来往信息都要通过接口进行变换与中转。 结合芯片:中断控制器8259A、可编程并行接口8255A、可编程定时/计数器8253、可编程串行接口8251A(考) 接口的功能(考) (1)对外部设备的寻址功能 (2)信号转换功能 (3)数据缓冲功能 (4)联络功能 CPU <- - ->外设 (5)中断管理功能 (6)可编程功能 微机系统的性能指标 (1) CPU性能指标:字长、运算速度 总线宽度与字长;主频、MIPS与运算速度; 字长是CPU中运算器一次能处理的最大数据位数。 主频表示在CPU内数字脉冲信号振荡的速度。 (2) 存储器性能指标 速度、容量、位价->层次结构 (3) I/O性能指标由设备决定 显示器:分辨率、颜色深度、刷新; 声卡:采样率、采样精度 I/O端口编址方式(考) (1)统一编址 (2

锁存器(Latch)和触发器(Flip-flop)——《电子技术基础(数字部分)》读书笔记(三)

那年仲夏 提交于 2020-01-03 02:41:40
  大多数数字系统中,除了需要具有逻辑运算和算术运算功能的组合逻辑电路外,还需要具有储存功能的电路,组合逻辑电路和储存电路相结合可构成时序逻辑电路,Lacth & Flip-flop就是实现储存功能的两种逻辑单元电路。   锁存器是对 电平敏感 的电路,它们在一定电平作用下改变状态。基本SR锁存器由输入信号电平直接控制其状态,传输门控或逻辑门控锁存器在 使能电平 作用下由输入信号决定其状态。在使能信号作用期间,门控锁存器输出跟随输入信号变化而变化。   触发器则是对时钟脉冲 边沿敏感 的电路,根据不同的 电路结构 ,它们在时钟脉冲的上升沿或下降沿作用下改变状态。目前流行的触发器电路主要有 主从 、 维持阻塞 和 利用传输延迟 等几种结构,它们的工作原理个不相同。   触发器按逻辑 功能 分类有 D触发器 、 JK触发器 、 T触发器 和 SR触发器 。它们的功能可用 特性表 、 特性方程 和 状态图 来描述。触发器的电路结构与逻辑功能没有必然联系。例如JK触发器既有主从结构也有维持阻塞或利用传输延迟结构。每一种逻辑功能的触发器都可以通过增加门电路和适当的外部连线转换为其它功能的触发器。       之所以能够有记忆功能能够存储信息,最主要的就是它把输出有反馈到了输入,形成了反馈这样它就能保持稳定。 这使得Lacth & Flip-flop与组合逻辑电路的分析有了很大的不同,

Verilog设计中的锁存器

情到浓时终转凉″ 提交于 2019-12-22 09:24:50
问题: 什么是锁存器? 什么时候出现锁存器? 锁存器对电路有什么影响? 如何在FPGA设计中避免锁存器? 在FPGA设计中应该避免锁存器.实际上,锁存器与D触发器实现的逻辑功能基本相同,都有暂存数据的功能。但如果两者都由与非门搭建的话,锁存器耗用的逻辑资源要比D触发器少(D触发器需要12个MOS管,锁存器只需6个MOS管),锁存器的集成度更高。所以在的ASIC设计中会用到锁存器。但锁存器对毛刺敏感,无异步复位端,不能让芯片在上电时处在确定的状态;另外,锁存器会使静态时序分析变得很复杂,不利于设计的可重用,所以,在ASIC设计中,除了CPU这高速电路,或者RAM这种对面积很敏感的电路,一般不提倡用锁存器。 FPGA的底层基本组件是查找表(LUT)和D触发器,并不存在锁存器,所以,FPGA中综合出来的锁存器都是由查找表和寄存器构成的,反而会更耗资源。 基于以上原因,在FPGA设计中,应该避免使用锁存器。在组合电路中,可以通过让代码覆盖所有条件分支,或者在组合进程中以赋默认值的方式避免锁存器。在具体实现中: always @(*) 这种语句中当条件语句没有覆盖到所有分支时将产生锁存器,即if和case条件不全时综合器会综合出锁存器。 以下是通过在always电平敏感进程中通过赋默认值避免产生锁存器。 always @(sel or a) begin y2 = 3’b000; //赋默认值

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

不打扰是莪最后的温柔 提交于 2019-12-22 09:16:15
锁存器(Latch)是数字逻辑电路中很重要的一种基本电路,常见的锁存器包括三个端口:数据输入口、数据输出口、使能端。当使能端为高电平时,输入口的数据直接送到输出口,此时输入输出口可以看成是直接连通的;当使能端为低电平时,输出口的数据保持之前的数据不变,无论输入口的数据怎么变化,输出都保持不变,就是把原来的状态锁存下来了(所以才叫锁存器)。锁存器与触发器的区别在于:锁存器是电平触发,而触发器是边沿触发。 锁存器在不锁存数据时,输出随输入变化;但一旦数据锁存时,输入对输出不产生任何影响 。 在FPGA电路设计中,不规范的描述语言可能会产生意想不到的锁存器,而设计者往往并没有注意到自己的设计会被综合出锁存器,导致综合出的电路出现逻辑错误。 在数字电路中,产生意外的锁存器的情况一般有以下两种: 1. if……else……结构中缺少else 先看一个实际的例子: 用quartus综合一下这两个电路,看看产生的RTL图是怎样的: 左边的电路: 右边的电路: 由RTL视图可以直观的看出,左边的电路没有生成锁存器,而右边的电路生成了一个我们不想要的锁存器(q1$latch)。左边的电路是时序逻辑,生成触发器,而触发器是有使能端(en)的,使能端无效时就可以保存数据,无需锁存器。右边的电路是组合逻辑,在en为低电平时,输出q1要保持不变,而组合逻辑没有存储元件,只能生成锁存器来保持数据。所以

latch的产生和消除

て烟熏妆下的殇ゞ 提交于 2019-12-22 09:15:26
一直都知道fpga中有latch这么一回事,但是一直都不太清楚到底什么是锁存器,它是怎么产生的,它到底和寄存器有多少区别,它怎么消除。为什么说他不好? 一,是什么 锁存器是一种在异步时序电路系统中,对输入信号 电平 敏感的单元,用来存储信息。 一个锁存器可以存储1bit的信息 , 通常,锁存器会多个一起出现,如4位锁存器,8位锁存器。 锁存器在数据未锁存时,输出端的信号随输入信号变化,就像信号通过一个缓冲器,一旦锁存信号有效,则数据被锁存,输入信号不起作用。因此,锁存器也被称为透明锁存器,指的是不锁存时输出对于输入是透明的。 二 锁存器与寄存器的区别: 两者都是基本存储单元,单锁存器是 电平触发 的存储器,触发器是 边沿 触发的存储器。本质是,两者的基本功能是一样的,都可以存储数据。意思是说一个是组合逻辑的,一个是在时序电路中用的,时钟出发的。 三,锁存器的危害: 对毛刺敏感,不能异步复位,所以上电以后处于不确定的状态; Latch会使静态时序分析变得非常复杂; 在PLD芯片中,基本的单元是由查找表和触发器组成的,若生成锁存器反而需要更多的资源。 第三条也是最基本的原因。 四,产生的原因 ******** ps重重之重 上面说了那没多只是觉得网上的没把锁存器说明白。下面的才是重点。 1,case 2,if-------else if 3,always@( 敏感信号表 ) 五 解决