数字电路基础---锁存器

article/2025/3/1 1:15:23

目录

锁存器

1、简介

2、实验任务

3、程序设计

3.1、缺少 else 分支的锁存器代码

3.2、补齐 else 分支

3.3、缺少 default 的 case 语句的锁存器代码

3.3、补齐 default 的 case 语句

4、本章总结


锁存器

       锁存器(俗称 Latch)是数字电路中的一种具有记忆功能的逻辑元件。锁存器对脉冲电平敏感的存储单元电路,它只在输入脉冲的高电平(或低电平)期间对输入信号敏感并改变状态。在数字电路中可以记录二进制数字信号“0”和“1”。

1、简介

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

      锁存器不同于触发器,锁存器在不锁存数据时,输出端的信号随输入信号变化,就像信号通过一个缓存器一样;一旦锁存信号起锁存作用,则数据被锁住,输入信号不起作用。因此锁存器也称为透明锁存器,指的是不锁存时输出对输入是透明的。

        锁存器的分类包括 RS 锁存器、门控 RS 锁存器和 D 锁存此处我们详细介绍下 D 锁存器。

       那么什么是 D 锁存器呢?

       所谓的 D 锁存器,就是能够将输入的单路数据 D 存入到锁存器中的电路,下面是我们给出 D 锁存器的电路图,如下图所示。

        从 D 锁存器的电路图中我们可以看出,该电路主要是由两个部分组成,第一个部分是由 G1、G2两个与非门组成的 RS 锁存器,第二个部分是由 G3、G4 两个与非门组成的控制电路。C 为控制信号,用来控制 G3 和 G4 的激励输入。

       下面我们来分析下 D 锁存器的工作原理,当控制信号 C=0 时,根据与非门的逻辑定律,无论 D 输入什么信号,RD SD 信号同时为 1。根据由与非门组成的 RS 锁存器的逻辑定律,RD SD 都同时等于 1 的话,锁存器的输出端 Q 将维持原状态不变。那么,当控制端 C=1 时,如果此时 D=0SD 就等于 1,RD 就等于 0,根据 RS 锁存器的逻辑规律,电路的结果就为 0 状态;如果 D =1,那么 RD 就等于 1,SD 也就等于 0,锁存器的结果就为 1 状态,也就是说,此时锁存器的状态是由激励输入端 D 来确定的,并且 D 等于什么,锁存器的状态就是什么,这就是我们前面所说的,将单路数据 D 存入到锁存器之中。

       根据上面的描述,我们可以推出 D 锁存器的特性表,Qn 是指触发器当前逻辑状态也即触发前的状态,Qn+1 是指触发后的状态。

        通过这个表格,我们可以看出,当 C 1 时,D 的状态和 Qn+1 的状态完全一样,当 D=0 时,Qn+1=0,当 D=1 时,Qn+1=1

       我们还可以进一步画出 D 锁存器的波形图。

        从 D 锁存器的波形图图中我们可以看出,D 是锁存器的输入信号,C 是锁存器的控制信号,Q 是锁存器的输出信号,当控制信号 C 为高电平时,输出信号 Q 将跟随输入信号 D 的变化而变化,大家看虚线内,Q 的波形等于 D 的波形。当控制信号 C 从高电平变为低电平时,输入信号 D 的状态将会决定锁存器将要锁存的状态。大家可以看到,C 由高变低的那两条虚线内,所对应的输入信号 D 为低电平,那么输出信号 Q 也将会锁存低电平。最后面的那两条虚线也同理,D 为高电平,Q 锁存高电平。

       D 锁存器的介绍就到这里,下面我们来从实际的逻辑设计里面看下锁存器的坏处。

       在绝大多数设计中我们要避免产生锁存器。它会让您设计的时序出问题,并且它的隐蔽性很强,新人很难查出问题。锁存器最大的危害在于不能过滤毛刺和影响工具进行时序分析。这对于下一级电路是极其危险的。所以,只要能用触发器的地方,就不用锁存器。

       由上图示意图我们可以看到,锁存器没有时钟信号,只有数据输入和使能以及输出 q 端,没有时钟信号也就说明我们没有办法对这种器件进行时序分析,这个在时序电路里面是非常危险的行为,因为可能引起时序不满足导致电路功能实现有问题。

2、实验任务

设计一个锁存器电路。

3、程序设计

       代码里面出现 latch 的两个原因:在组合逻辑中,if 或者 case 语句不完整的描述,比如 if 缺少 else 分支,case 缺少 default 分支,导致代码在综合过程中出现了 latch。解决办法就是 if 必须带 else 分支,case 必须带 default 分支。

       大家需要注意下,只有不带时钟的 always 语句的 if 或者 case 语句不完整才会产生 latch,带时钟的语句 if 或者 case 语句不完整描述不会产生 latch。

3.1、缺少 else 分支的锁存器代码

      根据程序设计的思路,我们来设计一个 if 语句,但缺少 else 分支的锁存器代码(latch.v),代码编写如下:

//实验任务:设计一个锁存器电路
//程序设计:
//代码里面出现 latch 的两个原因:在组合逻辑中,if 或者 case 语句不完整的描述,
//比如 if 缺少 else 分支,case 缺少 default 分支,导致代码在综合过程中出现了 latch。
//解决办法就是 if 必须带 else 分支,case 必须带 default 分支。
//大家需要注意下,只有不带时钟的 always 语句的 if 或者 case 语句不完整才会产生 latch,
//带时钟的语句 if 或者 case 语句不完整描述不会产生 latch。module latch(//input          clk,  //system clkinput          a,input          b,output  reg    y    // output signal);//*******************************************
//**          main code
//*******************************************always @(*) beginif(a==1)y=b;//else//    y=0;
endendmodule

      程序中的一个组合逻辑电路使用了 if 语句,但是这个语句没有 else 分支,我们可以使用 Vivado查看 RTL 视图。

从 RTL ANALSIS 视图中可以看出,模块下面显示了 RTL_LATCH,可以看出这个电路就是 latch

3.2、补齐 else 分支

下面我们把 else 补充完整再来看下电路结构,代码如下:

//实验任务:设计一个锁存器电路
//程序设计:
//代码里面出现 latch 的两个原因:在组合逻辑中,if 或者 case 语句不完整的描述,
//比如 if 缺少 else 分支,case 缺少 default 分支,导致代码在综合过程中出现了 latch。
//解决办法就是 if 必须带 else 分支,case 必须带 default 分支。
//大家需要注意下,只有不带时钟的 always 语句的 if 或者 case 语句不完整才会产生 latch,
//带时钟的语句 if 或者 case 语句不完整描述不会产生 latch。module latch(//input          clk,  //system clkinput          a,input          b,output  reg    y    // output signal);//*******************************************
//**          main code
//*******************************************always @(*) beginif(a==1)y=b;elsey=0;
endendmodule

这个代码中,添加了 else 分支,我们可以使用 RTL ANALSIS 视图再看一下综合的电路结构。

上图所示的电路结构是一个 mux 选择电路,可以看出,加了 else 分支的电路就不会有 latch 电路。

3.3、缺少 default case 语句的锁存器代码

下面我们来写一个不带 default case 语句,代码如下:

//
//实验任务:设计一个锁存器电路
//程序设计:
//代码里面出现 latch 的两个原因:在组合逻辑中,if 或者 case 语句不完整的描述,
//比如 if 缺少 else 分支,case 缺少 default 分支,导致代码在综合过程中出现了 latch。
//解决办法就是 if 必须带 else 分支,case 必须带 default 分支。
//大家需要注意下,只有不带时钟的 always 语句的 if 或者 case 语句不完整才会产生 latch,
//带时钟的语句 if 或者 case 语句不完整描述不会产生 latch。module latch(//input          clk,  //system clkinput          a,input          b,output  reg    y    // output signal);//*******************************************
//**          main code
//*******************************************always @(*) begin
//    if(a==1)
//        y=b;
//    //else
//    //    y=0;case(a)0:y = b;endcase
endendmodule

从 RTL ANALSIS 视图中可以看出,模块下面显示了 RTL_LATCH,可以看出这个电路就是 latch

3.3、补齐 default 的 case 语句

下面我们把 case 语句的 default 补充完整再来看下电路结构,代码如下:

//
//实验任务:设计一个锁存器电路
//程序设计:
//代码里面出现 latch 的两个原因:在组合逻辑中,if 或者 case 语句不完整的描述,
//比如 if 缺少 else 分支,case 缺少 default 分支,导致代码在综合过程中出现了 latch。
//解决办法就是 if 必须带 else 分支,case 必须带 default 分支。
//大家需要注意下,只有不带时钟的 always 语句的 if 或者 case 语句不完整才会产生 latch,
//带时钟的语句 if 或者 case 语句不完整描述不会产生 latch。module latch(//input          clk,  //system clkinput          a,input          b,output  reg    y    // output signal);//*******************************************
//**          main code
//*******************************************always @(*) begin
//    if(a==1)
//        y=b;
//    //else
//    //    y=0;case(a)0:y = b;default:y = 0;endcase
endendmodule

可以看出,这个语句有 case default 分支,我们使用 vivado RTL ANALSIS 来看下综合的电路结构。

 上图所示的电路结构是一个 mux 选择电路,可以看出,加了 case default 分支的电路就不会有 latch电路。

4、本章总结

       本章需要掌握的重点是代码里面出现 latch 在组合逻辑中出现的原因:if 语句或者 case 语句不完整的描述,比如 if 缺少 else 分支,case 缺少 default 分支,导致代码在综合过程中出现了latch。解决办法就是 if 必须带 else 分支,case 必须带 default 分支。

       大家需要注意下,只有不带时钟的 always 语句的 if 或者 case 语句不完整才会产生 latch,带时钟的语句 if 或者 case 语句不完整描述不会产生 latch。


http://chatgpt.dhexx.cn/article/YqABhpZS.shtml

相关文章

硬件基础——锁存器

双稳态 在电子电路中。双稳态电路的特点是:在没有外来触发信号的作用下,电路始终处于原来的稳定状态。在外加输入触发信号作用下,双稳态电路从一个稳定状态翻转到另一个稳定状态。由于它具有两个稳定状态,故称为双稳态电路。双稳态…

锁存器、触发器和寄存器

锁存器 锁存器(latch)---对脉冲电平敏感,在时钟脉冲的电平作用下改变状态 锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,当锁存器处于使能状态时&#…

锁存器的使用

实际举例&#xff1a; GPIO_Write(GPIOC,~(1<<(leds7))); //写入c端口为000000001 GPIO_SetBits(GPIOD,GPIO_Pin_2); //使输出有效 GPIO_ResetBits(GPIOD,GPIO_Pin_2); //进行锁存 先开锁存器还是先给IO数据呢&#xff1f; 其实两个照现象来看的话都…

【FPGA】锁存器、触发器和寄存器

目录 一丶锁存器1.什么是锁存器2.锁存器工作原理3.锁存器优缺点 二丶触发器1.什么时触发器2.触发器工作原理3.代码实现 三丶寄存器四丶锁存器与触发器的区别 一丶锁存器 1.什么是锁存器 锁存器&#xff08;latch&#xff09;—对脉冲电平敏感&#xff0c;在时钟脉冲的电平作用…

寄存器与锁存器

一 原理解析 在数字电路中&#xff0c;通常采用存储单元与组合逻辑相结合的方式实现特定功能。这种存储单元一般采用双稳态原件构成。首先明确一下概念&#xff0c; 寄存器&#xff1a;边沿触发的存储元件 锁存器&#xff1a;电平敏感的器件 触发器&#xff1a;一般来说&#x…

锁存器,D触发器和寄存器的关系与区别

锁存器&#xff0c;D触发器和寄存器的关系与区别 文章目录 锁存器&#xff0c;D触发器和寄存器的关系与区别前言一、锁存器和D触发器二、锁存器构建D触发器三、什么是寄存器&#xff1f;四、总结五、参考资料 前言 数字IC设计里&#xff0c;常会出现锁存器&#xff0c;D触发器…

锁存器相关

2-1】基本双稳态电路 将两个非门G1和G2接成如图5.1.1所示的交叉耦合形式&#xff0c;则构成最基本的双稳态电路。 从图5.1.1所示电路的逻辑关系可知&#xff0c;若 Q0 &#xff0c;经非门G2反相&#xff0c;则 Q 1。Q反馈到G1输入端&#xff0c;又保证了 Q0 。 由于两个非门首…

数字电路中D触发器和D锁存器分别有什么作用?

用数字信号完成对数字量进行算术运算和逻辑运算的电路称为数字电路&#xff0c;或数字系统。由于它具有逻辑运算和逻辑处理功能&#xff0c;所以又称数字逻辑电路。现代的数字电路由半导体工艺制成的若干数字集成器件构造而成。逻辑门是数字逻辑电路的基本单元。存储器是用来存…

锁存器

出处 http://blog.csdn.net/metalseed/article/details/8259255 by MetalSeed 本文要点 1&#xff1a;锁存器的主要作用 2&#xff1a;74HC573引脚图 3&#xff1a;74HC573电路连接及使用说明 锁存器辨析 所谓锁存器&#xff0c;就是输出端的状态不会随输入端的状态变化而变…

锁存器Latch和触发器Flip-flop的区别

锁存器Latch概述 锁存器&#xff08;Latch&#xff09;是一种对脉冲电平敏感的存储单元电路&#xff0c;它们可以在特定输入脉冲电平作用下改变状态。锁存&#xff0c;就是把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存&#xff0c;其次完成高速的控制器与慢速的外…

Python 官方研讨会:彻底移除 GIL 真的可行么?

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 忽见陌头杨柳色&#xff0c;悔教夫婿觅封侯。 作者&#xff1a;Łukasz Langa 译者&#xff1a;豌豆花下猫&#xff0c;来源&#xff1a;Python猫 原文…

吴恩达:告别,大数据

编译丨维克多、王晔 来源丨AI科技评论 吴恩达是人工智能&#xff08;AI&#xff09;和机器学习领域国际最权威的学者之一&#xff0c;最近一年里&#xff0c;他一直在提“以数据为中心的AI”&#xff0c;希望将大家的目光从以模型为中心转向以数据为中心。 最近&#xff0c;在接…

2017年Python从入门到实战教程-徐培成-专题视频课程

2017年Python从入门到实战教程—5702人已学习 课程介绍 通过《2017年Python从入门到实战教程》这系列课程&#xff0c;大家可以掌握python开发。适合任何初级或者转行的人学习。 课程收益 徐培成老师通过通俗易懂的方式&#xff0c;让你彻底掌握Python&#xff0c;本教程适…

入门深度学习——基础知识总结(python代码实现)

入门深度学习——基础知识总结&#xff08;python代码实现&#xff09; 目前&#xff0c;AI基本上可以说是烂大街了。几乎什么都可以说使用了AI技术&#xff0c;听起来很拉风&#xff0c;很nb的样子。而其中目前最为火热的非深度学习&#xff08;Deep Learning&#xff09;莫属…

程序员现状思考及Python教程

经常听到一些同行说&#xff1a; 某个公司薪资上调30-50%&#xff0c;我可以跳槽入吗&#xff1f; 最近收到几个比较好的offer&#xff01;该去哪家&#xff1f;纠结&#xff01; 目前岗位和环境对自己成长非常慢&#xff01;更看不到公司的前景特别迷茫&#xff01; 想成为…

大数据因果推理与学习入门综合概述

在《原因与结果经济学》的开篇&#xff0c;给读者回答以下几个问题。 定期接受代谢综合征体检就能长寿吗&#xff1f;看电视会导致孩子学习能力下降吗&#xff1f;上录取分数高的大学收入就会更高吗&#xff1f;想必很多人的回答都是肯定的。 不过&#xff0c;经济学的权威研…

2018 大数据学习入门必备规划

大数据方向的工作目前分为三个主要方向: 01.大数据工程师 02.数据分析师 03.大数据科学家 04.其他(数据挖掘本质算是机器学习,不过和数据相关,也可以理解为大数据的一个方向吧) 一、大数据工程师的技能要求 二、大数据学习路径 三、学习资源推荐(书籍、博客、网站)…

Python 数据分析师必备的入门学习路线和技能

最近几年&#xff0c;做的这些项目&#xff0c;大多与数据分析与算法应用相关。岗位虽然是算法工程师&#xff0c;但是与数据分析打得交道也很多&#xff0c;双管齐下&#xff0c;最后才能确保算法的落地。在几年前&#xff0c;我还想当然地认为做算法的就应该偏重算法研究与应…

Python入门经典(2K超清)

我在多次python培训时&#xff0c;对学员讲解编程对人生具有重大影响。曾经大学毕业时也迷茫过&#xff0c;不知道以后要干嘛。面对招聘会上密密麻麻的人群&#xff0c;经不知所措。自从接触python编程后&#xff0c;我对这门快速&#xff0c;高效程序语言表示惊讶&#xff0c;…

python入门学习笔记

python入门学习笔记目录 1.编程概论1.1 注释1.2 打印与标记符1.2.1 打印 print1.2.2标记符 1.3 代码行1.3.1 单行语句1.3.2 多行语句1.3.3 缩进1.3.4 复合语句 1.4 关键字1.5 基本对象数据类型1.5.1type() 函数1.5.2 isinstance() 判断函数1.5.3 type 与 isinstance 1.6 常量与…