我试图了解进程如何在systemverilog环境中进行通信。具体来说,我在这里查看代码: https://www.verificationguide.com/p/systemverilog-mailbox.html 总结如下:
//Generator
task run;
repeat(2) begin
pkt = new();
pkt.randomize(); //generating packet
m_box.put(pkt); //putting packet into mailbox
$display("Generator::Packet Put into Mailbox");
#5;
end
endtask
//driver
task run;
repeat(2) begin
m_box.get(pkt); //getting packet from mailbox
$display("Driver::Packet Recived");
$display("Driver::Addr=%0d,Data=%0d\n",pkt.addr,pkt.data);
end
endtask
//start two processes
fork
dri.run(); //Process-2
gen.run(); //Process-1
join here
通信的摘要是,生成器创建了一个对象并将其放置在邮箱中,而驱动程序从共享邮箱中使用了该对象。当测试台分叉两个进程时,两个线程正在进行生产者/消费者握手。我想了解如何安排两个流程。这就是我的想法。
这是正确的吗? 另外,步骤3和步骤6之间的主要区别是什么?它们都处于生成器进程正在等待模拟时间提前而驱动程序进程正在等待邮箱被填充的状态。唯一的区别是邮箱在步骤3中有内容,但在步骤6中没有。调度程序必须具有某种机制来知道有一些进程正在等待邮箱,并且不应在步骤3中提前仿真时间。要详细了解此机制,什么是很好的阅读材料?