testbench 中延时(#)的使用注意事项

 想把 a,b的和  延时12ns后赋值给c,   a,b分别在 0 、10ns变化

initial begin
    a = 0;
    b = 0;

    #10
    a = 1;
end

c 只有非阻塞式右延时可以实现完全的跟踪 ,分别在12ns从x变为0, 22ns变为1

always @(a or b)
    c     <= #12 a+b;


或者

always @(a or b or temp)begin
    temp  <= #12 a+b;
    c     <=     temp
end

或者

always @(a or b or temp)begin
    temp  <=     a+b;
    c     <= #12 temp
end

阻塞赋值是执行完一条再执行下一条,本条没有执行完,不会执行下一条,包括敏感信号在内,也是循环执行的

 下面的情况只会在 12ns时赋值为 10ns 时刻的结果

阻塞式或者非阻塞式  左赋值
1>
always @(a or b)
   #12  c <=  a+b;

2>
always @(a or b or temp)begin
   #12  temp <=  a+b;
        c    <=  temp;
end

3>
always @(a or b)
    #12 c = a+b;

4>
always @(a or b)begin
    #12
    c =  a+b;
end

 下面的情况只会在 12ns时赋值为 0 时刻的结果

阻塞式右赋值
1>
always @(a or b)
    c = #12 a+b;

2>
always @(a or b)begin
    temp =  a+b;
    #12
    c = temp;
end

下面的情况只会在ab都稳定后的22秒才会赋值

assign  #12 c =  a + b;

而下面的情况编译直接报错

assign  c =  #12  a + b;

参考:Verilog语言设计延时的正确方法 - 百度文库,但是assign部分的内容不对

https://www.cnblogs.com/soony/p/14666159.html

阻塞赋值     是 begin - end 之间的语句 顺序执行,然后重新 always 卡住

非阻塞赋值 是 begin - end 之间的语句 并行执行,然后重新 always 卡住

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值