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

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

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

圖2 FIFO中數據存儲的格式
接受入棧引擎通過gemii接口接受幀數據,它也包含兩個狀態機,分別控制幀數據接受過程的錯誤處理和幀數據的解封、CRC校驗邏輯計算延時的等待,如果校驗通過則會將剩下的數據寫入接收FIFO[13];接收FIFO的存儲格式和發送FIFO相一致;接收出棧引擎則將接收FIFO的信息反饋給上層邏輯,使得其他用戶可以得到接收到的數據信息。

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

圖4 數據發送過程的波形
為了加快驗證,本文在testbench中將xgmii的發送口與接收口連接到了一起,即mac控制器會接收到自己發送出去的數據。從波形圖上可以看出,接受到的數據和發送數據完全一致,CRC校驗通過,接收到的數據幀符合mac協議。通過testbench的對比,發送的數據字段和接受的數據字段一致,該mac控制器可以正常工作。
圖5 是經過回歸測試之后的覆蓋率統計結果。回歸測試是在大規模隨機測試之后,針對沒有覆蓋到的區域編寫定向測試用例,功能覆蓋率達到100%。

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