基于隨機(jī)測(cè)試的SoC系統(tǒng)級(jí)功能驗(yàn)證方法的研究
目前,基于RTL級(jí)(Register Transfer Level)的SoC(System-on-Chip)驗(yàn)證技術(shù)存在著許多局限性。這是因?yàn)椋?1)SoC硬件部分的結(jié)構(gòu)越來越復(fù)雜,致使在RTL級(jí)進(jìn)行SoC驗(yàn)證的時(shí)間開銷越來越大[1-2]; (2)在RTL級(jí),SoC的硬件和軟件部分需要分別采用硬件描述語言和高級(jí)語言進(jìn)行描述,這不僅增加了軟、硬件設(shè)計(jì)和驗(yàn)證人員間在交流上的困難,而且增加了系統(tǒng)設(shè)計(jì)人員對(duì)軟、硬件劃分方案進(jìn)行評(píng)估的困難[3];(3)設(shè)計(jì)完成SoC硬件系統(tǒng)的RTL級(jí)模型后,才能進(jìn)行SoC軟、硬件系統(tǒng)的協(xié)同仿真和驗(yàn)證,增加了SoC系統(tǒng)產(chǎn)生功能性錯(cuò)誤的可能性,延長(zhǎng)了系統(tǒng)的開發(fā)周期[4-5]。因此,使SoC的驗(yàn)證工作從更高抽象級(jí)的系統(tǒng)級(jí)開始進(jìn)行,從而盡早地發(fā)現(xiàn)功能性錯(cuò)誤,縮短SoC系統(tǒng)的開發(fā)周期是十分必要的。
在SoC的驗(yàn)證工作中,最重要的問題是構(gòu)建測(cè)試平臺(tái)TB(Test Bench),而構(gòu)建測(cè)試平臺(tái)的核心則是設(shè)計(jì)測(cè)試向量TC(Test Case)。因此,較短的測(cè)試向量的生成時(shí)間以及較高的測(cè)試向量的功能覆蓋率就成為驗(yàn)證工作中最為關(guān)鍵的問題。目前,采用隨機(jī)測(cè)試向量的驗(yàn)證方法被認(rèn)為是解決這一問題最便捷和最有效的驗(yàn)證方法[2],該方法的特征就是隨機(jī)地從被驗(yàn)證對(duì)象DUV(Design Under Verification)測(cè)試激勵(lì)輸入域中任意地或適當(dāng)加以控制地選取測(cè)試向量。因此,如何隨機(jī)地生成測(cè)試向量是進(jìn)行隨機(jī)驗(yàn)證的關(guān)鍵。
SCV(SystemC Verification Standard)是OSCI(Open SystemC Initiative)組織公布的系統(tǒng)級(jí)驗(yàn)證標(biāo)準(zhǔn),是一種基于SystemC類庫的公開源代碼的C++類庫,SCV驗(yàn)證庫可以提供直接隨機(jī)測(cè)試、帶權(quán)重的隨機(jī)測(cè)試和帶約束的隨機(jī)測(cè)試三種向量的生成方法。因此,SCV標(biāo)準(zhǔn)允許用戶在較高的抽象級(jí)上構(gòu)建測(cè)試平臺(tái)并允許用戶隨機(jī)地寫入測(cè)試程序,具有靈活性高、測(cè)試平臺(tái)可復(fù)用、驗(yàn)證周期短等特點(diǎn)。
本文將基于SystemC和SCV驗(yàn)證庫來創(chuàng)建系統(tǒng)級(jí)的測(cè)試平臺(tái),通過對(duì)一個(gè)具有4×4包交換功能的系統(tǒng)級(jí)模型的驗(yàn)證,來研究基于隨機(jī)向量的SoC系統(tǒng)級(jí)的功能驗(yàn)證方法。
1 系統(tǒng)級(jí)功能測(cè)試平臺(tái)
SoC系統(tǒng)級(jí)的功能驗(yàn)證是針對(duì)SoC系統(tǒng)級(jí)的功能模型進(jìn)行的驗(yàn)證,其目的是驗(yàn)證SoC系統(tǒng)級(jí)功能模型是否符合功能規(guī)范說明的要求。在進(jìn)行功能驗(yàn)證前,首先應(yīng)根據(jù)功能規(guī)范說明建立測(cè)試平臺(tái),其核心內(nèi)容是設(shè)計(jì)測(cè)試向量。測(cè)試平臺(tái)不僅能夠?qū)y(cè)試向量輸入到被驗(yàn)證對(duì)象上,而且能夠獲取被驗(yàn)證對(duì)象產(chǎn)生的結(jié)果,該結(jié)果可以用來判定被驗(yàn)證對(duì)象功能的正確性,如圖1所示。
為了驗(yàn)證隨機(jī)測(cè)試在SoC系統(tǒng)級(jí)進(jìn)行功能驗(yàn)證的有效性,在系統(tǒng)級(jí)構(gòu)建以AMBA總線為核心、以CPU為主設(shè)備、以存儲(chǔ)器和4×4包交換模塊為從設(shè)備的SoC功能模型,并針對(duì)4×4包交換模塊的功能進(jìn)行測(cè)試。
系統(tǒng)級(jí)測(cè)試平臺(tái)的核心由4個(gè)發(fā)送模塊(Sender0~Sender3)、4個(gè)接收模塊(Receiver0~Receiver3)和4×4包交換模塊組成,如圖2所示。其中發(fā)送模塊用來隨機(jī)地生成數(shù)據(jù)包并將數(shù)據(jù)包送入包交換模塊;接收模塊用來從包交換芯片中讀取數(shù)據(jù)包。
4×4包交換模塊主要由4個(gè)帶FIFO的輸入/輸出端口(IN0~IN3,OUT0~OUT3)和4個(gè)移位寄存器(R0~R3)組成,待交換的數(shù)據(jù)包則由16位組成,分別為4位目的端口號(hào)、4位源端口號(hào)以及8位交換數(shù)據(jù)。該包交換芯片的主要功能規(guī)范如下:
(1)每個(gè)端口均可以正確地發(fā)送或者接收數(shù)據(jù)包。
(2)每個(gè)輸入端口均可以正確地將數(shù)據(jù)包發(fā)送到多個(gè)不同的端口。
(3)移位寄存器能夠從對(duì)應(yīng)的FIFO中正確地讀取數(shù)據(jù)包,并按R3→R2→R1→R0→R3的順序進(jìn)行移位。
(4)每個(gè)輸出端口均可以正確地按設(shè)定的比例輸出數(shù)據(jù)包。
(5)輸入端口FIFO為空時(shí),數(shù)據(jù)包可以送入該FIFO; 輸入端口FIFO為滿時(shí),數(shù)據(jù)包不能送入該FIFO。
2 測(cè)試向量和驗(yàn)證結(jié)果
通常,基于SCV隨機(jī)測(cè)試向量的驗(yàn)證工作分為隨機(jī)驗(yàn)證環(huán)境配置、基于直接隨機(jī)測(cè)試向量的驗(yàn)證、基于帶權(quán)重的隨機(jī)測(cè)試向量的驗(yàn)證以及基于帶約束的隨機(jī)測(cè)試向量的驗(yàn)證四個(gè)階段。本文的驗(yàn)證環(huán)境建立在Sun Blade 2000工作站上,通過集成SCV驗(yàn)證庫以及相應(yīng)的編譯、連接和調(diào)試工具構(gòu)建而成。4×4包交換芯片系統(tǒng)級(jí)功能模型的驗(yàn)證工作在各階段的時(shí)間開銷分別為30h、15h、35h和45h。
2.1 基于直接隨機(jī)測(cè)試向量的驗(yàn)證
針對(duì)規(guī)范1~規(guī)范3的驗(yàn)證,采用直接隨機(jī)測(cè)試向量的驗(yàn)證方法。在描述中,包的數(shù)據(jù)部分被定義為sc_int8>的整數(shù)類型,它的有效數(shù)值范圍是[-128,127];包的目的端口號(hào)被定義為dest[0]~dest[3]的布爾變量類型,它的有效數(shù)值范圍是[0,15];而包的源端口號(hào)則在實(shí)例化的過程中被分別對(duì)應(yīng)標(biāo)記為0~3。因此,采用SCV生成直接隨機(jī)測(cè)試向量用數(shù)據(jù)包的過程主要是隨機(jī)化包的目的端口號(hào)和包的交換數(shù)據(jù),如下所示:
//生成包的目的端口號(hào)
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];
//生成包的交換數(shù)據(jù)
scv_smart_ptrp;
p->keep_only(-128,127);
p->next();
pkt_data.data=(sc_int8>)*p;
從生成的10 000個(gè)隨機(jī)數(shù)據(jù)包中任意截取10個(gè),得到如表1所示的結(jié)果。由表1可以看出:
(1)包的目的端口號(hào)是隨機(jī)的數(shù)字0~3,包的數(shù)據(jù)是隨機(jī)的數(shù)據(jù)-128~+127。
(2)輸入模塊可以正確地將發(fā)送包送入各個(gè)輸入端口,
輸出模塊可以正確地從輸出端口讀出輸出包。
(3)發(fā)送包目的端口號(hào)的個(gè)數(shù)等于輸出包的總數(shù)。
以上結(jié)果表明,4×4包交換芯片系統(tǒng)級(jí)模型的每個(gè)端口均可以正確地發(fā)送或者接收數(shù)據(jù)包,每個(gè)輸入端口均可以正確地將數(shù)據(jù)包傳送到多個(gè)不同的端口。
在某時(shí)間段內(nèi),采集R0~R3移位前后的數(shù)值,得到如表2所示的結(jié)果。 由表2可以看出:
(1)若FIFO中有新的數(shù)據(jù)包,則各個(gè)寄存器能夠從對(duì)應(yīng)的FIFO中正確地讀取這些新的數(shù)據(jù)包;否則,各個(gè)寄存器將保持當(dāng)前值。
(2)各個(gè)寄存器接收新的數(shù)據(jù)后就進(jìn)行移位,移位的順序是R3→R2→R1→R0→R3。
2.2 基于帶權(quán)重的隨機(jī)測(cè)試向量的驗(yàn)證
針對(duì)規(guī)范4的驗(yàn)證,采用帶權(quán)重的隨機(jī)測(cè)試向量的驗(yàn)證方法。在測(cè)試中,端口0作為測(cè)試向量的輸入端口,端口0、1、2、3作為測(cè)試向量的輸出端口。其中,端口0、1、2、3的包輸出比例分別為70%、10%、10%和10%。因此,采用SCV生成Sender0帶權(quán)重的隨機(jī)測(cè)試向量用數(shù)據(jù)包描述為:
if(pkt_data.id==0)
{scv_bagdist; //定義含權(quán)重分布信息的包用于隨機(jī)化
dist.add(1,70); //定義OUT0的輸出比例
dist.add(2,10); //定義OUT1的輸出比例
dist.add(4,10); //定義OUT2的輸出比例
dist.add(8,10); //定義OUT3的輸出比例
scv_smart_ptrd; //對(duì)帶權(quán)重的包隨機(jī)化
d->set_mode(dist);
d->next();
dest=(sc_uint4>)*d; //賦數(shù)據(jù)包目的端口號(hào)
pkt_data.dest0=dest[0];
pkt_data.dest1=dest[1];
pkt_data.dest2=dest[2];
pkt_data.dest3=dest[3];
}
使Sender0生成10 000個(gè)隨機(jī)數(shù)據(jù)包,得到如表3所示的結(jié)果。可以看出:每個(gè)輸出端口輸出數(shù)據(jù)包數(shù)目的比例與設(shè)定比例基本一致。
2.3 基于帶約束的隨機(jī)測(cè)試向量的驗(yàn)證
針對(duì)規(guī)范5的驗(yàn)證,采用帶約束的隨機(jī)測(cè)試向量的驗(yàn)證方法。在驗(yàn)證中,采用的驗(yàn)證策略為:當(dāng)FIFO1非空時(shí),Sender1發(fā)送非正整數(shù)的數(shù)據(jù)包;當(dāng)FIFO1為空時(shí),Sender1發(fā)送正整數(shù)的數(shù)據(jù)包。因此,采用SCV生成Sender1帶約束的隨機(jī)測(cè)試向量用數(shù)據(jù)包的約束定義為:
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);}
};
在某時(shí)間段內(nèi),從生成的10 000個(gè)隨機(jī)數(shù)據(jù)包中,采集一部分FIFO1和各端口中的數(shù)值,得到如表4所示的結(jié)果。由表4可以看出,當(dāng)發(fā)送包的數(shù)據(jù)部分為非正整數(shù)時(shí),F(xiàn)IFO1無交換數(shù)據(jù)輸入,輸出端也無交換數(shù)據(jù)輸出;當(dāng)發(fā)送包的數(shù)據(jù)部分為正整數(shù)時(shí),F(xiàn)IFO1讀入交換數(shù)據(jù),相應(yīng)輸出端也輸出交換數(shù)據(jù)。即當(dāng)FIFO1非空時(shí),Sender1發(fā)送了非正整數(shù)的數(shù)據(jù)包,表示數(shù)據(jù)包不能送入FIFO1;當(dāng)FIFO1為空時(shí),Sender1發(fā)送了正整數(shù)的數(shù)據(jù)包,數(shù)據(jù)包可以送入FIFO1。
從SoC的RTL級(jí)開始進(jìn)行的驗(yàn)證工作容易造成設(shè)計(jì)周期的長(zhǎng)跌宕,因此,在更高層次的系統(tǒng)級(jí)尋求高效的功能驗(yàn)證方法具有十分重要的現(xiàn)實(shí)意義。實(shí)驗(yàn)結(jié)果表明,本文提出的基于隨機(jī)向量的SoC系統(tǒng)級(jí)功能驗(yàn)證方法,不僅能夠獲得較好的功能覆蓋率,而且能夠盡早地發(fā)現(xiàn)SoC的功能性錯(cuò)誤。此外,還說明:
(1)三種隨機(jī)驗(yàn)證方法對(duì)功能規(guī)范的依賴程度、時(shí)間開銷和驗(yàn)證效率不盡相同。直接隨機(jī)測(cè)試向量生成方法對(duì)功能規(guī)范的依賴程度最低,但時(shí)間開銷最高、驗(yàn)證效率最低;帶權(quán)重的隨機(jī)測(cè)試向量生成方法對(duì)功能規(guī)范的依賴程度較高,但時(shí)間開銷最低、驗(yàn)證效率較高;帶約束的隨機(jī)測(cè)試向量生成方法對(duì)功能規(guī)范的依賴程度最高,但時(shí)間開銷較高、驗(yàn)證效率最高。在實(shí)際的驗(yàn)證工作中可以選擇其中一種或組合兩種以上的方法進(jìn)行驗(yàn)證。
(2)直接隨機(jī)測(cè)試向量生成方法適用于做黑盒測(cè)試驗(yàn)證,適于對(duì)驗(yàn)證對(duì)象進(jìn)行定性分析;帶權(quán)重的隨機(jī)測(cè)試向量和帶約束的隨機(jī)測(cè)試向量方法適用于做白盒測(cè)試驗(yàn)證,適于對(duì)驗(yàn)證對(duì)象做定量分析。
評(píng)論