FPGA开发——D触发器的设计

devtools/2024/9/23 9:48:04/

1、概述

锁存器和触发器有时组合在一起,因为它们都可以在其输出上存储一位(1或0)。与锁存器相比,触发器是需要时钟信号(Clk)的同步电路。D 触发器仅在时钟从0 到 1(上升沿)或 1 到 0(下降沿)时存储来自 D 输入的新值。我们在FGPA开发中对D触发器进行设计,不同考虑其内部结构,只要根据需求实现当时钟信号上升沿或者下降沿到来时,输出的值等于输入D的值就行。

2、测试文件的编写

因为D触发器设计非常简单,这里就不多做介绍,直接上代码,新建一个d_ff.v文件(这里建立的.v文件必须和模块名一致,否则会报错)

 

//异步复位的D触发器
module d_ff(input clk,input rst_n,input d   ,output reg q
);always@(posedge clk or negedge rst_n) begin if(!rst_n)q<=1'b0;else q<=d;
end 
endmodule

这里开始用到了时序电路,所以在后面的仿真中我们需要注意时序电路慢一拍输出的特性。

3、测试文件的编写

 新建一个d_ff_tb.v文件,如下:

//定义时间尺度
`timescale 1ns/1ns
module d_ff_tb;reg clk;
reg rst_n;
reg d;
wire q;d_ff dff(.clk   (clk),.rst_n (rst_n),.d     (d),.q     (q)
);
//时钟
parameter CLK_CYC = 20;
initial clk=1'b0;
always  #(CLK_CYC/2) clk=~clk;//复位
initial beginrst_n = 1'b0;#(CLK_CYC*2);rst_n = 1'b1;
end //激励
initial begind=1'b0;#(CLK_CYC*3);#5;repeat (10)begind=$random;#(CLK_CYC*1);end 
end 
endmodule

这里在激励信号产生的代码中在延时3个周期#(CLK_CLY*3)之后再延时5ns——#5的目的是错开时钟上升沿,模拟实际输入,便于观察慢一拍输出的特性。

 4、波形图仿真

在modelsim中进行波形仿真结果如下:

在波形图中我们可以看到当复位信号和时钟上升沿信号错开时,输出也是慢一拍输出,最大程度的还原了真实情况的输出,当复位信号拉高之后,时钟上升沿到来Q的值立马发生变化变成D的值,一致保持当前状态一致持续到下一个时钟信号上升沿。 


http://www.ppmy.cn/devtools/85426.html

相关文章

【JavaEE】Bean的作用域和生命周期

一.Bean的作用域. 1.1 Bean的相关概念. 通过Spring IoC和DI的学习(不清楚的可以看的前面写过的总结,可以快速入门, http://t.csdnimg.cn/K8Xr0),我们知道了Spring是如何帮助我们管理对象的 通过 Controller , Service , Repository , Component , Configuration , Bean 来声明…

【设计模式】建造者模式

建造者模式是一种对象创建型设计模式&#xff0c;它将一个复杂对象的构建过程与其表示分离。 文章目录 建造者模式在实际软件中的应用案例Director 在建造者模式中的作用原理Builder 接口的设计要点如何优化建造者模式中的 Director 和 Builder 协作 Java代码实现复习一、建造者…

Vs2022+QT+Opencv 一些需要注意的地方

要在vs2022创建QT项目&#xff0c;先要安装一个插件Qt Visual Studio Tools&#xff0c;根据个人经验选择LEGACY Qt Visual Studio Tools好一些&#xff0c;看以下内容之前建议先在vs2022中配置好opencv&#xff0c;配置方式建议以属性表的形式保存在硬盘上。 设置QT路径 打开v…

PHP超级全局变量

PHP 中的超级全局变量&#xff08;Superglobals&#xff09;是 PHP 4.1.0 引入的一个特性&#xff0c;它们在脚本的全部作用域中都是可用的。这意味着一旦一个脚本被载入&#xff0c;这些变量就可以在脚本的任何地方被访问&#xff0c;无论是在函数内部还是外部。PHP 提供了几个…

深度学习系列70:模型部署torchserve

1. 流程说明 ts文件夹下&#xff0c; 从launcher.py进入&#xff0c;执行jar文件。 入口为model_server.py的start()函数。内容包含&#xff1a; 读取args&#xff0c;创建pid文件 找到java&#xff0c;启动model-server.jar程序&#xff0c;同时读取log-config文件&#xff…

gstreamer使用cairo实现视频OSD叠加

前言 gstreamer中视频叠加OSD有很多种方式&#xff0c;比如textoverlay添加文字&#xff0c;gdkpixbufoverlay添加图片&#xff0c;clockoverlay或timeoverlay插件显示时间&#xff0c;pango插件进行复杂文本渲染&#xff0c;使用cairo插件绘制图形或者文字。 今天使用最后一…

【Android】安卓四大组件之广播知识总结

文章目录 动态注册使用BroadcastReceiver监听Intent广播注册Broadcast Receiver 静态注册自定义广播标准广播发送广播定义广播接收器注册广播接收器 有序广播修改发送方法定义第二个广播接收器注册广播接收器广播截断 使用本地广播实践-强制下线使用ActivityCollector管理所有活…

[极客大挑战 2019]BabySQL1

这是上一个SQL注入的升级版&#xff0c;首先打开靶机 有了上次的经验&#xff0c;我们直接联合查询&#xff1a;?usernameaaaunion select null,null,null#&password1234 看报错信息&#xff0c;null&#xff0c;null&#xff0c;null#有错误&#xff0c;猜测select被过滤…