【FPGA】Verilog:锁存器 Latch | RS Flip-Flop 与 D Flip-Flop 的实现

news2024/9/22 8:32:43

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

📜 本章目录:

Ⅰ. 前置知识回顾

0x00 锁存器(Latch)

0x01 RS 触发器(RS Flip-Flop)

0x02 D 触发器(D Flip-Flop)

0x03 JK Flip-Flop(JK 触发器)

0x04 设置时间和保持时间

Ⅱ. 练习

0x00 RS Flip-Flop

0x01 D Flip-Flop


Ⅰ. 前置知识回顾

0x00 锁存器(Latch)

  • 当输入信号被输入到异步时序逻辑电路中时,状态立即发生变化。
  • 存在可以控制输入时机的控制信号,这个信号存在于称为 门锁存器(Gate latch)的元件中。
  • 输入信号通常被用作时钟信号,当时钟脉冲为 H(1)  时,输入信号被反映。与触发器边沿动作的方式不同。

0x01 RS 触发器(RS Flip-Flop)

  • RS触发器是由两个输入 R(复位)和 S(设置)以及两个输出Q和~Q组成的触发器。
  • 要进行设置(状态为'1'),需要输入 SR =10;要将状态设置为 '0',需要将 SR 设置为 01。
  • 不允许同时输入 S=1R=1
  • 输入只在时钟脉冲的边沿期间对输出产生影响。

0x02 D 触发器(D Flip-Flop)

  • 通过将 RS 触发器的输入 R 和 S 绑定为互补值,可以构建一个只有一个输入的 D 触发器。
  • 要设置为 '1',只需在输入上放置 '1';要设置为 '0',只需在输入上放置 '0'。

0x03 JK Flip-Flop(JK 触发器)

  • JK 触发器是一种在 RS 触发器中不被允许的输入 RS=11 被允许的触发器。
  • 当两个输入都处于高电平状态时,JK 触发器的输出会反转为先前的状态。

0x04 设置时间和保持时间

设置时间:设置时间是指在上升或下降沿发生之前接受输入值所需的最小时间。

换句话说,它是在切换发生之前维持输入值以确保其准确识别的最小时间。

它表示确定输入值是高电平还是低电平所需的最小时间。

保持时间:在具有前沿触发器的D触发器中,当时钟值下降为0后,D值必须保持稳定一段时间,

以防止内存中出现垃圾值。将D值保持稳定所需的时间称为保持时间。

换句话说,它是在上升或下降沿发生后,为准确输出输出值所需的最小时间。

Ⅱ. 练习

0x00 RS Flip-Flop

通过 Verilog 模拟结果来完成 Truth Table (B) 的空白部分 (按输入顺序排列):

💬 Design source: 

`timescale 1ns / 1ps

module RSFF(
    input clk,
    input S,
    input R,
    input CLR,
    output Q,
    output Qp
);

reg Q;

always @(posedge !clk) begin
    if(CLR) Q<=1'b0;
    else begin
        if((S==1'b0)&&(R==1'b0)) Q<=Q;
        else if((S==1'b0)&&(R==1'b1)) Q<=1'b0;
        else if((S==1'b1)&&(R==1'b0)) Q<=1'b1;
        else if((S==1'b1)&&(R==1'b1)) Q<=1'bx;
    end
end

assign Qp = ~Q;

endmodule

💬 Testbench:

`timescale 1ns / 1ps

module RSFF_tb;
reg clk, S, R, CLR;
wire Q, Qp;

RSFF u_RSFF(
    .clk(clk ),
    .S(S ),
    .R(R ),
    .CLR(CLR ),
    .Q(Q ),
    .Qp(Qp ) 
);

initial clk = 1'b0;
initial CLR = 1'b1;
initial S = 1'b0;
initial R = 1'b0;

always clk = #50 ~clk;

always@(CLR) begin
    CLR = #125 ~CLR;
end

always@(S) begin
    S = #175 ~S;
    S = #50 ~S;
end

always@(R) begin
    R = #375 ~R;
    R = #50 ~R;
end

always@(R) begin
    R = #575 ~R;
    R = #50 ~R;
end

always@(S) begin
    S = #675 ~S;
    S = #50 ~S;
end

always@(R) begin
    R = #675 ~R;
    R = #50 ~R;
end

initial begin
    #800
    $finish;
end

endmodule

🚩 运行结果如下:

真值表:

Schematic:

0x01 D Flip-Flop

通过仿真表现 Timing Diagram,将 Latch 与 Flip-Flop 的仿真结果相比较:

💬 Design source: 

`timescale 1ns / 1ps

module DFF(
    input clk,
    input D,
    input CLR,
    output Q,
    output Qp
);
reg Q;

always @(posedge !clk) begin
    if(CLR) Q<=1'b0;
    else begin
        if((D==1'b0)) Q<=1'b0;
        else if((D==1'b1)) Q<=1'b1;
    end
end
assign Qp = ~Q;
endmodule

💬 Testbench:

`timescale 1ns / 1ps

module DFF_tb;
reg clk, D, CLR;
wire Q, Qp;

DFF u_DFF(
    .clk(clk ),
    .D(D ),
    .CLR(CLR ),
    .Q(Q ),
    .Qp(Qp ) 
);

initial clk = 1'b0;
initial CLR = 1'b1;
initial D = 1'b0;

always clk = #50 ~clk;

always@(CLR) begin
    CLR = #125 ~CLR;
end

always@(D) begin
    D = #375 ~D;
    D = #50 ~D;
end

always@(D) begin
    D = #575 ~D;
    D = #50 ~D;
end

always@(D) begin
    D = #675 ~D;
    D = #50 ~D;
end

initial begin
    #800
    $finish;
end

endmodule

🚩 运行结果如下:

真值表:

Schematic:

📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2023.5.16
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

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

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

相关文章

Java中synchronized的优化

本文介绍为了实现高效并发&#xff0c;虚拟机对 synchronized 做的一系列的锁优化措施 高效并发是从 JDK5 升级到 JDK6 后一项重要的改进项&#xff0c;HotSpot 虚拟机开发团队在 JDK6 这个版本上花费了大量的资源去实现各种锁优化技术&#xff0c;如适应性自旋&#xff08;Ada…

【fly-iot飞凡物联】(6):通过docker镜像使用gitbook启动ActorCloud项目文档,发现是个IOT功能非常丰富的项目,可以继续研究下去。

目录 前言1&#xff0c;关于 ActorCloud 使用手册2&#xff0c;使用docker 构建文档4&#xff0c;或者使用别人的gitbook镜像5&#xff0c;总结 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 fly-iot飞凡物联专栏&#xff1a; https://…

含sop的配电网重构(含风光|可多时段拓展)

目录 1 主要内容 2 部分程序 3 下载链接 1 主要内容 之前分享了很多配电网重构的程序&#xff0c;每个程序针对场景限定性比较大&#xff0c;程序初学者修改起来难度较大&#xff0c;本次分享一个基础程序&#xff0c;针对含sop的配电网重构模型&#xff0c;含风电和光伏&…

skywalking安全认证问题

skywalking安全认证 一、问题二、步骤2.1 skywalking-aop配置文件修改2.2 agent配置文件修改 一、问题 在springboot项目使用java-agent接入skywalking时&#xff0c;为保证两者之间的数据安全传输&#xff0c;准备加个安全认证 参考文章&#xff1a; https://www.helloworld…

尝试探索水下目标检测,基于yolov5轻量级系列模型n/s/m开发构建海底生物检测系统

其实&#xff0c;水下目标检测相关的项目早在之前就已经做了几个了&#xff0c;但是没有系统性地对比过&#xff0c;感兴趣的话可以先看下之前的文章&#xff0c;如下&#xff1a; 《基于自建数据集【海底生物检测】使用YOLOv5-v6.1/2版本构建目标检测模型超详细教程》 《基于…

Qt编写视频监控系统73-不同视频流不同类型的判断和解析(http/m3u8/rtsp/rtmp等)

一、前言 这套视频监控系统大概从2018年起步整体框架&#xff0c;一步步积累到现在&#xff0c;中间经历了无数次的各种视频文件、视频流、视频设备的播放测试&#xff0c;比如光视频文件就有mp4/wmv/rmvb/mkv/avi等格式&#xff0c;视频设备有本地USB摄像头、桌面等&#xff…

【k8s】【ELK】【zookeeper+kafka+efak】日志环境部署

1、日志收集基本概念 k8s中pod的路径&#xff1a; containers log: /var/log/containers/*.log Pod log&#xff1a; /var/log/pods docker log: /var/lib/docker/containers/*/*.log如何收集日志 使用 EFKLogstashKafka 1、filebeat读取容器中的日志&#xff0c;然后写入K…

camunda如何发布和调用rest服务接口

一、camunda如何发布rest服务接口 Camunda BPM 平台本身提供了 REST API 接口&#xff0c;可以用于管理和操作 Camunda 平台中的各种资源和数据&#xff0c;如流程定义、流程实例、任务等。因此&#xff0c;我们可以通过编写 Camunda 应用程序的方式&#xff0c;将 Camunda RE…

Ubuntu系统远程桌面安装运行记录

Ubuntu系统远程桌面安装运行记录 分别测试了20.04和22.04两个版本 一、widows远程 参考连接https://blog.csdn.net/qq_50263172/article/details/128465149 安装步骤如下&#xff1a; sudo apt-get install xrdpsudo apt install tightvncserversudo apt-get install xubuntu-…

CSS基础-超详解

目录 什么是CSS? CSS的引入方式 内部样式 外部样式 内联样式 CSS选择器 CSS标签选择器 类选择器 id选择器 通配符选择器 CSS属性设置 字体 文本 什么是CSS? CSS也被叫做层叠样式表, 英文全称为: Cascading Style Sheets, 是一种用来表现HTML(标准通用标记语言的一个应用)…

【云原生】k8s管理工具--Kubectl(二)

k8s管理工具--Kubectl&#xff08;二&#xff09; 一、项目生命周期1、项目生命周期2、创建kubectl run命令3、发布kubectl expose命令&#xff08;1&#xff09; Service的作用&#xff08;2&#xff09;Service的类型&#xff08;3&#xff09;查看Pod网络状态详细信息和Serv…

django 数据迁移makemigrations和migrate的备忘录

问题描述 之前成功生成过&#xff0c;重新执行python manage.py migrate后&#xff0c;数据库没有生成对应的数据表&#xff1b;表现为 Apply all migrations: admin, auth, contenttypes, sessions Running migrations:No migrations to apply.执行python manage.oy makemig…

STM32-光敏传感器实验

光敏传感器的主要是光敏二极管&#xff0c;核心是PN结&#xff0c;利用了光电效应&#xff0c;对光强很敏感&#xff0c;有单向导电性&#xff0c;工作时需要加反向电压。光照越强&#xff0c;等效电阻越小。 实验要求通过ADC3通道6&#xff08;PF8&#xff09;采集光敏二极管…

geoserver安装与发布服务过程

geoserver是做地图领域开发必会的插件之一&#xff0c;今天我们来分享多种安装方式与发布服务过程&#xff1a; 一、安装下载 1、官网地址&#xff1a;GeoServer 进入下载页面选择下载的版本&#xff0c;我这里选择2.22.3的稳定版本。 来到&#xff1a; 多种安装包可选&#…

科研er如何查询学术期刊分区信息?

文章目录 引言&#xff1a;为什么要查询学术期刊分区信息&#xff1f;1.使用LetPub查询1.1.LetPub简介1.2.查询步骤 2.使用《中科院文献情报中心期刊分区表》进行查询2.1.《中科院文献情报中心期刊分区表》简介2.2.查询步骤 引言&#xff1a;为什么要查询学术期刊分区信息&…

Linux man手册什么都找不到 常见问题总结

1.尝试安装缺少的page sudo yum[或者apt-get] install manpages-de manpages-de-dev manpages-dev glibc-doc manpages-posix-dev manpages-posix 安装成功后解决了没有pages的问题,如果还是查不到,则可能是找不到pages的问题 2.更新Gcc 或 G 后导致路径变化 man手册的所有…

每日一练 | 网络工程师软考真题 Day2

1、某工程制定的开发方案中定义了3个任务&#xff0c;其中任务A首先开始&#xff0c;且需要3周完成&#xff0c;任务周完B必须在任务A启动1周后开始&#xff0c;且需要2周完成&#xff0c;任务C必须在任务A后才能开始&#xff0c;且需要完成2周完成。该工程的进度安排可用下面的…

案例12:Java宠物医院预约管理系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

CCF大数据与计算智能大赛-基于人工智能的漏洞数据分类冠军方案

基于人工智能的漏洞数据分类 前言 为及时跟踪国际信息安全趋势&#xff0c;需对国际公开的漏洞数据内容进行及时统计和梳理&#xff0c;例如CVE漏洞平台。CVE平台的漏洞信息包含有CVE编号、漏洞评分、漏洞描述等内容&#xff0c;其中漏洞描述含有对漏洞的利用条件、受影响的范…

Windows下快速启动Kafka以及三种发送消息的方式

目录 一、下载Kafka 二、启动kafka 2.1 启动kafka前得先启动zk 2.2 启动kafka 三、操作Kafka 3.1 创建 Kafka 主题&#xff08;Topic&#xff09; 3.2 将信息写入主题&#xff08;Topic&#xff09; 3.3 读取信息 四、Java实践-三种发送消息的方式 4.1 异步发送-无回…