侯林濤 陳海燕 李 明 陳俊杰
(國防科技大學計算機學院 長沙 410073)
隨著第五代移動通信和大數據等行業的快速發展,圖像處理等數據密集型嵌入式應用面臨超大數據吞吐量[1]、高能效比等挑戰。為提高DSP 的峰值運算能效,高性能DSP多采用SIMD架構,片上集成了大量SIMD 并行的計算單元[2]。如何為運算單元提供高帶寬的并行訪存數據已成為DSP 片上存儲單元面臨的重要問題。基于SIMD架構的參數化片上向量存儲器(VM)因其高帶寬、可重用性強等特點被廣泛采用。但隨著其帶寬增大、復雜度提高,傳統的定向測試的驗證手段,已難以滿足高帶寬向量存儲器的驗證需求[3]。
UVM 作為新一代以SystemVerilog 類庫為主體的驗證平臺開發框架,結合了VMM、OVM 的優點[4],利用其可重用組件構建標準化、層次化的驗證環境越來越受歡迎[5]。UVM 最突出的特點在于其面向對象的編程(OOP)的思想[6],有效結合了測試激勵隨機生成、測試平臺分體化等方法[7],有助于使用更抽象的事務級驗證方法實現覆蓋率驅動的驗證。為日益復雜的芯片設計提供了強大的驗證保證,滿足縮短產品上市的迫切需求[8]。
本文基于UVM 驗證方法學,根據FT-M 系列數字處理芯片64bit和32bit兩個系列對VM 的不同需求,提出了一種參數化的VM 驗證方案,搭建了參數化UVM 驗證平臺。根據設計規范,凝練驗證功能點編寫測試用例,實現了較高代碼覆蓋率的功能驗證。
FT-M 系列DSP 采用標、向量并行處理結構和VLIW 與SIMD 融合技術[9],以充分挖掘指令級和數據級并行。該系列DSP主要包含指令派發部件、標量處理單元、向量運算單元(VPU0-VPU15)、VM、DMA 等部件。其中,向量運算單元主要負責“密集數據”并行運算。向量運算單元VPU0-VPU15按照SIMD 的架構以并行的方式處理數據,大大加速了應用中大量存在的矩陣類運算的執行。VM支持兩條向量訪存指令操作,可為向量運算單元提供高帶寬數據供給;DMA 實現VM 與DSP 核外的數據交換。圖1為VM與其他部件的接口。

圖1 向量存儲器功能接口圖
VM 作為FT-M 系列DSP 上的向量存儲部件,支持兩條向量訪存指令及DMA 讀、寫并行訪問操作,實現兩條向量訪存指令譯碼、地址計算、訪存仲裁、訪存、數據對齊、寫回等訪存流水線控制和DMA 數 據 搬 移。 如 圖 2,其 中,VM 由BANK0~BANK15 共16 個存儲體按低位地址組織;地址計算單元接收向量訪存指令并進行向量指令譯碼、地址計算、數據重整理等操作。訪存控制實現每個BANK 的沖突判斷、訪存信號選擇、訪存等功能。

圖2 VM主要功能模塊
向量存儲器的一個BANK 由單端口SRAM 組成,16個BANK以雙字為單位采用低位交叉的組織結構。實現了16 路SIMD 寬度的向量數據訪問,為16 個向量處理單元提供較寬的數據供給。支持訪存帶寬、雙字、有無符號半字等多種粒度的配置;提供了8 個基址寄存器和地址偏移寄存器,支持線性尋址;支持雙字雙訪問和雙字單訪問的指令混洗操作。訪存粒度分別配置為64bit 或32bit 時,相應配置如表1。

表1 單字64、32bit訪存數據配置
根據向量存儲器的功能特點,驗證工作存在以下難點:
1)存儲容量大,遍歷所有存儲單元需龐大的激勵文件,編寫定向激勵費時耗力[10]。
2)數據帶寬大、種類繁雜、輸入輸出數據帶寬大,人工檢查難度系數高。
3)向量訪存指令復雜,包含多種尋址模式、訪存粒度、長立即數和非長立即數偏移,具體組合達數千種。遍歷所有方式困難大。
4)多指令執行情況復雜。LS0、LS1、DMA 讀寫,四路請求可順序可并發。并發時又存在沖突或不沖突。
隨著芯片設計規模及復雜度的不斷增加,驗證在整個芯片設計的生命周期中占80%以上的時間[11]。傳統的驗證方法效率低、難維護及可重用性低等缺點已成為制約芯片發展的瓶頸[12]。UVM 作為新一代的驗證思想,極大地促進了RTL級驗證的的可重用化發展[14]。UVM 驗證方法學因其強大的類庫、factory 機制、phase 機制、sequence 機制以及基于事物級的TLM 通信機制等[5],極易實現激勵產生單元、自檢單元等和待測模塊分離,增強了驗證平臺的可重用性和可維護性[15]。
利用UVM 驗證方法學搭建參數化片上向量存儲器的驗證平臺如圖3,主要包括agent、scoreboard、ref_module、driver、monitor、sequencer 等 組件。這些組件是封裝完好且功能完善的,可重用性極高[16]。其中sequence 在sequencer 的協助下產生事務序列并完成隨機化。通過driver根據接口協議轉化成物理信號以驅動DUT 和ref_module,其結果經monitor 采樣發送Scoreboard 進行結果的正確性判斷。
主電路正常工作合閘時,QF3-4閉合,電流經R2流過,紅色指示燈亮,表示斷路器合閘中,主電路有大電流。由于R2的值較大,流過YR的電流很小,不會跳閘。同時紅燈亮,指示保險絲FU和控制回路電路完好。

圖3 驗證平臺結構
此外,參數化的設計可以通過多種方式實現,包括parameter、宏定義(`define)、條件編譯(`ifdef、`elsif、`endif)等。下面的代碼段描述的是VM 在頂層宏定義的頭文件VM_Define.v中定義的各類參數以及條件編譯指令,以實現不同訪存粒度、不同數據位寬的VM建模。

圖4 參數化設計代碼實現
FT-M系列片上向量存儲器的訪存流水線可達十多級,且受全局停頓信號、忙請求等信號的控制。由于Store 指令和DMA 寫無法從輸出接口采樣數據信息,很難判斷該操作的正確性,因而在驗證過程采用讀寫結合的方式。即在執行完寫操作以后通過Load或DMA讀的方式取出數據判斷其結果的正確性。在此過程中只能判斷讀寫數據、地址、粒度等數據信息而無法判斷流水線的具體節拍。為滿足時鐘精確的驗證需求,本設計通過采用參考模型結合斷言的方法驗證整個流水線的操作過程。具體做法為:使用SystemVerilog搭建參考模型,模擬了向量訪存的主要過程及與周邊模型的數據交互。如圖5所示。

圖5 參考模型及周邊模型主要功能
其中ARF 為地址寄存器,包括基址寄存器AR和偏移量寄存器OR。VRF 為通用寄存器組,該寄存器組包含了16個向量處理單元(VPU0-VPU15),每個VPU 包含64 個寄存器(VPE)且可配置為64bits 或32bits。本設計以任務的形式實現VRF 以及ARF 等模塊的功能,并將對寄存器或存儲體的讀寫轉化為對多維數組的操作。例如:“模擬器”會將來自于譯碼單元的AR/OR 地址轉化為數組MEM1、MEM2 的序號讀取相應的基址及偏移量等信息。VRF 操作類似,對于Store 指令根據譯碼站的譯碼地址將VPU 地址轉化為對三維數組的序號并將相應地址中的數據讀出,在地址計算單元發送至VM,load 操作類似則是將相應的地址轉化為數組序號并按序號寫回至三維數組。DMA 實現方式同理,此處不再贅述。數組定義如圖6所示。

圖6 參考模型數組定義
四路請求的訪存過程在測試激勵產生后進行譯碼、地址計算、仲裁、訪存、寫回的順序執行。當執行到仲裁單元時將指令的有效信號(使能、地址、符號擴展位、數據、屏蔽位等)通過郵箱保存,并按仲裁原則進行沖突判斷。通過觸發相應的讀寫任務以完成具體的操作。該觸發過程由旗語控制。需注意的是,此過程應嚴格按訪存粒度進行地址計算以及地址到數組的轉化。
完 整 的 LS 操 作 過 程 于 ref_module 的main_phase 中完成。為了便于后期調試可將每一單元的操作以任務的形式封裝。其他的操作,如初始化、復位、配置寄存器等過程封裝在其他phase中并寫好代碼。某時刻若需要執行復位、初始化等操作可通過phase間的跳轉完成。這兩項操作極大提高了驗證工作的靈活性。此外,由于參考模型無需考慮其綜合性,參考模型的大部分語法基于行為級實現,具有較高的可靠性。
驗證平臺中driver 負責將transaction 級別的數據包驅動為端口信號,以驅動DUT,monitor 與之相反,將采集到DUT 端口數據轉化為transaction 交給后續的組件進行后續處理。二者處理的是同一種協議,在同一套既定的規則下做不同的事。sequencer 作為一個“管道”,連續地傳遞著激勵事物并通過TLM 接口發送至driver。UVM 通常將三者封裝在一起稱為代理。其主要作用為參考模型和DUT的驅動及采樣。
本設計根據VM 的功能特點,采用定向激勵和隨機激勵相結合的方式產生測試用例。其中定向激勵主要用于產生一些配置信號,比如:配置向量寄存器,異常屏蔽控制寄存器以及向量長度寄存器等。隨機激勵封裝在transaction中,代碼如圖7。

圖7 數據包定義
隨機變量聲明為rand型,并通過constraint添加約束。通過隨機化生成相應的指令,該數據包還做了參數化,可根據不同的配置要求產生相應的隨機變量,按需完成數據包的定制。DMA 的生成方式類似。隨機激勵根據特定的應用場景產生相應的測試用例,大大增加了測試的覆蓋范圍以及可靠性。
測試向量的隨機化過程基于可重用的sequence 機制,使用sequence_library 來描述測試向量,sequence_library 相當于一個序列庫,sequence通過注冊加入庫,加入該庫的sequence根據設定的仲裁算法以某種順序啟動多個sequence。由于FT_M系列片上存儲器的驗證過程是以讀寫操作結合的方式進行的,要求數據包也應該按照先寫后讀的方式產生。因而采用此方式產生隨機激勵的方式可極大提高驗證效率。
自動化流程設計中自檢模塊必不可少。驅動器將事務發送至DUT 和參考模型,參考模型處理后得出一份期望的結果,通過相應的接口發送至計分板。當接收到DUT 的輸出后,開始比對結果并將其寫入Log 文件生成驗證報告。具體實現過程為:在scoreboard 的main_phase 中設立兩個并行進程,一個處理來自于ref_module 的數據,由于ref_module 基于高級語言建模,一般不需要延時或延時較小,其處理速度快于DUT。故而,當收到來自于參考模型的數據后先將其保存。另一個進程處理DUT 的輸出,當收到來自DUT 的數據時,從隊列中取出ref_module 的結果,并利用trasaction 中的通過field_automation 注冊過的變量自動調用內建的compare 函數完成最后的比較操作并給出結果。一旦發生比對錯誤立刻會結束仿真,極大地方便調試者快速定位錯誤。
通過利用UVM 驗證方法學搭建FT_M 系列片上VM 驗證平臺,利用Cadence 公司的NC-Verilog仿真軟件進行模擬仿真。圖8 為隨機派發的讀指令的操作結果。

圖8 仿真結果
圖8 表明在1310000PS 時刻scoreboard 中數據包比對成功。其中the expect pkt 和actual pkt 分別為參考模型和DUT 的輸出結果。將所有測試用例運行完畢后,統計總體覆蓋率結果,本文著重關注代碼覆蓋率。查看和分析覆蓋率,找出沒有覆蓋到的分支、表達式等,而后根據未覆蓋到得表達式編寫定向激勵,進行相應的功能驗證。

圖9 向量存儲器(VM)覆蓋率
從上圖可看出向量存儲器的所有程序塊均已覆蓋,Block覆蓋率高達到99%,表達式覆蓋率達到96%。針對沒有覆蓋到的語句做了相應的原因分析,在文檔中記錄未覆蓋的原因,并設法解決。
本文提出了一種以定向激勵結合隨機激勵為驅動的層次化驗證方法。較之傳統的驗證環境,具有以下優越性:
1)UVM 強大的類庫為搭建驗證平臺提供了極大便利,面向對象編程的思想和各種機制使得驗證環境更具自動化和可重用性。層次化、模塊化設計明確了各個組件的任務,提高了驗證平臺的可維護性和可重用性。
2)受約束的隨機驗證平臺搭建完畢后,測試的大部分工作均由計算機完成,驗證的效率會很大程度地提高,且大幅度地減少了驗證激勵文件數目,回歸測試比較容易完成。