夏宇闻复习笔记第9章:Verilog的不同抽象级别&验证初步

在这里插入图片描述

9.1 门级描述

在这里插入图片描述

p131 9.1 门级逻辑描述的D触发器
/******************************p131 9.1 门级逻辑描述的D触发器********************************/
module  flop(data,clock,clear,q,qb);
input   data,clear,clock;
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,clock);

nand    #9  nd3(c,a,d),
            nd7(q,qb,e);
            
not     #10 iv1(ndata,data),
            iv2(nclock,clock);

endmodule

在这里插入图片描述

p132 9.2 用触发器组成异步清零的4位寄存器
/******************************p132 9.2 用触发器组成异步清零的4位寄存器********************************/
`include    "flop.v"
module  hardreg(d,clk,clrb,q);

input   [3:0]   d;
input   clk,clrb;
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

在这里插入图片描述

9.2 行为描述建模

p133 9.3 行为描述用触发器组成异步清零的4位寄存器
/******************************p133 9.3 行为描述用触发器组成异步清零的4位寄存器********************************/
module  hardreg(d,clk,clrb,q);

input   [3:0]   d;
input   clk,clrb;
output  [3:0]   q;

always@(posedge clk or posedge clrb)   begin
    if(clrb)    q<=0;
    else        q<=d;
end
        
endmodule
p135 9.4 对4位寄存器全面测试
/******************************p135 9.4 对4位寄存器全面测试********************************/
`include    "flop.v"
`include    "hardreg.v"

module  hardreg_top;

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  #5  clk=~clk;

//end_first_pass 事件内容
always@(end_first_pass)  begin
    clearb= ~clearb;
end 

//每个时钟上升沿,打印函数值
always@(posedge clock)  begin
    $display    ("at time %0d,clearb=%b,data=%d,qout=%d",$time,clearb,data,qout);
end

initial begin
    repeat(4)   begin   //重复4次产生操作
        data=4'b0000;
        `stim   0001;   //相当于   #100 data=4'b0001;
        `stim   0010;
        `stim   0011;
        `stim   0100;
        `stim   0101;
        ......
        `stim   1111;
        #200    ->end_first_pass;   //event的触发方式:#time触发的时刻 -> 事件名
        //先设置事件名,然后事件内容(clearb取反),然后触发
    end
    $finish;    //结束仿真
end

endmodule
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值