• Testbench中阻塞赋值与非阻塞赋值


     1 module test();
     2 reg a;
     3 reg b;
     4 reg c;
     5 initial begin
     6   a=1'b0;
     7   b=1'b0;
     8   c=1'b1;
     9   
    10   #10
    11   a=1'b1;
    12   b=#5 1'b1;
    13   c=1'b0;
    14   //b=#5 1'b0;
    15   
    16   #5
    17   a<=1'b0;
    18   c<=#2 1'b1;
    19 end
    20 endmodule
    B=#5 1b1,使其后时钟推移,相当于#5 B=1'b1

     1 module test();
     2 reg a;
     3 reg b;
     4 reg c;
     5 initial begin
     6   a=1'b0;
     7   b=1'b0;
     8   c=1'b1;
     9   
    10   #10
    11   a=1'b1;
    12   b<=#5 1'b1;
    13   c=1'b0;
    14   //b=#5 1'b0;
    15   
    16   #5
    17   a<=1'b0;
    18   c<=#2 1'b1;
    19 end
    20 endmodule
    b<=#5 1'b1;只是本句延迟5单位,其后语句不受影响

     1 module test();
     2 reg a;
     3 reg b;
     4 reg c;
     5 initial 
     6 begin
     7   a=1'b0;
     8   b=1'b0;
     9   c=1'b1;
    10   
    11   #10
    12   a=1'b1;
    13   b<=#5 1'b1;
    14   c=1'b0;
    15   b=#5 1'b0;
    16   
    17   #5
    18   a<=1'b0;
    19   c<=#2 1'b1;
    20 end
    21 endmodule
    在同一时刻有<=和=,那么<=赋值生效,同时,电路时刻根据=往后推若干单位

    以上三个例子都是在说明,对于内延时,<=对其后语句没有影响,而=使其后语句延迟若干个单位。

     1 `timescale 10ns/ 1ns
     2 module test();
     3 reg a;
     4 reg b;
     5 reg c;
     6 reg d;
     7 initial begin
     8   a<=1;
     9   c<=1;
    10 end
    11 initial begin
    12   #5 a=0;
    13   b=a;
    14 end
    15 initial begin
    16   #5 c<=0;
    17   d<=c;
    18 end
    19 endmodule
    级联D触发器模型

    此时,不同的initial模块都在0时刻激活。在第一个initial语句,在时刻0,a和c均被赋值1,在第二个initial语句中,在时刻5,a被阻塞赋值0,在同一时刻,b被赋值a。而在第三个initial语句中,同样在时刻5 c被非阻塞赋值赋值0,在同一时刻d被非阻塞性赋值为之前c的值。

  • 相关阅读:
    丰富eclipse注解的内容
    ThreadLocal总结
    算法+结构?设计模式?
    面试需要准备内容
    HIbernate-0.8版本源码翻看
    2019第一篇博文
    随笔
    Expert one on one 读书笔记之容器
    Expert one on one development without ejb读书笔记
    Mysql索引部分学习关于多列索引的部分
  • 原文地址:https://www.cnblogs.com/fkl523/p/4029467.html
Copyright © 2020-2023  润新知