在近期的一个testcase调试中,遇到一个std::randomize随机结果不符合预期的现象。
在testcase中设计一个结构体队列,然后使用std::randomize对结构体中的某个参数进行随机赋值,randomize的使用是std::randomize(s_item_list[i].AA) with {...}, code抽象如下:
使用VCS编译仿真后得到结果如下:
从结果可以看到,虽然约束了结构体里参数AA的范围是大于等于1,小于3,但仍出现了随机结果为0的情况。这显然不符合预期。
思绪良久,没看出问题所在。只能打开SV手册来查阅,针对std::randmozie的说明可参考SV语法手册的18.12小节。从中还是发现了一些可疑之处:
The scope randomize function, std::randomize(), enables users to randomize data in the currentscope without the need to define a class or instantiate a class object.
...
The std::randomize() with form of the scope randomize function allows users to specify randomconstraints to be applied to the local scope variables.
看起来像是和scope有关系,因此又设计了class内普通变量,结构体变量,结构体队列变量,class变量,class队列变量,进行测试。设计的测试代码如下:
仿真的结果如下:
总结规律,randomize(VAR),
当VAR是结构体里的变量(s_item.AA)、class里的变量(c_item.AA)、普通变量(int,bit)时,randomize行为正常;
当VAR是结构体队列中某个元素的变量(s_item_list[i].AA)、class队列中某个元素的变量(c_item_list[i].AA),randomize随机行为不符合预期。
随机结果不符合预期,EDA工具却没有给出warning或者error。为了确认其原因,就换了XRUN工具,看看是否能够复现该问题。
切换XRUN工具后,直接在编译阶段fail;
XRUN给出了原因说明:The argument to scope randomize must be a simple identifier of integral.
所以在std::randomize的使用时,需要主要传入的参数需要是普通型变量,避免队列中元素的索引。
审核编辑:刘清
-
EDA工具
+关注
关注
4文章
266浏览量
31758 -
仿真器
+关注
关注
14文章
1016浏览量
83695 -
STD
+关注
关注
0文章
36浏览量
14351 -
VCS
+关注
关注
0文章
79浏览量
9595
原文标题:std::randomize,没那么简单
文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
使用TL071B设计电流检测电路,直流传输特性曲线一直不符合预期,是什么原因?
使用该电路进行放大电路仿真,其放大倍数与公式不符合,为什么?
用tina进行ths4271的单电源仿真,结果与datesheet不符合,为什么?
MULTISIM测量的电流怎么不符合KCL定律呀
modelsim仿真结果不符合逻辑
modelsim仿真结果不符合逻辑
求教功放电路结果失真,参数不符合要求
捕获结果不符合预期
CCC厂检常见的不符合项及对应的整改方案,看这一篇就够了!
ADS8699数据手册Output Data Word与实际输出不符合
E类功率放大电路,仿真波形输出不是方波而是三角波?与预期幅值、波形等方面都不符合?
传博通收购高通谈判破裂 博通报价不符合高通股东最佳利益
索尼移动业务不符合预期,已找到症结所在

评论