(6)systemverilog 随机化(一)

本文介绍了SystemVerilog中的随机化技术,包括随机化的基本概念、如何在SV中设置约束,以及约束求解的过程。通过示例展示了如何使用 rand 和 randc 修饰符、集合成员和inside运算符、条件约束、权重分布等,以实现更高效的测试激励生成。文章强调了约束在控制路径随机化中的重要性,并提醒读者注意不同仿真器的约束求解器可能产生的差异。
摘要由CSDN通过智能技术生成

systemverilog随机化

一、前言

随着设计变得越来越大,要产生一个完整的激励集来测试设计的功能变得越来越困难。可以编写一个定向测试集来检查某些功能项,但当一个项目的功能项成倍增加时,编写足够多的测试集就不可能了。更严重的是,这些功能集之间的关系是大多数错误(BUG)的来源,而且这种BUG很难按清单检查功能项的方法来排查。

解决的方法是采用受约束的随机测试法(CRT)自动产生测试集。准备CRT的环境要比准备定向测试集的环境复杂。然而,只要准备好了这个环境,你就可以运行上百次的仿真而无需手工检查结果,从而提高工作效率。这种用CPU时间来换取人工检查的时间的方法是CRT的优势。(CRT全称constrained randomized test,翻译为随机测试法。)

当你想采用随机化的技术产生激励时,首先想到的可能是产生随机化的数据,这种方法实现起来非常简单,只需要调用$random函数。问题是这种方法找到Bug的能力有限,它只能找到数据路径方面的Bug,或者Bit级的错误。这种测试方法的本质还是基于定向测试的方法。那些具有挑战性的Bug大都在控制路径里。因此,必须对DUT里所有的关键点都采用随机化的技术。随机化使控制路径里的每一个分支都可能被测试。

二、SV中的随机化

首先建立一个具有一组相关的随机变量的类,然后用随机函数为这些变量赋随机值。你可以用约束来限制这些随机值的范围,使它们是有效的值,可以测试某些专用的功能。下面是一个带有随机变量的简单类:

class Packet;
	rand bit [31:0]src,dst,data[8];
	randc bit [7:0]kind;
	constraint cstr{
   src>10;
					src<15;
	}
endclass
Packet p;
initial begin
	p=new();
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字IC小白的日常修炼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值