【ShuQiHere】深入解析数字电路中的锁存器与触发器

深入解析数字电路中的锁存器与触发器 🤖🔌

在数字电路设计中,**锁存器(Latch)触发器(Flip-Flop)**是实现时序逻辑的基本元件。它们能够存储状态,是构建复杂数字系统的关键。本文将深入探讨 SR 锁存器的 NOR 和 NAND 实现、带门控的 SR 锁存器、时钟锁存器、D 触发器、SR 触发器和 JK 触发器等核心概念,帮助大家全面理解这些元件的工作原理和应用。🚀


一、SR 锁存器(SR Latch)🔒

**SR 锁存器(Set-Reset Latch)**是最基本的存储单元,能够存储一位二进制信息。

1.1 SR 锁存器的 NOR 门实现

SR 锁存器通常由两个交叉连接的 NOR 门(NOR Gate) 构成

输入端:

  • S(Set,置位):用于将输出 Q Q Q 设置为 1。
  • R(Reset,复位):用于将输出 Q Q Q 复位为 0。

输出端:

  • Q Q Q:主输出,表示当前存储的状态。
  • Q ′ Q' Q Q Q Q 的反相输出):始终与 Q Q Q 相反,即 Q ′ = Q ‾ Q' = \overline{Q} Q=Q

真值表:

SRQ(t)Q(t+1)状态
0000保持(存储0)
0011保持(存储1)
01X0复位
10X1置位
11X不允许非法状态

❗ **注意:**在 NOR 门实现的 SR 锁存器中,当 S = 1 S = 1 S=1 R = 1 R = 1 R=1 时,电路进入非法状态,需要在设计中避免。

工作原理:

  • 保持状态(Memory State):

    S = 0 S = 0 S=0 R = 0 R = 0 R=0 时,锁存器保持当前状态,即 Q ( t + 1 ) = Q ( t ) Q(t+1) = Q(t) Q(t+1)=Q(t)

  • 置位状态(Set State):

    S = 1 S = 1 S=1 R = 0 R = 0 R=0 时,输出被置为 Q = 1 Q = 1 Q=1 Q ′ = 0 Q' = 0 Q=0

  • 复位状态(Reset State):

    S = 0 S = 0 S=0 R = 1 R = 1 R=1 时,输出被复位为 Q = 0 Q = 0 Q=0 Q ′ = 1 Q' = 1 Q=1

1.2 SR 锁存器的 NAND 门实现

SR 锁存器也可以用 NAND 门(NAND Gate)
输入端:

  • S ‾ \overline{S} S(Set 的反相):低电平有效的置位输入。
  • R ‾ \overline{R} R(Reset 的反相):低电平有效的复位输入。

真值表:

S ‾ \overline{S} S R ‾ \overline{R} RQ(t)Q(t+1)状态
1100保持(存储0)
1111保持(存储1)
01X1置位
10X0复位
00X不允许非法状态

🌟 **提示:**在 NAND 门实现的 SR 锁存器中,输入信号是 低电平有效 的,与 NOR 门实现相反。

工作原理:

  • 保持状态(Memory State):

    S ‾ = 1 \overline{S} = 1 S=1 R ‾ = 1 \overline{R} = 1 R=1 时,锁存器保持当前状态。

  • 置位状态(Set State):

    S ‾ = 0 \overline{S} = 0 S=0 R ‾ = 1 \overline{R} = 1 R=1 时,输出被置为 Q = 1 Q = 1 Q=1

  • 复位状态(Reset State):

    S ‾ = 1 \overline{S} = 1 S=1 R ‾ = 0 \overline{R} = 0 R=0 时,输出被复位为 Q = 0 Q = 0 Q=0


二、带门控的 SR 锁存器(Gated SR Latch)🔑

为了解决 SR 锁存器在输入变化时可能出现的 毛刺(Glitch) 问题,引入了 使能信号(Enable,EN),形成了带门控的 SR 锁存器。

工作原理:

  • EN = 1(使能)

    • 锁存器根据输入 S S S R R R 进行置位或复位操作。
    • 与标准的 SR 锁存器行为一致。
  • EN = 0(禁用)

    • 锁存器忽略 S S S R R R 的输入。
    • 输出 Q Q Q Q ′ Q' Q 保持不变,实现记忆功能。

逻辑表达式:

当 EN = 1 时:

  • Q ( t + 1 ) = S ⋅ E N ‾ ⋅ Q ( t ) ‾ ‾ Q(t+1) = \overline{\overline{S \cdot EN} \cdot \overline{Q(t)}} Q(t+1)=SENQ(t)

当 EN = 0 时:

  • Q ( t + 1 ) = Q ( t ) Q(t+1) = Q(t) Q(t+1)=Q(t)

🛡️ **优势:**通过使能信号,电路只在需要时更新状态,增强了稳定性,避免了不必要的状态变化。


三、时钟锁存器与触发器⏰

3.1 时钟锁存器(Clocked Latch)

在锁存器的基础上加入 时钟信号(Clock,C),形成时钟锁存器,使状态变化受时钟控制。

工作原理:

  • C = 1(时钟高电平)

    • 锁存器响应输入 S S S R R R,进行状态更新。
  • C = 0(时钟低电平)

    • 锁存器忽略输入,保持当前状态。

🔄 **说明:**时钟锁存器通常是 电平触发(Level-Triggered) 的,在时钟高电平期间允许状态变化。

逻辑表达式:

  • C = 1 C = 1 C=1 时:

    • Q ( t + 1 ) = S + R ‾ ⋅ Q ( t ) Q(t+1) = S + \overline{R} \cdot Q(t) Q(t+1)=S+RQ(t)

3.2 触发器(Flip-Flop)与边沿触发

触发器 是在时钟信号的 边沿(Edge) 进行状态变化的存储元件。

  • 边沿触发(Edge-Triggered)

    • 状态变化仅在时钟信号的上升沿或下降沿发生。
  • 电平触发(Level-Triggered)

    • 状态变化在时钟信号的高或低电平持续期间发生。

区别:

  • 锁存器(Latch):通常是电平触发的。
  • 触发器(Flip-Flop):通常是边沿触发的。

⏰ **提示:**触发器是边沿触发的,确保了电路的同步性,避免了毛刺问题。


四、D 触发器(D Flip-Flop)💾

D 触发器(Data Flip-Flop) 是最常用的触发器之一,具有简单可靠的特性。

特点:

  • 单输入 D:只有一个数据输入 D D D,简化了控制逻辑。
  • 边沿触发:在时钟信号的有效边沿, D D D 的值被捕获并存储到 Q Q Q
  • 无非法状态:避免了 SR 触发器的非法状态问题。

真值表:

Clock EdgeDQ(t+1)状态
00存储 0
11存储 1
-XQ(t)保持(无变化)

工作原理:

  • 时钟边沿到来时

    • Q ( t + 1 ) = D Q(t+1) = D Q(t+1)=D:输出 Q Q Q 立即更新为输入 D D D 的值。
  • 时钟边沿之外

    • Q ( t + 1 ) = Q ( t ) Q(t+1) = Q(t) Q(t+1)=Q(t):输出 Q Q Q 保持之前的状态。

逻辑表达式:

  • Q ( t + 1 ) = D Q(t+1) = D Q(t+1)=D (在时钟边沿时)

💾 **应用:**D 触发器被广泛用于寄存器和时序电路中,作为基本的 一位存储器(1-bit Memory)

示例代码:

module D_FF (input wire D,input wire Clock,output reg Q
);always @(posedge Clock) beginQ <= D;end
endmodule

解释:

  • @(posedge Clock):在时钟的上升沿触发。
  • Q <= D;:将输入 D D D 的值赋给输出 Q Q Q

五、JK 触发器(JK Flip-Flop)🔄

JK 触发器 是 SR 触发器的改进版,解决了非法状态的问题,增加了 状态翻转(Toggle) 功能。

输入端:

  • J:对应于置位功能。
  • K:对应于复位功能。

真值表:

JKQ(t)Q(t+1)状态
0000保持
0011保持
01X0复位
10X1置位
1101翻转
1110翻转

工作原理:

  • 保持状态(Memory State):

    • J = 0 J = 0 J=0 K = 0 K = 0 K=0 时, Q ( t + 1 ) = Q ( t ) Q(t+1) = Q(t) Q(t+1)=Q(t)
  • 置位状态(Set State):

    • J = 1 J = 1 J=1 K = 0 K = 0 K=0 时, Q ( t + 1 ) = 1 Q(t+1) = 1 Q(t+1)=1
  • 复位状态(Reset State):

    • J = 0 J = 0 J=0 K = 1 K = 1 K=1 时, Q ( t + 1 ) = 0 Q(t+1) = 0 Q(t+1)=0
  • 状态翻转(Toggle State):

    • J = 1 J = 1 J=1 K = 1 K = 1 K=1 时, Q ( t + 1 ) = Q ( t ) ‾ Q(t+1) = \overline{Q(t)} Q(t+1)=Q(t)

🔁 **优势:**在 J = 1 J = 1 J=1 K = 1 K = 1 K=1 时,JK 触发器不会进入非法状态,而是执行状态翻转,适用于计数器等需要频繁切换状态的电路。

逻辑表达式:

  • Q ( t + 1 ) = J ⋅ Q ( t ) ‾ + K ‾ ⋅ Q ( t ) Q(t+1) = J \cdot \overline{Q(t)} + \overline{K} \cdot Q(t) Q(t+1)=JQ(t)+KQ(t)

示例代码:

module JK_FF (input wire J,input wire K,input wire Clock,output reg Q
);always @(posedge Clock) begincase ({J, K})2'b00: Q <= Q;            // 保持2'b01: Q <= 0;            // 复位2'b10: Q <= 1;            // 置位2'b11: Q <= ~Q;           // 翻转endcaseend
endmodule

解释:

  • {J, K}:将 J J J K K K 组合成一个 2 位的信号。
  • ~Q:表示对 Q Q Q 取反,实现状态翻转。

六、SR 触发器(SR Flip-Flop)🔄

SR 触发器 是 SR 锁存器的边沿触发版本,通过时钟信号控制状态变化。

特点:

  • 边沿触发:状态变化仅在时钟信号的边沿发生。
  • 非法状态存在 S = 1 S = 1 S=1 R = 1 R = 1 R=1 时依然是非法状态,需要避免。

真值表:

Clock EdgeSRQ(t)Q(t+1)状态
00XQ(t)保持
01X0复位
10X1置位
11X不允许非法状态
-XXXQ(t)保持

工作原理:

  • 保持状态(Memory State):

    • S = 0 S = 0 S=0 R = 0 R = 0 R=0 时, Q ( t + 1 ) = Q ( t ) Q(t+1) = Q(t) Q(t+1)=Q(t)
  • 置位状态(Set State):

    • S = 1 S = 1 S=1 R = 0 R = 0 R=0 时, Q ( t + 1 ) = 1 Q(t+1) = 1 Q(t+1)=1
  • 复位状态(Reset State):

    • S = 0 S = 0 S=0 R = 1 R = 1 R=1 时, Q ( t + 1 ) = 0 Q(t+1) = 0 Q(t+1)=0
  • 非法状态(Invalid State):

    • S = 1 S = 1 S=1 R = 1 R = 1 R=1 时,状态不确定,需要避免。

⚠️ **注意:**由于存在非法状态,SR 触发器在实际应用中较少使用,更倾向于使用 D 触发器或 JK 触发器。


七、总结📚

通过本文的学习,我们了解了数字电路中锁存器和触发器的基本类型和工作原理:

  • SR 锁存器:最基本的存储元件,但存在非法状态。
  • 带门控的 SR 锁存器:增加了使能信号,增强了控制能力。
  • 时钟锁存器:引入时钟信号,实现电平触发。
  • D 触发器:简化为单输入,无非法状态,常用于数据存储。
  • JK 触发器:解决了 SR 触发器的非法状态,增加了状态翻转功能。
  • SR 触发器:边沿触发的 SR 锁存器,存在非法状态。

💡 理解和掌握这些基本元件是设计复杂数字系统的基础。希望这篇文章能帮助你加深对数字电路的认识,在实践中灵活运用这些知识。

如果你对本文内容有任何疑问或建议,欢迎在评论区留言讨论!一起探索数字电路的奥秘吧!🤗🔍

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

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

相关文章

Dockerfile 中关于 RUN 的奇怪写法 -- 以 | 开头

在一个大型的官方镜像中 &#xff0c;我通过 docker history --no-trunc <image_id> 看到&#xff0c;该镜像某一步的构建过程是&#xff1a; RUN |3 CUDA_VERSION12.4.1.003 CUDA_DRIVER_VERSION550.54.15 JETPACK_HOST_MOUNTS /bin/sh -c if [ -n "${JETPACK_HOS…

如何自定义一个自己的 Spring Boot Starter 组件(从入门到实践)

文章目录 一、什么是 Spring Boot Starter&#xff1f;二、为什么要自定义 Starter&#xff1f;三、自定义 Starter 的基本步骤1. 创建 Maven 项目2. 配置 pom.xml3. 创建自动配置类4. 创建业务逻辑类5. 创建 spring.factories 四、使用自定义 Starter五、总结推荐阅读文章 在使…

Android广播限制Background execution not allowed: receiving Intent { act=

“Background execution not allowed: receiving Intent”这个错误信息通常出现在Android应用开发中&#xff0c;特别是在处理后台任务或接收广播&#xff08;Broadcast&#xff09;时。这个错误表明应用试图在后台执行某些操作&#xff0c;但Android系统出于电池优化和用户体验…

【二刷hot100】day 4

终于有时间刷刷力扣&#xff0c;求实习中。。。。 目录 1.最大子数组和 2.合并区间 3.轮转数组 4.除自身以外数组的乘积 1.最大子数组和 class Solution {public int maxSubArray(int[] nums) {//就是说可以转换为计算左边的最大值&#xff0c;加上中间的值&#xff0c…

1.6,unity动画Animator屏蔽某个部位,动画组合

动画组合 一边跑一边攻击 using System.Collections; using System.Collections.Generic; using UnityEngine;public class One : MonoBehaviour {private Animator anim;// Start is called before the first frame updatevoid Start(){anim GetComponent<Animator>();…

Scala中的reduce

作用&#xff1a;reduce是一种集合操作&#xff0c;用于对集合中的元素进行聚合操作&#xff0c;返回一个单一的结果。它通过指定的二元操作&#xff08;即取两个元素进行操作&#xff09;对集合中所有的元素进行递归处理&#xff0c;并最终将其合并为一个值。 语法&#xff1…

PPT自动化:Python如何修改PPT文字和样式!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 使用 Python 修改 PPT 文本内容📝 遍历所有幻灯片和文本框📝 设置和修改文本样式📝 复制和保留文本样式⚓️ 相关链接 ⚓️📖 介绍 📖 在日常工作中,PPT 的文字内容和样式修改似乎是一项永无止境的…

每日算法一练:剑指offer——数组篇(3)

1.报数 实现一个十进制数字报数程序&#xff0c;请按照数字从小到大的顺序返回一个整数数列&#xff0c;该数列从数字 1 开始&#xff0c;到最大的正整数 cnt 位数字结束。 示例 1: 输入&#xff1a;cnt 2 输出&#xff1a;[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,1…

平衡二叉树最全代码

#include<stdio.h> #include<stdlib.h>typedef struct Node {int val;int height;struct Node *left;struct Node *right; }Node;//创建新结点 Node* newNode(int val) {Node *node (Node*)malloc(sizeof(Node));node->val val;node->height 1;node->l…

渗透测试实战—教育攻防演练中突破网络隔离

免责声明&#xff1a;文章来源于真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本…

基准线markLine的值超过坐标轴范围导致markline不显示

解决问题&#xff1a;动态设置yAxis的max值&#xff08;解决基准线不在y轴范围&#xff09; yAxis: [{name: 单位&#xff1a;千,...yAxis,nameTextStyle:{...yAxis.nameTextStyle,padding: [0,26,0,24]},paddingLeft:24,paddingRight:26},{name: 单位&#xff1a;百分比,...yA…

基金好书入门阅读笔记《基金作战笔记:从投基新手到配置高手的进阶之路》笔记3

公募基金的分类方式按投资范围分 80%以上资产投资于股票的&#xff0c;叫股票基金&#xff1b;80%以上资产投资于债券的&#xff0c;叫债券基金&#xff1b;80% 以上资产投资于其他基金的&#xff0c;叫FOF; 80%以上资产投资于货币市场的&#xff0c;叫货币基金&#xff1b;以上…

【三】企业级JavaScript开发之手册与规范

规范 ECMA-262 规范 包含了大部分深入的、详细的、规范化的关于 JavaScript 的信息。这份规范明确地定义了这门语言。 但正因其规范化&#xff0c;对于新手来说难以理解。所以&#xff0c;如果你需要关于这门语言细节最权威的信息来源&#xff0c;这份规范就很适合你&#xf…

建库建表练习

目录 根据以下需求完成图书管理系统数据库及表设计&#xff0c;并建库建表&#xff0c;并截图创建表的详细信息(desc 表名),不用添加数据 1. 用户表: 字段: 姓名&#xff0c;用户名&#xff0c;密码&#xff0c;电话&#xff0c;住址&#xff0c;专业及年级 2. 图书表: 字段: 图…

大数据新视界 -- 大数据大厂之 AI 驱动的大数据分析:智能决策的新引擎

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

vueuse的常用方法记录

useStorage(key, value): 响应式的LocalStorage// 初始化 useLocalStorage&#xff0c;传入 key 和默认值 const storedValue useStorage(my-key, default-value);// 监听存储值的变化 watch(storedValue, (newValue, oldValue) > {console.log(存储值从, oldValue, 变更为…

Flux.all 使用说明书

all public final Mono<Boolean> all(Predicate<? super T> predicate)Emit a single boolean true if all values of this sequence match the Predicate. 如果该序列中的所有值都匹配给定的谓词&#xff08;Predicate&#xff09;&#xff0c;则发出一个布尔值…

Docker容器单机网络架构全攻略:从IP地址到路由的全面解析

文章目录 Docker容器单机网络架构全攻略:从IP地址到路由的全面解析一 docker网络学习基础1.1 拉取 alpine 镜像1.2 运行容器1.3 进入容器终端1.4 连接到正在运行中的容器1.5 查看容器的ip地址1.6 查看容器的路由Docker容器单机网络架构全攻略:从IP地址到路由的全面解析 一 d…

大模型之三十二-语音合成TTS(coqui) 之二 fine-tune

在 大模型之三十-语音合成TTS(coqui)[shichaog CSDN]中提到了xttsv2的fine-tune。 数据情况&#xff1a; 我是从bilibili up主小Lin说提取了一些视频&#xff0c;然后进行了重新的fine-tune。 训练结果 如下图所示&#xff0c;上面波形幅度较大的是xttsv2原始模型的结果&am…

MacPro M3无法运行minikube 和 docker

本想在mac上安装minikube学习一下的&#xff0c;通过brew安装后发现报下面的问题 1、运行minikube的提示 MacBook-Pro ~ % minikube start &#x1f604; Darwin 14.4.1 (arm64) 上的 minikube v1.34.0 &#x1f44e; 无法选择默认驱动程序。以下是按优先顺序考…