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

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

圖2 驗證流程
實現(xiàn)對1394總線鏈路層功能驗證,具體過程如下:
(a)首先,根據(jù)1394總線鏈路層功能規(guī)范編寫驗證規(guī)范和驗證計劃,即列出需要驗證的關(guān)鍵功能特性、邊界情況和可能出現(xiàn)的故障模式。建立覆蓋率模型時,先根據(jù)上述的驗證規(guī)范,明確待驗證的功能點以及如何對這些數(shù)據(jù)采樣,然后構(gòu)建能夠自動統(tǒng)計功能覆蓋率的驗證平臺,定義覆蓋組(Covergroup)來統(tǒng)計和分析功能覆蓋率,確保每個設(shè)計需求都被實現(xiàn)、驗證且功能正確。下面以1394總線鏈路層寄存器訪問為例,設(shè)計的一個寄存器對象的功能覆蓋組代碼示例如下:
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方法學(xué)搭建驗證環(huán)境、開發(fā)驗證代碼、驗證管理功能,通過輸入測試計劃,即“產(chǎn)生的激勵”輸入到DUT(design under test)設(shè)計中,并且通過UVM內(nèi)部自帶的函數(shù)run_test()開啟UVM運行仿真,并將產(chǎn)生結(jié)果輸出,引入功能覆蓋率模型,對覆蓋率的結(jié)果進行分析,即將測試覆蓋率與測試對象聯(lián)系起來,從而為管理人員與工程師提供強大支持,使得持續(xù)不斷地跟蹤驗證進度和更為合理高效地配置資源成為可能。
(c)最后,經(jīng)過回歸測試、驗證結(jié)果和覆蓋率分析,如果驗證達(dá)不到要求,則需要反復(fù)迭代優(yōu)化驗證方案,完善或更改驗證計劃,通過UVM機制管理驗證平臺、再運行、再進行結(jié)果分析等,直到完成驗證激勵的開發(fā)調(diào)試,最終極大程度地實現(xiàn)1394總線鏈路層芯片驗證工作的收斂。
1.2.2 驗證平臺構(gòu)建
文中對不同的功能組件進行單獨設(shè)計,同時以UVM方法學(xué)為基礎(chǔ),設(shè)計了如圖3所示的高層次化驗證平臺結(jié)構(gòu)。采用基于Systemverilog面向?qū)ο缶幊痰姆椒ň幋a實現(xiàn),每一個組件用一個類(class)單獨實現(xiàn),類中定義屬性(數(shù)據(jù))和屬性操作方法(包括任務(wù)和函數(shù))[13-15]。此驗證平臺的結(jié)構(gòu)可以分為三個部分:首先實例化鏈路層DUT,是用于平臺中與其他組件進行通信的接口;然后創(chuàng)建DUT外圍的驗證組件UVC,是一種可以重用的對應(yīng)于鏈路層外圍接口協(xié)議的IP模型,與頂層DUT之間具備通信接口,分別是微控制器寄存器訪問(Microcontroller Agent)、事務(wù)層數(shù)據(jù)搬運接口(Data_Mover Agent)、1394總線物理層模型(Phy model agent)、1394總線多節(jié)點的鏈路層模型(link node agent);最后是基于UVM開發(fā)的測試激勵Test Suites、測試腳本等。

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

表1 測試向量

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

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

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

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