当前位置:   article > 正文

verilog学习记录(3)——D触发器设计_d触发器的真值表

d触发器的真值表

目录

一、门级结构描述

二、D触发器基本原理及真值表

2.1 SR触发器介绍

2.1.1 触发器介绍

2.1.2 SR触发器

2.1.3 SR触发器原理图

2.2 D触发器介绍

2.2.1 D触发器原理图

2.2.3 D型主从触发器原理图

2.2.4 门级结构描述D型触发器源码

三、代码编写及仿真

3.1 由触发器组成带清零四位寄存器

3.2 RTL仿真图

3.3 仿真测试文件

3.4 仿真波形


一、门级结构描述

        and          与门

        nand        与非门

        nor           或非门

        or             或门

        xor           异或门

        xnor        异或非门

        buf         缓冲器

        not        非门

门类型引用模式:        nand #10 nd1(a,data,clock,clear);

该例中nand表示与非门,#10是时间延迟,nd1是与非门名称,data,clock,clear输入信号,a输出。

二、D触发器基本原理及真值表

2.1 SR触发器介绍

2.1.1 触发器介绍

触发器是一种逻辑组合电路,其可存储一位二进制数,有两个稳定状态,SET(置位)和RESET(复位)。当输入信号发生改变并满足一定条件,输出信号随之发生改变。

2.1.2 SR触发器

作用:将输入信号转化为一个稳定输出。

SR触发器名称由来:S-SET设置,R-RESET复位。

2.1.3 SR触发器原理图

        触发器由两个交叉的与非门构成,其中一个与非门的输入是另一个的输出。其原理图如下:

真值表如下:

2.2 D触发器介绍

2.2.1 D触发器原理图

D触发器原理图如下:

2.2.2 D型触发器真值表

D触发器真值表如下:

2.2.3 D型主从触发器原理图

D型主从触发器原理图如下:

2.2.4 门级结构描述D型触发器源码

  1. module flop(data,clock,clear,q,qb);
  2. input data,clock,clear;
  3. output q,qb;
  4. nand #10 nd1(a,data,clock,clear),
  5. nd2(b,ndata,clock),
  6. nd4(d,c,b,clear),
  7. nd5(e,c,nclock),
  8. nd6(f,d,nclock),
  9. nd8(qb,q,f,clear);
  10. nand #9 nd3(c,a,d),
  11. nd7(q,e,qb);
  12. not #10 iv1(ndata,data),
  13. iv2(nclock,clock);
  14. endmodule

该处我们使用门级结构对原理图进行描述,代码中的门与电路图中一一对应,相当于使用代码绘制硬件电路,经过RTL仿真后可得到对应原理图,由于图片内容较为繁杂,对此我们不再截出。感兴趣的可点击下方工程文件自行进行电路仿真,观察结果。

三、代码编写及仿真

3.1 由触发器组成带清零四位寄存器

  1. `include "flop.v"
  2. module hardreg(d,clk,clrb,q);
  3. input clk,clrb;
  4. input[3:0] d;
  5. output[3:0] q;
  6. flop f1(d[0],clk,clrb,q[0],),
  7. f2(d[1],clk,clrb,q[1],),
  8. f3(d[2],clk,clrb,q[2],),
  9. f4(d[3],clk,clrb,q[3],);
  10. endmodule

3.2 RTL仿真图

3.3 仿真测试文件

  1. module hardreg_sim;
  2. reg clock,clearb;
  3. reg[3:0] data;
  4. wire[3:0] qout;
  5. `define stim #100 data=4'b
  6. event end_first_pass;
  7. hardreg reg_4bit(.d(data),.clk(clock),.clrb(clearb),.q(qout));
  8. initial
  9. begin
  10. clock=0;
  11. clearb=1;
  12. end
  13. always #50 clock=~clock;
  14. always @(end_first_pass)
  15. clearb=~clearb;
  16. always @(posedge clock)
  17. $display("at time %0d clearb=%b data=%d qout=%d",$time,clearb,data,qout);
  18. initial
  19. begin
  20. repeat(4)
  21. begin
  22. data=4'b0000;
  23. `stim 0001;
  24. `stim 0010;
  25. `stim 0011;
  26. `stim 0100;
  27. `stim 0101;
  28. `stim 0110;
  29. `stim 0111;
  30. `stim 1000;
  31. `stim 1001;
  32. `stim 1010;
  33. `stim 1011;
  34. `stim 1100;
  35. `stim 1101;
  36. `stim 1110;
  37. `stim 1111;
  38. #200->end_first_pass;
  39. end
  40. $finish;
  41. end
  42. endmodule

3.4 仿真波形

可以看到,在时钟上升沿来临,再延迟一段时间后,D触发器输出qout,其值与data输入基本一致,但不时会出现一些毛刺信号,毛刺信号的出现是由于延迟作用,同一时刻多个信号到达终点从而产生了竞争。如感兴趣可参考网络上多种方式对其进行消除。

工程文件连接:链接:https://pan.baidu.com/s/1jhtXhwztxQpHKHu7n54PmQ
提取码:90ce

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/542053
推荐阅读
相关标签
  

闽ICP备14008679号