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

前言:本章内容主要是演示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));     initialbeginclk=0;endalways #10 clk=~clk; initialbeginR=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) beginif(!n_set && n_reset) beginq<=1;qb<=0;endelse if(n_set && !n_reset) beginq<=0;qb<=1;endelse beginq<=d;qb<=~d;endend
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.hqwc.cn/news/3297.html

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

相关文章

VS2022 And QtCreator10 调试 Qt 源码教程

文章目录 背景IDE 调试 Qt 源码Visual Studio 2022Qt Creator 10.0.1 排查思路姊妹篇系列 简 述&#xff1a; 记录使用 Visual Studo 2022 和 QtCreator10 调试 Qt 5.15 源码和 加载 .pdb 的方法。 本文初发于 “偕臧的小站”&#xff0c;同步转载于此。 背景 源码&#xff1a;…

软考A计划-系统集成项目管理工程师-项目范围管理(一)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

C# Excel 表列序号

171 Excel 表列序号 给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: columnTitle “A” 输出: 1 示例 2: …

数据库原理之数据库事物

文章目录 一、事物介绍1.1 事物的目的是保证数据的一致性1.2 事物的ACID A、I、D是为了实现 C1.3 什么是本地事物(Local Transactions) 二、数据库系统如何实现ACID2.1 影响深远的ARIES理论2.2 本地事物如何实现原子性和持久性 A、D2.2.1 实现原子性和持久性的Commit Logging方…

基于物联网、区块链技术的质量管控防伪溯源系统源码

一物一码防伪溯源系统能准确获取产品生产经营各个环节的真实信息&#xff0c;利用物联网、云计算 、区块链、人工智能、5G等先进技术&#xff0c;结合特有的码码关联和RSA加密验证技术&#xff0c;建立区块链的“身份证”&#xff0c;针对产品生长到销售各环节的质量安全数据进…

结构体和数据结构--结构体数组的定义和初始化

目录 一、结构体数组的定义 二、结构体数组的初始化 一、结构体数组的定义 一个结构体变量只能表示学生成绩管理表中的一个学生的记录信息&#xff0c;代表其中的一个实例&#xff0c;而实际数据库中有多个学生的记录&#xff0c;每个记录对应一个学生的信息&#xff0c;如何…

MySQL----MHA高可用

文章目录 一、MHA理论1.1什么是 MHA1.2MHA 的组成1.3MHA 的特点 二、MHA的一主两从部署实验设计故障修复步骤&#xff1a; 一、MHA理论 1.1什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出…

初识Docker:(7)查询Docker镜像的DockerFile

1. 前言 我们知道了根据dockerfile来制作镜像&#xff0c;如果给你一个现成的镜像&#xff0c;你能逆向查看出dockerfile吗&#xff1f; 否则&#xff0c;你怎么知道该镜像使用的是CMD还是ENTRYPOINT &#xff0c;使用的是shell格式还是CMD格式&#xff1f;由于格式决定了doc…

【HTML5】svg 绘制图形

文章目录 一、基本介绍二、用法详解2.1、矩形&#xff08;rect&#xff09;2.2、圆形&#xff08;circle&#xff09;2.3、椭圆&#xff08;ellipse&#xff09;2.4、线条&#xff08;line&#xff09;2.5、折线&#xff08;polyline&#xff09;2.6、多边形&#xff08;polygo…

Anaconda详细安装及配置教程(Windows)

Anaconda详细安装及配置教程&#xff08;Windows&#xff09; 一、下载方式1、官网下载2、网盘下载 二、安装三、配置四、创建虚拟环境 一、下载方式 1、官网下载 点击下载 点击window下载即可。 2、网盘下载 点击下载 二、安装 双击运行 点next 点I agree next 如…

springboot定时任务详解

文章目录 一、基于注解&#xff08;静态&#xff09;1、添加依赖2、创建定时任务3、参数说明 二、基于接口&#xff08;动态&#xff09;1、添加依赖2、添加数据库记录3、创建定时器4、启动测试 三、Quartz1、添加依赖2、编写任务类3、编写配置类4、启动项目 在我们开发项目过程…

go channel 详解

一、概述 在Go语言中&#xff0c;channel是一种特殊的类型&#xff0c;用于在并发编程中实现不同的goroutine之间的通信和同步。本文将深入探讨golang的channel是如何工作的&#xff0c;并介绍如何使用channel来提高程序的性能和可靠性。 二、什么是Channel&#xff1f; 在G…