线程间同步和通信,event semaphore mailbox

本文详细介绍了线程间的同步和通信技术,包括事件(event)、旗语(semaphore)和信箱(mailbox)的使用。事件通过wait_order()实现顺序控制,旗语提供钥匙管理实现资源互斥访问,信箱则用于进程间的数据交换。通过示例代码展示了如何在Verilog中应用这些机制,确保线程安全和数据一致性。

1. 概述

  • 测试平台中的所有线程都需要同步并交换数据
  • 一个线程等待另外一个,例如验证环境需要等待所有激励结束、比较结束才可以结束仿真
  • 比如检测器需要将将测到的数据发送至比较器,比较器又需要从不同的缓存获取数据进行比较

2. 事件event

  • 可以通过event来声明一个命名event变量,并且去触发它
  • 这个命名event可以用来控制进程的执行
  • 可以通过->来触发事件
  • 其他等待该事件的进程可以通过@操作符或者wait()来检查event触发状态来完成
`timescale 1ns/1ns
module tb7;
  event e1, e2, e3;

  task automatic wait_event(event e, string name);
    $display("@%t start waiting event %s", $time, name);
    @e;
    $display("@%t finish waiting event %s", $time, name);
  endtask

  initial begin
    fork
      wait_event(e1, "e1");
      wait_event(e2, "e2");
      wait_event(e3, "e3");
    join
  end

  initial begin
    fork
      begin #10ns -> e1; end
      begin #20ns -> e2; end
      begin #30ns -> e3; end
    join
  end

endmodule

在这里插入图片描述

module tb8;
  bit e1, e2, e3;

  task automatic wait_event(ref bit e, input string name);
    $display("@%t start waiting event %s", $time, name);
    @e;
    $d
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值