影响仿真效率的随机约束写法(多层foreach)和随机数据bit位宽表示

通过分析,对IC环境的随机效率影响较大的主要是随机constraint中有较多的多层(2层)foreach,和一些数据位宽选择较大。


下面通过比对修改前后的仿真结果,探讨一下随机约束中多层foreach和bit位宽对随机效率和机器资源的影响。

随机约束写法一表示修改之前的写法,随机约束写法二代表修改后的写法。

随机约束写法一:

1. 多层foreach约束动态数组

一维动态数组,取值在一个范围内各不相同


注:IC环境中这类变量有242个

 

2. int型数组表示二进制值

一维动态数组,随机分布N个1,用于产生随机时序


注:IC环境中这类变量有103个

 

随机约束写法二:

1. 修改多层foreach循环的约束方法,自定义函数实现

修改方法:使用randc的方式自己产生,

1)封装一个函数,产生特定范围内的随机序列



2)使用for循序,每次调用该class进行随机,得到各不相同的随机序列

在pre_randomize或者post_randomize中,调用该class

new时输入最大范围,循序数组大小相应的次数


2. 使用较少的bit范围表示数据

例如: 使用数组产生特定数目的1,在长度为48的数组中,产生随机分布的12个1,使用单bit类型:


注意:vcs和irun对.sum语法的支持不同,

vcs支持直接使用 a.sum == 12,但是不支持a.sum with(int'(item)) == 12

ius则与vcs相反。

仿真结果分析:

使用IUS仿真器,在仿真时使用-profile选项得到资源信息。

使用同一机器、在负载相同的情况下,用同样的种子仿真同一用例、

1. 仿真时间

方法一:


耗时36分16秒

方法二:


耗时23分53秒,仿真时间节省36%

2. 内存和CPU时间

方法一:


方法二:


Memory节省4%,CPU Usage节省约35%

3. 随机占用总的资源和时间

方法一:


 

方法二:


 

随机时间消耗降低了85%,随机已经不再是仿真的第一消耗。

在《Systemverilog for verification, 2nd edition》中,提到关于foreach的代价:

Using the foreach constraint creates many constraints that can slow down simulation. A good solver can quickly solve hundreds of constraints but may slow down with thousands. Especially slow are nested foreach constraints, as they produce N 2 constraints for an array of size N .

上面针对两层foreach的修改就是采用其中推荐的方法。

IC的环境相对还是比较简单的,只是需要随机的场景和参数较多,对于其他规模较大的模块或者ST环境,编写随机环境时可以适当考虑不同写法对效率和资源的影响。

 

在编写随机环境方面,如果有一个推荐的写作方法指导或者典型的应用,或者类似checklist之类的指南,给出不同方法对效率的影响,那对开发随机环境将具有很大的帮助。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值