基于随机测试的SoC系统级功能验证方法的研究
dist.add(1,70); //定义OUT0的输出比例
dist.add(2,10); //定义OUT1的输出比例
dist.add(4,10); //定义OUT2的输出比例
dist.add(8,10); //定义OUT3的输出比例
scv_smart_ptrd; //对带权重的包随机化
d->set_mode(dist);
d->next();
dest=(sc_uint4>)*d; //赋数据包目的端口号
pkt_data.dest0=dest[0];
pkt_data.dest1=dest[1];
pkt_data.dest2=dest[2];
pkt_data.dest3=dest[3];
}
使Sender0生成10 000个随机数据包,得到如表3所示的结果。可以看出:每个输出端口输出数据包数目的比例与设定比例基本一致。
2.3 基于带约束的随机测试向量的验证
针对规范5的验证,采用带约束的随机测试向量的验证方法。在验证中,采用的验证策略为:当FIFO1非空时,Sender1发送非正整数的数据包;当FIFO1为空时,Sender1发送正整数的数据包。因此,采用SCV生成Sender1带约束的随机测试向量用数据包的约束定义为:
class fifoconstraint: public scv_constraint_base{
public:
scv_smart_ptr data;
scv_smart_ptr fifo.in1.status;
SCV_CONSTRAINT_CTOR (fifoconstraint){
SCV_CONSTRAINT(*data=0!fifo.in1.
status);
SCV_CONSTRAINT(*data>0 fifo.in1.status);}
};
在某时间段内,从生成的10 000个随机数据包中,采集一部分FIFO1和各端口中的数值,得到如表4所示的结果。由表4可以看出,当发送包的数据部分为非正整数时,FIFO1无交换数据输入,输出端也无交换数据输出;当发送包的数据部分为正整数时,FIFO1读入交换数据,相应输出端也输出交换数据。即当FIFO1非空时,Sender1发送了非正整数的数据包,表示数据包不能送入FIFO1;当FIFO1为空时,Sender1发送了正整数的数据包,数据包可以送入FIFO1。
从SoC的RTL级开始进行的验证工作容易造成设计周期的长跌宕,因此,在更高层次的系统级寻求高效的功能验证方法具有十分重要的现实意义。实验结果表明,本文提出的基于随机向量的SoC系统级功能验证方法,不仅能够获得较好的功能覆盖率,而且能够尽早地发现SoC的功能性错误。此外,还说明:
(1)三种随机验证方法对功能规范的依赖程度、时间开销和验证效率不尽相同。直接随机测试向量生成方法对功能规范的依赖程度最低,但时间开销最高、验证效率最低;带权重的随机测试向量生成方法对功能规范的依赖程度较高,但时间开销最低、验证效率较高;带约束的随机测试向量生成方法对功能规范的依赖程度最高,但时间开销较高、验证效率最高。在实际的验证工作中可以选择其中一种或组合两种以上的方法进行验证。
(2)直接随机测试向量生成方法适用于做黑盒测试验证,适于对验证对象进行定性分析;带权重的随机测试向量和带约束的随机测试向量方法适用于做白盒测试验证,适于对验证对象做定量分析。
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
