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

圖1 UVM測試平臺
2.2UVM 類庫

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

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

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

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

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

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

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

圖9 mode_cmd_env的組成
(1)gmii_agent組件類型的 fr_gmii_agent,用于模擬PHY器件的通信功能,與DUT的光口接收端口連接。
(2)gmii_agent組件類型的 ft_gmii_agent,用于模擬PHY器件的通信功能,與DUT的光口發(fā)送端口連接。
(3)gmii_agent組件類型的 cr_gmii_agent,用于模擬PHY器件的通信功能,與DUT的電口接收端口連接。
(4)gmii_agent組件類型的 ct_gmii_agent,用于模擬PHY器件的通信功能,與DUT的電口發(fā)送端口連接。
(5)async_gpio_agent組件類型的get_reset_agent,用于采集復位信號。
(6)sync_gpio_agent組件類型的get_cut_fwd_agent,用于采集來自DUT的 switch模塊中輸出的直通及轉(zhuǎn)發(fā)的指示狀態(tài)。
此外,創(chuàng)建了one_way_scoreboard組件類型的sc,此scoreboard類型的組件用來檢查直通或轉(zhuǎn)發(fā)狀態(tài)下,DUT的四個PHY接口的數(shù)據(jù)接收及發(fā)送的一致性及正確性,以及檢查switch狀態(tài)機是否正確。
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)創(chuàng)建了fiber_phy_config_scoreboard組件類型的fpc_ sb,此scoreboard類型的組件,用于檢查DUT的光口配置信息是否正確。
(4)創(chuàng)建了copper_phy_config_scoreboard組件類型的cpc_ sb,此scoreboard類型的組件,用于檢查DUT的電口配置信息是否正確。
4.4創(chuàng)建虛sequencer 組件
虛sequenceer組件類型的vir_sqr用于建立測試用例的驅(qū)動序列與testbench內(nèi)部組件的連接。在Testbench中,虛sequencer創(chuàng)建了如下信號:
ext_reset_sqr用于實現(xiàn)對復位信號序列控制。cmd485_sqr用于實現(xiàn)對切換指令的控制。
top_r0_fr_gmii_sqr用于實現(xiàn)對頂層r0光口千兆PHY序列的控制。
top_r0_cr_gmii_sqr用于實現(xiàn)對頂層r0電口千兆PHY序列的控制。
top_r1_fr_gmii_sqr用于實現(xiàn)對頂層r1光口千兆PHY序列的控制。
top_r1_cr_gmii_sqr用于實現(xiàn)對頂層r1電口千兆PHY序列的控制。
copper_miim_sqr用于實現(xiàn)對電口PHY接口的miim管理序列的控制。fiber_miim_sqr用于在制定測試用例時,實現(xiàn)對光口PHY接口的miim管理序列的控制。
4.5創(chuàng)建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,用于產(chǎn)生驗證環(huán)境中的復位信號。可控制定向產(chǎn)生或受約束的隨機復位信號。
(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發(fā)送切換指令。
(6)sync_gpio_agen組件類型的6個agent組件。用于對頂層2個通信方向和r0及r1的冗余通路的直通或轉(zhuǎn)發(fā)狀態(tài)進行采集和觀測。
vir_sequencer組件類型的vir_sqr。虛sequencer組件類型的vir_ sqr用于建立測試用例的驅(qū)動序列與testbench內(nèi)部組件的連接。
驗證平臺搭建完成后,即可依據(jù)測試大綱開展仿真測試。結(jié)合黑盒及白盒測試方法進行正常功能、異常功能測試、性能測試、接口和配置測試等。
仿真工具采用Questasim軟件。以UVM測試平臺發(fā)現(xiàn)的轉(zhuǎn)發(fā)模式時通信數(shù)據(jù)不一致的錯誤為例,簡要說明一下UVM方法仿真發(fā)現(xiàn)缺陷過程。在仿真環(huán)境中運行測試用例run_tc_forwarding_ mode.bat,查看是否有報錯來檢查是否發(fā)現(xiàn)缺陷。如圖12所示,通過在scoreboard組件內(nèi)的數(shù)據(jù)一致性檢查程序發(fā)現(xiàn)在運行時間到17496172ns時,發(fā)現(xiàn)在轉(zhuǎn)發(fā)模式下數(shù)據(jù)不一致錯誤,并上報UVM_ERROR。圖12提示,在通信通路r0發(fā)現(xiàn)轉(zhuǎn)發(fā)模式下,光口fr數(shù)據(jù)與電口ct數(shù)據(jù)不一致。

圖12 transcript報告發(fā)現(xiàn)的錯誤
打開wave波形對此缺陷進行確認,如圖13所示,發(fā)現(xiàn)光口數(shù)據(jù)fr的第二個數(shù)據(jù)f4(圓圈中所示數(shù)據(jù)),在電口ct(橢圓圈中所示數(shù)據(jù))被重復發(fā)送3次。說明在FPGA內(nèi)部數(shù)據(jù)轉(zhuǎn)發(fā)處理中,存在處理缺陷。
這類缺陷是采用UVM受約束隨機激勵方法結(jié)合自動檢查程序發(fā)現(xiàn),如果此類錯誤通過人工查看圖形來檢查,每一幀數(shù)據(jù)有1000多個,如果人工逐個對比數(shù)據(jù),是很難發(fā)現(xiàn)的。
本文介紹了UVM方法在核電儀控某通信路由器可編程邏輯仿真驗證中的應用。采用UVM方法,建立IP核組件庫(agent組件、env組件)。采用獨立開發(fā)的測試IP,可以很靈活的復用,為搭建仿真測試環(huán)境帶來方便,簡化了過程。采用受約束隨機激勵結(jié)合自動檢查技術,避免單純用人工檢查,在保證與傳統(tǒng)方法同等覆蓋率的基礎上,提高了測試自動化水平。
Applications of UVM in Nuclear Safety Level Programmable Logic Simulation Verificatio
核電DCS系統(tǒng)中大量應用CPLD及FPGA產(chǎn)品,可編程邏輯產(chǎn)品的仿真驗證是保證產(chǎn)品質(zhì)量的重要環(huán)節(jié)。本文不同于傳統(tǒng)的驗證方法,首次將UVM驗證方法應用于核安全級DCS產(chǎn)品可編程邏輯驗證。采用獨立開發(fā)的測試IP,通過靈活復用,為搭建仿真測試環(huán)境帶來方便,簡化了過程。采用受約束隨機激勵及自動檢查保證測試的準確性及充分性,避免單純用人工檢查,在保證覆蓋率指標的基礎上,提高了測試自動化水平。目前,此方法已經(jīng)用于DCS系統(tǒng)通信路由以及優(yōu)選裝置的邏輯驗證。
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