文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.10.012
中文引用格式: 楊錚,韓俊剛,李卯良,等. 基于SystemVerilog語(yǔ)言的像素cache驗(yàn)證平臺(tái)的實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2016,42(10):51-53,61.
英文引用格式: Yang Zheng,Han Jungang,Li Maoliang,et al. Implementations of the pixel cache validation platform based on SystemVerilog language[J].Application of Electronic Technique,2016,42(10):51-53,61.
0 引言
集成電路發(fā)展日新月異,已經(jīng)由小規(guī)模集成電路階段發(fā)展到了超大規(guī)模集成電路階段,工藝水平也從130 nm到22 nm甚至到14 nm。三星集團(tuán)最近宣布,將于今年年底實(shí)現(xiàn)超越14 nm,達(dá)到10 nm的制造工藝。這些進(jìn)步會(huì)使芯片的處理能力更強(qiáng),體積更小,功耗更低。但伴隨著這些進(jìn)步同時(shí),也會(huì)使芯片的驗(yàn)證難度不斷增大,驗(yàn)證的工作量也會(huì)更多。如今,驗(yàn)證的工作量已經(jīng)占到了整個(gè)SOC研發(fā)的70%[1],因此提高驗(yàn)證的效率已經(jīng)迫在眉睫。
傳統(tǒng)的Verilog驗(yàn)證方法是定向的,需要程序員設(shè)計(jì)大量的測(cè)試激勵(lì),然后對(duì)波形進(jìn)行觀察檢測(cè),這樣的方法驗(yàn)證效率低、可重用性差,為此工業(yè)界推出了具有面向?qū)ο筇匦浴⒅С旨s束隨機(jī)與斷言等功能的標(biāo)準(zhǔn)化硬件描述與驗(yàn)證語(yǔ)言SystemVerilog[2-3]。本文基于該語(yǔ)言實(shí)現(xiàn)了一種芯片系統(tǒng)功能驗(yàn)證平臺(tái),有效地完成了對(duì)芯片的RTL級(jí)功能驗(yàn)證,突破了傳統(tǒng)的驗(yàn)證方法,有效地解決了傳統(tǒng)驗(yàn)證方法對(duì)芯片驗(yàn)證的充分性不足和效率低下的問(wèn)題[4]。
1 SystemVerilog語(yǔ)言
SystemVerilog語(yǔ)言吸收了Verilog、VHDL、C++的概念,還包括驗(yàn)證平臺(tái)語(yǔ)言和斷言語(yǔ)言,也就是說(shuō),它將硬件描述語(yǔ)言(HDL)與現(xiàn)代的高層級(jí)驗(yàn)證語(yǔ)言(HVL)結(jié)合了起來(lái)[5]。正是因?yàn)檫@些優(yōu)點(diǎn),使得SystemVerilog語(yǔ)言在RTL驗(yàn)證流程上比傳統(tǒng)方式具有更強(qiáng)大的表現(xiàn)能力,而且該語(yǔ)言集成了面向?qū)ο蠛途€程間通信等的特點(diǎn),使得該語(yǔ)言具有更強(qiáng)的靈活性,使程序員在設(shè)計(jì)驗(yàn)證平臺(tái)時(shí)有更大的發(fā)揮空間。同樣幾個(gè)比較著名的驗(yàn)證方法還有如:UVM、OVM、VMM等,本文主要使用SystemVerilog語(yǔ)言來(lái)搭建一個(gè)可重用的驗(yàn)證平臺(tái)對(duì)待測(cè)模塊(Design Under Test,DUT)像素cache進(jìn)行全面地驗(yàn)證。
2 SystemVerilog驗(yàn)證平臺(tái)實(shí)現(xiàn)
2.1 像素cache簡(jiǎn)介
像素cache是GPU中的重要組成部分,這個(gè)模塊的算法是否正確和功能是否全面直接關(guān)系到GPU處理圖像的正確性及快慢與否。因此,該模塊的功能驗(yàn)證和覆蓋率驗(yàn)證就顯得至關(guān)重要。本文的像素cache模塊在我校工程中心自主研發(fā)的GPU“螢火蟲(chóng)2號(hào)”中連接著像素處理單元(FOP)以及像素RAM兩個(gè)模塊,目的是保證兩者之間能夠快速準(zhǔn)確地傳輸數(shù)據(jù)和指令。像素cache模塊架構(gòu)如圖1所示。
該像素cache包含2個(gè)模塊,分別是cache模塊和控制模塊。
2.2 cache模塊
cache模塊包含3個(gè)模塊,cache_tag模塊、cache_output模塊和cache_lru模塊,它們分別完成了cache地址選擇、輸出和算法實(shí)現(xiàn)的功能。
2.2.1 cache_tag模塊
該模塊主要實(shí)現(xiàn)的功能就是地址運(yùn)算,將接收到的地址和cache內(nèi)部存儲(chǔ)的地址進(jìn)行比較來(lái)判斷是否命中。
2.2.2 cache_lru模塊
該模塊主要實(shí)現(xiàn)了整個(gè)cache的核心內(nèi)容,實(shí)現(xiàn)了cache的替換算法。本文中的像素cache采用的是最近最少使用的替換算法。
2.2.3 cache_output模塊
這個(gè)模塊主要功能就是根據(jù)cache_lru模塊輸出的控制條件,將cache_ram中的數(shù)據(jù)輸出。這部分控制條件包括2D刷新、讀命中、讀未命中、寫(xiě)命中和寫(xiě)未命中等。
2.3 控制模塊
控制模塊包含有一個(gè)狀態(tài)機(jī)模塊和一個(gè)選擇模塊。
2.3.1 狀態(tài)機(jī)模塊
狀態(tài)機(jī)完成了處理各個(gè)請(qǐng)求的狀態(tài)跳轉(zhuǎn),該模塊將整個(gè)像素cache操作劃分為如圖2的4個(gè)狀態(tài),這4個(gè)狀態(tài)分別完成了初始化、2D圖形處理加速狀態(tài)、3D段操作狀態(tài)和結(jié)束狀態(tài)。
2.3.2 選擇模塊
該模塊根據(jù)狀態(tài)機(jī)跳轉(zhuǎn)輸出的選擇信號(hào)選擇3D段操作或者2D圖形加速并且把相應(yīng)的信號(hào)傳遞給cache模塊,然后進(jìn)行相應(yīng)的處理。
2.4 像素cache驗(yàn)證平臺(tái)設(shè)計(jì)
本文設(shè)計(jì)的驗(yàn)證平臺(tái)架構(gòu)圖如圖3所示。
該平臺(tái)主要包括了頂層模塊和一些功能模塊。其中tb_top模塊是頂層模塊,也是整個(gè)驗(yàn)證平臺(tái)的入口,該模塊實(shí)例化了env模塊和interface模塊;env模塊是環(huán)境模塊,該模塊實(shí)例化了generator、driver、monitor等的功能模塊,這些功能模塊在env模塊中分別完成自己的任務(wù);interface模塊是接口模塊,該模塊定義了整個(gè)像素cache模塊驗(yàn)證環(huán)境中需要控制和驗(yàn)證的接口;generator模塊是整個(gè)驗(yàn)證環(huán)境中測(cè)試激勵(lì)的產(chǎn)生器,該模塊會(huì)根據(jù)需求產(chǎn)生包括2D操作、3D操作、寫(xiě)讀寫(xiě)、寫(xiě)讀等激勵(lì),并且將激勵(lì)以郵箱的方式傳送給其他模塊;driver模塊是驅(qū)動(dòng)模塊,該模塊接收generator模塊傳來(lái)的激勵(lì),然后根據(jù)像素cache的時(shí)序處理這些接口信號(hào);monitor模塊是監(jiān)視器模塊,該模塊會(huì)監(jiān)視整個(gè)驗(yàn)證過(guò)程中的信號(hào),如數(shù)據(jù)、地址、功能,包括像素cache模塊中間產(chǎn)生的信號(hào),并將監(jiān)視到的有用信號(hào)以郵箱的方式傳送給其他模塊;scoreboard模塊是計(jì)分板,該模塊接收monitor模塊傳來(lái)的有用數(shù)據(jù),并根據(jù)需求把結(jié)果打印到終端和文件中,以供程序員對(duì)比檢查,如果出現(xiàn)錯(cuò)誤,該模塊會(huì)打印出問(wèn)題所在位置和時(shí)間,并中斷整個(gè)驗(yàn)證流程;coverage模塊是覆蓋率模塊,該模塊接收每一次激勵(lì)信號(hào),并分析該激勵(lì)屬于哪一類(lèi)測(cè)試,最終統(tǒng)計(jì)所有結(jié)果,計(jì)算出整個(gè)驗(yàn)證過(guò)程中的功能覆蓋率和數(shù)據(jù)的覆蓋率并打印到終端和文件中,以供程序員對(duì)比檢查。
2.5 驗(yàn)證過(guò)程和預(yù)期目標(biāo)
整個(gè)驗(yàn)證平臺(tái)和DUT以如圖4[6]方式進(jìn)行搭建。
首先根據(jù)DUT模塊的功能和反饋信號(hào),將DUT輸入分為如下幾類(lèi):2D圖形加速的寫(xiě)、寫(xiě)后讀、寫(xiě)后寫(xiě)后讀、讀、讀后讀、讀后寫(xiě)后讀;3D段操作的寫(xiě)、寫(xiě)后讀、寫(xiě)后寫(xiě)后讀、讀、讀后讀、讀后寫(xiě)后讀等輸入信號(hào)。然后將輸入數(shù)據(jù)128位和地址32位進(jìn)行隨機(jī)產(chǎn)生,最終目標(biāo)要保證功能覆蓋率達(dá)到100%,并且數(shù)據(jù)和地址能夠正確無(wú)誤地進(jìn)行傳輸。
3 結(jié)果分析
3.1 輸出報(bào)告
經(jīng)過(guò)隨機(jī)產(chǎn)生的100 000組測(cè)試激勵(lì),在VCS終端會(huì)打印出執(zhí)行報(bào)告,隨機(jī)挑出一條報(bào)告進(jìn)行分析,如圖5。
圖中第200次隨機(jī)驗(yàn)證中Driver讀取generator產(chǎn)生的隨機(jī)激勵(lì)成功,并分析該次隨機(jī)驗(yàn)證的分類(lèi)。分別經(jīng)過(guò)driver,scoreboard,monitor模塊操作,最終分析得出,該次隨機(jī)驗(yàn)證屬于3D端操作中的讀類(lèi)型,讀的數(shù)據(jù)為如圖5中的128位的值,地址為32’h675745fd。本次隨機(jī)驗(yàn)證時(shí)間從99330000ps開(kāi)始到99790000ps結(jié)束,數(shù)據(jù)和地址均與預(yù)期結(jié)果一直,傳輸結(jié)果正確。
整個(gè)驗(yàn)證過(guò)程產(chǎn)生的報(bào)告如圖6所示。
根據(jù)圖6中報(bào)告可知,經(jīng)過(guò)100 000次隨機(jī)激勵(lì)與測(cè)試,所得的結(jié)果滿足預(yù)期要求,能夠完全覆蓋2D圖形加速和3D段操作中的所有8種預(yù)期情況,功能覆蓋率達(dá)到100%;數(shù)據(jù)和地址也是隨機(jī)產(chǎn)生,經(jīng)過(guò)100 000次的隨機(jī)化產(chǎn)生激勵(lì),數(shù)據(jù)和地址基本達(dá)到全面覆蓋。
3.2 波形圖
圖7是使用DVE工具產(chǎn)生的部分驗(yàn)證波形,從波形中可以看出,每個(gè)驗(yàn)證激勵(lì)均為隨機(jī)產(chǎn)生,并且結(jié)果與預(yù)期的一致,沒(méi)有出現(xiàn)錯(cuò)誤。
4 總結(jié)
本文基于SV語(yǔ)言搭建了一個(gè)能夠全面驗(yàn)證像素cahce的平臺(tái),并且詳細(xì)地介紹了該平臺(tái)各個(gè)模塊及架構(gòu)。隨后利用VCS軟件對(duì)像素cache進(jìn)行了全面驗(yàn)證測(cè)試。實(shí)驗(yàn)結(jié)果表明,該平臺(tái)針對(duì)像素cache模塊實(shí)現(xiàn)了功能上全面覆蓋,能夠準(zhǔn)確地檢測(cè)出像素cache模塊中出錯(cuò)的地方,并且及時(shí)報(bào)錯(cuò),從覆蓋率和正確性上均達(dá)到了預(yù)期目標(biāo)。由于本文設(shè)計(jì)的驗(yàn)證平臺(tái)與待測(cè)模塊在架構(gòu)上是獨(dú)立的,所以該平臺(tái)具有很好的可重用性,只需對(duì)部分模塊進(jìn)行修改便可以用于驗(yàn)證其他同類(lèi)型的待測(cè)模塊。
參考文獻(xiàn)
[1] 山蕊,蔣林,李濤.基于SystemVerilog的可重用驗(yàn)證平臺(tái)[J].電子技術(shù)應(yīng)用,2013,39(5):128-131.
[2] 王鵬,劉萬(wàn)和,劉銳,等.基于SystemVerilog可重用測(cè)試平臺(tái)的實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2015,41(2):61-64.
[3] P-IEEE.Standard for SystemVerilog-Unified hardware design,Specification,and verification language[J].Copyright 2009:isbn,2009:1-1285.
[4] 黃鳳英.基于SV語(yǔ)言的RFID標(biāo)簽芯片數(shù)字系統(tǒng)驗(yàn)證平臺(tái)設(shè)計(jì)[J].中國(guó)集成電路,2016,25(3):30-34.
[5] SPEAR C.Systemverilog for verification[M].SystemVerilog for Verification.2012:253-266.
[6] (美)克里斯·斯皮爾.SystemVerilog驗(yàn)證[M].北京:科學(xué)出版社,2009.