北京廣利核系統工程有限公司 張運濤,宋立新,曹宗生,邊慶杰
UVM方法學在核安全級可編程邏輯仿真驗證中的應用
北京廣利核系統工程有限公司張運濤,宋立新,曹宗生,邊慶杰
FPGA及CPLD在核電DCS領域被大量應用。可編程邏輯產品的驗證是保證產品安全性、正確性的重要環節[1,2]。針對可編程邏輯產品,采用行為仿真是保障產品安全性的重要驗證方法。當前對于核電DCS可編程邏輯產品仿真常用的方法是先根據測試大綱編寫測試用例,所有測試用例專家評審通過后,通過編寫定向測試激勵進行功能仿真。這種方法的局限性是針對每個測試用例都要重新編寫測試環境,測試代碼的更改量大,可復用性不高。
UVM (Universal Verification Methodology)是ASIC領域新興的一種驗證方法,主要用于IC芯片驗證[3]。它是一種面向對象的方法,由于它具備良好的可復用性及靈活性,UVM已經廣泛用于國內外眾多芯片廠商[3,4]。本文介紹UVM方法在DCS系統可編程邏輯產品驗證中的應用。在通信路由板卡的可編程邏輯驗證工作中引入UVM驗證方法,在能保證與傳統方法同等覆蓋率指標的基礎上,提高了Testbench的復用性及驗證效率。
UVM是IC驗證業界一種新興驗證方法學,它的特點是面向對象,可復用性、擴展性好[3]。采用UVM進行驗證工作的主要優點為[3~6]:
(1)UVM Testbench為模塊化結構,便于驗證組件復用。既可橫向復用,供其它項目使用;也可縱向復用,滿足同項目中更高層級的集成。
(2)UVM為達到覆蓋率驅動(CDV)提供了最佳的框架。覆蓋率驅動結合受約束隨機激勵、自動檢查以及覆蓋指標,可節省驗證時間。
(3)采用UVM方法學便于測試維護,在不修改Testbench情況下,通過修改testcase的方式來改變測試用例,提高測試靈活性和效率。
2.1UVM測試平臺Testbench
UVM 測試平臺由可復用的驗證組件(verification component)構成。驗證組件是封裝的、易用的可配置驗證環境,用于進行子模塊設計、接口協議等驗證。這些驗證組件存儲于驗證人員的自開發IP組件庫中,它們可以被方便的使用,在需要時根據驗證人員的需求可靈活復用于多種驗證環境[4],快速搭建起所需要的測評平臺。
圖1展示了一個驗證環境,它由兩個agent和一個virtual sequencer構成。每個agent驗證組件遵循一致的架構,由完整的激勵、檢查、覆蓋率統計單元集合而成。驗證環境具有多路sequence機制(virtual sequencer),它將不同接口的時鐘及數據同步,實現對測試環境的控制及信號激勵。

圖1 UVM測試平臺
2.2UVM 類庫

圖2 UVM類庫
UVM類庫以基類形式為創建新的驗證組件提供標準化的可派生模板。這種類似于積木的基本構件,用戶可快速開發可復用的架構、更優的驗證組件及驗證環境。常用的UVM類庫主要基于兩個典型的基類派生出來。uvm_component,用來搭建testbench架構; uvm_transaction,用于激勵產生及分析[6]。uvm_object是其共同的基類,提供uvm類的基礎服務功能,例如類的創建、拷貝、克隆、顯示、比較等[6]。
2.3UVM組件成員
基于事務的可復用模塊一般具有transaction,driver,sequencer,monitor,agent等組件。
(1)Transaction (Data items)
Transaction是對接口時序的事務層抽象描述。被測對象DUT內部及其接口采用信號級的描述,在TestBench內部各個組件之間普遍采用事務級描述進行數據交互。Transaction是對DUT的輸入,如網絡包、總線事務或操作指令[6]。
(2)Driver
Driver通常是接口agent中的組成部分,用于實現將事務級描述的激勵轉化為信號級的激勵驅動到被測對象。Driver可控制讀/寫功能、地址總線和數據總線。典型的driver持續接收transaction,采樣并將其驅動到DUT[6]。
(3)Sequencer
Sequencer通常是接口agent的組成部分,用于向Driver分發激勵事務。默認情況下,sequencer類似簡單的激勵發生器,它依據driver的請求來提供隨機transaction[6]。
(4)Monitor
Monitor通常是agent的組成部分,是被動組件,它不驅動DUT,僅觀測DUT信號。Monitor用于將觀測到的信號轉換為事務,這些事務將其提供給其他組件進行覆蓋率統計和bug檢測等[6]。
(5)Agent
Agent通常集成了driver,sequencer和monitor,通過接口(interface)與外界連接。Agent通常代表一個總線的功能模型,可以把事務級激勵轉化為信號級激勵,也可以對總線的信號時序轉化為事務級描述以供其他驗證組件分析。Agent可被配置為active或passive,其中Active agent能產生信號級的測試激勵;Passive agent只能監視DUT行為[6]。
(6)Environment
Environment是驗證組件的頂層組件。它通常包含一個或多個agent,也可以包含其他的驗證組件(例如monitor、scoreboard、virtual sequencer等),甚至可以包含已往開發的environment。實現對內部的組件配置,驗證人員可以依據需要進行復用。它主要是對驗證環境建模,產生受約束的激勵、監測DUT響應、檢查協議的有效性及收集覆蓋率[6]。

圖3 env驗證組件結構
(7)sequence
sequence是UVM生成激勵的重要方法。 sequence內包含名為body的task方法。驗證工程師通過重寫task方法生成事務級的測試激勵,這些事務級激勵將被sequencer取走并分發給Driver,最終轉化為信號級激勵。sequence既可以從頭開始,也可以直接集成以往開發的多個sequence。當使用sequence時,body被創建并執行。Body方法被用來執行其他sequence或直接產生seq_item對象并通過sequencer組件發送給driver組件。sequence獨立于testbench組件,這樣可以很方便的定義新測試用例,提高測試的靈活性及效率[6]。

圖4 sequence工作原理
本節以安全級DCS儀控系統某通信路由器為被測對象,簡要介紹通信路由器內FPGA功能及模塊組成。
3.1通信路由器的功能
此通信路由器主要完成以下功能:
(1)通信路由器實現轉發或直通兩種通信模式。
(2)路由器接收來自網絡通信板卡的通信模式切換指令,并根據切換指令和當前工作模式,實現轉發和直通模式的相互切換功能。
(3)將系統運行狀態傳輸給網絡通信板卡。

圖5 通信路由器功能示意(①表示直通模式,②表示轉發模式)
3.2FPGA功能模塊

圖6 FPGA功能模塊
通信路由器核心功能由FPGA實現。FPGA有4個千兆PHY接口模塊,switch切換管理模塊, rs485接口模塊, miim寄存器管理模塊,狀態收集模塊等構成。
其中RS485接口模塊接收來自網絡通信板卡的模式切換指令并傳遞給switch模塊,將路由器工作狀態通過RS485傳輸給網絡通信板卡;switch模塊實現轉發模式或直通模式功能的切換;4個PHY接口完成與外部千兆PHY器件數據收發功能,實現GMII時序;miim管理模塊對phy器件初始化,分時對phy進行寄存器讀寫;status_collector模塊收集路由器運行狀態并通過RS485接口模塊上傳到網絡通信板卡。
依據產品需求說明書中的詳細需求,制定被驗證對象的測試大綱。依據測試大綱中規定的測試項要求,即可開展驗證平臺的搭建工作。仿真測試針對FPGA的頂層模塊及一級模塊。
4.1驗證平臺
Top層module包含初始化過程,通過調用UVM的run_test方法來實現。Run_test開啟UVM phase的執行,UVM phase控制著testbench建立、激勵產生及仿真結果上報等活動的執行順序。

圖7 測試平臺環境
在仿真驗證執行前,需要建立所需的驗證組件庫。在驗證組件庫建立之后,依據驗證需要建立top驗證環境,驗證環境由DUT和驗證組件組成。驗證開發人員可以單獨開發測試用例,依據測試大綱,編制不同的sequence,形成不同的測試用例。
4.2創建agent 組件庫
針對FPGA主要功能模塊,開發了與主要功能相對應的agent驗證組件。包括用于驗證串行通信的rs485驗證組件,驗證寄存器管理模塊的miim驗證組件,驗證千兆PHY接口的gmii驗證組件。
rs485_agent主要功能為:模擬通信網絡板卡向DUT發送模式切換指令。在rs485 agent組件的 monitor中對觀測到的串行數據位進行正確性檢查,并對數據傳輸時間進行檢查。
miim_agent主要功能:模擬外部PHY器件的miim管理功能,實現MDC和MDIO,用來傳送MAC層的控制信息和物理層的狀態信息。來自通信路由器miim接口的控制信號可以通過它訪問模擬的PHY器件;模擬PHY器件的狀態返回給通信路由器miim接口。miim_agent組件的monitor中實現對MDC時鐘進行檢查以及控制幀及狀態幀的正確性檢查。
gmii_agent主要功能:模擬千兆PHY器件的物理層。通過它將以太網幀發送給FPGA的phy接口;同時它可以接收來自FPGA中phy接口傳送來的以太網幀。gmii_agent組件的monitor實現對以太網幀的正確性及時序的檢查。
此外開發了async_gpio_agent及sync_gpio_agent組件,用于實現復位功能及狀態觀測功能。
4.3創建env組件庫
將agent組件集成到env組件中,形成更高級別組件。針對被測FPGA的主要功能,開發了相應的env組件。主要組件有:用于驗證RS485切換指令及狀態的mode_cmd_env,用于驗證miim接口功能的phy_miim_env,用于驗證直通及轉發功能的one_way_env。
4.3.1mode_cmd_env組件

圖8 mode_cmd_env的組成
mode_cmd_env負責向DUT發送切換指令,并檢查DUT狀態是否如實切換。mode_cmd_env中例化了如下agent:
(1)async_gpio_agent #(1) 組件類型的reset_agent,用于采集復位信號;
(2)sd485_agent組件類型的cmd_in_agent,用于模擬通信板卡的行為,將切換指令發送給DUT的485模塊的i_rxd串行接收端口;
(3)async_gpio_agent #(1)組件類型的sd485_cmd_sig_ agent,用于采集監視來自DUT內部485模塊的串行i_rxd指令接口端口的data信號;
(4)sync_gpio_agent #(2)組件類型的cmd_out_agent,用來采集并監測DUT內部485模塊的輸出到DUT內部switch模塊的輸出切換命令。
此外創建mode_cmd_scoreboard組件類型的 mc_sb,此scoreboard類型的組件用來檢查模擬的通信板卡發出的切換指令、被測路由器接收到的串行指令i_rxd以及路由器485模塊發送給switch模塊的切換指令的正確性及一致性。
4.3.2one_way_env組件
one_way_env負責DUT四個千兆PHY接口在直通或轉發狀態下的數據產生與接收,檢查DUT的switch模塊直通及轉發狀態是否正確,并檢查數據的一致性及正確性。
one_way_env中例化了如下agent:

圖9 mode_cmd_env的組成
(1)gmii_agent組件類型的 fr_gmii_agent,用于模擬PHY器件的通信功能,與DUT的光口接收端口連接。
(2)gmii_agent組件類型的 ft_gmii_agent,用于模擬PHY器件的通信功能,與DUT的光口發送端口連接。
(3)gmii_agent組件類型的 cr_gmii_agent,用于模擬PHY器件的通信功能,與DUT的電口接收端口連接。
(4)gmii_agent組件類型的 ct_gmii_agent,用于模擬PHY器件的通信功能,與DUT的電口發送端口連接。
(5)async_gpio_agent組件類型的get_reset_agent,用于采集復位信號。
(6)sync_gpio_agent組件類型的get_cut_fwd_agent,用于采集來自DUT的 switch模塊中輸出的直通及轉發的指示狀態。
此外,創建了one_way_scoreboard組件類型的sc,此scoreboard類型的組件用來檢查直通或轉發狀態下,DUT的四個PHY接口的數據接收及發送的一致性及正確性,以及檢查switch狀態機是否正確。
4.3.3phy_miim_env組件

圖10 phy_miim_env組成
用于配置DUT四個PHY接口,并檢查配置信息的正確性。phy_miim_env中例化了如下agent:
(1)miim_agent組件類型的fiber_miim_agent,用于模擬光口通訊的外部phy器件的miim管理功能。
(2)miim_agent組件類型的 copper_miim_agent,用于模擬電口通訊的外部phy器件的miim管理功能。
(3)創建了fiber_phy_config_scoreboard組件類型的fpc_ sb,此scoreboard類型的組件,用于檢查DUT的光口配置信息是否正確。
(4)創建了copper_phy_config_scoreboard組件類型的cpc_ sb,此scoreboard類型的組件,用于檢查DUT的電口配置信息是否正確。
4.4創建虛sequencer 組件
虛sequenceer組件類型的vir_sqr用于建立測試用例的驅動序列與testbench內部組件的連接。在Testbench中,虛sequencer創建了如下信號:
ext_reset_sqr用于實現對復位信號序列控制。cmd485_sqr用于實現對切換指令的控制。
top_r0_fr_gmii_sqr用于實現對頂層r0光口千兆PHY序列的控制。
top_r0_cr_gmii_sqr用于實現對頂層r0電口千兆PHY序列的控制。
top_r1_fr_gmii_sqr用于實現對頂層r1光口千兆PHY序列的控制。
top_r1_cr_gmii_sqr用于實現對頂層r1電口千兆PHY序列的控制。
copper_miim_sqr用于實現對電口PHY接口的miim管理序列的控制。fiber_miim_sqr用于在制定測試用例時,實現對光口PHY接口的miim管理序列的控制。
4.5創建Testbench組件
將mode_cmd_env、one_way_env和phy_miim_env等組件集成到以whole_tb0命名的Testbench中。

圖11 Testbench組成
whole_tb0屬于uvm_env類型,在whole_tb0中例化了如下組件:
(1)async_gpio_agent組件類型ext_reset_agent,用于產生驗證環境中的復位信號。可控制定向產生或受約束的隨機復位信號。
(2)oneway_env組件類型的 top_r0_env,top_r1_env。DUT的頂層具有正反兩個方向的雙向通信通路,因此對頂層的兩個通信方向r0和r1例化兩個env。
(3)oneway_env 組件類型的switch0_r0_env,switch1_r0_ env,switch2_r0_env,switch0_r1_env,switch1_r1_env,switch2_ r1_env。DUT頂層為雙向通訊通路r0及r1兩個方向,其中每個通信方向均做了三重冗余處理,因此每個方向例化三個env。
(4)phy_miim_env組件類型的top_miim_env。用于配置DUT四個PHY接口,并檢查配置信息的正確性。
(5)mode_cmd_env組件類型的 top_cmd485_env。負責向DUT發送切換指令。
(6)sync_gpio_agen組件類型的6個agent組件。用于對頂層2個通信方向和r0及r1的冗余通路的直通或轉發狀態進行采集和觀測。
vir_sequencer組件類型的vir_sqr。虛sequencer組件類型的vir_ sqr用于建立測試用例的驅動序列與testbench內部組件的連接。
驗證平臺搭建完成后,即可依據測試大綱開展仿真測試。結合黑盒及白盒測試方法進行正常功能、異常功能測試、性能測試、接口和配置測試等。
仿真工具采用Questasim軟件。以UVM測試平臺發現的轉發模式時通信數據不一致的錯誤為例,簡要說明一下UVM方法仿真發現缺陷過程。在仿真環境中運行測試用例run_tc_forwarding_ mode.bat,查看是否有報錯來檢查是否發現缺陷。如圖12所示,通過在scoreboard組件內的數據一致性檢查程序發現在運行時間到17496172ns時,發現在轉發模式下數據不一致錯誤,并上報UVM_ERROR。圖12提示,在通信通路r0發現轉發模式下,光口fr數據與電口ct數據不一致。

圖12 transcript報告發現的錯誤
打開wave波形對此缺陷進行確認,如圖13所示,發現光口數據fr的第二個數據f4(圓圈中所示數據),在電口ct(橢圓圈中所示數據)被重復發送3次。說明在FPGA內部數據轉發處理中,存在處理缺陷。
這類缺陷是采用UVM受約束隨機激勵方法結合自動檢查程序發現,如果此類錯誤通過人工查看圖形來檢查,每一幀數據有1000多個,如果人工逐個對比數據,是很難發現的。
本文介紹了UVM方法在核電儀控某通信路由器可編程邏輯仿真驗證中的應用。采用UVM方法,建立IP核組件庫(agent組件、env組件)。采用獨立開發的測試IP,可以很靈活的復用,為搭建仿真測試環境帶來方便,簡化了過程。采用受約束隨機激勵結合自動檢查技術,避免單純用人工檢查,在保證與傳統方法同等覆蓋率的基礎上,提高了測試自動化水平。
Applications of UVM in Nuclear Safety Level Programmable Logic Simulation Verificatio
核電DCS系統中大量應用CPLD及FPGA產品,可編程邏輯產品的仿真驗證是保證產品質量的重要環節。本文不同于傳統的驗證方法,首次將UVM驗證方法應用于核安全級DCS產品可編程邏輯驗證。采用獨立開發的測試IP,通過靈活復用,為搭建仿真測試環境帶來方便,簡化了過程。采用受約束隨機激勵及自動檢查保證測試的準確性及充分性,避免單純用人工檢查,在保證覆蓋率指標的基礎上,提高了測試自動化水平。目前,此方法已經用于DCS系統通信路由以及優選裝置的邏輯驗證。
UVM方法學;核安全級;可編程邏輯;仿真驗證
A large number of FPGA and CPLD products are used in nuclear DCS systems, and the simulation verification for programmable logic products is an important link to ensure the quality of DCS products. In this paper, different from traditional verification methods, UVM method was first used in verification of programmable logic product in nuclear safety level DCS system. The independently developed test IP components were adopted, and by flexible reuse of them, we made it convenient to build simulation test environment, and the test process is thus simplified. Constrained random excitation and automatic check were used to ensure the accuracy and adequacy of the test, which avoided manual inspection and improved the level of test automation while ensuring the coverage index. Currently, this method has already been used in the verification of communication routing and optimization device in DCS systems.
UVM methodology; Nuclear safety level; Programmable logic; Simulation verification