现在,根据RTL级(Register Transfer Level)的SoC(System-on-Chip)验证技能存在着许多局限性。这是由于:(1)SoC硬件部分的结构越来越杂乱,致使在RTL级进行SoC验证的时刻开支越来越大[1-2]; (2)在RTL级,SoC的硬件和软件部分需求别离选用硬件描绘言语和高档言语进行描绘,这不只增加了软、硬件规划和验证人员间在交流上的困难,并且增加了体系规划人员对软、硬件区分计划进行评价的困难[3];(3)规划完结SoC硬件体系的RTL级模型后,才干进行SoC软、硬件体系的协同仿真和验证,增加了SoC体系发生功用性过错的可能性,延长了体系的开发周期[4-5]。因而,使SoC的验证作业从更高笼统级的体系级开端进行,然后尽早地发现功用性过错,缩短SoC体系的开发周期是十分必要的。
在SoC的验证作业中,最重要的问题是构建测验渠道TB(Test Bench),而构建测验渠道的中心则是规划测验向量TC(Test Case)。因而,较短的测验向量的生成时刻以及较高的测验向量的功用覆盖率就成为验证作业中最为要害的问题。现在,选用随机测验向量的验证办法被认为是处理这一问题最快捷和最有用的验证办法[2],该办法的特征便是随机地从被验证目标DUV(Design Under Verification)测验鼓励输入域中恣意地或恰当加以操控地选取测验向量。因而,怎么随机地生成测验向量是进行随机验证的要害。
SCV(SystemC Verification Standard)是OSCI(Open SystemC Initiative)安排发布的体系级验证标准,是一种根据SystemC类库的揭露源代码的C++类库,SCV验证库能够供给直接随机测验、带权重的随机测验和带束缚的随机测验三种向量的生成办法。因而,SCV标准答应用户在较高的笼统级上构建测验渠道并答应用户随机地写入测验程序,具有灵活性高、测验渠道可复用、验证周期短等特色。
本文将根据SystemC和SCV验证库来创立体系级的测验渠道,经过对一个具有4×4包交流功用的体系级模型的验证,来研讨根据随机向量的SoC体系级的功用验证办法。
1 体系级功用测验渠道
SoC体系级的功用验证是针对SoC体系级的功用模型进行的验证,其意图是验证SoC体系级功用模型是否契合功用标准阐明的要求。在进行功用验证前,首要应根据功用标准阐明树立测验渠道,其间心内容是规划测验向量。测验渠道不只能够将测验向量输入到被验证目标上,并且能够获取被验证目标发生的成果,该成果能够用来断定被验证目标功用的正确性,如图1所示。
为了验证随机测验在SoC体系级进行功用验证的有用性,在体系级构建以AMBA总线为中心、以CPU为主设备、以存储器和4×4包交流模块为从设备的SoC功用模型,并针对4×4包交流模块的功用进行测验。
体系级测验渠道的中心由4个发送模块(Sender0~Sender3)、4个接纳模块(Receiver0~Receiver3)和4×4包交流模块组成,如图2所示。其间发送模块用来随机地生成数据包并将数据包送入包交流模块;接纳模块用来从包交流芯片中读取数据包。
4×4包交流模块主要由4个带FIFO的输入/输出端口(IN0~IN3,OUT0~OUT3)和4个移位寄存器(R0~R3)组成,待交流的数据包则由16位组成,别离为4位意图端口号、4位源端口号以及8位交流数据。该包交流芯片的主要功用标准如下:
(1)每个端口均能够正确地发送或许接纳数据包。
(2)每个输入端口均能够正确地将数据包发送到多个不同的端口。
(3)移位寄存器能够从对应的FIFO中正确地读取数据包,并按R3→R2→R1→R0→R3的次序进行移位。
(4)每个输出端口均能够正确地按设定的份额输出数据包。
(5)输入端口FIFO为空时,数据包能够送入该FIFO; 输入端口FIFO为满时,数据包不能送入该FIFO。
2 测验向量和验证成果
一般,根据SCV随机测验向量的验证作业分为随机验证环境装备、根据直接随机测验向量的验证、根据带权重的随机测验向量的验证以及根据带束缚的随机测验向量的验证四个阶段。本文的验证环境树立在Sun Blade 2000作业站上,经过集成SCV验证库以及相应的编译、衔接和调试东西构建而成。4×4包交流芯片体系级功用模型的验证作业在各阶段的时刻开支别离为30h、15h、35h和45h。
2.1 根据直接随机测验向量的验证
针对标准1~标准3的验证,选用直接随机测验向量的验证办法。在描绘中,包的数据部分被界说为sc_int8>的整数类型,它的有用数值规模是[-128,127];包的意图端口号被界说为dest[0]~dest[3]的布尔变量类型,它的有用数值规模是[0,15];而包的源端口号则在实例化的进程中被别离对应标记为0~3。因而,选用SCV生成直接随机测验向量用数据包的进程主要是随机化包的意图端口号和包的交流数据,如下所示:
//生成包的意图端口号
sc_uint4> dest;
scv_smart_ptrd;
d->keep_only(1,15);
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];
//生成包的交流数据
scv_smart_ptrp;
p->keep_only(-128,127);
p->next();
pkt_data.data=(sc_int8>)*p;
从生成的10 000个随机数据包中恣意截取10个,得到如表1所示的成果。由表1能够看出:
(1)包的意图端口号是随机的数字0~3,包的数据是随机的数据-128~+127。
(2)输入模块能够正确地将发送包送入各个输入端口,
输出模块能够正确地从输出端口读出输出包。
(3)发送包意图端口号的个数等于输出包的总数。
以上成果表明,4×4包交流芯片体系级模型的每个端口均能够正确地发送或许接纳数据包,每个输入端口均能够正确地将数据包传送到多个不同的端口。
在某时刻段内,收集R0~R3移位前后的数值,得到如表2所示的成果。 由表2能够看出:
(1)若FIFO中有新的数据包,则各个寄存器能够从对应的FIFO中正确地读取这些新的数据包;不然,各个寄存器将坚持当时值。
(2)各个寄存器接纳新的数据后就进行移位,移位的次序是R3→R2→R1→R0→R3。
2.2 根据带权重的随机测验向量的验证
针对标准4的验证,选用带权重的随机测验向量的验证办法。在测验中,端口0作为测验向量的输入端口,端口0、1、2、3作为测验向量的输出端口。其间,端口0、1、2、3的包输出份额别离为70%、10%、10%和10%。因而,选用SCV生成Sender0带权重的随机测验向量用数据包描绘为:
if(pkt_data.id==0)
{scv_bagdist; //界说含权重散布信息的包用于随机化
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)直接随机测验向量生成办法适用于做黑盒测验验证,适于对验证目标进行定性分析;带权重的随机测验向量和带束缚的随机测验向量办法适用于做白盒测验验证,适于对验证目标做定量分析。