微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > system Verilog中异步线程使用信箱通信

system Verilog中异步线程使用信箱通信

时间:10-02 整理:3721RD 点击:

最近在看sv,其中有个问题问大家一下,哪位能解惑一下,谢谢。下面是绿皮书上的一个程序块
program automatic unsynchronized
mailbox mbx;
class Producer;
task run();
for(int i=1; i<4; i++) begin
$display("Producer: before put(%0d)", i);
mbx.put(i);
end
endtask
endclass
class Consumer
task run();
int i;
repeat (3) begin
mbx.get(i);
$display("Consumer: after get(%0d)", i);
end
endtask
endclass
initial begin
mbx = new();
p = new();
c = new();
fork
p.run();
c.run();
join
end
endprogram
书上说程序执行时,先put方法执行完,在执行get方法。这里不理解为什么全部执行完put方法,才进行get方法。我的想法是get开始阻塞,执行一个put后不就可以get到了吗,本来fork ..join,里面两个任务不是并行执行吗?
哪位大神解答一下疑惑,, 十分感谢。

书上没说全部执行完吧?觉得你的想法没错。

执行速度太快,在get前一瞬间就全put进去了,你在后面加个延时就可以看出来了

verilog设计与综合中有提到过,并行块中的语句虽然是同时执行,但是在实际运行中CPU只能执行一条语句,仿真器不同执行顺序也不同。
我觉得和这个有关系,估计一般仿真器都是默认顺序执行。

是的,加个延时可以看出来。谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top