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

1、概述

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

2、测试文件的编写

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

cpp 复制代码
//异步复位的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文件,如下:

cpp 复制代码
//定义时间尺度
`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 begin
    rst_n = 1'b0;
    #(CLK_CYC*2);
    rst_n = 1'b1;
end 

//激励
initial begin
    d=1'b0;
    #(CLK_CYC*3);
    #5;
    repeat (10)begin
        d=$random;
        #(CLK_CYC*1);
    end 
end 
endmodule

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

4、波形图仿真

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

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

相关推荐
TunerT_TQ12 小时前
Valhalla 静态工程审阅 #009|Continue 源码证据驱动评测【大厂开源基础设施特辑】
vscode·测试工具·开源·llm·github·jetbrains·ai编程助手
时时三省14 小时前
VScode 智能插件安装
ide·vscode·编辑器
眞bilibili17 小时前
如何快速无缝的从 vscode 转向AI编辑器 cursor、kiro、trae 等
人工智能·vscode·编辑器
jerryinwuhan18 小时前
VScode 安装opencode
ide·vscode·编辑器
1560820721918 小时前
关于国微SQM7VX690T和复旦微JFM7VX690T调试
fpga开发
minglie11 天前
简易寄存器接口SMMR---正交编码器
fpga开发
神电测控2 天前
新品发布:32通道50MS/s同步并行14位采集模块PG-FMC9249(支持任意FPGA/ZYNQ,兼容LabVIEW FPGA软件开发)
fpga开发·labview·ni·神电测控·王电令·ad9249·32通道
Drgfd2 天前
半导体国产替代进入“深水区”:决战设备、材料、IP三大高地
网络·fpga开发
国产HT1621B2 天前
YL1650 LED驱动芯片详解:从原理到实战应用(附51单片机驱动代码)
stm32·单片机·嵌入式硬件·mcu·fpga开发·lcd驱动
szxinmai主板定制专家2 天前
驱控一体新范式:RK3576+FPGA+CODESYS工业实时AI控制架构全解
人工智能·嵌入式硬件·计算机视觉·fpga开发·架构·工业ai·驱控一体