System Verilog视频学习笔记(10)- Inter-Thread Communication
Inter-Thread Communication(内部线程通信)
内容来自启芯-System Verilog视频
==============================================================
目录结构:
1、内部线程通信
2、event
3、semaphores
4、mailbox
5、总结
==============================================================
本章目标:
1、建立事件标志的执行流程(event)
2、避免资源冲突(semaphores)
3、数据传送(mailbox)
Inter-Thread Communication简称ITC,内部的线程通信需要通信。
1、内部线程通信
图1、三种机制:event、semaphores和mailbox
2、event
事件驱动,Event based,当前事件可驱动下个事件;分为三个过程声明事件,触发事件,执行事件。
图2、事件执行
图3、事件wait的语法
图4、触发语法
事件一般用于统计覆盖率,控制仿真的终止。当覆盖率达到100%,触发某事件。
3、semaphores
Semaphores就像一个桶,里面有钥匙,钥匙可以添加也可以删除。线程从Semaphores内获得钥匙,直到得到钥匙。
图5、semaphore类
图6、生成semaphores
图7、例子
以下是图7例子的过程
1、生成16个桶
2、每个桶里一个钥匙
3、拿到一个钥匙
4、执行
5、执行完毕后放回钥匙
以上过程类似仲裁
4、mailbox
mailbox建立数据通道,线程间数据的传输。
通过mailbox类实现
图8、mailbox类
创建mailbox
图9、生成mailbox
将数据放入mailbox
task put(message);
function int try_pu(message);
从mailbox获取信息,get
task get(ref message)
function int try_get(ref message);
5、总结
内部线程通信
一、线程执行顺序,通过event驱动事件执行
二、程序内部资源共享,但不能同时驱动,所以通过semaphores实现,相当从信号池中获得资源操作权限。
三、通过mailbox进行线程间的数据交互。