SystemVerilog验证 测试平台编写指南 第六章 随机化 上

本文介绍了SystemVerilog在验证中的随机化技术,强调了受约束的随机测试(CRT)的重要性,它能自动生成测试用例,覆盖多种情况。文章详细讲解了随机化的关键要素,包括需要随机化的设计点、SystemVerilog中的随机化机制、随机化结果的检查、约束表达式以及如何控制和指导随机化过程。此外,还讨论了随机化函数和种子设置,以确保测试平台的高效性和覆盖率。
摘要由CSDN通过智能技术生成

6.1 介绍
原因:产生完整的激励集测试设计的功能越来越困难,编写足够的定向测试集变得不可能;功能项的关系是大多错误的来源,该错误很难通过清单检查方法排除。
采用受约束的随机测试法(CRT:constrained random test)自动产生测试集。
CRT环境不仅需要产生激励,还需要通过参考模型、传输函数或其它方法来预测输出结果。
CRT由两部分组成:使用随机的数据流为DUT产生输入的测试代码,以及伪随机数发生器(PRNG)的种子(seed)。
6.2 什么需要随机化
必须对DUT里的所有关键点都采用随机化的技术。随机化使控制路径里的每一个分支都可能被测试
考虑设计输入的各个方面,如:
(1)器件配置;
在RTL级的设计中,需要测试足够多的配置。
(2)环境配置;
通常你设计的器件在一个包含了若干个器件的环境里工作。当验证DUT的时,它连接到一个模拟了这种环境的测试平台。你应该随机化整个环境,包括对象的数量以及它们如何配置。
(3)原始数据输入;
(4)封装后的输入数据;
(5)协议异常、错误(error)和违规(violation);
任何有可能出错的地方最终都会出错。好的验证工程师会测试设计在设计规范边界处的行为,甚至测试在设计规范之外的行为。
测试平台应该能够产生功能正确的激励,然后通过翻转某一个配置位,在随机的时间间隔里产生随机的错误类型。
(6)延时;
测试平台应该在每一个测试里都使用随机的、有效的延时,以便于发现设计中的Bug。
(7)事务状态
6.3 System Verilog中的随机化
当和OOP同时使用时,System Verilog中的随机激励产生是最有效的。首先建立一个具有一组相关的随机变量的类,然后用随机函数为这些变量赋随机值,并用约束来限制随机值的范围。受约束的随机激励是在事务级产生的,通常不会一次只产生一个值。
6.3.1 带有随机变量的简单类
例6.1 简单的随机类

class packet;
	//随机变量
	rand bit [31:0] src, dst, data[8]; 
	randc bit [7:0] kind; 
	//src的约束
	constraint c {src > 10;
					src<15;} 
endclass

Packet p;
	initial begin
	p=new(); // 产生一个包
	assert (p.randomize());//断言,随机化成功,函数返回1
	else $fatal(0,“Packet::randomize failed”); //随机化失败,函数返回0,并显示错误信息
	transmit (p);
end

普通随机数rand 修饰符,每次随机化这个类时,这些变量都会赋一个值。
循环随机数randc修饰符,周期随机性,即所有可能的值赋过值后随机值才可能重复。
约束是一组用来确定变量的值的范围的关系表达式,表达式的值永远为真。约束表达式放在{…}括号中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值