首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有延迟的非阻塞语句

具有延迟的非阻塞语句
EN

Stack Overflow用户
提问于 2019-09-01 07:37:14
回答 1查看 462关注 0票数 0
代码语言:javascript
复制
always@(a)
begin
#1 t<=a;
#1 c<=t;
end

我正在用下面的测试平台分析上面的verilog代码

代码语言:javascript
复制
   a=0;
#5 a=1;
#5 a=0;
#5 a=1;
#5;

下面是我的分析:从上面的测试平台上,我可以看出'a‘是一个时钟信号,它的长度为20 ns,关闭时间为5ns,两个respectively.At都是0 ns,'a’从X变为0。因此,块获取triggered.since的第一条语句在块内有1ns的内部延迟,等待1ns。当1ns编译器知道它是非阻塞语句后,就不会执行assignment.hence 'a‘值,它将作为临时的并行存储,执行第二个statement.since,第二个也有内部延迟,等待1ns。然后评估是done.since,两种评估都完成了,现在就会有作业了。

代码语言:javascript
复制
    time   a   t   c
    0ns    0   x   x
    1ns    0   x   x
    2ns    0   x   x
    3ns    0   0   x
    4ns    0   0   x

这个分析正确吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-01 10:53:50

不,这不是发生的事情,非阻塞作业的工作方式与你描述的不同。

您是对的,非阻塞语句的实际分配将被推迟,“稍后”执行。但“晚些时候”是什么时候?

当没有更多突出的阻塞事件时,将处理‘no阻塞’事件。但在处理延迟之前。因此,一旦模拟器看到它必须处理您的#1,它首先处理所有非阻塞分配,然后才开始处理延迟。

这意味着即使在启动#1延迟之前,t就已经收到了a的值。

在Verilog标准中有一个完整的章节,它描述了应该按照什么顺序执行各种“操作”。

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

https://stackoverflow.com/questions/57744055

复制
相关文章

相似问题

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