SV 线程内部通信

人生乱弹 2年前 (2024) admin
10 0

内容

时钟上升沿就是一个事件,event是一个关键字,可以触发事件
mailbox - 用于传递信息,将信息给到mailbox进行传递

内部线程通信

事件传递,对于线程进行控制
对于数据和资源进行传递

内部线程通信机制:Verilog event

event - 是一个数据类型
-> - 触发事件

begin
$display();
#10
-> // 不会阻塞线程的执行
$display();
end

仿真开始的时候两个initial会同时执行
先执行两个initial语句中的$display(在仿真的0时刻进行执行)

事件中的循环

event可以作为参数

阻塞事件触发和非阻塞事件触发

event e1,e2
initial begin
@(e1) $display(e1);
end

initial begin
@(e2) $display(e2);
end

a = 1,b=2,c=3;

initial begin
#1;
b <= a;
c <= b;
a <= c;
->> e1; // 非阻塞触发e1
-> e2; // 阻塞赋值触发e2
end

阻塞语句先执行,非阻塞语句后执行

旗语Semaphore

执行的时候,两个agent同时调用task agent,两个线程会对共享资源进行竞争,线程0和线程1会产生交替执行
使用semaphore进制可以实现资源的独占性,可以理解资源放在一个箱子里,线程使用的时候需要拥有自己的要是,一个线程用完之后,另外一个线程才能使用

共享资源在不同的进程中是互斥的
使用new(num)的时候,传入钥匙的数量

如果在执行get函数取钥匙的时候,取不到钥匙或者是钥匙数量不够,都会阻塞进程的执行,直到取到钥匙

mailbox

通过mailbox实现数据在两个进程之间传递
mailbox中没有数据的时候,线程也会等待
mailbox类似于一个fifo,可以设置一定的深度,mailbox满的时候,不能存储
mailbox是一个SV内建的类,提供了一些方法

创建mailbox对象的时候,new()不传入mailbox的深度,默认为没有深度,不会满

通过mailbox可以传递mailbox

通过一个事件传递进行同步

验证平台中的线程和内部通信

文章来源

版权声明:admin 发表于 2024年1月31日 am10:52。
转载请注明:SV 线程内部通信 | 银库

相关文章

本站主题由 OneNav 一为主题强力驱动