徐梓文 郭桂良
(1.中國(guó)科學(xué)院大學(xué) 北京 100049)(2.中國(guó)科學(xué)院微電子研究所 北京 100029)
隨著集成電路制造技術(shù)的不斷進(jìn)步,以片上系統(tǒng)(SOC)為代表的數(shù)字集成電路發(fā)生了跨越式的發(fā)展,設(shè)計(jì)的復(fù)雜程度和規(guī)模大幅增加,這給驗(yàn)證工作提出了全新的要求與挑戰(zhàn)。相關(guān)研究表示,驗(yàn)證已經(jīng)占據(jù)了整個(gè)數(shù)字前端流程70%~80%的工作時(shí)間[1~3],傳統(tǒng)的驗(yàn)證手段已經(jīng)難以滿(mǎn)足新的要求。在這種背景下,如何找到快速高效的驗(yàn)證手段,成為了一項(xiàng)很有價(jià)值的研究工作。
近年來(lái),各大EDA廠商都在努力推出自己的驗(yàn)證解決方案,諸如VMM等等。每種解決方案都有各自的優(yōu)勢(shì),但是始終沒(méi)能做到兼容所有的應(yīng)用場(chǎng)景。2011年,UVM驗(yàn)證方法學(xué)橫空出世,憑借其良好的性能得到了絕大多數(shù)先進(jìn)IC公司的青睞。如今,UVM驗(yàn)證方法學(xué)已經(jīng)正式成為了IEEE 1800.2-2017標(biāo)準(zhǔn)[4]。
媒體訪問(wèn)控制器(MAC)實(shí)現(xiàn)了上層數(shù)據(jù)和物理層比特流的封裝和解封、流量的控制、檢驗(yàn)檢測(cè)和載波偵聽(tīng)多路訪問(wèn)的信道存取等功能,保障了以太網(wǎng)數(shù)據(jù)的高帶寬、低延時(shí)傳輸。
通用驗(yàn)證方法學(xué)UVM是由三大EDA廠商Syn?opsys、Cadence、Mentor協(xié)力打造,由Accellera組織負(fù)責(zé)發(fā)布的一種標(biāo)準(zhǔn)化的驗(yàn)證方法學(xué)[5~6]。UVM本質(zhì)上是一種基于SystemVerilog語(yǔ)言的一個(gè)庫(kù),它將驗(yàn)證中需要使用到的各項(xiàng)功能進(jìn)行劃分和標(biāo)準(zhǔn)化,使得驗(yàn)證工程師可以采用類(lèi)似堆積木的方式來(lái)搭建自己的驗(yàn)證平臺(tái)。由于UVM引入了大量的標(biāo)準(zhǔn)化模塊,這使得基于UVM的驗(yàn)證平臺(tái)具有了極強(qiáng)的可復(fù)用性。當(dāng)待測(cè)設(shè)計(jì)(DUT)發(fā)生改變時(shí),只需要改變與DUT相關(guān)的功能模塊即可實(shí)現(xiàn)測(cè)試平臺(tái)的復(fù)用。
基于覆蓋率驅(qū)動(dòng)(CVD)的UVM驗(yàn)證平臺(tái)是指在驗(yàn)證平臺(tái)運(yùn)行時(shí),除了在scoreboard(計(jì)分板)中對(duì)DUT反饋的數(shù)據(jù)做判斷外,還會(huì)在各個(gè)monitor(監(jiān)視器)中增加大量的CoverGroup(覆蓋組)來(lái)對(duì)采集到的數(shù)據(jù)加以分析。只有當(dāng)收集到的數(shù)據(jù)覆蓋到所有CoverGroup中的全部CoverPoint(覆蓋點(diǎn))時(shí),即功能覆蓋率達(dá)到100%時(shí),我們才可以認(rèn)為該DUT的所有功能均已被測(cè)試[7]。
在ISO組織制定的國(guó)際標(biāo)準(zhǔn)中,引入了OSI(開(kāi)放式系統(tǒng)互聯(lián)通信參考)模型,該模型定義了計(jì)算機(jī)之間的互聯(lián)通信標(biāo)準(zhǔn),共分為7層。OSI模型從下到上依次是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話(huà)層、表示層和應(yīng)用層,其中的數(shù)據(jù)鏈路層又分為三個(gè)部分,分別是:邏輯鏈路控制(LLC)子層、媒體訪問(wèn)控制(MAC)子層[8~9]。MAC子層的作用是屏蔽不同的物理層帶來(lái)的差異性,使得上層網(wǎng)絡(luò)可以操作不用的PHY(物理層)芯片[10]。
本文研究的MAC控制器便是采用MAC協(xié)議進(jìn)行數(shù)據(jù)收發(fā)的IP,采用XGMII(10Gb獨(dú)立于媒體的接口)進(jìn)行通信。
本文的驗(yàn)證平臺(tái)的結(jié)構(gòu)如圖1所示,這是在標(biāo)準(zhǔn)UVM驗(yàn)證環(huán)境的基礎(chǔ)上進(jìn)行搭建的驗(yàn)證平臺(tái)。

圖1 UVM驗(yàn)證平臺(tái)架構(gòu)
由于DUT主要分為與片內(nèi)通信的幀傳輸接口、寄存器控制接口、xgmii傳輸接口,本文構(gòu)建了packet_in、packet_out、reg_access、xgmii_tx、xgmii_rx五組interface和agent。
Agent是根據(jù)數(shù)據(jù)包的功能進(jìn)行劃分的[11],由于一組功能相關(guān)的數(shù)據(jù)接口都是同時(shí)使能或者屏蔽,幾乎不會(huì)出現(xiàn)單獨(dú)使用一組功能接口中某一個(gè)單獨(dú)信號(hào)的情況[12]。因此,本文在設(shè)計(jì)env的時(shí)候,引入了名為is_agent_active的參數(shù),且五組agent對(duì)應(yīng)五個(gè)不用的is_agent_active參數(shù)。當(dāng)is_agent_active置高,即參數(shù)有效時(shí),表明該組數(shù)據(jù)接口需要被驗(yàn)證環(huán)境驅(qū)動(dòng),對(duì)應(yīng)的agent才會(huì)被實(shí)例化到env中;相應(yīng)的,當(dāng)is_agent_active為低時(shí),表明該組數(shù)據(jù)接口在本次測(cè)試用例中,不需要接受驗(yàn)證環(huán)境的驅(qū)動(dòng),該參數(shù)對(duì)應(yīng)的agent就不會(huì)被實(shí)例化到env中。本文中的5個(gè)agent對(duì)應(yīng)5個(gè)參數(shù),這些參數(shù)通過(guò)uvm_config機(jī)制,從test_case這一層級(jí),即用戶(hù)接觸到的層級(jí)中進(jìn)行配置,用戶(hù)只需要編寫(xiě)好testcase即可自動(dòng)完成。這樣做便可以根據(jù)testcase的實(shí)際需求不同,來(lái)快速實(shí)現(xiàn)不同的驗(yàn)證環(huán)境,用最精簡(jiǎn)的驗(yàn)證環(huán)境來(lái)完成需要實(shí)現(xiàn)的任務(wù),以節(jié)約仿真所需的內(nèi)存開(kāi)銷(xiāo),減小仿真需要的總時(shí)長(zhǎng)。
根據(jù)待測(cè)設(shè)計(jì)的功能,本文對(duì)以下幾個(gè)功能進(jìn)行驗(yàn)證。

表1 待測(cè)電路功能點(diǎn)劃分
控制各時(shí)鐘的使能信號(hào),觀測(cè)對(duì)應(yīng)的時(shí)鐘輸出頻率是否滿(mǎn)足要求。驗(yàn)證時(shí)鐘樹(shù)上不同時(shí)鐘之間的相位差關(guān)系以及同源時(shí)鐘的分頻關(guān)系,故將時(shí)鐘信息納入功能驗(yàn)證覆蓋點(diǎn)。
在正常的工作狀態(tài)下,隨機(jī)產(chǎn)生一個(gè)等候時(shí)間,在此時(shí)間之后產(chǎn)生復(fù)位信號(hào),并觀測(cè)各寄存器是否復(fù)位成功。復(fù)位之后釋放復(fù)位信號(hào),重新使能,觀測(cè)系統(tǒng)能否正常工作。
時(shí)鐘使能之后,通過(guò)總線(xiàn)agent配置相應(yīng)的寄存器使DUT進(jìn)入工作狀態(tài)。即配置TX與RX的使能寄存,使DUT可以進(jìn)行數(shù)據(jù)的收發(fā)。此時(shí)需要調(diào)用UVM_INFO機(jī)制,將每次的收發(fā)信息進(jìn)行打印對(duì)比,并將其納入測(cè)試覆蓋點(diǎn)。根據(jù)每次運(yùn)行的testcase的不同,觀察系統(tǒng)是否能正常工作或者給出中斷信號(hào)等錯(cuò)誤響應(yīng)。
發(fā)送入棧引擎接受數(shù)據(jù)包,并將他們存入發(fā)送FIFO(先進(jìn)先出存儲(chǔ)隊(duì)列);發(fā)送FIFO的每一個(gè)入口均指向一個(gè)[71:0]的存儲(chǔ)空間,其中低64比特存儲(chǔ)該幀的數(shù)據(jù),高8比特存儲(chǔ)該幀的幀信息,具體存儲(chǔ)格式如圖2所示;發(fā)送出擎分為兩個(gè)狀態(tài)機(jī),分別控制幀數(shù)據(jù)的封裝、CRC校驗(yàn)邏輯計(jì)算延時(shí)等待和幀數(shù)據(jù)發(fā)送過(guò)程的錯(cuò)誤處理。

圖2 FIFO中數(shù)據(jù)存儲(chǔ)的格式
接受入棧引擎通過(guò)gemii接口接受幀數(shù)據(jù),它也包含兩個(gè)狀態(tài)機(jī),分別控制幀數(shù)據(jù)接受過(guò)程的錯(cuò)誤處理和幀數(shù)據(jù)的解封、CRC校驗(yàn)邏輯計(jì)算延時(shí)的等待,如果校驗(yàn)通過(guò)則會(huì)將剩下的數(shù)據(jù)寫(xiě)入接收FIFO[13];接收FIFO的存儲(chǔ)格式和發(fā)送FIFO相一致;接收出棧引擎則將接收FIFO的信息反饋給上層邏輯,使得其他用戶(hù)可以得到接收到的數(shù)據(jù)信息。

圖3 發(fā)送出棧引擎的工作流程
通過(guò)對(duì)MAC處理器工作邏輯的分析,本文將發(fā)送接口和接收接口相連接,將發(fā)送的數(shù)據(jù)和接收到的數(shù)據(jù)進(jìn)行對(duì)比,將FIFO中的各個(gè)狀態(tài)加入測(cè)試點(diǎn)。如果所有功能測(cè)試點(diǎn)都能100%覆蓋,則說(shuō)明驗(yàn)證充分全面[14~16]。
一個(gè)完整數(shù)據(jù)發(fā)送周期的波形如圖4所示,首先是CPU對(duì)寄存器進(jìn)行了配置,設(shè)置了發(fā)送模式使能,打開(kāi)了各項(xiàng)中斷位。發(fā)送數(shù)據(jù)幀經(jīng)過(guò)解碼存入了發(fā)送FIFO,并且隨即從發(fā)送FIFO中取出。接下來(lái)CRC校驗(yàn)邏輯對(duì)該幀的數(shù)據(jù)進(jìn)行了CRC值的計(jì)算,根據(jù)mac協(xié)議完成了數(shù)據(jù)包的封裝,進(jìn)入發(fā)送階段。在發(fā)送出棧狀態(tài)機(jī)的控制下,由于沒(méi)有偵測(cè)到PHY接口上有遠(yuǎn)程錯(cuò)誤信息,該數(shù)據(jù)幀的各個(gè)數(shù)據(jù)段按照MAC協(xié)議依次經(jīng)xgmii接口進(jìn)行了發(fā)送。

圖4 數(shù)據(jù)發(fā)送過(guò)程的波形
為了加快驗(yàn)證,本文在testbench中將xgmii的發(fā)送口與接收口連接到了一起,即mac控制器會(huì)接收到自己發(fā)送出去的數(shù)據(jù)。從波形圖上可以看出,接受到的數(shù)據(jù)和發(fā)送數(shù)據(jù)完全一致,CRC校驗(yàn)通過(guò),接收到的數(shù)據(jù)幀符合mac協(xié)議。通過(guò)testbench的對(duì)比,發(fā)送的數(shù)據(jù)字段和接受的數(shù)據(jù)字段一致,該mac控制器可以正常工作。
圖5 是經(jīng)過(guò)回歸測(cè)試之后的覆蓋率統(tǒng)計(jì)結(jié)果。回歸測(cè)試是在大規(guī)模隨機(jī)測(cè)試之后,針對(duì)沒(méi)有覆蓋到的區(qū)域編寫(xiě)定向測(cè)試用例,功能覆蓋率達(dá)到100%。

圖5 功能覆蓋率的實(shí)驗(yàn)結(jié)果
在隨機(jī)測(cè)試用例中,大部分的功能點(diǎn)都已經(jīng)被覆蓋,只有不足10%的bins沒(méi)有被完全覆蓋掉。針對(duì)這種情況,本研究編寫(xiě)了定向測(cè)試用例,即對(duì)DUT施加確定的激勵(lì),使隨機(jī)測(cè)試用例中沒(méi)有被覆蓋到的功能也能通過(guò)仿真來(lái)實(shí)現(xiàn)。理論上,只要仿真時(shí)間不加以限制,隨機(jī)測(cè)試用例足夠多,總能實(shí)現(xiàn)100%的完成功能覆蓋,但是這樣做會(huì)耗費(fèi)大量的時(shí)間與計(jì)算資源,延長(zhǎng)了項(xiàng)目的開(kāi)發(fā)周期,變相地降低了產(chǎn)品的競(jìng)爭(zhēng)力。
UVM作為目前最通行的數(shù)字芯片驗(yàn)證手段,雖然其前期平臺(tái)搭建和測(cè)試用例的編寫(xiě)會(huì)耗費(fèi)大量時(shí)間,但是其高度的可重用性和清晰的結(jié)構(gòu)也給驗(yàn)證人員帶來(lái)了無(wú)可比擬的便利性。本研究提出了一種基于UVM的以太網(wǎng)控制器IP的驗(yàn)證環(huán)境,并且成功達(dá)到了功能覆蓋率100%的驗(yàn)證目標(biāo),在實(shí)際的芯片開(kāi)發(fā)流程中具有相當(dāng)重要的應(yīng)用價(jià)值。