数字电路基础---触发器

news2024/11/25 2:45:17

数字电路基础---触发器

       触发器(Flip-Flop)也是数字电路中的一种具有记忆功能的逻辑元件。触发器对脉冲边沿敏感的存储单元电路,它只在触发脉冲的上升沿(或下降沿)瞬间改变其状态。在数字电路中可以记录二进制数字信号“0”和“1”。

1、简介

        根据逻辑功能,触发器一般包括 RS 触发器、JK 触发器、D 触发器、T 触发器和 T’触发器。

        实际使用中,我们一般使用 D 触发器,下面我们就以 D 触发器为例,先讲解 D 触发器是如何构成的。在给出 D 触发器的电路图之前,我们先来看下 D 锁存器的逻辑符号,如下图所示。

       D 锁存器的电路结构还是比较复杂的,为了简化起见,我们一般使用右面的图示作为 D 锁存器的逻辑符号。

下面我们来看下 D 触发器的构成。

       从 D 触发器的电路图中我们可以看出,该电路是由两个相同的 D 锁存器以及两个非门连接而成的,图中的 F1 和 F2 就是 D 锁存器的电路符号,F1 为主锁存器,F2 为从锁存器,由于主锁存器的输出信号 Q1 就是从锁存器的输入信号,因而造成了两个锁存器的主从关系,这两个锁存器的控制信号都由外部时钟信号 CLK 提供。

1.1、D 触发器是如何工作的

       下面我们来分析 D 触发器是如何工作的。当 CLK=0 时,CLK 经过非门后直接作为 F1 的控制信号,那么此时 F1 的控制信号为 1,F1 被选通,处于工作状态,如果现在输入信号 D 为 1 的话,它经过 F1,F1 的输出 Q1 将为 1,这里的 Q1,不仅是 F1 的输出信号,也同时是 F2 的输入信号,不过现在 F2 的控制信号为 0,F2 被锁存了,处于保持状态,输入信号 D 没有办法直接改变输出 Q 的状态,这是前半拍的工作情况,也就是说,输入信号先存入主锁存器中,而不直接影响输出 Q 的状态。下面我们再来看后半拍,外部的控制信号 CLK 由 0 变为 1 了,这个 1,经过非门后直接作为 F1 的控制信号,那么此时 F1 的控制信号为 0,主锁存器 F1 就被封锁了,它的输出 Q1 将保持在当前的状态,即使现在输入信号 D 再发生改变,Q1 的值也不再受影响了。而 F2 的控制信号 CLK 此时为 1,F2 处于工作状态,Q1 将会作为 F2 这个从锁存器的输入信号,直接影响到输出信号 Q 的状态。Q1 为 1,那么根据 D 锁存器的逻辑规律,输出的 Q 将为 1,Q 非将为 0。这就是后半拍的工作情况,在后半拍里我们才能实现整个电路状态的改变,因此从上面的分析中我们就可以看出,在 CLK 信号由 0 变为 1 这样的一个变化周期内,触发器的输出状态只可能改变一次。

       通过 D 锁存器和 D 触发器的学习,可能有些同学已经发现了,D 锁存器与 D 触发器的逻辑功能其实是相同的,只不过它们的触发方式有所不同。接下来我们通过将 D 触发器的波形图与前面 D 锁存器的波形图进行比较,来看一看,它们的触发方式不同在哪里。

       大家先看 D 触发器的波形图,D 触发器是在控制信号 CLK 为 0 时,才会接收输入信号 D 的值,并将这个值锁存起来,当控制信号 CLK 变为 1 时,输出信号 Q 才会被改变。那么 D 触发器,其实就是在 CLK 这个时钟信号由 0 变为 1 的这个边沿进行触发的,通常我们就将这种触发方式称为边沿触发,通过这种边沿触发方式的 D 触发器我们也将它称为边沿 D 触发器。

       D 锁存器的触发方式是电平触发,和我们刚刚讲的边沿触发是有所不同的。这种不同是由于锁存器和触发器的电路结构不同造成的。这里需要注意的是,由于 D 锁存器的功能和 D 触发器的功能是一 样的,所以在编写代码时很容易把 D 锁存器当成 D 触发器来使用,这种情况我们是要避免的,锁存器对电路的危害我们在锁存器章节已有过描述。

       D 触发器的基础知识已经讲完了,我们前面讲的所有内容其实都是为边沿触发器做铺垫。在组合电路中我们知道,与或非门是组合电路的核心知识,没有搞清楚与或非,就看不懂组合逻辑电路,在时序电路中,边沿触发器就是时序电路的核心知识,如果不懂边沿触发器,那么也就看不懂时序电路,后续讲解的寄存器和计数器都是用这些边沿触发器组合而成的。

2、实验任务

使用 Verilog 语言设计一个触发器电路。(只要能用触发器的地方, 就不用锁存器。)

3、程序设计

触发器电路一般需要有时钟,复位信号,输入和输出,由此我们写出如下代码。

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/06/19 10:43:55
// Design Name: 
// Module Name: flip_flop
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
//实验任务
//使用 Verilog 语言设计一个触发器电路。(只要能用触发器的地方, 就不用锁存器。)

//触发器电路一般需要有时钟,复位信号,输入和输出.
module flip_flop(
    input         clk,   // system clock 50Mhz on board
    input         rst_n, // system rst, low active 
    input         a, 
    output reg    y     // output signal
    );

//******************************************************
//**       main code
//******************************************************
always @ (posedge clk or negedge rst_n) begin
    if (rst_n == 1'b0)
        y <= 1'b0 ;
    else
        y <= a ;
end

endmodule

我们使用 Vivado 的 RTL ANALYSIS 中的 Schematic(Quartus II 综合后也可以看到电路结构)来看下综合的电路结构。

从上图可以看出,这个触发器有 clk 输入信号,图上标识出 reg 的名字,可以看出这个电路就是一个触发器。

下面我们编写一个 testbech 测试电路,通过仿真来看下触发器的波形。

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/06/19 10:56:16
// Design Name: 
// Module Name: tb_flip_flop
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tb_flip_flop();

reg        sys_clk;
reg        sys_rst_n;

reg        a;
wire       y;

initial begin
    sys_clk = 1'b0;
    sys_rst_n = 1'b0;
    // 初始化 a 为 0
    a = 1'b0;
    
    #200
    sys_rst_n = 1'b1;
    
    #100
    // 让 a 为 1
    a = 1'b1;
    #60
    // 让 a 为 0
    a = 1'b0;
end

always #10 sys_clk = ~sys_clk;

flip_flop u_flip_flop(
    .clk         (sys_clk     ),
    .rst_n       (sys_rst_n   ),
    .a           (a           ),
    .y           (y           )
    );

endmodule

4、仿真验证

       测试程序在 Modelsim 或者其他仿真工具(Xilinx Vivado 软件也有仿真功能)运行后的波形如下显示,可以看出,当复位撤销(复位信号低有效)之后,当 a 1 之后,在下一个时钟上升沿之后,y 就输出为 1,当 a 0 之后,下一个时钟上升沿之后,y 就输出为 0,可以看出寄触发器的采样都是在时钟上升沿进行的,其他时候触发器是保持之前采样的信号。

 

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

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

相关文章

crfclust.bdb过大

有套11204集群环境&#xff0c;现场反馈/u01使用率100%&#xff0c;数据库无法使用了&#xff0c;本以为是aud文件太多导致的&#xff0c;查看后发现是crfclust.bdb多大了&#xff0c;有100多G了 [roothydb1 hydb1]#du -sh crfclust.bdb 101G crfclust.bdb [roothydb1 hydb…

31个最佳 JavaScript 片段

这里有 20 个有用的 JavaScript 片段&#xff0c;可以在您处理项目时为您提供帮助&#xff1a; 1.获取当前日期和时间&#xff1a; const now new Date(); 2. 检查变量是否为数组&#xff1a; Array.isArray(variable); 3.合并两个数组&#xff1a; const newArray array1.co…

学习svg 基本使用

一.实例展示 1.鼠标移动 <svg width"34px" height"34px" viewBox"0 0 34 34" version"1.1" xmlns"http://www.w3.org/2000/svg" dcindex"189"><g id"画板" stroke"none" stroke-wi…

机器学习-学习总结

1.课程整体目录&#xff1a; 2.课程地址 飞桨AI Studio - 人工智能学习与实训社区 2.1 回归 2.1.1线性回归和逻辑回归的联系和区别 【ML】线性回归和逻辑回归的联系和区别_逻辑回归和线性回归的区别_机器不学习我学习的博客-CSDN博客 2.1.2 线性回归和逻辑回归重要公式推导…

自然语言处理: 第三章NPLM(Neural Probabilistic Language Mode)

理论基础 NPLM的全称是"Neural Probabilistic Language Model"&#xff0c;即神经概率语言模型。这是一种基于神经网络的语言模型&#xff0c;用于生成自然语言文本。最早是由Bengio 在2003年的A Neural Probabilistic Language Model一文中提出来的&#xff0c; NP…

卖家必读,深入了解亚马逊,速卖通,temu测评补单方式的各种利弊

大部分人对补单的认识还停留在刷好评、信誉上&#xff0c;事实上&#xff0c;信誉等级和好评仅是补单的目标之一&#xff0c;不是目标的全部。 对于一个真正的老手来说&#xff0c;补单真正的目的是提升自己宝贝的权重和搜索排名。因为信誉等级和好评相对来说比较简单。 我们试…

从零开始 Spring Boot 43:DI 注解

从零开始 Spring Boot 43&#xff1a;DI 注解 图源&#xff1a;简书 (jianshu.com) Spring 通过注解实现 DI&#xff08;依赖注入&#xff09;&#xff0c;本文详细讨论这些注解。 Autowired Autowired是 Spring 定义的注解&#xff0c;属于包org.springframework.beans.fac…

【无标题】AI+电力、大模型主题人工智能师资培训班重磅招募中

大语言模型热度空前&#xff0c;诸如文心一言、ChatGPT 等已经能够与人对话互动、回答问题、协助创作&#xff0c;逐渐应用于人们的工作和生活&#xff0c;也引发了社会热议。人工智能赋能新型电力系统下新能源发电、变电、调度、配网、安监、营销、基建以及企业经营管理等领域…

强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧&#xff08;调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍&#xff1a;【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧…

MySQL数据库的高级操作

数据表高级操作 一、克隆表&#xff0c;将数据表的数据记录生成到新的表中方法一方法二 二、清空表&#xff0c;删除表内的所有数据方法一方法二 三、创建临时表四、创建外键约束&#xff0c;保证数据的完整性和一致性。1、外键的定义2、主键表和外键表的理解3、MySQL中6种常见…

盘点一个Python自动化办公案例分享

背景&#xff1a;某公司需要对某一款产品的销售情况进行跟踪和分析&#xff0c;分析需求包括必要的统计图表生成&#xff0c;数据分析&#xff0c;生成报告等操作。 解决方案&#xff1a;利用 Python 编写自动化程序&#xff0c;实现对该产品的销售数据自动抓取&#xff0c;数据…

【python+Coppeliasim】仓储机器人

一、仓储机器人介绍 仓储机器人&#xff08;也称为自动导航AGV&#xff0c;Automated Guided Vehicle&#xff09;是一种智能机器人系统&#xff0c;专门设计用于在仓库、物流中心和制造业等环境中执行货物搬运和物流任务。它们被广泛应用于自动化仓储和物流管理系统中&#xf…

详解HTTP协议和HTTPS协议

目录 一.HTTP协议 1.什么是HTTP 2.HTTP发展历史 3.HTTP请求和响应 4. 抓包的方式和工具Fiddler 1.开发者工具 2.Fiddler 二.请求和响应 1.请求和响应报文 2.URL结构 3.常见的方法 1.GET方法 2.POST方法 3.其他方法 三.请求报头(header) 1.Host 2.Content-Length 3.Co…

Objective-C 混用UITabBar与UINavigation

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 混用UITabBar与UINavigation做app&#xff0c;tab和nav&#xff0c;有时候显示有时候…

有关浪涌保护器参数科普

浪涌保护器&#xff08;SPD&#xff09;或简称电涌保护器是一种用于确保防止瞬态浪涌的设备。它用于保护家庭和商业应用免受电压瞬变的影响。它与必须保护的负载并联连接。 什么是瞬态浪涌&#xff1f; 瞬态浪涌是持续几微秒的功率&#xff08;电压和电流&#xff09;的突然增…

CleanMyMac X4.13.6电脑清理垃圾最干净的软件

CleanMyMac是一款Mac清理工具&#xff0c;MacOSX系统下知名系统清理软件&#xff0c;它可以流畅地与系统性能相结合&#xff0c;只需简单的步骤就可以节省硬盘空间&#xff0c;提高电脑的运行速度&#xff0c;时刻保持电脑的清洁和健康&#xff0c;监视和优化Mac的性能。 现在…

高可用数据库集群mariadb(mysql)

一、概述 是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件 二、端口号 22 三、高可用MHA简述 目前在mysql高可用方面是一个成熟的方案&#xff0c;是一套优秀的高可用环境下故障切…

在用户界面线程上等待的危险性

我们做这么一个假设哈。 如果有一个线程&#xff0c;它拥有一个窗口&#xff0c;则在这个线程的整个运行过程中&#xff0c;我们都不应该调用 Sleep 函数。为什么&#xff1f; 因为 Sleep 调用会导致线程在睡眠等待期停止处理窗口消息。即使对于持续时间较短的睡眠也是如此&a…

【正点原子STM32连载】 第三十三章 DAC实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第三…

亚马逊云服务器EC2开通Windows系统实例和远程RDP连接远程桌面

在这篇文章中&#xff0c;我们准备详细的亲测记录开通亚马逊云服务器EC2开通Windows系统。这里需要提醒的是&#xff0c;如果我们是初次免费体验亚马逊云服务器账户的话&#xff0c;是有支持单个云服务器750小时免费&#xff0c;如果我们超过部分是需要支付的&#xff0c;所以如…