馬 盼,靳 旭
(1.北京全路通信信號研究設(shè)計院集團有限公司,北京 100070;2.北京市高速鐵路運行控制系統(tǒng)工程技術(shù)研究中心,北京 100070)
隨著國內(nèi)高速鐵路的快速發(fā)展,越來越多的前沿技術(shù)被應(yīng)用于軌道交通安全通信系統(tǒng)中。由于硬件集成度高、可并行處理數(shù)據(jù)等特點,為提升鐵路信號平臺系統(tǒng)性能和降低軟件復(fù)雜度,CPLD/FPGA(可編程邏輯器件)和定制芯片等硬件產(chǎn)品得到廣泛應(yīng)用。針對這些硬件產(chǎn)品,邏輯功能仿真驗證是保證產(chǎn)品正確性和安全性的重要環(huán)節(jié),其目的就是驗證硬件產(chǎn)品是否滿足設(shè)計需求[1]。目前鐵路相關(guān)CPLD/FPGA邏輯仿真采用傳統(tǒng)定向測試序列進行功能驗證[2],這種方法針對不同序列搭建不同的測試環(huán)境,導(dǎo)致平臺搭建時間長,平臺移植復(fù)用性差,驗證效率不高。
驗證方法學的發(fā)展有效地提高了驗證效率,通用驗證方法學(Universal Verification Methodology,UVM)面向所有數(shù)字設(shè)計,涵蓋從模塊級到芯片級,從專用集成電路(Application Specific Integrated Circuit,ASIC)到CPLD/FPGA,從控制邏輯、數(shù)據(jù)通路到處理器的全部場景[3]。驗證語言SystemVerilog的面向?qū)ο蠛碗S機約束等核心特性配合UVM提供的基礎(chǔ)類庫和基本驗證結(jié)構(gòu)可以快速實現(xiàn)驗證環(huán)境的自動化。本文提出了以SM4加解密算法模塊為驗證對象,采用SystemVerilog語言構(gòu)建基于UVM的自動化驗證平臺。
SM4硬件設(shè)計結(jié)構(gòu)如圖1所示,該硬件模塊內(nèi)部包含兩個緩存先入先出隊列(First Input First Output,F(xiàn)IFO),來暫存部分傳輸數(shù)據(jù),一個SM4計算模塊,其功能是解析傳輸數(shù)據(jù),并計算SM4加解密結(jié)果。該算法遵循中華人民共和國國家標準《信息安全技術(shù) SM4分組密碼算法》(GB/T 32907-2016)進行輪密鑰生成以及加密解密計算[4]。
圖1 SM4硬件設(shè)計結(jié)構(gòu)框圖Fig.1 SM4 hardware design structure diagram
SM4硬件模塊通信接口符合外圍總線(Advanced Peripheral Bus,APB)和可擴展接口(Advanced Extensible Interface,AXI)總線協(xié)議,其中APB接口是片上總線協(xié)議(Advanced Microcontroller Bus Architecture,AMBA)中提出的一種低功耗和低復(fù)雜度的二級總線,在SM4硬件設(shè)計中傳輸配置模塊內(nèi)部寄存器信息。AXI是一種面向高性能、高帶寬、低延遲的片內(nèi)總線[5]。它的地址/控制和數(shù)據(jù)相位是分離的,支持不對齊的數(shù)據(jù)傳輸。在突發(fā)傳輸中,只需要首地址,同時分離的讀寫數(shù)據(jù)通道、支持未完成狀態(tài)下的傳輸訪問、亂序訪問和更加容易達到時序收斂。在本文描述的驗證對象中,AXI接口用于傳輸明文和密文數(shù)據(jù)。
UVM融合了VMM(Verification Methodology Manual)和OVM(Open Verification Methodology)驗證方法學的特性,將驗證過程中可重用和標準化的部分規(guī)定在其方法學的類庫中[6],例如uvm_object、uvm_driver、uvm_env等,通過對這些核心類的繼承和重載,使驗證平臺內(nèi)的組件具有良好的封閉性并形成結(jié)構(gòu)層次關(guān)系,這種具有復(fù)用性的驗證環(huán)境可以有序完成不同的測試場景。一個UVM驗證平臺主要包括序列發(fā)生器、驅(qū)動器、監(jiān)視器、代理容器、參考模型和計分板,這些組件集成在環(huán)境組件中,與待測設(shè)計通過定義的接口連在一起。
本文的驗證平臺根據(jù)SM4硬件結(jié)構(gòu)的特性采用標準的UVM架構(gòu)進行設(shè)計,其結(jié)構(gòu)如圖2所示。UVM驗證平臺組件之間通過事務(wù)級建模(Transaction Level Modeling,TLM)端口進行數(shù)據(jù)通信,從環(huán)境層次結(jié)構(gòu)而言,測試頂層uvm_test用于建立整個驗證環(huán)境,從環(huán)境的結(jié)構(gòu)和連接關(guān)系到使用哪條測試序列都是由測試頂層決定[7]。
環(huán)境組件包含多個代理容器和其他組件,這些不同的組件共同構(gòu)成完整的驗證環(huán)境。通過測試頂層例化環(huán)境組件得到一個以uvm_test為樹根的樹狀拓撲結(jié)構(gòu),這種樹狀環(huán)境結(jié)構(gòu)具有可配置性,使得環(huán)境組件可以復(fù)用。
圖2 驗證平臺結(jié)構(gòu)Fig.2 verification platform structure
主代理容器封裝了序列發(fā)生器、驅(qū)動器和監(jiān)視器3個基本組件,其中序列發(fā)生器可以選擇和調(diào)度由定序器產(chǎn)生的隨機測試序列并傳送給驅(qū)動器。驅(qū)動器從序列發(fā)生器中獲取到事物數(shù)據(jù)后,根據(jù)端口協(xié)議經(jīng)過模擬轉(zhuǎn)化,在接口中對待測設(shè)計進行時序激勵。監(jiān)視器用于采樣待測設(shè)計端口信號并轉(zhuǎn)換成事務(wù)級數(shù)據(jù)返回給上層代理容器進行數(shù)據(jù)傳輸。在本設(shè)計中主代理容器負責向待測設(shè)計提供符合AXI接口協(xié)議的驅(qū)動信號,并將監(jiān)視器采集到的驅(qū)動數(shù)據(jù)傳遞給參考模型。從代理中只有監(jiān)視器一個組件,用于實時監(jiān)視待測設(shè)計的計算輸出,通過反饋接口采集結(jié)果數(shù)據(jù)。配置代理負責提供模擬寄存器的配置信號,該信號時序符合APB接口協(xié)議,用于配置測設(shè)計。
參考模型模擬待測設(shè)計的功能,在驗證平臺中參考模型與待測設(shè)計輸入相同的數(shù)據(jù),二者經(jīng)過各自的計算后,將產(chǎn)生的數(shù)據(jù)傳遞到計分板中進行自動對比和報告。
參考模型通常由驗證人員使用硬件描述語言進行開發(fā),對于運算方法復(fù)雜的設(shè)計,需要占用大量的時間進行概念理解、編寫代碼并調(diào)試,這無疑給驗證開發(fā)帶來了額外的負擔。SystemVerilog語言提供的直接編程接口(Direct Programming Interface,DPI)可以連接C/C++高級語言,實現(xiàn)硬件與軟件的跨邊界通信[8]。
本文的待測設(shè)計為一個純粹的算法模塊,SM4算法具有標準的C語言函數(shù)模型,其功能為依據(jù)加密解密標志,對輸入的明文進行SM4加密,得到密文,或者對輸入的密文進行SM4解密,得到明文。為避免對算法C模型進行二次轉(zhuǎn)換,本文提出的驗證平臺采用DPI接口將算法C模型嵌入UVM環(huán)境中進行聯(lián)合仿真,具體方法如下。
1)修改C函數(shù)接口,確定SystemVerilog和C語言程序輸入輸出之間的數(shù)據(jù)類型映射關(guān)系。在本設(shè)計中,其中C函數(shù)的端口定義如表1所示,修改前的C函數(shù)接口為:
int MASL_sm4crypt(const unsigned int*pKeySession,const unsigned int *indata,int srcLen,int CryptFlag, unsigned int*outdata); //C函數(shù)接口聲明
對照表1映射標準,C函數(shù)結(jié)構(gòu)修改成如下格式:
表1 C接口定義及與SV語言之間的數(shù)據(jù)類型映射Tab.1 Mapping of data type between C interface definition and SV language
2)C程序內(nèi)部聲明指針,并將指針指向輸入輸出動態(tài)數(shù)組地址,進行數(shù)據(jù)傳遞。代碼實現(xiàn)如下:
3)在C程序內(nèi)導(dǎo)入數(shù)學庫函數(shù)svdpi.h,庫函數(shù)定義了SystemVerilog DPI結(jié)構(gòu)和方法。
4) 在UVM參考模型中導(dǎo)入C函數(shù)模型。在導(dǎo)入C模型時,需要規(guī)定參數(shù)的方向:當數(shù)據(jù)是從System Verilog流向C函數(shù)時,參數(shù)方向規(guī)定為input,反而則為output,如果某個參數(shù)即從System Verilog流向C,同時又從C流向System Verilog,則需聲明為inout型。
5)在UVM參考模型中調(diào)用C函數(shù)。在參考模型組件中,涉及UVM和C混仿的代碼實現(xiàn)如下:
以測試序列rand_test(隨機測試)為例分析驗證結(jié)果。該測試序列由序列發(fā)生器產(chǎn)生不定長度的2 000包密文或者明文數(shù)據(jù),再由驅(qū)動器產(chǎn)生APB配置信號和AXI讀寫操作信號進行單次激勵,單次數(shù)據(jù)大小由隨機化的長度信號決定,可實現(xiàn)16的整數(shù)倍字節(jié)傳輸,加密或解密計算方式選擇由隨機化加解密標志信號決定。
如圖3所示為該測試序列單次數(shù)據(jù)包的AXI讀數(shù)據(jù)仿真波形,根據(jù)APB端口配置的首地址,從地址0x10D0_0000開始,依次寫入64位數(shù)據(jù)字節(jié)長度、64位加解密標志(0:加密,1:解密)、128位密鑰和加解密數(shù)據(jù)。
圖3 AXI讀數(shù)據(jù)仿真波形Fig.3 Simulation waveform of AXI reading data
如圖4所示為該測試序列單次數(shù)據(jù)包的AXI寫數(shù)據(jù)仿真波形,加解密之后的數(shù)據(jù)寫入地址由0x10D8_0000開始,全部計算完成并將計算結(jié)果成功寫出后,計算結(jié)果標記地址0x10DFFFF8處標記為0,至此單次數(shù)據(jù)包激勵完成,驅(qū)動器申請下一包數(shù)據(jù)進行驅(qū)動。
圖4 AXI寫數(shù)據(jù)仿真波形Fig.4 Simulation waveform of AXI writing data
測試序列的驗證結(jié)果對比報告會實時在終端中打印出來并形成文件保存,如圖5所示為仿真報告,打印信息表明測試序列經(jīng)過2 000次成功對比,沒有警告、一般錯誤或嚴重錯誤,該測試序列通過驗證。經(jīng)過隨機測試,對未覆蓋的地方采用定向測試,遍歷FIFO空滿邊界,復(fù)位測試,并構(gòu)造錯誤序列驗證待測設(shè)計是否能及時檢測并做出相應(yīng)報警,經(jīng)覆蓋率統(tǒng)計分析得到代碼行覆蓋率為98%,決策覆蓋率為95%,功能覆蓋率達到100%,因為設(shè)計中存在一些實際運行中并不會出現(xiàn)的冗余情況,行覆蓋率和決策覆蓋率沒有達到100%,與設(shè)計人員確認并排除此情況后,覆蓋率符合指標。
圖5 仿真報告Fig.5 Simulation report
本文以SM4加解密算法模塊為驗證對象,采用隨機測試向量并利用DPI接口內(nèi)嵌C函數(shù)模型構(gòu)建了基于UVM的自動化實時監(jiān)控驗證平臺,實現(xiàn)UVM和C模型的聯(lián)合仿真。從SM4參考模型的代碼量來看,C函數(shù)的代碼量為390行,嵌入C模型后的UVM參考模型代碼量僅有100行,大大簡化了驗證平臺復(fù)雜度,縮短驗證周期。而隨機測試序列和自動實時監(jiān)控,區(qū)別于傳統(tǒng)仿真,驗證平臺可以有序完成不同的測試場景,避免對驗證平臺的大量修改和單純用人工檢查,保證驗證周期的完備性。該驗證平臺結(jié)構(gòu)組件封閉獨立具有復(fù)用性,可實現(xiàn)CPLD/FPGA和芯片硬件功能驗證平臺從模塊級到系統(tǒng)級的移植。