实验目的
实验任务
本实验的任务是描述一个带有边沿触发的同步D触发器电路,并通过STEP FPGA开发板的12MHz晶振作为触发器时钟信号clk,拨码开关的状态作为触发器输入信号d,触发器的输出信号q和~q,用来分别驱动开发板上的LED,在clk上升沿的驱动下,当拨码开关状态变化时LED状态发生相应变化。
实验原理
从D触发器的特性我们知道,它的状态仅仅取决于时钟信号达到之前瞬间的D信号。为了防止SR锁存器的S、R被同时置1的情况,常采用维持阻塞结构的D触发器,其电路结构如下,边沿触发器的次态仅仅取决于CLK信号上升沿(或下降沿)到达时刻输入信号的状态。
Verilog HDL建模描述
用行为描述方式实现的D触发器程序清单dff.v
moduledff( //模块名及参数定义 inputclk,rst,d, outputregq, outputwireqb); assignqb=~q; always@(posedgeclk)//只有clk上升沿时刻触发 if(!rst) //复位信号判断,低有效 q<=1'b0;//复位有效时清零 else q<=d;//触发时输出q值为输入d endmodule
仿真文件dff_tb.v
`timescale1ns/100ps//仿真时间单位/时间精度 moduledff_tb(); regclk,rst,d; //需要产生的激励信号定义 wireq,qb; //需要观察的输出信号定义 //初始化过程块 initial begin clk=0; rst=0; d=0; #50 rst=1; end always#10clk=~clk;//产生输入clk,频率50MHz always#15d=~d; //module调用例化格式 dffu1(//dff表示所要例化的module名称,u1是我们定义的例化名称 .clk(clk),//输入输出信号连接。 .rst(rst), .d(d), .q(q),//输出信号连接 .qb(qb) ); endmodule