【FPGA】Verilog:时序电路 | 触发器电路 | 上升沿触发 | 同步置位 | 异步置位

news2024/9/27 15:35:54

前言:本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载

示例:触发器电路

  

  • 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片 
  • 配置方式:USB-JTAG/SPI Flash
  • 高达100MHz 的内部时钟速度 
  • 存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A)
  • 通用IO:Switch :x8LED:x16Button:x5DIP:x8   通用扩展IO:32pin
  • 音视频/显示: 7段数码管:x8 VGA视频输出接口 Audio音频接口 
  • 通信接口:UART:USB转UART   Bluetooth:蓝牙模块 
  • 模拟接口: DAC:8-bit分辨率   XADC:2路12bit 1Msps ADC

目录

Ⅰ. 前置知识

0x00 利用7400搭建RS触发器

0x01 D触发器

0x02 带复位的D触发器

0x03 带置位/复位的D触发器

Ⅱ. Verilog实现

0x00 RS触发器(上升沿触发)

0x01 D触发器 (上升沿触发)

0x02 带复位的D触发器

0x03 同步置位/复位端口的上升沿 D 触发器

0x04 异步置位/复位端口的上升沿 D 触发器


Ⅰ. 前置知识

0x00 利用7400搭建RS触发器

注意:

a、由于 时触发器输出保持,因此若初始状态,仿真启动时会报错或状态不定。

b、根据触发器的定义,应互补,因此是非法状态。

 得出RS触发器的真值表如下:

输    入

输    出

Q

0

0

保持不变

0

1

1

0

1

0

0

1

1

1

1(0)

1(0)

0x01 D触发器

 在数字电路中,D触发器是最为简单也是最为常用的一种基本时序逻辑电路,它是构成数字电路系统的基础。

大体可分为如下几类:基本的D触发器;同步复位的D触发器;异步复位的D触发器;同步置位/复位的D触发器;异步置位/复位的D触发器。

设计上升沿触发的D触发器,即当检测到时钟上升沿到来时,触发器根据真值表输出:

触发器

D

CP

Q

Q’

D

X

0

保持

保持

D

X

1

保持

保持

D

0

上升沿

0

1

D

1

上升沿

1

0

0x02 带复位的D触发器

在数字电路中,一种常见的带有复位控制端口的上升沿D触发器的功能表如表所示:

触发器

R

D

CP

Q

Q’

D

0

X

上升沿(同步复位)

0

1

D

0

X

X(异步复位)

0

1

D

1

X

0

保持

保持

D

1

X

1

保持

保持

D

1

0

上升沿

0

1

D

1

1

上升沿

1

0

不难看出,同步复位意味着只有在时钟信号的上升沿到来并且复位控制端口的信号有效时,D触发器才进行复位操作,即将输出端口Q的值置为逻辑0,而把输出端口Q的值置为逻辑1;异步复位在于只要复位控制端口的信号有效,D触发器就会立即进行复位操作,这时的复位操作是与时钟信号无关的。

0x03 带置位/复位的D触发器

带有同步置位/复位端口的上升沿D触发器的逻辑电路符号如图所示:

它的功能表如表所示:

触发器

S

R

D

CP

Q

Q’

D

1

0

X

上升沿(同步复位)

0

1

D

0

1

X

上升沿(同步复位)

1

0

D

1

1

X

0

保持

保持

D

1

1

X

1

保持

保持

D

1

1

0

上升沿

0

1

D

1

1

1

上升沿

1

0

不难看出,只有在时钟信号的上升沿到来并且同步置位/复位端口的信号有效时,D触发器才可以进行置位或者复位操作。

Ⅱ. Verilog实现

0x00 RS触发器(上升沿触发)

设计代码:

module RS(clk,R,S,q,qb);
input clk,R,S;
output q,qb;
reg q;
assign qb=~q;
always@(posedge clk) 
   case({R,S})
       2&apos;b01: q<=0;
       2&apos;b10: q<=1;
       2&apos;b00: q<=1&apos;bx;
       endcase
endmodule

仿真代码:

module test();
    reg clk,R,S;
    wire q,qb;
       RS uut(
            .R(R),
            .S(S),
            .clk(clk),
            .q(q),
            .qb(qb)
            );     initial
        begin
            clk=0;
        end
         
    always #10 clk=~clk; 
    initial
        begin
            R=0;S=0;
            #10 R=0;S=1;
            #20 R=1;S=0;
            #20 R=1;S=1;
            #20 $finish;
         end 
endmodule

仿真波形:

0x01 D触发器 (上升沿触发)

设计文件:

module async_rddf(clk, d,q,qb);
input clk, d;
output q,qb;
reg q,qb;
always @(posedge clk) begin
q<=d; qb<=~d;
end
endmodule

仿真文件:

`timescale 1ns / 1ns
module test;
reg clk; reg d;
wire q; wire qb;
async_rddf uut (.clk(clk), .d(d), .q(q), .qb(qb));
initial begin
clk = 0;
d = 0;
#100;
end
always #20 clk=~clk;
always #30 d=~d;
endmodule

仿真波形:

0x02 带复位的D触发器

设计文件:

module sync_rddf(clk,reset,d,q,qb);
input clk,reset,d;
output q,qb;
reg q,qb;
always @(posedge clk) begin
if(!reset) begin
q<=0;
qb<=1;
end
else begin
q<=d;
qb<=~d;
end
end
endmodule

仿真文件:

`timescale 1ns / 1ns
module test;
reg clk; reg d;reg reset;
wire q; wire qb;
sync_rddf uut (.reset(reset),.clk(clk), .d(d), .q(q), .qb(qb));
initial begin
clk = 0;
d = 0;
reset = 0;
#100;
end
always #25 reset=~reset;
always #20 clk=~clk;
always #30 d=~d;
endmodule

仿真波形:

0x03 同步置位/复位端口的上升沿 D 触发器

设计代码:

module sync_rsddf(clk,reset,set,d,q,qb);
input clk,reset,set;
input d;
output q,qb;
reg q,qb;
always @(posedge clk) begin
if(!set && reset) begin
q<=1;
qb<=0;
end
else if(set && !reset) begin
q<=0;
qb<=1;
end
else begin
q<=d;
qb<=~d;
end
end
endmodule

仿真代码:

`timescale 1ns / 1ns
module test;
reg clk; reg d;reg reset;reg set;
wire q; wire qb;
sync_rsddf uut (.set(set),.reset(reset),.clk(clk), .d(d), .q(q), .qb(qb));
initial begin
clk = 0;
d = 0;
reset = 0;
set = 0;
#100;
end
always #25 reset=~reset;
always #10 set=~set;
always #20 clk=~clk;
always #30 d=~d;
endmodule

仿真波形:

0x04 异步置位/复位端口的上升沿 D 触发器

设计代码:

module set_D(clk,n_reset,n_set,d,q,qb);
input clk,n_reset,n_set;
input d;
output q,qb;
reg q,qb;
always @(posedge clk or negedge n_reset or negedge n_set) 
  begin
  if(!n_set && n_reset) 
    begin
    q<=1;
    qb<=0;
    end
  else if(n_set && !n_reset) 
    begin
    q<=0;
    qb<=1;
    end
  else 
    begin
    q<=d;
    qb<=~d;
    end
  end
endmodule

仿真代码:

module sim_set_D();
reg clk,n_reset,n_set;
reg d;
wire q,qb;
set_D uu1(clk,n_reset,n_set,d,q,qb);
initial {clk,n_reset,n_set,d}=4&apos;b0000;
always #20 clk=~clk;
always #40 n_reset=~n_reset;
always #80 n_set=~n_set;
always #30 d=~d;
endmodule

仿真波形:

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

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

相关文章

java图书管理系统

图书管理系统 演示视频 技术&#xff1a; 基于java图书管理系统系统的设计与实现 运行环境&#xff1a; JAVA版本&#xff1a;JDK1.8 IDE类型&#xff1a;IDEA、Eclipse都可运行 数据库类型&#xff1a;MySql&#xff08;8.x版本都可&#xff09; 硬件环境&#xff1a;Window…

USB Mass Storage Class

编辑博客时&#xff0c;回车的意思是切换段落&#xff0c;shift回车才是换行。 SCSI Interface Controller: AMD am5380 1 U盘量产工具 - 主控芯片私有的SCSI命令 ChipEasy / ChipGenius FlashGenius MyDiskTest HS握手时&#xff0c;Chirp KJ的频率大概是10KHz。 2 SCSI CDB 2…

呼叫中心系统经常被UDP攻击的解方法

针对语音系统经常被攻击&#xff0c;或者盗打&#xff0c;可使用防火墙和入侵检测系统来监视和阻止潜在攻击。 为此开发了网页版本web防火墙插件&#xff0c;其原理是&#xff0c;用java程序控制iptables 或firewall放行规则。 shell脚本安装完成插件后&#xff0c;防火墙默认…

VS2022附加到Unity之后控制台报错乱码,重启unity可以正常运行,但是VS不能附加Unity

错误描述 VS2022附加到Unity之后Unity 报错乱码&#xff0c;但是Unity关闭重新开始运行不会报错。错误信息如下 ϵͳ&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ָ&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd…

人工智能(AI)在金融行业的应用

人工智能&#xff08;AI&#xff09;技术在金融行业的应用日益广泛&#xff0c;为金融机构提供了更高效、更智能的解决方案。以下和大家分享AI在金融行业的一些主要应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0…

【Java基础学习打卡13】Java开发工具

目录 前言一、主流IDE1.Eclipse&#xff08;免费&#xff09;2.IDEA&#xff08;收费&#xff09; 二、何时使用IDE&#xff1f;三、EditPlus四、EditPlus集成java编译运行命令1.集成javac&#xff08;编译&#xff09;命令2.集成java&#xff08;运行&#xff09;命令3.集成后…

在Linux上安装和使用免费版本的PyMol

技术背景 PyMol是一个类似于VMD的分子可视化工具&#xff0c;也是在PyQt的基础上开发的。但是由于其商业化运营&#xff0c;软件分为了教育版、开源版和商业版三个版本。其中教育版会有水印&#xff0c;商业版要收费&#xff0c;但是官方不提供开源版本的安装方法。按照参考链接…

Windows下Jdk1.8的下载/安装/配置

文章目录 Windows下Jdk1.8的下载/安装/配置1. Jdk的下载2. Jdk的安装3. Jdk的配置4. 检查是否安装成功 Windows下Jdk1.8的下载/安装/配置 1. Jdk的下载 下载地址 2. Jdk的安装 3. Jdk的配置 1. 右键我的电脑 → 属性 → 高级系统配置 → 环境变量 → 系统变量&#xff1a;…

企业级微服务架构实战项目--xx优选-用户登录

一 用户登录的触发页面 1.登录常量 2.登录地址 3.配置域名 4.启动程序 触发连接小程序后端的登录接口 小程序controller的登录方法

MFC第十一天 CDialog类的三大虚函数简介 CS模式下员工管理系统项目插入列表数据的功能开发

文章目录 CDialog类三大重要虚函数MFC中反射型消息CS模式员工管理系统插入列表数据的功能开发客户端代码服务器端代码 CDialog类三大重要虚函数 a)MFC平台希望接管三大重要消息&#xff1a;OnInitDialog() OnOK() OnCancel() WM_INITDIALOG: virtual BOOL OnInitDialog(); 当对…

数据库监控与调优【十三】—— LIMIT语句优化

LIMIT语句优化 LIMIT语句使用规则 limit<offset>, <size> offset&#xff1a;返回结果第一行的偏移量&#xff08;想要跳过多少行&#xff09;size&#xff1a;指定返回多少条 举例说明 -- 查询第1页时&#xff0c;花费92ms SELECT * FROM employees LIMIT 0,…

【C++】single header跨平台高效开源日志库Easylogging++的配置和使用

【C】single header跨平台高效开源日志库Easylogging的配置和使用 一、Easylogging简介 Easylogging是一个只有单个头文件的开源跨平台日志库&#xff0c;拥有简单易集成&#xff0c;速度极快&#xff0c;线程安全&#xff0c;高效并可配置可扩展等等优点&#xff0c;现在也是…

开启JDK 11时代,掌握这些新特性,成为Java开发高手!

大家好&#xff0c;我是小米&#xff0c;欢迎来到小米科技资讯公众号&#xff01;今天我将为大家详细介绍 JDK 11 的一些新特性。JDK 11 是 Java 语言的一个重要版本&#xff0c;它带来了许多令人振奋的改进和功能&#xff0c;尤其是在电商应用领域。让我们一起来了解吧&#x…

动态规划—不同子序列 解析+代码

不同子序列 题目链接&#xff1a;不同的子序列 题目描述&#xff1a; 因为需要前字符匹配的状态&#xff0c;所以我们考虑可以使用动态规划 状态是一维数组还是二维数组&#xff1f; 使用一维数组还是二维数组视情况而定。 题目所求是字符串S有几个子序列和T匹配&#xff0…

pycharm打印不出动图怎么办?

目录 1.分析问题 2.解决方法&#xff1a; 3.将动图保存到本地 1.分析问题 加入你有一个类似如下的画动图的程序&#xff1a; import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animationfig, ax plt.subplots()x np.arange(0, 2*…

陌生领域的紧急需求 4大处理策略

产品经理刚接收离职同事工作&#xff0c;突然遇到陌生领域的紧急需求&#xff0c;时间紧任务重&#xff0c;一时着急无从下手&#xff0c;该怎么办&#xff1f;4大需求处理策略&#xff0c;让我们打破僵局。 1、定位核心问题 遇到陌生领域的紧急需求&#xff0c;首先需要确定核…

vue如何全屏(点击一个按钮界面全屏展示)

1&#xff0c;在界面上设置一个div&#xff0c;让用户点击后全屏或者退出全屏。 <div class"full-screen" click"toFullOrExit"><img :src"fullImg"/></div>2&#xff0c;进入全屏和退出全屏的方法 requestFullScreen () {let…

Tableau 和 Qlikview哪个更好用?

Tableau 和 Qlikview 是市场上用于分析数据的两种重要的 BI 工具&#xff0c;并配备了广泛的可视化效果。本文将全面概述每个工具&#xff0c;以及基于业务、技术和可视化三个主要类别的基本差异。每个公司都希望用最好的BI工具来处理大量数据。在这篇文章中&#xff0c;我们将…

Rust语言从入门到入坑——(11)面向对象

文章目录 0、引入1、封装2、继承3、多态4、引用 0、引入 Rust 不是面向对象的编程语言&#xff0c;但是可以实现面向对象方法&#xff1a;封装与继承&#xff0c;以及不完全的多态 1、封装 "类"往往是面向对象的编程语言中常用到的概念。"类"封装的是数据…

关于IE11的样式兼容问题记录

1、布局如下 <div class"map-label" :class"{active:isActive}" :style"{marginTop:${marTopVal}px}"><transition name"slide-fade"><div class"transition-out" v-if"show"><div class&q…