徐梓文 郭桂良
(1.中國科學(xué)院大學(xué) 北京 100049)(2.中國科學(xué)院微電子研究所 北京 100029)
隨著集成電路制造技術(shù)的不斷進步,以片上系統(tǒng)(SOC)為代表的數(shù)字集成電路發(fā)生了跨越式的發(fā)展,設(shè)計的復(fù)雜程度和規(guī)模大幅增加,這給驗證工作提出了全新的要求與挑戰(zhàn)。相關(guān)研究表示,驗證已經(jīng)占據(jù)了整個數(shù)字前端流程70%~80%的工作時間[1~3],傳統(tǒng)的驗證手段已經(jīng)難以滿足新的要求。在這種背景下,如何找到快速高效的驗證手段,成為了一項很有價值的研究工作。
近年來,各大EDA廠商都在努力推出自己的驗證解決方案,諸如VMM等等。每種解決方案都有各自的優(yōu)勢,但是始終沒能做到兼容所有的應(yīng)用場景。2011年,UVM驗證方法學(xué)橫空出世,憑借其良好的性能得到了絕大多數(shù)先進IC公司的青睞。如今,UVM驗證方法學(xué)已經(jīng)正式成為了IEEE 1800.2-2017標準[4]。
媒體訪問控制器(MAC)實現(xiàn)了上層數(shù)據(jù)和物理層比特流的封裝和解封、流量的控制、檢驗檢測和載波偵聽多路訪問的信道存取等功能,保障了以太網(wǎng)數(shù)據(jù)的高帶寬、低延時傳輸。
通用驗證方法學(xué)UVM是由三大EDA廠商Syn?opsys、Cadence、Mentor協(xié)力打造,由Accellera組織負責(zé)發(fā)布的一種標準化的驗證方法學(xué)[5~6]。UVM本質(zhì)上是一種基于SystemVerilog語言的一個庫,它將驗證中需要使用到的各項功能進行劃分和標準化,使得驗證工程師可以采用類似堆積木的方式來搭建自己的驗證平臺。由于UVM引入了大量的標準化模塊,這使得基于UVM的驗證平臺具有了極強的可復(fù)用性。當待測設(shè)計(DUT)發(fā)生改變時,只需要改變與DUT相關(guān)的功能模塊即可實現(xiàn)測試平臺的復(fù)用。
基于覆蓋率驅(qū)動(CVD)的UVM驗證平臺是指在驗證平臺運行時,除了在scoreboard(計分板)中對DUT反饋的數(shù)據(jù)做判斷外,還會在各個monitor(監(jiān)視器)中增加大量的CoverGroup(覆蓋組)來對采集到的數(shù)據(jù)加以分析。只有當收集到的數(shù)據(jù)覆蓋到所有CoverGroup中的全部CoverPoint(覆蓋點)時,即功能覆蓋率達到100%時,我們才可以認為該DUT的所有功能均已被測試[7]。
在ISO組織制定的國際標準中,引入了OSI(開放式系統(tǒng)互聯(lián)通信參考)模型,該模型定義了計算機之間的互聯(lián)通信標準,共分為7層。OSI模型從下到上依次是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層和應(yīng)用層,其中的數(shù)據(jù)鏈路層又分為三個部分,分別是:邏輯鏈路控制(LLC)子層、媒體訪問控制(MAC)子層[8~9]。MAC子層的作用是屏蔽不同的物理層帶來的差異性,使得上層網(wǎng)絡(luò)可以操作不用的PHY(物理層)芯片[10]。
本文研究的MAC控制器便是采用MAC協(xié)議進行數(shù)據(jù)收發(fā)的IP,采用XGMII(10Gb獨立于媒體的接口)進行通信。
本文的驗證平臺的結(jié)構(gòu)如圖1所示,這是在標準UVM驗證環(huán)境的基礎(chǔ)上進行搭建的驗證平臺。
圖1 UVM驗證平臺架構(gòu)
由于DUT主要分為與片內(nèi)通信的幀傳輸接口、寄存器控制接口、xgmii傳輸接口,本文構(gòu)建了packet_in、packet_out、reg_access、xgmii_tx、xgmii_rx五組interface和agent。
Agent是根據(jù)數(shù)據(jù)包的功能進行劃分的[11],由于一組功能相關(guān)的數(shù)據(jù)接口都是同時使能或者屏蔽,幾乎不會出現(xiàn)單獨使用一組功能接口中某一個單獨信號的情況[12]。因此,本文在設(shè)計env的時候,引入了名為is_agent_active的參數(shù),且五組agent對應(yīng)五個不用的is_agent_active參數(shù)。當is_agent_active置高,即參數(shù)有效時,表明該組數(shù)據(jù)接口需要被驗證環(huán)境驅(qū)動,對應(yīng)的agent才會被實例化到env中;相應(yīng)的,當is_agent_active為低時,表明該組數(shù)據(jù)接口在本次測試用例中,不需要接受驗證環(huán)境的驅(qū)動,該參數(shù)對應(yīng)的agent就不會被實例化到env中。本文中的5個agent對應(yīng)5個參數(shù),這些參數(shù)通過uvm_config機制,從test_case這一層級,即用戶接觸到的層級中進行配置,用戶只需要編寫好testcase即可自動完成。這樣做便可以根據(jù)testcase的實際需求不同,來快速實現(xiàn)不同的驗證環(huán)境,用最精簡的驗證環(huán)境來完成需要實現(xiàn)的任務(wù),以節(jié)約仿真所需的內(nèi)存開銷,減小仿真需要的總時長。
根據(jù)待測設(shè)計的功能,本文對以下幾個功能進行驗證。
表1 待測電路功能點劃分
控制各時鐘的使能信號,觀測對應(yīng)的時鐘輸出頻率是否滿足要求。驗證時鐘樹上不同時鐘之間的相位差關(guān)系以及同源時鐘的分頻關(guān)系,故將時鐘信息納入功能驗證覆蓋點。
在正常的工作狀態(tài)下,隨機產(chǎn)生一個等候時間,在此時間之后產(chǎn)生復(fù)位信號,并觀測各寄存器是否復(fù)位成功。復(fù)位之后釋放復(fù)位信號,重新使能,觀測系統(tǒng)能否正常工作。
時鐘使能之后,通過總線agent配置相應(yīng)的寄存器使DUT進入工作狀態(tài)。即配置TX與RX的使能寄存,使DUT可以進行數(shù)據(jù)的收發(fā)。此時需要調(diào)用UVM_INFO機制,將每次的收發(fā)信息進行打印對比,并將其納入測試覆蓋點。根據(jù)每次運行的testcase的不同,觀察系統(tǒng)是否能正常工作或者給出中斷信號等錯誤響應(yīng)。
發(fā)送入棧引擎接受數(shù)據(jù)包,并將他們存入發(fā)送FIFO(先進先出存儲隊列);發(fā)送FIFO的每一個入口均指向一個[71:0]的存儲空間,其中低64比特存儲該幀的數(shù)據(jù),高8比特存儲該幀的幀信息,具體存儲格式如圖2所示;發(fā)送出擎分為兩個狀態(tài)機,分別控制幀數(shù)據(jù)的封裝、CRC校驗邏輯計算延時等待和幀數(shù)據(jù)發(fā)送過程的錯誤處理。
圖2 FIFO中數(shù)據(jù)存儲的格式
接受入棧引擎通過gemii接口接受幀數(shù)據(jù),它也包含兩個狀態(tài)機,分別控制幀數(shù)據(jù)接受過程的錯誤處理和幀數(shù)據(jù)的解封、CRC校驗邏輯計算延時的等待,如果校驗通過則會將剩下的數(shù)據(jù)寫入接收FIFO[13];接收FIFO的存儲格式和發(fā)送FIFO相一致;接收出棧引擎則將接收FIFO的信息反饋給上層邏輯,使得其他用戶可以得到接收到的數(shù)據(jù)信息。
圖3 發(fā)送出棧引擎的工作流程
通過對MAC處理器工作邏輯的分析,本文將發(fā)送接口和接收接口相連接,將發(fā)送的數(shù)據(jù)和接收到的數(shù)據(jù)進行對比,將FIFO中的各個狀態(tài)加入測試點。如果所有功能測試點都能100%覆蓋,則說明驗證充分全面[14~16]。
一個完整數(shù)據(jù)發(fā)送周期的波形如圖4所示,首先是CPU對寄存器進行了配置,設(shè)置了發(fā)送模式使能,打開了各項中斷位。發(fā)送數(shù)據(jù)幀經(jīng)過解碼存入了發(fā)送FIFO,并且隨即從發(fā)送FIFO中取出。接下來CRC校驗邏輯對該幀的數(shù)據(jù)進行了CRC值的計算,根據(jù)mac協(xié)議完成了數(shù)據(jù)包的封裝,進入發(fā)送階段。在發(fā)送出棧狀態(tài)機的控制下,由于沒有偵測到PHY接口上有遠程錯誤信息,該數(shù)據(jù)幀的各個數(shù)據(jù)段按照MAC協(xié)議依次經(jīng)xgmii接口進行了發(fā)送。
圖4 數(shù)據(jù)發(fā)送過程的波形
為了加快驗證,本文在testbench中將xgmii的發(fā)送口與接收口連接到了一起,即mac控制器會接收到自己發(fā)送出去的數(shù)據(jù)。從波形圖上可以看出,接受到的數(shù)據(jù)和發(fā)送數(shù)據(jù)完全一致,CRC校驗通過,接收到的數(shù)據(jù)幀符合mac協(xié)議。通過testbench的對比,發(fā)送的數(shù)據(jù)字段和接受的數(shù)據(jù)字段一致,該mac控制器可以正常工作。
圖5 是經(jīng)過回歸測試之后的覆蓋率統(tǒng)計結(jié)果?;貧w測試是在大規(guī)模隨機測試之后,針對沒有覆蓋到的區(qū)域編寫定向測試用例,功能覆蓋率達到100%。
圖5 功能覆蓋率的實驗結(jié)果
在隨機測試用例中,大部分的功能點都已經(jīng)被覆蓋,只有不足10%的bins沒有被完全覆蓋掉。針對這種情況,本研究編寫了定向測試用例,即對DUT施加確定的激勵,使隨機測試用例中沒有被覆蓋到的功能也能通過仿真來實現(xiàn)。理論上,只要仿真時間不加以限制,隨機測試用例足夠多,總能實現(xiàn)100%的完成功能覆蓋,但是這樣做會耗費大量的時間與計算資源,延長了項目的開發(fā)周期,變相地降低了產(chǎn)品的競爭力。
UVM作為目前最通行的數(shù)字芯片驗證手段,雖然其前期平臺搭建和測試用例的編寫會耗費大量時間,但是其高度的可重用性和清晰的結(jié)構(gòu)也給驗證人員帶來了無可比擬的便利性。本研究提出了一種基于UVM的以太網(wǎng)控制器IP的驗證環(huán)境,并且成功達到了功能覆蓋率100%的驗證目標,在實際的芯片開發(fā)流程中具有相當重要的應(yīng)用價值。