锁存器的工作原理及其在FPGA设计中的注意事项

news2024/11/25 7:37:51

锁存器(Latch)是数字电子中常用的一种基本元件,用于在特定的时间点或条件下“锁存”或保存输入的数据值。锁存器对脉冲电平敏感,它只在输入脉冲的高电平(或低电平)期间对输入信号敏感并改变状态。在数字电路中可以记录二进制数字信号“ 0”和 1”。

锁存器的主要作用:

  • 缓存数据。
  • 解决高速控制器与慢速外设之间的不同步问题。
  • 解决驱动问题。
  • 解决一个I/O口既能输出也能输入的问题。

锁存器的工作原理

  • 锁存器的工作是基于电平控制数据的输入,包括不带使能控制的锁存器和带使能控制的锁存器。
  • 在没有锁存信号时,锁存器的输出随输入信号变化,就像信号通过一个缓冲器一样。
  • 一旦锁存信号起作用,数据被锁住,输入信号不再影响输出。这意味着在有锁存信号时,输入的状态被保存到输出,直到下一个锁存信号。

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

锁存器的类型:

  • 常见的锁存器类型包括RS锁存器(Reset-Set Latch)、D锁存器(Data Latch)等。
  • RS锁存器:当S(Set)输入为高电平且R(Reset)输入为低电平时,输出Q被置位为高电平;当S为低电平且R为高电平时,输出Q被复位为低电平。
  • D锁存器:有一个数据输入端(D)和一个使能端(E)。当使能信号有效时,D锁存器捕获D端的信号并保存在输出Q上;当使能信号无效时,输出Q保持不变,直到下一个使能脉冲到来。

1 RS锁存器

从RS锁存器的电路结构图我们可以看出,该电路主要是由两个部分组成,第一个部分是由两个与门组成的RS锁存器,第二个部分是由两个或非门组成的控制电路。R为复位信号,S为置位信号,C为控制信号,用来控制前两个与门的激励输入。

下面我们来分析下RS锁存器的工作原理,当控制信号C=0时,根据与门的逻辑定律,无论R和S输入什么信号, RD和 SD信号同时为 0。 根据由或门组成的 RS锁存器的逻辑定律, RD和 SD都同时
等于 0的话,锁存器的输出端 Q将维持原状态不变,即处于保持状态。

当控制端 C=0时:电路处于保持状态,RS锁存器不起作用。

当控制端 C=1时:

  • 若R=0,S=0,即无激励信号时,有以下两种情况:

锁存器输出结果为:Qn+1 = Qn

其中 Qn是指触发器当前逻辑状态(即触发前的状态), Qn+1是指触发后的状态。

  • 若R=1,S=0,即置位信号为0

锁存器输出结果为:Qn+1 = 0

  • 若R=0,S=1,即置位信号为1

锁存器输出结果为:Qn+1 = 1

  • 若R=1,S=1,即置位、复位信号同时为1

当激励信号由11变为00时,锁存器的输出既可以稳定在1状态,也可以稳定在0状态。 这时的状态是不稳定的,所以我们要禁止使用11这一组激励信号。

根据上面的描述,可以推断出RS锁存器的特性表,其中 Qn是指触发器当前逻辑状态(即触发前的状态), Qn+1是指触发后的状态。

从上表可以看出,只有在置位或复位信号为1时,RS锁存器才起作用的,都为0时不起作用

RS锁存器的工作波形图如下:

2 D锁存器

从D锁存器的电路结构图我们可以看出,该电路主要是由两个部分组成,第一个部分是由两个与非门组成的RS锁存器,第二个部分是由两个与非门组成的控制电路。C为控制信号,用来控制前两个与非门的激励输入。
下面我们来分析下D锁存器的工作原理,当控制信号C=0时,根据与非门的逻辑定律,无论D输入什么信号, RD和 SD信号同时为 1。 根据由与非门组成的 RS锁存器的逻辑定律, RD和 SD都同时
等于 1的话,锁存器的输出端 Q将维持原状态不变,即处于保持状态。

当控制端 C=1时,如果此时 D= 0, SD就等于1, RD就等于 0,根据 RS锁存器的逻辑规律,电路的结果就为 0状态;如果 D = 1,那么 RD就等于 1,SD也就等于 0,锁存器的结果就为 1状态,也就是说,此时锁存器的状态是由激励输入端 D来确定的,并且 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也将会锁存高电平。

3 锁存器的缺点

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

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

4 FPGA设计中使用锁存器的注意事项

一般出现下面两种情况时,组合逻辑代码在综合过程中会出现锁存器:

  • if语句中缺少else分支;
  • case语句中缺少default分支。

解决办法:

就是if必须带else分支,case必须带default分支。

注意:
只有不带时钟的always语句中if或者case语句不完整才会产生latch,带时钟的语句if或者case语句不完整描述不会产生latch。

5 在FPGA中使用锁存器

5.1 不带else的always语句(没有clk)

module latch(
input clk, // system clock 6 
input a, 
input b, 
output reg y 
); 

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

使用vivado中RTL ANALYSIS的Schematic来看综合后的电路结构,

从上图可以看出,这个寄存器没有clk输入信号,图上标识出latch的名字,可以看出这个电路就是latch。

5.2 else的always语句(没有clk)

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

module latch(
input clk, // system clock 6 
input a, 
input b, 
output reg y 
); 

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

使用vivado中RTL ANALYSIS的Schematic来看综合后的电路结构,

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

5.3 不带default的case语句

module latch(
input clk, // system clock 6 
input a, 
input b, 
output reg y 
); 

always @ (*) 
  begin 
    case ( a ) 
        0 : y = b ; 
    endcase
  end
endmodule

使用vivado中RTL ANALYSIS的Schematic来看综合后的电路结构,

从上图可以看出,这个寄存器没有clk输入信号,图上标识出latch的名字,可以看出综合出的这个电路就是latch。

5.4 带default的case语句

module latch(
input clk, // system clock 6 
input a, 
input b, 
output reg y 
); 

always @ (*) 
  begin 
    case ( a ) 
        0 : y = b ; 
        default : y = 0 ;
    endcase
  end
endmodule

使用vivado中RTL ANALYSIS的Schematic来看综合后的电路结构,

综合后产生的是一个mux选择电路,因此,加了case的default分支的电路就不会有latch电路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1828588.html

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

相关文章

【原理图PCB专题】案例:为什么要把Cadence原理图符号库设计好

Cadence 原理图符号库设计对于提高设计质量、效率和可维护性具有重要意义。一份好的原理图符合库能够帮助我们更好的达成设计目标: 提高设计效率:拥有一个完善的符号库可以让设计师直接调用所需的符号,避免重复绘制,从而节省时间。 确保设计准确性:统一的符号库可以保证符…

快速压缩前端项目

背景 作为前端开发工程师难免会遇到需要把项目压缩成压缩文件来传送的情况,这时候需要压缩软件进行压缩文件处理 问题 项目中的依赖包文件非常庞大,严重影响压缩速度,即使想先删除再压缩,删除文件也不会很快完成 解决 首先要安…

一键分析Bulk转录组数据

我们前面介绍了经典的转录组分析流程:Hisat2 Stringtie,可以帮助用户快速获得基因的表达量矩阵。 云上生信,未来已来 | 转录组标准分析流程重磅上线! RNA STAR 也是一款非常流行的转录组数据分析工具。它不仅可以将测序 Reads 比…

博通加速向Nvidia发起进攻 为何连iPhone 15都不能用“苹果智能”?

博通加速向Nvidia发起进攻 博通强调的一项优势是其 XPU 的能效。其功耗不到 600 瓦,是业内功耗最低的 AI 加速器之一。 Nvidia 的许多竞争对手都想抢占其市场主导地位。其中一个不断出现的名字是 Broadcom。仔细观察就会知道原因。其 XPU 功耗不到 600 瓦&#xff…

JavaScript-转换成布尔型

学习目标: 掌握转换成布尔型 学习内容: 显示转换隐式转换 显示转换: Boolean(内容) 记忆:、0、underfined、null、false、NaN转换成布尔值后都是false,其余则为true。 console.log(Boolean(p…

Mac M3 Pro 部署Trino-server-449

目录 1、下载安装包 2、解压并设置配置参数 3、启动并验证 4、使用cli客户端连接测试 1、下载安装包 官方:trino-server-449 CLI 网盘: server https://pan.baidu.com/s/16IH-H39iF8Fb-Vd14f7JPA?pwd3vjp 提取码: 3vjp cli https://pan.baidu.…

react-day1

1.react是什么呢? react是由Meta公司开发,是一个用于构建web和原生交互界面的库 2.react 项目修改文件保存后 ,不能实时更新,需要: 在和package.json文件同目录的地方,新建.env文件:里面加入…

食家巷助力“甘肃乡村振兴,百强主播·打call 甘味”活动

2024年,甘肃省“商务乡村振兴”促消费暨“百强主播打call 甘味”活动在天水市龙城广场盛大启动。 活动现场,来自甘肃省 14 个市州的农特产品展台琳琅满目,让人目不暇接。此次活动中,各企业带来了多款深受消费者喜爱的产品&a…

【MATLAB】(高数)

参考文章 函数极限 导数与偏导 极值和最值 局部范围的最值 局部范围内的最值,相当于函数的极值 离散数据的最值 多元函数的极值 fminunc [x, fval] fminunc(fun, x0)fun为代求极值的函数;x0为起始点,即从这个点开始寻找极值,…

华媒舍:明星祝福视频,为你送上最真挚的祝福!

引言:嗨,亲爱哒书友!在这样一个科谱详细介绍文中,我们将带你领略一份尤其的独家合辑——十部明星祝愿视频。这种视频汇聚了诸多明星为你送上的最真挚的祝福。让我们一起来探寻这种电影中蕴含的情绪和价值吧! 1.共享温暖…

​​Vitis HLS 学习笔记--添加 RTL 黑盒函数

目录 1. 简介 2. 用法详解 2.1 需要的文件 2.1.1 RTL 函数签名 2.1.2 黑盒 JSON 描述文件 2.1.3 RTL IP 文件 2.2 操作步骤 3. 总结 1. 简介 Vitis HLS 工具可以将现有的 Verilog RTL IP(即硬件描述语言编写的模块)集成到 C/C HLS 项目中。通过…

【AI实践】Dify调用本地和在线模型服务

背景 Ollama可以本地部署模型,如何集成私有数据、如何外部应用程序对接,因此需要有一个应用开发框架 Dify功能介绍 欢迎使用 Dify | 中文 | Dify 下文将把dify部署在PC上,windows环境; 安装部署 安装dify及docker jacobJacobs…

Android面试题 之 网络通信基础 面试题

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 序列化 判断标准 序列化后的码流大小性能跨语言 Serializable方式 码流偏大性能较低 XML方式 人机可读性好文件格式复杂、占带宽 JSON …

SpringBoot自定义Starter及原理分析

目录 1.前言2.环境3.准备Starter项目4.准备AutoConfigure项目4.1 准备类HelloProperties4.2 准备类HelloService4.3 准备类HelloServiceAutoConfiguration4.4 创建spring.factories文件并引用配置类HelloServiceAutoConfiguration4.5 安装到maven仓库 5.在其他项目中引入自定义…

Stable Diffusion3 开源!一文教你玩转 Stable Diffusion3

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

企业化运维(4)_tomcat

###1.配置tomcat### 可以将tomcat部署在server2主机,与nginx主服务器分开,便于进行交互存储。 下载安装jdk与tomcat,并开启服务,便可以在浏览器进行访问。 [rootserver3 ~]# rpm -ivh jdk-8u121-linux-x64.rpm [rootserver3 ~]#…

window安装miniconda

下载 https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 安装 双击安装 配置环境变量 添加:PYTHONUSERBASE你的安装路径 添加Path: cmd执行: python -m site将USER_SITE添加进Path 还需要将如下添加进环境变量 D:\Miniconda…

Python学习笔记13 -- API的说明及使用

一、API说明 1、API:Application Programming Interface -- 接口 2、Restful API:基于网页的API 3、JSON:JavaScript objection Notation 4、很多数据都可以找到公用API 二、安装requests模块 在终端输入: 可以保证使用当前…

会声会影色彩校正在哪里 会声会影色彩素材栏在哪 会声会影中文免费版下载

会声会影是一款功能强大的视频编辑软件,它可以帮助用户轻松地编辑和制作视频。在进行视频编辑时,色彩校正是一个重要的步骤,它可以调整视频的色调、亮度和对比度等参数,使视频更加生动和鲜明。在会声会影中,色彩校正功…

MySQL数据库初识

目录 一.数据库相关概述 1.数据库概念 数据(Data) 表 数据库(database) 数据库管理系统(DBMS) 数据库系统 2.数据库系统发展史 3.数据库分类 3.1.关系数据库 3.2.非关系型数据库 二.MySQL数据库…