电力电子转战数字IC20220630day36——路科实验3a

要求1

 首先将package和tb这个模块分成两个文件来存放。遇到一个新的东西,以及读完代码后的一些不了解的知识点如下

semaphore

[SV]SystemVerilog Semaphore_sec 王的博客-CSDN博客SemaphoreSemaphore是一个SystemVerilog内置类,用于对共享资源的访问控制和基本同步。信号量就像一个包含键数的桶。使用信号量的进程必须首先从bucket中获取一个键,然后才能继续执行。所有其他进程必须等待,直到有足够数量的键返回到bucket。假设有两个进程试图访问一个共享内存区域。其中一个进程试图写入,而另一个进程试图读取相同的内存位置。这导致一个不可预测的结果。信号量可以用来克服这种情况。Semaphore 语法semaph...https://blog.csdn.net/qq_39876540/article/details/124421896

mailbox

SystemVerilog教程之Mailboxes - 知乎Mailboxes是一种在进程之间交换消息的机制。数据可以通过一个进程发送到Mailboxes,然后由另一个进程获取。 数据可以是任何有效的systemVerilog数据类型,包括类class数据类型。 SystemVerilog提供以下使用邮箱的…https://zhuanlan.zhihu.com/p/87845018

Mailboxes是一种在进程之间交换消息的机制。数据可以通过一个进程发送到Mailboxes,然后由另一个进程获取。数据可以是任何有效的systemVerilog数据类型,包括类class数据类型。

也就是线程之间的fifo

【路科V0】systemVerilog基础17——线程的通信_桐桐花的博客-CSDN博客_sv中mailbox信箱mailbox线程通信的三个类型:eventsemaphoremailboxmailbox信箱,顾名思义,可以用来收发信息。在SV中,mailbox可以用来存放任何数据类型,也可以从信箱中读取这些数据信箱可以设置尺寸大小,防止存储数据过多,或者占用过多资源信箱存放数据的方式,是同FIFO一致的,即先存放进来的数据,也会被先读出信箱mailbox的内建方法//创建信箱: new ()//将信息写...https://blog.csdn.net/weixin_41788560/article/details/124119656

 assert断言

SV之Assertions 断言_bleauchat的博客-CSDN博客_sv断言目录SV中的断言Building blocks of SVA SV断言中的内建块SVA Sequence 和 propertyImplication operator 关联操作SVA built in methodsdisable iff and ended constructVariable delay in SVA SVA中的可变延时多时钟Mul...https://blog.csdn.net/bleauchat/article/details/90415146简单看成if

iff

Systemverilog中的iff事件控制_小苍蝇别闹的博客-CSDN博客_sv中iff使用systemverilog已经有一段时间了,主要是其中的部分新特性能够简化代码的编写,比如interface、支持多维端口等。为了进一步深入学习systemverilog,最近抽空更广泛的学习了一些systemverilog的内容。本文记录一下Systemverilog中的事件控制和sequence控制相关内容的学习情况。1. 事件控制1.1 iffSystemverilog在@事件控制中添加了iff修饰词,只有当iff后的条件为真时,@事件才会触发。注意,iff可以在always和alwahttps://blog.csdn.net/yinyeyy/article/details/111086864

event

SystemVerilog: 事件控制event_ucanredo的博客-CSDN博客_system verilog的event参考文献:https://www.chipverify.com/systemverilog/systemverilog-eventevent和旗语semaphore以及mailbox都是用于线程间的通信(IPC),负责线程之间的数据交换和同步。EVENT事件是静态的同步对象句柄(可以像参数一样在子程序中传递),它用来同步多个并发的进程,比如某个进程等待着事件,而另一个进程则触发这个事件。几...https://blog.csdn.net/weixin_43249032/article/details/84035517

首先来理清层次和结构 

basic_test

new函数将name给到父类中的new

执行父类root_test中的do_config后

分别对三个通道进行约束(数量,间隔,数据尺寸)

root_test

声明8个句柄

拿到子类的new后,对所有的class进行例化(checker,3agent,3gen,mcdt_monitor),一共八个。

将generator中的两个信箱的ch_trans,通过initiator传送给agent

将checker的in信箱的mon_data_t,通过monitor传送给agent

将checker的out信箱的mon_data_t,通过monitor传送给mcdt_monitor

gen和run停下来的反馈?这两个task看不太懂

3个agent、3个gen、mcdt_mon和checker同时run起来,出现gen_stop_e就停止gen

3个通道的接口给到agent(通过set_interface),mcdt的接口给到mcdt_mon(通过set_interface)


这里将结构分成数据处理的部分gen+init=agent,数据监测部分monitor=ch+mcdt的mon,比较数据部分checker

agent

对initiator和ch_monitor做了三件事:命名与例化(new),接口的连接(set_interface),运行起来(run)

作为一个中间商

generator

例化两个信箱req_mb和rsp_mb(信箱的位置是在这,其他都是传送句柄(数据包)),信箱存放的是类(ch_trans)的句柄req和rsp
根据最上面basic_test给出的约束条件,给出相应的ntrans个数据包trans,放入req和拿出rsp

initiator

命名new和连接set_interface

run和drive:取出gen的req信箱中的req,用ch_write发送出去,复制req到rsp(克隆函数),点亮trans中的rsp(bit位),将rsp(句柄)给回到gen的rsp信箱

ch_trans

最底层,被传送的,这是一个数据包,包括数据+id+间隔,每个trans都有一定数量的数据及其通道id等,每个trans之间都有间隔

上面initiator提到的克隆函数也在这里

monitor

ch_monitor

new命名和接口set_interface

存放data和id的信箱,如果输入端数据有效且ready,就放到mon_data_t,再放到信箱中

mcdt_monitor

同上,new和接口

同样的信箱,如果mcdt输出端有效,就放到mon_data_t,再放到信箱中

checker

例化上面monitor中的信箱,也就是说上面只是句柄,这里才是信箱的位置

一共例化3个in1个out,四个信箱

先拿out的句柄,case对应3个id去取对应通道的句柄,比较数据,如果不一样,error+1,比较完comp+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值