story · 2020年05月15日

SystemVerilog教程之Mailboxes

Mailboxes是一种在进程之间交换消息的机制。数据可以通过一个进程发送到Mailboxes,然后由另一个进程获取。

数据可以是任何有效的systemVerilog数据类型,包括类class数据类型。

SystemVerilog提供以下使用邮箱的方法。
6d8be862459caa73c99e907725a6fd6.png
非参数化Mailboxes是无类型的,即单个Mailboxes可以发送和接收不同类型的数据。

new()

使用new()方法创建邮箱。

function new(int bound = 0);

new()函数返回Mailboxes句柄,如果无法创建Mailboxes,则返回null。

如果bound参数为0,则Mailboxes是无界的(默认值),put()操作永远不会阻塞。

num()

可以通过num()方法获取Mailboxes中的数据数。

put()

put()方法在Mailboxes中放置一条数据。数据可以是任何单个表达式,包括对象句柄。

put()方法以严格的FIFO规则在Mailboxes中存储数据。

try\_put()

try\_put()方法尝试将数据放入Mailboxes中。如果Mailboxes已满,则该方法返回0。

get()

get()方法从Mailboxes中获取数据。如果Mailboxes为空,则当前进程将阻塞,直到Mailboxes中放入数据。

try\_get()

try\_get()方法尝试从Mailboxes中获取数据而不会阻塞。如果Mailboxes为空,则该方法返回0。

peek()

peek()方法从Mailboxes复制数据而不从队列中删除数据。如果Mailboxes为空,则当前进程将阻塞,直到Mailboxes中放入数据。

try\_peek()

try\_peek()方法尝试从Mailboxes中复制数据而不会被阻塞。如果Mailboxes为空,则该方法返回0。
80a6ba220c568706d937f07229f649f.png
f045b4f75c6d6e86aa1d999fe093e17.png

输出
62cf8eaf2369ba097cc88b10b3730c5.png



本文转载自公众号:芯片数字实验室
原文链接:
https://mp.weixin.qq.com/s/V1IVl-k9WDtZeJwcKud31Q
未经作者同意,请勿转载!

推荐阅读

想了解更多内容,欢迎关注芯片数字实验室专栏
推荐阅读
关注数
12263
内容数
192
前瞻性的眼光,和持之以恒的学习~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息