梁光勝,李朝洋,楊松,梁兆楷
(華北電力大學 電氣與電子工程學院,北京,102206)
隨著集成電路復雜度增長,驗證工作成為制約集成電路發(fā)展的瓶頸,高效的驗證方法不僅能確保設計功能正常,還可以提高設計效率[1~2]。隨著城市化進程日益加快,電梯使用量增加,電梯能耗在建筑總能耗中占比較大,節(jié)能化電梯日益受到重視[3~4]。本文從提升驗證效率和可靠性角度,以SystemVerilog 為驗證語言,以電梯運行控制系統(tǒng)為DUT,搭建了基于UVM 的驗證平臺,采用受約束的隨機測試用例,通過收集覆蓋率完成對測試進展的度量,根據(jù)仿真結果優(yōu)化驗證環(huán)境,提高UVM 驗證平臺的高重用性、可移植性、可靠性和可擴展性。
電梯運行控制系統(tǒng)以FPGA 作為核心控制芯片,通過按鍵模擬外部各種信號的輸入,借助LED 亮滅和數(shù)碼管顯示模擬真實電梯的運行過程,系統(tǒng)可實現(xiàn)對電梯多種運行模式的轉換與控制。
節(jié)能化電梯運行控制系統(tǒng)的主要功能如下:①響應電梯轎廂內(nèi)外的按鍵請求指令,按方向優(yōu)先原則依次響應;②當電梯運行到各個樓層時,相應樓層指示燈亮起,數(shù)碼管顯示樓層數(shù);③外部控制開關,一層只有向上按鈕,頂層只有向下按鈕,其余樓層有上下行按鈕;④具有超載報警、預超載和故障報警功能,此時電梯門處于打開狀態(tài),直至故障解除;⑤同一時間既有上行又有下行指令時,電梯會在響應完同一方向指令后再響應另一方向指令;⑥電梯在高峰時段自動切換到分層模式,電梯只響應奇數(shù)層呼梯信號;⑦當沒有呼梯指令時,電梯會在指定時間后自行關閉電梯門和轎廂照明,進入低功耗等待狀態(tài)。
采用自頂向下的設計方法,電梯運行控制系統(tǒng)中FPGA控制模塊頂層架構設計如圖1 所示,由信號控制、運動判斷、運動狀態(tài)機和輸出控制模塊組成。
圖1 FPGA 控制模塊的頂層架構
運動判斷模塊是電梯運行的主要控制模塊。根據(jù)電梯運行方向優(yōu)先原則和運行警示原則對輸入信號賦予不同的優(yōu)先級,其中轎廂所處樓層優(yōu)先級最低。超重信號和預超重信號優(yōu)先級最高,處于第一優(yōu)先級,其有效時整個電梯進入等待狀態(tài)。上下行脈沖處于第二優(yōu)先級,在上行脈沖有效時,上行信號優(yōu)先級高于下行信號;在下行脈沖有效時,下行信號優(yōu)先級高于上行信號。
電梯按照方向優(yōu)先和就近原則運行,相同用戶指令在不同運行狀態(tài)時會執(zhí)行不同的運行程序。運行狀態(tài)有上行態(tài)、下行態(tài)、空閑態(tài)。當處于上行態(tài)時,上行指令比下行指令優(yōu)先級高;當電梯處于空閑態(tài)時,與電梯??繕菍余徑挠脩糁噶顑?yōu)先級高。
判斷模塊輸出為狀態(tài)機輸入,主要信號包括上行、下行、到達相應樓層、開門、關門、啟動、結束。狀態(tài)機有空閑、等待、上行、下行、開關門5 種狀態(tài),如圖2 所示。
圖2 電梯運行控制系統(tǒng)的狀態(tài)機
采用SystemVerilog 構建層次化和模塊化的UVM 驗證平臺,主要目的是確保待測模塊的正確性與完備性,主要任務是模擬待測模塊可能出現(xiàn)的情況,產(chǎn)生相應隨機化激勵信號,驅動待測模塊運行[5~8]。
UVM 驗證平臺的架構如圖3 所示,包括待測模塊DUT、驅動模塊Driver、監(jiān)測模塊Monitor、激勵產(chǎn)生模塊Sequence、激勵仲裁模塊Sequencer、參考模型Reference Model、比較器Scoreboard、驗證環(huán)境Agent和Env、測試頂層Top 等組件。
圖3 UVM 驗證平臺的架構
sequence 產(chǎn)生待測模塊的所有激勵信號,并包裝成transaction 事務包,發(fā)送給sequencer,sequencer 進行內(nèi)部檢查確認后再發(fā)送給driver,driver 用這些激勵信號驅動DUT 和參考模型,monitor 對DUT 輸入輸出結果監(jiān)測,計分板將收集并比對DUT 的輸出和參考模型的結果。
由于driver、sequencer 和monitor 使用同一通信協(xié)議且結構相似,因此可集成在一個agent 中。而agent、scoreboard 和參考模型屬于同一層次的模塊,將其集成在一起構成了整個驗證平臺的基本框架,同時也構建了UVM驗證平臺的樹形結構。
UVM 驗證平臺各組件采用TLM 通信方式,成功地將模塊內(nèi)的計算和模塊之間的通信從時間跨度方面剝離開,通過事務級端口將各組件通信時所需變量和約束條件打包傳輸,采用虛擬接口完成DUT與驗證組件之間的通信和時序同步。
針對DUT 設置虛擬接口信號,通過config_db 實現(xiàn)驗證平臺與DUT 交互;Driver 組件通過模擬傳輸協(xié)議驅動DUT 和參考模型;參考模型以新編程語言編寫待測模塊代碼并將運行結果傳給計分板;比較器將待測模塊和參考模型的輸出結果比對分析。
按照層次化和模塊化原則構建UVM 驗證平臺,在頂層實例化電梯控制系統(tǒng),使用config_db 機制通信,首先在頂層完成set 操作:
uvm_config_db#(virtual ele_if)::set(null, "uvm_test_top.env.i_agt.drv", "vif", m_ahb_if);
uvm_config_db#(virtual ele_if)::set(null, "uvm_test_top.env.i_agt.mon", "vif", m_ahb_if);
其中第一個和第二個參數(shù)聯(lián)合起來組成目標路徑,與此路徑符合的目標才能收信。第一個參數(shù)必須是一個uvm_component 實例的指針,第二個參數(shù)是相對此實例的路徑。第三個參數(shù)表示一個記號,用以說明這個值是傳給目標中的哪個成員,第四個參數(shù)是要設置的值。然后利用TLM 通信中get 操作完成對虛擬接口數(shù)據(jù)的獲取,在底層driver 組件和monitor 組件中完成get 操作,同時判斷底層組件是否接收到虛擬接口中的數(shù)據(jù):
if(!uvm_config_db#(virtual ele_if)::get(this, "", "vif", vif))
‘uvm_error("NOVIF",{"virtual interface must be set for: ",get_full_name(),".vif"});
以此完成driver、monitor 與電梯控制系統(tǒng)的互聯(lián)通信。
驗證平臺組件和待測模塊通過虛擬接口互聯(lián),避免使用絕對路徑,增強組件的可移植性和可重用性。虛擬接口的主要信號通過rand 語句將所要定義的信號變量設為隨機變量,完成對接口信號字段的定義和隨機化,使信號能取所定義范圍中任何一個隨機數(shù)。通過關鍵字constraint 約束隨機信號,從而產(chǎn)生出有效的激勵供測試平臺調用。這種隨機化激勵完善了激勵的完備性,可測試出DUT 更多的邊界條件。虛擬接口主要信號包括各樓層按鍵信號rand bit [16:0] key、電梯使能信號rand bit key_en、電梯超載和預超載以及故障報警信號rand bit key_weight、電梯運行模式控制信號rand bit [1:0] key_ctl、電梯運行顯示信號rand bit [5:0] led、電梯樓層顯示信號rand bit [7:0] seven_tube。
Driver 和Monitor 是驗證平臺與DUT 交互的組件,其功能是收集事務級數(shù)據(jù),根據(jù)待測模塊功能和時序要求將其轉換成DUT 各輸端口信號。Driver 繼承uvm_component的uvm_driver 類,首先通過宏完成driver 的工廠注冊,將其登記在UVM 內(nèi)部網(wǎng)表;其次端口例化,build_phase完成與DUT 互聯(lián);最后run_phase 完成所有信號時序描述,將事務級端口數(shù)據(jù)轉換成信號級驅動DUT。run_phase 包含reset_phase 和do_drive 等任務,reset_phase 完成復位工作,do_drive 完成節(jié)能化電梯運行控制系統(tǒng)端口的時序描述和事務級端口數(shù)據(jù)的轉換。
參考模型繼承uvm_component 類,是針對DUT 的驗證基準,通過算法模仿DUT 的功能需求,并認定所實現(xiàn)的功能是完全正確的。參考模型接入與DUT 相同的激勵,其輸出與DUT 輸出自動比對,結果一致時認為DUT 符合設計需求,不一致時判定DUT 存在錯誤或缺陷。創(chuàng)建參考模型時,需要完成組件繼承、宏的工廠注冊,并定義與DUT 對應的功能模塊;然后定義兩個端口,其中一個端口接受Driver發(fā)來的事務級信號作為輸入,另一端口則把輸出的事務級信號發(fā)送到Scoreboard 進行數(shù)據(jù)的自動比對。參考模型在build_phase 中完成初始化。當輸入端口接收到Driver的信號時,判斷電梯控制系統(tǒng)的運行模式,將結果發(fā)送到Scoreboard 進行比對。
在底層組件定義完畢后,創(chuàng)建驗證環(huán)境Agent 和Env。每個測試的功能點可以使用不同的Agent 進行打包,所有的Agent 統(tǒng)一在Env 中實例化,根據(jù)不同的需求調用不同的Agent。所有的env 都派生自uvm_env,與底層組件一樣使用uvm_component_utils宏來實現(xiàn)工廠注冊。在build_phase中使用new 函數(shù)完成i_agent、o_agent、參考模型和比較器等底層組件的實例化,并指定各個agent 的工作模式;在connect_phase 中使用uvm_tlm_analysis_fifo 完成各個組件的事務級通信。
運行UVM 驗證平臺,檢驗電梯控制系統(tǒng)能否根據(jù)外界輸入正常工作,能否完成預期的各項功能,其功能驗證點和方案如表1 所示。
表1 電梯運行控制系統(tǒng)的功能驗證點和驗證方案
編寫多個測試用例來驗證不同測試點的完備性,利用VCS 編譯仿真并產(chǎn)生編譯報告、覆蓋率結果。通過make命令對各驗證組件和DUT 編譯,若編譯成功則生成可執(zhí)行文件和編譯結果信息。通過運行可執(zhí)行文件,選擇不同的測試項testcase 仿真,利用“'uvm_info”宏打印當前比對的事務信息,比對成功時打印“Compare successfully”等信息,比對失敗則報錯。電梯運行控制系統(tǒng)的部分數(shù)據(jù)報告如圖4 所示。
圖4 電梯運行控制系統(tǒng)的部分數(shù)據(jù)報告
驗證平臺通過虛擬接口與DUT 連接,將ele_slv_if.sv中虛擬接口信號導入DVE 波形分析器,選用不同測試用例就可得到DUT 不同的輸入輸出波形,如圖5 所示。
圖5 電梯運行控制系統(tǒng)的部分運行波形
覆蓋率是評估驗證工作進度與驗證是否完備的指標,包括代碼覆蓋率和功能覆蓋率。代碼覆蓋率分為語句覆蓋率、條件覆蓋率、決策覆蓋率、跳轉覆蓋率和狀態(tài)機覆蓋率,是衡量待測模塊運行情況的標準。在仿真過程中EDA 軟件自動收集代碼覆蓋率,當參數(shù)NUMBER_PACKETS 為5000、TEST_MODE 為1、+ntb_random_SEED 為1651198619 時,其覆蓋率報告如圖6 所示。
圖6 電梯運行控制系統(tǒng)的覆蓋率報告
完成驗證后再下載到FPGA 芯片中,應用開發(fā)板中,可觀察到節(jié)能化電梯運行控制系統(tǒng)功能已全部實現(xiàn),UVM 驗證平臺的重用性和完備性良好。
本文以電梯運行系統(tǒng)為待測對象,搭建了UVM 通用驗證平臺,以覆蓋率為驗證指標,檢測了UVM 驗證平臺的高重用性、可移植性、可靠性和可擴展性。