【HDLBits:在线学习Verilog】Problem 22: Three modules(Module shift)用ModelSim仿真实现
题目:

【my_dff01.v】
特别地,要求把每一个D触发器的输出q都引出来,利用波形查看规律
需要注意的:
1.在第一个模块定义单个D触发器时用【output reg q】,作为触发器输出,通常需要定义为 reg
2.在第二个模块定义3个D触发器连在一起用时只用单独适用【output q1,q2,q】就可以
3.重点理解【q <= d】,在时钟沿到来的瞬间,把 d 的值采样下来,准备赋给 q,但 q 的实际更新会稍微延迟一点点(或者理解为并行发生)

【my_dfftest01.v】
1. 声明激励信号 (Reg类型用于驱动输入) reg clk; reg d;
2. 声明观测信号 (Wire类型用于接收输出) wire q;

【输出波形】

【波形初始情况1】
第0ns初始化时钟为0,设置时钟每5ns翻转一次
第0~20ns保持d均为0
【波形分析1】
第0ns:时钟(0),d(0),q1(未知),q2(未知),q(未知)
第5ns:时钟(上升沿),d(0),q1(0,此刻d的值赋给q1,q1由未知变为0),q2(未知,此刻q1的值赋给q2,q2由未知变未知),q(未知,此刻q2的值赋给q,q由未知变未知)
第10ns:时钟(下降沿),d(0),q1(0),q2(未知),q(未知)
第15ns:时钟(上升沿),d(0),q1(0,此刻d的值赋给q1,q1由0变为0),q2(0,此刻q1的值赋给q2,q2由未知变0),q(未知,此刻q2的值赋给q,q由未知变未知)
第20~30ns:d=1
第20ns:时钟(下降沿),d(1,由0变为1),q1(0),q2(0),q(未知)
第25ns:时钟(上升沿),d(1),q1(1,此刻d的值赋给q1,q1由0变为1),q2(0,此刻q1的值赋给q2,q2由0变为0),q(0,此刻q2的值赋给q,q由未知变为0)
第30ns:时钟(下降沿),d(0,由1变为0),q1(1),q2(0),q(0)
第30~40ns:d=0
第35ns:时钟(上升沿),d(0),q1(0,此刻d的值赋给q1,q1由1变为0),q2(1,此刻q1的值赋给q2,q2由0变为1),q(0,此刻q2的值赋给q,q由0变为0)
第40ns:时钟(下降沿),d(1,由0变为1),q1(0),q2(1),q(0)
第40~50ns:d=1
第45ns:时钟(上升沿),d(1),q1(1,此刻d的值赋给q1,q1由0变为1),q2(0,此刻q1的值赋给q2,q2由1变为0),q(1,此刻q2的值赋给q,q由0变为1)
第45ns真正的输出q终于输出1了,这个变化来自第20ns的d由0变为1

浙公网安备 33010602011771号