魏美榮,田 澤,王宣明,郭 蒙
(1.航空工業西安航空計算技術研究所,陜西 西安 710068;2.集成電路與微系統設計航空科技重點實驗室,陜西 西安 710068;3.西安翔騰微電子科技有限公司,陜西 西安 710068)
1394總線是一種高性能串行總線,鏈路層在串行總線節點系統中位于事務層、應用層和物理層之間。鏈路層為事務層提供異步數據的接收、發送和確認服務,為應用層提供固定時間間隔的等時數據廣播傳輸服務。同時鏈路層提供尋址、數據檢查、發送數據組包和接收數據解包服務。
隨著集成電路技術的不斷發展,芯片的規模和集成度在快速提升,這對驗證提出了更高的要求。據統計表明,發現bug的時間與修復成本成指數關系,越早發現彌補的成本也會越低,因此,驗證已經成為芯片設計的發展瓶頸。針對傳統RTL代碼驗證平臺重用性差、覆蓋率低和自動化程度低等問題,在吸取了OVM,VMM和ERM等驗證方法優點的基礎上,三大EDA公司(Mentor、Candence和Synopsys)聯合業內其他公司推出UVM(universal verification methodology)驗證方法學。UVM是基于系統級硬件描述語言SystemVerilog,具備面向對象編程的思想和功能[1-3],實現了驗證的重用性和清晰的層次結構。由于其開源的特質,使得它相比于其他的驗證方法學,具備更好的兼容性。UVM平臺的架構主要是由通用的驗證組件(universal verification component,UVC)構成的,而且每個UVC都是已經封裝好、功能完善且可配置的驗證環境,可重用的驗證組件,約束隨機激勵產生、自動化的驗證平臺等特點,大大縮短了驗證時間[4-6]。
另外,相比于傳統的驗證平臺,斷言機制提供了簡潔的行為級代碼描述,能對設計的屬性進行實時性的檢測,仿真過程一旦報錯可迅速定位[7]。功能覆蓋率是用來衡量哪些設計特征已被測試程序測試過的一個指標,評估驗證的結果[8]。覆蓋率有三類:代碼覆蓋率、功能覆蓋率和斷言覆蓋率。使用UVM提供的隨機測試激勵以及帶約束的隨機測試(constrained random test,CRT)方法可以覆蓋各種情況[9-10],不用編寫定向的測試集,就可以達到盡可能高的覆蓋率。若還有未能覆蓋的邊界情況,可采用定向的測試激勵來進行測試[11]。
文中以1394鏈路層作為主要分析對象,重點從基于覆蓋率驅動的自動化驗證環境搭建、驗證流程、驗證平臺、隨機驗證激勵用例開發、覆蓋率統計結果分析等方面重點闡述。并經過功能仿真測試和覆蓋率分析表明,采用基于UVM的驗證分層結構,實現的事務層請求模型、數據包模型、鏈路層監控模型,物理層模型等激勵序列具有繼承性和靈活的隨機約束性,可使驗證人員花費較少的精力實現重用原有的激勵場景而構成新的激勵場景。基于斷言和覆蓋率驅動的驗證理念,以可約束的隨機向量為主,對仿真結果進行覆蓋率統計和分析,并對隨機向量的約束進行修改或補充定向向量,保證驗證的完備性。
在前端設計中,文中先對1394總線鏈路層系統功能進行分析,根據設計功能提取鏈路層驗證功能點,然后制定了相應的驗證策略與方法,并詳細描述了該方法中的驗證環境、驗證流程、虛擬驗證平臺各組件功能以及工作原理。
1394總線鏈路層是1394高性能串行總線的重要部分,實現了IEEE Std 1394-2008協議規定的1394b高性能串行總線的節點鏈路層功能,其邏輯結構框圖如圖1所示。主要包含數據搬運(data mover)模塊、選擇控制模塊、異步發送FIFO模塊(asynchronous transmit FIFO,ATF)、通用接收FIFO(general receive FIFO,GRF)、微處理器接口(microcontroller interface)模塊、鏈路層核(link core)等功能模塊,實現的主要功能包括:

圖1 1394總線鏈路層結構框圖
(a)負責在事務層和物理層之間傳遞異步、異步流和等時數據;
(b)提供標準的Alpha類型物理層-鏈路層接口,用于連接物理層;
(c)提供數據搬運接口(data mover),支持異步流數據的收發,可通過寄存器訪問接口進行異步發送物理配置包和異步包,通過訪問GRF接收異步包和自標識包;
(d)當進行異步消息收發時,鏈路層將數據從事物層傳遞給物理層,或將物理層接收到的數據傳遞給事物層,并負責添加數據CRC校驗;
(e)在等時通訊過程中,負責周期發送、接收cycle start包,用于同步總線各節點的等時周期,并保證等時消息通訊能夠正常進行。
文中采用UVM驗證系統架構、基于功能覆蓋率驅動的驗證方法,從鏈路層系統級功能分析角度出發,制定出一套通用性強的1394總線鏈路層驗證實施方案。
1.2.1 驗證流程
文中將結合最新UVM驗證技術、統一覆蓋率的驗證管理技術,采用新型閉環的驗證流程[12],如圖2所示。

圖2 驗證流程
實現對1394總線鏈路層功能驗證,具體過程如下:
(a)首先,根據1394總線鏈路層功能規范編寫驗證規范和驗證計劃,即列出需要驗證的關鍵功能特性、邊界情況和可能出現的故障模式。建立覆蓋率模型時,先根據上述的驗證規范,明確待驗證的功能點以及如何對這些數據采樣,然后構建能夠自動統計功能覆蓋率的驗證平臺,定義覆蓋組(Covergroup)來統計和分析功能覆蓋率,確保每個設計需求都被實現、驗證且功能正確。下面以1394總線鏈路層寄存器訪問為例,設計的一個寄存器對象的功能覆蓋組代碼示例如下:
class host_coverage_monitor extends uvm_subscriber #(host_trans_item);
`uvm_component_utils(host_coverage_monitor)
host_trans_item analysis_txn;
covergroup host_cov;
option.per_instance =1;
ADDR: coverpoint analysis_txn.addr[5:1]{
bins VERSION_U ={6'h00};
bins VERSION_L ={6'h01};
………
}
OPCODE: coverpoint analysis_txn.wr {
bins write = {0};
bins read = {1};
}
RW_CROSS: cross ADDR,OPCODE;
endgroup
// Standard UVM Methods:
function new(string name = "host_coverage_monitor", uvm_component parent = null);
super.new(name, parent);
host_cov = new();
endfunction
extern function void write(T t);
extern function void report_phase(uvm_phase phase);
endclass: host_coverage_monitor
(b)其次,基于UVM方法學搭建驗證環境、開發驗證代碼、驗證管理功能,通過輸入測試計劃,即“產生的激勵”輸入到DUT(design under test)設計中,并且通過UVM內部自帶的函數run_test()開啟UVM運行仿真,并將產生結果輸出,引入功能覆蓋率模型,對覆蓋率的結果進行分析,即將測試覆蓋率與測試對象聯系起來,從而為管理人員與工程師提供強大支持,使得持續不斷地跟蹤驗證進度和更為合理高效地配置資源成為可能。
(c)最后,經過回歸測試、驗證結果和覆蓋率分析,如果驗證達不到要求,則需要反復迭代優化驗證方案,完善或更改驗證計劃,通過UVM機制管理驗證平臺、再運行、再進行結果分析等,直到完成驗證激勵的開發調試,最終極大程度地實現1394總線鏈路層芯片驗證工作的收斂。
1.2.2 驗證平臺構建
文中對不同的功能組件進行單獨設計,同時以UVM方法學為基礎,設計了如圖3所示的高層次化驗證平臺結構。采用基于Systemverilog面向對象編程的方法編碼實現,每一個組件用一個類(class)單獨實現,類中定義屬性(數據)和屬性操作方法(包括任務和函數)[13-15]。此驗證平臺的結構可以分為三個部分:首先實例化鏈路層DUT,是用于平臺中與其他組件進行通信的接口;然后創建DUT外圍的驗證組件UVC,是一種可以重用的對應于鏈路層外圍接口協議的IP模型,與頂層DUT之間具備通信接口,分別是微控制器寄存器訪問(Microcontroller Agent)、事務層數據搬運接口(Data_Mover Agent)、1394總線物理層模型(Phy model agent)、1394總線多節點的鏈路層模型(link node agent);最后是基于UVM開發的測試激勵Test Suites、測試腳本等。

圖3 基于UVM的1394總線鏈路層虛擬平臺驗證架構
文中搭建的驗證平臺是一個1394總線多節點拓撲結構,鏈路層DUT也是作為其中一個被測試節點,其中,Test Suites是由UVM的Sequence機制實現的一系列隨機測試激勵。各模塊Agent內部Sequencer是激勵產生器,產生協議規定的寄存器訪問類型、不同類型包數據格式,Sequence通過Sequencer將Seq_item送到驅動器Driver,Driver通過虛接口virtual interface(vif)將事務級的數據按照信號層接口的時序要求轉換為DUT端的電信號,并驅動DUT來發送接收數據包。平臺中的Configuration模塊用于系統的配置,根據不同的配置,使驅動芯片外部管腳不同時序下激勵輸出和錯誤注入。各Agent內部的Monitor進行數據采集監控,最后將放到Coverage和記分板Scoreboard中,通過記分板Scoreboard與行為級模型進行數據結果比較,通過UVM_report功能完成結果輸出。
在上述驗證平臺中各功能模型Agent的主要功能如下:
(a)Microcontroller Agent,模擬1394鏈路層主機訪問寄存器讀寫,和通過填寫內部包頭、包中和包尾寄存器來實現TAF中異步包、異步流包、物理配置包的發送以及通過GRF接收異步包、自標識包等數據包的接收;
(b)Data_Mover Agent,模擬事務層進行異步或等時通信模式下,數據包的發送與接收;
(c)Phy model Agent,和link node agent連接,模擬1394總線上的拓撲結構,并且提供1394總線物理層的協議規定的數據處理行為;
(d)link node agent,模擬1394總線協議規定的鏈路層協議處理行為;
(e)Test Suites,用于驗證的測試用例,是由UVM的sequence機制實現的一系列隨機測試激勵。測試用例均由uvm_test類派生而來,每個測試激勵都設置了默認啟動的測試激勵,只需在命令行啟用這些測試用例。文中設計有3種類測試用例,分別是基本測試、隨機測試、注錯測試。其中,隨機激勵測試可以找出預料不到的錯誤,通過SystemVerilog語言對激勵進行隨機化和約束。基本測試用例是根據需要產生特定要求的激勵,關注設計功能點本身。注錯測試用例通過帶約束的隨機激勵產生各種錯誤激勵,用于測試某些極限情況下可能出現的故障問題,檢測設計本身的處理錯誤能力;
(f)達到覆蓋各種情況,達到盡可能高的覆蓋率,從而完成驗證目標。
上述各Agent模塊均具有獨立結構,根據實際項目中1394總線節點通信個數,只需要通過實例化多個Phy model Agent、link node agent來實現可重用,達到快速構建驗證平臺,便可以加快驗證流程。
文中根據制定1394總線鏈路層主要功能建立的測試用例如表1所示。

表1 測試向量

續表1
1.2.3 驗證環境
文中采用Metor Graphics公司提供的Questa作為功能仿真平臺,如圖4所示。利用其內嵌斷言引擎、高性能約束求解,以及統一覆蓋率數據庫(UCDB)。斷言是對設計屬性的描述,采用斷言技術快速檢測到設計中潛藏的缺陷,如被檢測對象與預期檢測行為不一致,則上報斷言錯誤,并直接追溯源代碼中最原始的信號。通過UCDB管理并收集所有的覆蓋率數據:代碼覆蓋率、功能覆蓋率和斷言覆蓋率,并存儲在統一個數據庫中。驗證管理功能通過輸入測試計劃、并將測試覆蓋率與測試對象聯系起來,利用Questa提供的強大分析能力,將原始覆蓋率數據轉變為可操作易識別的信息。

圖4 功能仿真平臺
在Linux運行環境QuestaSim功能仿真平臺,如表2所示,采用SystemVerilog、Makefile編程語言及腳本語言,將編譯、仿真、測試選擇、覆蓋率收集等功能設計為自動化流程。不同的測試模式下,切換外部測試模型的應用場景,把外部的測試激勵輸入給1394總線鏈路層被測設計。

表2 1394鏈路層驗證環境
1.2.4 運行流程
基于UVM驗證方法學,驗證組件之間按照UVM的phase機制運行,即仿真器首先從平臺頂層TOP執行,遇到特定函數run_test()后驗證平臺開始啟動,腳本運行時利用UVM_TESTCASE從命令行中尋找testcase名字并創建該測試case實例,以樹形結構方式依次執行case及其成員變量的build_phase,順序執行UVM樹各個節點build_phase、connect_phase以及run_phase各階段,直到所有的phase執行結束。
使用上述描述的驗證平臺對鏈路層DUT進行功能驗證,以事務層數據搬運Data Mover接口的等時和異步模式通信仿真為例,采用上述規劃的測試激勵,運行UVM仿真平臺得到仿真結果波形,如圖5所示。圖中橢圓框出的部分為等時數據包的發送,長方形框出的部分為異步流數據包發送,圓角矩形框部分是等時數據包和異步流數據包的接收,可見該測試平臺能夠很好地模擬1394總線實際通信場景。仿真進行到Check_phase階段通過檢查Scoreboard的對比結果以及其他組件的結果是否出現違例,確認沒有遺留的數據要處理,到Report_phase階段產生報告仿真結果,或者生成的log文件中的報告及斷言來檢測DUT的正確性[16-17]。同時,通過分析覆蓋率報告,不斷完善測試激勵,添加新的測試激勵,實現全面的功能驗證,將所有測試向量測試完畢后,進行回歸測試并進行覆蓋率統計,將輸出結果進行打印。如圖6所示,覆蓋率已達到100%,滿足鏈路層系統功能驗證的要求,證明了該驗證平臺測試激勵的完整性,達到了預期驗證目標。

圖5 DM接口等時和異步流數據包收發通信仿真波形
文中針對1394總線鏈路層系統功能需求分析,制定了一套適用于鏈路層驗證的方法,構建了能夠自動統計功能覆蓋率的驗證平臺,基于高級驗證方法學UVM的UVC實現了1394總線協議。采用monitor監視收集數據,利用功能覆蓋率統計各驗證功能點,并能夠在Scoreboard上比較輸出結果。采用基于UVM的高層次的以覆蓋率驅動的驗證方法,實現了鏈路層功能驗證的100%的功能覆蓋率。能有效模擬鏈路層行為,極大地提高驗證效率,縮短驗證周期。