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

这篇具有很好参考价值的文章主要介绍了数字电路基础---锁存器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

锁存器

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 锁存器的电路图,如下图所示。

锁存器,Verilog数字电路与逻辑设计,fpga开发,嵌入式硬件,硬件工程,dsp开发,算法

        从 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 是指触发后的状态。

锁存器,Verilog数字电路与逻辑设计,fpga开发,嵌入式硬件,硬件工程,dsp开发,算法

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

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

锁存器,Verilog数字电路与逻辑设计,fpga开发,嵌入式硬件,硬件工程,dsp开发,算法

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

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

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

锁存器,Verilog数字电路与逻辑设计,fpga开发,嵌入式硬件,硬件工程,dsp开发,算法

       由上图示意图我们可以看到,锁存器没有时钟信号,只有数据输入和使能以及输出 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 视图。

锁存器,Verilog数字电路与逻辑设计,fpga开发,嵌入式硬件,硬件工程,dsp开发,算法

从 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 视图再看一下综合的电路结构。

锁存器,Verilog数字电路与逻辑设计,fpga开发,嵌入式硬件,硬件工程,dsp开发,算法

上图所示的电路结构是一个 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

锁存器,Verilog数字电路与逻辑设计,fpga开发,嵌入式硬件,硬件工程,dsp开发,算法

从 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 来看下综合的电路结构。

锁存器,Verilog数字电路与逻辑设计,fpga开发,嵌入式硬件,硬件工程,dsp开发,算法

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

4、本章总结

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

       大家需要注意下,只有不带时钟的 always 语句的 if 或者 case 语句不完整才会产生 latch,带时钟的语句 if 或者 case 语句不完整描述不会产生 latch。 文章来源地址https://www.toymoban.com/news/detail-689398.html

到了这里,关于数字电路基础---锁存器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 「FPGA」基本时序电路元件——锁存器和触发器

    FPGA是一种数字电路实现的方式,它是基于小型查找表(16X1)设计的,它的兄弟CPLD是基于高密度复杂组合逻辑设计的。FPGA的一个优点是触发器资源丰富,适合实现复杂的时序设计。本文将从 门级电路 的角度来介绍时序电路的基本结构,锁存器(Latch)和触发器(flip-flop)。

    2024年02月11日
    浏览(52)
  • verilog学习笔记6——锁存器和触发器

    2023.8.15 信号高电平有效 R :复位端 S :置位端 表达式: Q = S + R\\\' Qn 约束条件:SR=0,也就是SR不能同时为1 信号低电平有效 R :复位端 S :置位端 表达式: Q = S\\\' + R Qn 约束条件:S+R=1,也就是SR不能同时为0 E = 0 :锁存器保持不变,锁住 E = 1 :相当于正常得SR锁存器 把S取反接到

    2024年02月12日
    浏览(46)
  • 二、8【FPGA】Verilog中锁存器(Latch)原理、危害及避免

    学习说明此文档为本人的学习笔记,对一下资料进行总结,并添加了自己的理解。         如果拿到了数字电路技术基础的书,翻开书本的目录你会发现,关于锁存器的章节与内容非常少,也就是在触发器前面有一小节进行了简单说明。但是真的就这么简单么? 答案是否

    2024年01月16日
    浏览(47)
  • 数字电子技术之锁存器和触发器

    一、组合电路设计的一般步骤:         逻辑抽象=列出真值表=逻辑表达式=逻辑电路图 Notes:         a、可以先对逻辑表达式进行化简得到最简与或式、最简或与式、与非、或非,再对电路进行建模,从而提高电路的运行效率和可读性;         b、最基本的逻辑化简

    2024年02月06日
    浏览(51)
  • 硬件基础——锁存器

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

    2024年02月06日
    浏览(50)
  • 数字世界的积木-从MOS管搭反相器,与非门,锁存器,触发器

    NMOS管的结构示意图和表示符号如图所示,在P型衬底上制作两个掺杂N型区,形成MOS管的源极S 和漏极D ,中间电极称为栅极G,栅极和衬底之间通过SiO2 绝缘层隔开。 下图为NMOS输出特性曲线,采用共源极接法,漏极特性曲线可分为三个工作区,截止区,可变电阻区,饱和区 当

    2024年02月01日
    浏览(43)
  • verilog 学习笔记 —— 时序逻辑 Sequential Logics (Latches and Flip-Flops 锁存器和触发器)

    1. D flip-flop D触发器 2. D flip-flop  D触发器 3. DFF with reset  带复位的D触发器  4. 带复位值的D触发器 5. DFF with asynchronous reset 带异步复位功能的 D触发器 6. DFF with byte enable   带位启动的触发器 7. D Latch  D锁存器 8. DFF  9. DFF   10. DFF+gate   11. Mux and DFF   12. DFFs and gates   13

    2024年02月04日
    浏览(60)
  • 【FPGA】Verilog:锁存器 Latch | RS Flip-Flop 与 D Flip-Flop 的实现

    💭 写在前面: 本章将理解 RS/D 锁存器的概念,了解 RS/D/JK 触发器的概念,使用 Verilog 实现各种锁存器 (Latch) 和翻转器 (Flip-Flop),并通过 FPGA 验证用 Verilog 的实现。 📜 本章目录: Ⅰ. 前置知识回顾 0x00 锁存器(Latch)

    2024年02月05日
    浏览(46)
  • SR锁存器与D锁存器设计与建模

    ⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 🔥文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或者公众号【AISha

    2024年02月02日
    浏览(41)
  • FPGA之 寄存器、触发器、锁存器

    每个slice有8个存储元素,每个存储元素如下图所示:  其中四个为DFF/LATCH,可以配置为边沿触发D型触发器或电平敏感锁存器输入上图。D输入可以通过AFFMUX, BFFMUX, CFFMUX或DFFMUX的LUT输出直接驱动,也可以通过AX, BX, CX或DX输入绕过函数发生器的 BYPASS slice输入直接驱动。当配置为锁存

    2024年01月18日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包