verilog学习记录(3)——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型触发器源码

module flop(data,clock,clear,q,qb);
    input data,clock,clear;
    output q,qb;
    
    nand #10    nd1(a,data,clock,clear),
                nd2(b,ndata,clock),
                nd4(d,c,b,clear),
                nd5(e,c,nclock),
                nd6(f,d,nclock),
                nd8(qb,q,f,clear);
    nand #9     nd3(c,a,d),
                nd7(q,e,qb);
    not #10     iv1(ndata,data),
                iv2(nclock,clock);
endmodule

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

三、代码编写及仿真

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

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

3.2 RTL仿真图

3.3 仿真测试文件

module hardreg_sim;
            reg clock,clearb;
            reg[3:0] data;
            wire[3:0] qout;
            
            `define stim    #100 data=4'b
            event   end_first_pass;
                hardreg reg_4bit(.d(data),.clk(clock),.clrb(clearb),.q(qout));           
            initial
                begin
                    clock=0;
                    clearb=1;
                end
                
                 always #50 clock=~clock;
                 always @(end_first_pass)
                    clearb=~clearb;
                 always @(posedge clock)
                    $display("at time %0d clearb=%b data=%d qout=%d",$time,clearb,data,qout);
                    initial
                    begin
                        repeat(4)
                            begin
                                data=4'b0000;
                                `stim 0001;
                                `stim 0010;
                                `stim 0011;
                                `stim 0100;
                                `stim 0101;
                                `stim 0110;
                                `stim 0111;
                                `stim 1000;
                                `stim 1001;
                                `stim 1010;
                                `stim 1011;
                                `stim 1100;
                                `stim 1101;
                                `stim 1110;
                                `stim 1111;
                            #200->end_first_pass;
                            end
                            $finish;
                      end                       
endmodule

3.4 仿真波形

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

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱多多小姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值