首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻塞与非阻塞分配

阻塞与非阻塞分配
EN

Stack Overflow用户
提问于 2013-09-23 05:15:36
回答 1查看 292关注 0票数 1

有人能解释一下延迟和延迟声明吗?

这是一个简单的逻辑,由(a,b,c)触发,并将a&b&c分配给d。

代码语言:javascript
复制
module abcd(input a,b,c,output d);
    reg d;
    always @ (a, b, c)
        begin
        // d = #5 a & b & c;  //intra-delay
      #5    d = a & b & c;        //delay statement
        end
endmodule 

module tb;
    reg a,b,c;
    wire d;

    abcd a0(a,b,c,d);
    initial
        begin
            $monitor("time=%d, a=%b, b=%b, c=%b, d=%b",$time,a,b,c,d);
            a=0; b=0; c=0;
            #4 a=1; b=1; c=1;   //4
            #1 a=0; //5
            #1 a=1; //6
            #1 a=0; //7
            #1 a=1; //8
            #1 a=0; //9
            #1 a=1; //10
            #1 a=0; //11
            #1 a=1; //12
            #1 a=0; //13

            #100 $finish;
        end
endmodule

如果使用内部延迟,则结果如下所示

代码语言:javascript
复制
time=                   0, a=0, b=0, c=0, d=x
time=                   4, a=1, b=1, c=1, d=x
time=                   5, a=0, b=1, c=1, d=0
time=                   6, a=1, b=1, c=1, d=0
time=                   7, a=0, b=1, c=1, d=0
time=                   8, a=1, b=1, c=1, d=0
time=                   9, a=0, b=1, c=1, d=0
time=                  10, a=1, b=1, c=1, d=0
time=                  11, a=0, b=1, c=1, d=0
time=                  12, a=1, b=1, c=1, d=0
time=                  13, a=0, b=1, c=1, d=0
time=                  15, a=0, b=1, c=1, d=1

如果使用延迟语句,则结果如下所示。

代码语言:javascript
复制
time=                   0, a=0, b=0, c=0, d=x
time=                   4, a=1, b=1, c=1, d=x
time=                   5, a=0, b=1, c=1, d=1
time=                   6, a=1, b=1, c=1, d=1
time=                   7, a=0, b=1, c=1, d=1
time=                   8, a=1, b=1, c=1, d=1
time=                   9, a=0, b=1, c=1, d=1
time=                  10, a=1, b=1, c=1, d=0
time=                  11, a=0, b=1, c=1, d=0
time=                  12, a=1, b=1, c=1, d=0
time=                  13, a=0, b=1, c=1, d=0

有人能解释一下这种区别吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-23 09:08:44

间延迟

等待指定的延迟,然后执行命令。

所以:

代码语言:javascript
复制
#5    d = a & b & c;

将完全等待5时间步骤,然后执行并将a &b& c分配给d

内延迟

立即执行该命令并存储该值。在指定的延迟后分配值。

所以:

代码语言:javascript
复制
d = #5 a & b & c;

将存储a &b& c的结果,并将其分配给d,确切地说是5时间步骤。

至于解释你的产出:

间延迟

始终块在执行a&b& c之前等待5个时间步骤,并在执行命令时在5个时间步骤之前获得值。在5个时间步骤之前,它是x,因为它是未分配的。在5个时间步骤中,它使用a=1、b=1、c=1执行a&b&c (值为4个时间步骤),并使用d=1。

D将保持此值,直到5个进一步的时间步骤,其中它将执行a&b&c的值在9个时间步骤。这将导致d=0。D将保持在0,在5个进一步的时间步骤。

这个循环会重复,直到你告诉$finish。

内延迟

在5个时间步骤之前,没有分配任何内容,因此输出为x。

time=0 a&c和a=0,b=0,c=0引起d=0被执行,并将在time=5分配。

time=5 a&c与a=0、b=1、c=1导致d=0一起执行。这将在time=10分配。

time=10 a&c由a=1、b=1、c=1引起d=1执行。这将在time=15分配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18952159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档