袁儒明,陳迎春,汪楊,陳紹輝
(合肥工業(yè)大學,安徽合肥,230009)
驗證工作起始于設計規(guī)格書或者需求書。從架構的設計,行為級的系統(tǒng)建模到RTL建模的設計,甚至到最后的網表設計和后端的詳細布局,驗證工作貫穿在芯片設計的整個過程中[1]。因此,對硬件電路的仿真和驗證就成為了影響項目進度的瓶頸,往往占整個IC開發(fā)周期70%左右的時間[2]。
傳統(tǒng)的驗證語言存在抽象建模能力不足,不易擴展和維護,缺少帶約束的隨機激勵,仿真速度慢等缺點[3],已經遠遠不能滿足當前驗證的需要。UVM是Accellera公司于2011年推出的基于systemverilog語言的通用驗證方法學,其主體來源為OVM,同時又采納了Synopsys在VMM中的寄存器解決方案RAL[4]。UVM克服了OVM和VMM各自的缺點,成為目前最主流的驗證方法學,指引了驗證方法學的發(fā)展方向。
本文通過重用驗證組件、繼承驗證場景和重用驗證序列,實現(xiàn)了不同模塊的功能驗證,縮短了驗證周期,提高了驗證效率。
為了解決多個主設備同時競爭總線的控制權的問題,應當采用總線仲裁部件,以某種方式選擇一個主設備優(yōu)先獲得總線控制權。只有獲得了總線控制權的設備,才能開始傳送數據。
本模塊采用主設備控制模式,對總線有控制權,信息的傳送是由主設備啟動的,仲裁框圖如圖1所示。
圖1 總線仲裁框圖
工作流程:
(1)主設備發(fā)送請求信號;
(2)若多個主設備同時需要使用總線,總線控制器根據仲裁邏輯、判優(yōu)按一定的優(yōu)先等級順序確定可以使用總線的主設備;
(3)獲得總線使用權的主設備開始傳送數據。
UVM提供了一系列標準類,如uvm_test、uvm_env、uvm_agent、uvm_driver、 uvm_monitor、uvm_sequence、uvm_sequencer等。UVM方法學將uvm_driver、uvm_monitor、 uvm_sequencer封裝成uvm_agent類,這些可配置、可重用的組件(Universal Verification Component,UVC) 作為最重要的可重用組件能夠加快驗證的實施[5-6]。
在UVM驗證平臺中,以UVC為基礎,把類uvm_driver、uvm_monitor封裝成uvm_agent后,在uvm_env中只需要實例化uvm_agent,而不需要再直接實例化uvm_driver和uvm_monitor[7-8],UVM通用平臺如圖2所示。
圖2 UVM通用平臺
基于UVM的Factory機制,重載驗證平臺中的組件,避免重復開發(fā),具有很強的靈活性[9-10]。
當對總線仲裁模塊和主設備模塊進行整體模塊的功能驗證時,采用驗證組件橫向的重用性,重用總線仲裁模塊的驗證組件。橫向的可重用性是指驗證組件在不同的IP驗證中的重用,不同的IP具有相同的總線接口。
本文首先對仲裁模塊進行功能驗證,并且采用了兩個UVC組件。兩個UVC組件的結構是一致的,不同的是,UVC1的主要功能是用來發(fā)送激勵和接收總線仲裁模塊輸出的數據,UVC2的主要功能是用來模擬總線仲裁模塊的功能,DUT模塊為dut_dummy.v,即為總線仲裁模塊。兩個UVC組件的monitor模塊收集數據并發(fā)送到bus_monitor模塊中,bus_monitor把數據發(fā)送到scoreboard模塊中進行比較。在scoreboard中會校對發(fā)送和接收的數據,以及總線的讀寫模式??偩€仲裁模塊驗證環(huán)境如圖3所示。
圖3 總線仲裁模塊的驗證環(huán)境
本文主設備選用2個UART模塊。當對總線仲裁模塊和主設備模塊進行整體模塊的功能驗證時,DUT模塊為top.v模塊,top.v模塊包含總線仲裁模塊和UART模塊。因UART模塊為內部數據模塊,對IP的接口不產生影響,所以采用驗證的橫向可重用性,重用UVC1和UVC2組件,整體模塊的驗證組件重用方式如圖4所示。其中,IP1是總線仲裁模塊,IP2是top.v模塊,在對IP2的驗證中,驗證環(huán)境重用了IP1的UVC1和UVC2組件,實現(xiàn)了驗證組件的重用性。
圖4 驗證重用方式
本文在對整體模塊進行功能驗證時,重用了圖3所示的驗證環(huán)境uvm_env,同時通過繼承uvm_base的方式創(chuàng)建了三個新的base_test類test_2m_4s、test_r8_w8_r4_w4和test_read_modify_write,這三個類分別在每個base_test類中創(chuàng)建新的測試用例,從而實現(xiàn)了驗證場景的繼承,驗證場景的繼承方式如圖5所示。
圖5 驗證場景的繼承
可重用性不僅表現(xiàn)在驗證組件的可重用性上,也體現(xiàn)在測試用例的可重用上。在UVM平臺中,測試用例的重用方式以驗證序列的重用為基礎。一般通過三種方式重用驗證序列:一是組合重用,二是繼承重用,三是模塊級測試用例到系統(tǒng)級的重用。組合重用是指通過不同的排列組合規(guī)劃已有的序列生成新的序列。繼承重用是指通過類的繼承,重用先前類的屬性和方法,繼承已有的序列生成新的序列。本文主要使用組合重用和繼承重用兩種方法。在使用組合重用的過程中,對已經開發(fā)完成的讀、寫操作組合成讀后寫等新的操作。在使用繼承重用的過程中,本文通過添加新的控制屬性或者修改已有的約束條件,生成不同的測試用例,測試用例如表1所示。
表1 仲裁模塊測試用例列表
總線仲裁模塊主要驗證多個主設備同時競爭總線的控制權,本文選用兩個UART模塊掛載到總線仲裁模塊上??偩€仲裁模塊驗證結果顯示,master和slave選擇0位的設備優(yōu)先獲得總線的控制權,讀模式打印的結果是READ,寫模式打印的結果是WRITE,讀寫的數據是data。如圖6和圖7所示,設備0獲得優(yōu)先的總線控制權,然后對數據進行讀寫,寫出的數據比讀出的數據少1。
圖6 讀模式
圖7 寫模式
通過添加不同的激勵,不斷的提高驗證的完備性,驗證覆蓋率結果如圖8所示。其中,語句覆蓋率達到100%,行覆蓋率達到100%,翻轉覆蓋率達到100%。
圖8 覆蓋率報告
通過UVM報告可以看出,scoreboard對實際數據和預取數據進行對比,分別實現(xiàn)讀寫對比,scoreboard數據對比如圖9所示。
圖9 scoreboard數據對比
UVM方法學吸收主流方法學的優(yōu)點,不僅功能強大,而且架構清晰,在可重用性等方面具有很大的優(yōu)勢,使得驗證難度被有效分解,縮短了流程,加快了驗證的實施。本文基于UVM環(huán)境,對驗證組件進行重用,快速的完成了總線仲裁模塊功能驗證,以及整體模塊的驗證工作,驗證效率得到大幅提升,在實際應用中具有很高的利用價值。