陳琳娜, 孟建熠, 林志濤
(1.浙江大學(xué) 電氣工程學(xué)院,浙江 杭州 310027; 2.復(fù)旦大學(xué) 微電子學(xué)院,上海 201203)
提高芯片的驗(yàn)證效率至關(guān)重要[1],現(xiàn)有的驗(yàn)證平臺(tái)大部分是基于通用驗(yàn)證方法學(xué)(universal verification methodology,UVM)環(huán)境開(kāi)發(fā)的[2],然而驗(yàn)證組件的實(shí)現(xiàn)與被測(cè)器件(device under test,DUT)緊耦合,導(dǎo)致其可重用性需要通過(guò)更改或替換已有驗(yàn)證平臺(tái)的部分代碼來(lái)實(shí)現(xiàn)[3,4];另一方面,在一個(gè)含有上千個(gè)測(cè)試用例的大型項(xiàng)目里,仿真測(cè)試需要的時(shí)間變得很長(zhǎng)。因此如何提高驗(yàn)證組件代碼的可重用性和縮短測(cè)試用例仿真時(shí)間已成為驗(yàn)證平臺(tái)開(kāi)發(fā)的困難與挑戰(zhàn)之一。標(biāo)準(zhǔn)化串行總線接口作為設(shè)備之間信息交流的主要通道,是片上系統(tǒng)(system on chip,SOC)芯片不可缺少的部分[5]。針對(duì)廣泛應(yīng)用的串行總線協(xié)議,以及現(xiàn)有的UVM驗(yàn)證組件代碼可重用性差和仿真時(shí)間長(zhǎng)等缺陷,本文提出了一種面向串行總線協(xié)議的層次化公用庫(kù)設(shè)計(jì),同時(shí)對(duì)UVM transaction定義進(jìn)行改進(jìn),加快仿真速度,實(shí)現(xiàn)了快速驗(yàn)證。
UVM繼承了 SystemVerilog驗(yàn)證語(yǔ)言面向?qū)ο蟮乃枷耄瑢?shí)現(xiàn)了驗(yàn)證的重用性和清晰的層次結(jié)構(gòu)。UVM常用類的層次結(jié)構(gòu)如圖1所示[6,7]。
公用庫(kù)的設(shè)計(jì)是將環(huán)境模型和功能模塊抽象出來(lái),定義為可重用的通用庫(kù)文件。串行總線協(xié)議通常具有共性:1)支持主從或?qū)Φ饶J剑?)支持大端或小端;3)支持同步或異步模式。
層次化的公用庫(kù)主要基于驗(yàn)證平臺(tái)的重用層級(jí)來(lái)進(jìn)行建模和管理,主要分為以下幾個(gè)層級(jí)建模:1)事務(wù)級(jí)建模;2)組件級(jí)建模;3)功能級(jí)建模。圖2為在原有的庫(kù)基礎(chǔ)上添加的層次化公用庫(kù)。
圖1 UVM常用類層次結(jié)構(gòu)
圖2 層次化公用庫(kù)類
2.1.1 事務(wù)級(jí)建模
該層次的建模主要包括具體協(xié)議內(nèi)容的transaction定義以及相關(guān)語(yǔ)義類型定義,一個(gè)標(biāo)準(zhǔn)串行總線協(xié)議的transaction通常是定義一些數(shù)據(jù)包類型,數(shù)據(jù)傳送格式,數(shù)據(jù)傳送長(zhǎng)度等基礎(chǔ)內(nèi)容。
2.1.2 組件級(jí)建模
該層次的建模與協(xié)議內(nèi)容無(wú)關(guān),主要包括驗(yàn)證組件基本功能的實(shí)現(xiàn)。組件級(jí)的建模包括:
1)lib_driver:所有協(xié)議的driver設(shè)計(jì)都有一個(gè)共同功能:當(dāng)檢測(cè)到一個(gè)復(fù)位信號(hào)到來(lái)時(shí),立刻退出所有的接口驅(qū)動(dòng)。可以設(shè)計(jì)一個(gè)公用組件lib_driver派生自driver,并在該組件中加入該功能。
2)lib_monitor:該組件派生自monitor, 不同的協(xié)議對(duì)接口的monitor方式各不同,故在該組件中加入一個(gè)虛函數(shù)并通過(guò)無(wú)限循環(huán)來(lái)不斷收集DUT 接口的輸出。
3)lib_scoreboard:該組件派生自scoreboard,用于比較期望數(shù)據(jù)和實(shí)際數(shù)據(jù)??稍趌ib_scoreboard中聲明2個(gè)imp端口,同時(shí)另設(shè)2個(gè) Buffer 用于緩沖數(shù)據(jù)。在check_phase里檢查Buffer是否為空。
4)lib_test:該組件派生自u(píng)vm_test,并包含基本功能:a.設(shè)置整個(gè)驗(yàn)證平臺(tái)的超時(shí)退出時(shí)間;b.設(shè)置用例跑的次數(shù);c.在report_phase中根據(jù)UVM_ERROR的數(shù)量來(lái)打印不同的信息。
2.1.3 功能級(jí)建模
該層次的建模主要包括協(xié)議通用的功能和任務(wù)函數(shù)。串行總線協(xié)議的通用函數(shù)包括:
1)傳輸起始與停止條件:主從模式下的串行協(xié)議,起始和停止條件由主機(jī)產(chǎn)生;對(duì)等模式則由發(fā)送模式產(chǎn)生。無(wú)論是何種模式,都需要實(shí)時(shí)監(jiān)測(cè)起始與停止條件。這些過(guò)程可封裝成公用函數(shù)。
2)時(shí)鐘線驅(qū)動(dòng):同步傳輸模式下的串行協(xié)議,需要時(shí)鐘信號(hào)確定同步傳輸?shù)乃俣?;異步傳輸通過(guò)配置波特率對(duì)時(shí)鐘進(jìn)行采樣。該過(guò)程可封裝成公用函數(shù)實(shí)現(xiàn)不同頻率的時(shí)鐘產(chǎn)生。
3)數(shù)據(jù)線驅(qū)動(dòng)/監(jiān)測(cè):同步傳輸模式下,不同的時(shí)鐘極性和相位決定了在時(shí)鐘不同的跳變沿對(duì)數(shù)據(jù)線進(jìn)行驅(qū)動(dòng)或監(jiān)測(cè);異步傳輸數(shù)據(jù)的驅(qū)動(dòng)與監(jiān)測(cè)由采樣時(shí)鐘確定。數(shù)據(jù)傳輸有大端和小端模式。該過(guò)程可封裝成公用函數(shù)。
UVM各個(gè)組件之間的信息傳遞基于transaction。transaction中數(shù)據(jù)變量通過(guò)Field-Automation宏機(jī)制注冊(cè),簡(jiǎn)化了transaction的處理過(guò)程[8]。
Field-Automation宏機(jī)制的實(shí)現(xiàn)過(guò)程如圖3所示。′uvm_object_utils_begin()為宏開(kāi)始定義,用于注冊(cè)transaction類,該宏擴(kuò)展為一個(gè)內(nèi)部方法: __m_uvm_field_automation()?!鋟vm_filed_*系列宏體用于注冊(cè)transaction內(nèi)部定義的變量[9],每個(gè)宏體的聲明都會(huì)擴(kuò)展成一個(gè)case語(yǔ)句的實(shí)現(xiàn)。當(dāng)用戶調(diào)用print,copy,compare等函數(shù)對(duì)transaction進(jìn)行處理時(shí),如果該transaction使用了Field-Automation機(jī)制,那么這些函數(shù)就會(huì)自動(dòng)調(diào)用內(nèi)部方法,并把第二個(gè)參數(shù)what_設(shè)置成對(duì)應(yīng)的函數(shù)處理字段。宏體的聲明導(dǎo)致相應(yīng)case語(yǔ)句分支操作的執(zhí)行,而分支操作里的函數(shù)又通過(guò)調(diào)用其他方法實(shí)現(xiàn)。過(guò)長(zhǎng)的調(diào)用路徑導(dǎo)致過(guò)多的冗余代碼執(zhí)行,使得測(cè)試用例的運(yùn)行時(shí)間和調(diào)試難度大大地提高。
圖3 宏的實(shí)現(xiàn)
UVM庫(kù)里提供另一種方法來(lái)實(shí)現(xiàn)函數(shù)print,copy,compare,pack,unpack,即do_
do_compare的重寫只需添加下面幾行代碼即可實(shí)現(xiàn)compare的功能:
function bit do_compare(uvm_object rhs);
transaction rhs_;∥transaction為自定義的類
do_compare=(S|cast(rhs_,rhs)&&addr==rhs_.addr);∥添加要比較的變量
endfunction
相比原有的transaction定義,改進(jìn)的transaction定義沒(méi)有宏體的聲明,避免了過(guò)長(zhǎng)的路徑調(diào)用;重寫的do_
本文以通用串行接口(universal serial interface,USI)模塊的快速驗(yàn)證為例,對(duì)文中提到的方法進(jìn)行評(píng)估。USI 為自行開(kāi)發(fā),該模塊包括了高級(jí)外圍總線(advanced peripheral bus,APB)接口,寄存器TX FIFO和RX FIFO,功能模塊(UART,I2CM,I2CS,SPIM,SPIS)和串行接口,通過(guò)配置控制寄存器,可使相應(yīng)的功能模塊工作,實(shí)現(xiàn)了UART, I2C, SPI 3種協(xié)議。
基于層次化公用庫(kù)的思想和高效的transaction定義,設(shè)計(jì)了如圖4所示的USI模塊驗(yàn)證平臺(tái)。該平臺(tái)構(gòu)建了APB UVC,INTR UVC,Reset UVC,DMA UVC(Reset UVC和DMA UVC圖中未標(biāo)出),包含SPI ,I2C,UART UVC的Peripheral。SPI ,I2C,UART UVC均有2個(gè)Monitor port,分別用于傳遞期望的數(shù)據(jù)和實(shí)際的數(shù)據(jù)。Reference model包含了TX,RX FIFO,APB,SPI,UART,I2C等模型,功能行為與DUT一致。 用戶在case里通過(guò)寄存器模型操作APB_UVC配置控制寄存器選擇相應(yīng)的功能模塊。寫操作時(shí),APB UVC向DUT TX FIFO寫數(shù)據(jù),寫入當(dāng)前數(shù)據(jù)同時(shí)也傳給reference model的TX FIFO模型,根據(jù)配置選擇相應(yīng)的功能模型(SPI,I2C或UART)讀出數(shù)據(jù),發(fā)送給Scoreboard,作為期望的數(shù)據(jù);實(shí)際的數(shù)據(jù)則是設(shè)備UVC監(jiān)測(cè)DUT接口得到的數(shù)據(jù)。讀操作時(shí),通過(guò)case啟動(dòng)sequencer,將得到的transaction數(shù)據(jù)寫入reference model RX FIFO, 并通過(guò)APB模型讀出發(fā)送給Scoreboard,作為期望的數(shù)據(jù);實(shí)際的數(shù)據(jù)由寄存器模型操作APB UVC讀取DUT的RX FIFO數(shù)據(jù)。
USI驗(yàn)證以高效性為原則。原有的驗(yàn)證平臺(tái)的代碼量有一萬(wàn)行之多,基于公用庫(kù)的驗(yàn)證平臺(tái)將代碼量減少到數(shù)千行之內(nèi),60 %以上的功能代碼可通過(guò)調(diào)用公用庫(kù)實(shí)現(xiàn)。由于使用了公用庫(kù),驗(yàn)證不同串行總線IP時(shí),驗(yàn)證工程師只需在此基礎(chǔ)上進(jìn)行功能擴(kuò)展,實(shí)現(xiàn)了驗(yàn)證組件可重用性。
圖4 USI驗(yàn)證結(jié)構(gòu)
與傳統(tǒng)的transaction定義方法相比,改進(jìn)的transaction定義縮短了仿真運(yùn)行時(shí)間。表1列出在回歸測(cè)試之前相同測(cè)試用例下,2種不同的transaction定義對(duì)仿真時(shí)間的影響。I2C,SPI模塊對(duì)transaction的操作相對(duì)復(fù)雜,調(diào)用了copy,compare,print函數(shù),與改進(jìn)前的transaction定義相比,仿真速度提升了6 %~7 %左右;而UART模塊相對(duì)簡(jiǎn)單,對(duì)transaction的處理次數(shù)少,仿真速度只提升了3 %。
表1 仿真時(shí)間對(duì)比
圖5為同期開(kāi)展的USI回歸測(cè)試2種不同transaction定義,達(dá)到規(guī)定覆蓋率要求所需驗(yàn)證時(shí)間的對(duì)比結(jié)果??梢钥闯?,使用改進(jìn)的transaction 的驗(yàn)證平臺(tái)在50 h左右的測(cè)試時(shí)間內(nèi),完成USI模塊100 %的功能覆蓋率驗(yàn)證,96.6 %的代碼覆蓋率驗(yàn)證;使用Field-Automation機(jī)制的transaction 驗(yàn)證平臺(tái)則在56 h左右達(dá)到相同的覆蓋率。測(cè)試結(jié)果表明,改進(jìn)的transaction定義使USI驗(yàn)證時(shí)間縮短10.7 %。對(duì)于在大型的驗(yàn)證項(xiàng)目中,對(duì)transaction處理的次數(shù)越多,仿真速度提升效果將會(huì)越明顯。
圖5 不同transaction定義達(dá)到96 %覆蓋率所需驗(yàn)證時(shí)間
本文設(shè)計(jì)了一種面向串行總線的層次化UVM驗(yàn)證平臺(tái)。相對(duì)于已有的UVM驗(yàn)證平臺(tái),引進(jìn)了公用庫(kù)的概念,使得驗(yàn)證平臺(tái)能最大限度重用,同時(shí)對(duì)傳統(tǒng)的transaction定義進(jìn)行改進(jìn),縮短了仿真測(cè)試時(shí)間。實(shí)驗(yàn)表明:基于公用庫(kù)的多標(biāo)準(zhǔn)串行總線協(xié)議驗(yàn)證平臺(tái)和改進(jìn)的transaction定義使驗(yàn)證效率得到了提升。下一步將根據(jù)配置文件,用腳本自動(dòng)生成公用庫(kù),實(shí)現(xiàn)驗(yàn)證組件的自動(dòng)化生成。