system verilog + uvm在并行仿真上的小思考

现象

今天在进行并行设计时,出现了在并行执行的前端,数据无法接收,后半段的数据可以正常接收。

验证代码结构

1、设计说明:整个并行执行,分为了三段,两个是forever语句,一个是定时语句。通过fork join_any包裹,实现并行执行和有效退出,避免程序死循环。
2:嵌套说明:程序调用时,采用了ref的方式定义task的入口参数;

分析过程

1、首先分析ref方式引用是不是造成了数据使用中的缓存冲突;将task的ref引用结构换成非ref形式,试验结果是所有的数据均不能接收,也不能正确处理;引用和处理为同一个内存地址时,在多个forever语句内部的数据才是一致的,能够保证数据的及时和准确处理。
2、其次怀疑是并行执行块执行时间远远晚于前面的写启动命令生效时间,导致错过了处理。第一步将执行控制语句加入到fork join_any的并行块中。程序总是很快的运行结束。----控制语句执行完毕后,就会跳出fork join_any的并行块,程序就会运行停止;
3、将控制语句和定制退出语句放在同一个begin end包围的块中,同其他两个forever语句并行执行。所有的数据都能正确接收和正确响应。

反思

1、在设计与forever有关的task时,采用ref方式生命参数变量可以有效的保证数据的一致性;
2、在并行执行过程中,如果控制语句的执行是有时间的,需要将控制语句和其他语句放在并行执行的控制块中,保证控制指令一经下发,能够及时接收到数据,及时响应处理;
3、设计代码一定要添加注释,同时检查变量的位宽,确保变量引用前后的一致性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值