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