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

news2024/12/20 3:18:52

目录

锁存器

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 clk
     input          a,
     input          b,
     output  reg    y    // output signal
    );

//*******************************************
//**          main code
//*******************************************

always @(*) begin
    if(a==1)
        y=b;
    //else
    //    y=0;
end

endmodule

      程序中的一个组合逻辑电路使用了 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 clk
     input          a,
     input          b,
     output  reg    y    // output signal
    );

//*******************************************
//**          main code
//*******************************************

always @(*) begin
    if(a==1)
        y=b;
    else
        y=0;
end

endmodule

这个代码中,添加了 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 clk
     input          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
end

endmodule

从 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 clk
     input          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
end

endmodule

可以看出,这个语句有 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://www.coloradmin.cn/o/653663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

别让存储成为ChatGPT大模型训练的关键瓶颈

当下科技行业be like... 据说现在的科技公司,不是在抢GPU,就是在往抢GPU的路上……此前4月,特斯拉CEO马斯克就购买了1万块GPU,他还称公司将继续大量购买英伟达的GPU。 在国内,近日也有报道称,字节跳动今年…

MySQL数据库事务和存储引擎(贼详细)

目录 一、MySQL 事物 1、事务的概念 2、 事务的ACID特点 (1)原子性 (2)一致性 (3) 隔离性 (4)事务之间的相互影响 (5) Mysql及事物隔离级别 &#…

你知道视频配音怎么配出好听的声音吗

小明:最近我在制作一个视频项目,但是我发现视频中的原声不够理想,我想给它配上好听的声音。你知道怎么配音才能让声音听起来更好吗? 小李:当然!配音是提升视频质量的重要一环。想知道视频配音怎么配出好听…

uniapp实现应用wgt资源热更新

APP更新一般有两种形式 1、整包更新,通过hbuliderx提供的在线云打包就属于整包更新,属于全量更新,缺点就是打包时间长、要重新走市场审核。费时 2、wgt资源包热更新,通过hbuliderx打wgt包 ,速度快,能在应用…

iphone测试中除了appium,还有更好用的工具吗

除了Appium,还有一些其他的工具可以用于iPhone测试,下面列举几个: 1. XCUITest XCUITest是苹果官方提供的UI自动化测试框架,可以用于iPhone和iPad应用程序的自动化测试。XCUITest可以模拟用户操作,例如点击、滑动、输…

机器学习实践(1.1)XGBoost分类任务

前言 XGBoost属于Boosting集成学习模型,由华盛顿大学陈天齐博士提出,因在机器学习挑战赛中大放异彩而被业界所熟知。相比越来越流行的深度神经网络,XGBoost能更好的处理表格数据,并具有更强的可解释性,还具有易于调参…

若依微服务 + seata1.5.2版本分布式事务(安装配置nacos+部署)

若依官方使用的1.4.0版本seata,版本较低配置相对更麻烦一些 一、seata服务端下载,下载方式介绍两种入口,如下: 1、找到对应版本,下载 binary 即可。 下载包名为:seata-server-1.5.2.zip 2. github上下载 …

WWDC2023 Metal swift 头显ARKit支持c c++ 开发

1 今年WWDC,我们看见了苹果的空间计算设备,visionOS也支持了c c API. 这有什么好处呢,不是说能够吸引更多c c开发者加入苹果开发者阵营,而是我们过去的很多软件,可以轻松对接到苹果的头显设备,让我们的软件…

2023年协议转让研究报告

第一章 概述 协议转让作为中国企业破产法中的重要程序之一,已经在实践中得到广泛应用。在协议转让过程中,债务人与债权人或其他相关方通过协商达成一致,将特定的资产或权益进行转让,以实现债务清偿或债务人的破产清算。协议转让的…

RRC重建比率高问题分析和优化方法

PART01 1、重建概述 RRC重建(RRC connection re-establishment)是UE处于RRC_CONNECTED状态,因为一些移动性管理或底层链路故障,导致连接中断,UE发起的空口资源重新建立的过程,以继续空口的RRC连接。重建是…

[CSP-S 2021] 回文

[CSP-S 2021] 回文 题目描述: 给定正整数 n 和整数序列 a1​,a2​,…,a2n​,在这 2n 个数中,1,2,…,n 分别各出现恰好 2 次。现在进行 2n 次操作,目标是创建一个长度同样为 2n 的序列 b1​,b2​,…,b2n​,初始时 b 为空序列&…

【SpringCloud入门】-- SpringCloud优质组件介绍

目录 1. SpringCloud优质项目 2. 介绍SpringCloud优质项目 SpringCloudConfig(Spring) SpringCloudBus Eureka Hystrix Zuul Archaius Consul SpringCloudForCloudFoundry SpringCloudSleuth SpringCloudDataFlow SpringCloudSecurity SpringCloudZookeeper Spr…

【Redis】孔夫子旧书网爬虫接入芝麻代理IP:代理IP利用效率最大化

背景: 之前用过芝麻IP,写过这几篇文章 《【Python】芝麻HTTP代理系列保姆级全套攻略(对接教程自动领取每日IPIP最优算法)》 《【Python】记录抓包分析自动领取芝麻HTTP每日免费IP(成品教程)》 《爬虫增加代理池:使用稳…

ICC2:自定义快捷键和菜单

把一些常用的功能放在一个菜单里是什么体验?直接放在工具栏里是不是更方便?那设置成快捷键呢? gui_create_menu 自定义菜单可以把工具常用的功能放到一个菜单里,用户也可以把“执行脚本操作”加到菜单里。 举例来说: 1)把Editor Toolbox放到Favorite菜单里,floorplan 操…

行业报告 | AIGC发展研究

原创 | 文 BFT机器人 01 技术篇 深度学习进化史:知识变轨 风起云涌 已发生的关键步骤: 人工神经网络的诞生 反向传播算法的提出 GPU的使用 大数据的出现 预训练和迁移学习 生成对抗网络 (GAN) 的发明 强化学习的成功应用 自然语言处理的突破 即将发生的关键…

MinGW-w64安装和使用_亲测有效

MinGW-w64 是什么!? MinGW-w64 是一个在 Windows 系统上运行的 GNU 编译器套件,支持 C 和 C 语言的编译。它包括了 GCC 编译器、GNU Binutils 和一些其他的工具。在 MinGW-w64 中 各个版本的参数含义如下: x86_64:表…

1.ORB-SLAM3系统概述

1.内容简介 本系列文章主要基于ORB-SLAM3代码、论文以及相关博客,对算法原理进行总结和梳理。 ORB-SLAM系列整体架构是不变的,都包含Tracking、LocalMapping和LoopClosing三个核心线程,中间伴随着优化过程。在ORB-SLAM3算法中比较突出的改进…

腾讯安全董志强:四大关键步骤促进数据安全治理闭环,提升企业免疫力

高速发展的数字时代,数据已成为推动产业发展的最重要生产要素之一,真正成为了创造经济财富的数字能源,守护数据资产的安全成为企业高质量发展不可回避的重要命题。 6月13日,腾讯安全联合IDC发布“数字安全免疫力”模型框架&#…

我被一家无货源电商培训公司骗了怎么办?

我是卢松松,点点上面的头像,欢迎关注我哦! 最近,一位被无货源电商培训骗的人找到了卢松松,她说: 老师,你好,我是被无货源电商课程骗了的受害人,走投无路了,想…

5个超好用的开源工具库分享~

在实际项目开发中,从稳定性和效率的角度考虑,重复造轮子是不被提倡的。但是,自己在学习过程中造轮子绝对是对自己百利而无一害的,造轮子是一种特别能够提高自己系统编程能力的手段。 今天分享几个我常用的开源工具库:…