魏美榮,田 澤,王宣明,郭 蒙
(1.航空工業(yè)西安航空計(jì)算技術(shù)研究所,陜西 西安 710068;2.集成電路與微系統(tǒng)設(shè)計(jì)航空科技重點(diǎn)實(shí)驗(yàn)室,陜西 西安 710068;3.西安翔騰微電子科技有限公司,陜西 西安 710068)
1394總線是一種高性能串行總線,鏈路層在串行總線節(jié)點(diǎn)系統(tǒng)中位于事務(wù)層、應(yīng)用層和物理層之間。鏈路層為事務(wù)層提供異步數(shù)據(jù)的接收、發(fā)送和確認(rèn)服務(wù),為應(yīng)用層提供固定時(shí)間間隔的等時(shí)數(shù)據(jù)廣播傳輸服務(wù)。同時(shí)鏈路層提供尋址、數(shù)據(jù)檢查、發(fā)送數(shù)據(jù)組包和接收數(shù)據(jù)解包服務(wù)。
隨著集成電路技術(shù)的不斷發(fā)展,芯片的規(guī)模和集成度在快速提升,這對驗(yàn)證提出了更高的要求。據(jù)統(tǒng)計(jì)表明,發(fā)現(xiàn)bug的時(shí)間與修復(fù)成本成指數(shù)關(guān)系,越早發(fā)現(xiàn)彌補(bǔ)的成本也會越低,因此,驗(yàn)證已經(jīng)成為芯片設(shè)計(jì)的發(fā)展瓶頸。針對傳統(tǒng)RTL代碼驗(yàn)證平臺重用性差、覆蓋率低和自動(dòng)化程度低等問題,在吸取了OVM,VMM和ERM等驗(yàn)證方法優(yōu)點(diǎn)的基礎(chǔ)上,三大EDA公司(Mentor、Candence和Synopsys)聯(lián)合業(yè)內(nèi)其他公司推出UVM(universal verification methodology)驗(yàn)證方法學(xué)。UVM是基于系統(tǒng)級硬件描述語言SystemVerilog,具備面向?qū)ο缶幊痰乃枷牒凸δ躘1-3],實(shí)現(xiàn)了驗(yàn)證的重用性和清晰的層次結(jié)構(gòu)。由于其開源的特質(zhì),使得它相比于其他的驗(yàn)證方法學(xué),具備更好的兼容性。UVM平臺的架構(gòu)主要是由通用的驗(yàn)證組件(universal verification component,UVC)構(gòu)成的,而且每個(gè)UVC都是已經(jīng)封裝好、功能完善且可配置的驗(yàn)證環(huán)境,可重用的驗(yàn)證組件,約束隨機(jī)激勵(lì)產(chǎn)生、自動(dòng)化的驗(yàn)證平臺等特點(diǎn),大大縮短了驗(yàn)證時(shí)間[4-6]。
另外,相比于傳統(tǒng)的驗(yàn)證平臺,斷言機(jī)制提供了簡潔的行為級代碼描述,能對設(shè)計(jì)的屬性進(jìn)行實(shí)時(shí)性的檢測,仿真過程一旦報(bào)錯(cuò)可迅速定位[7]。功能覆蓋率是用來衡量哪些設(shè)計(jì)特征已被測試程序測試過的一個(gè)指標(biāo),評估驗(yàn)證的結(jié)果[8]。覆蓋率有三類:代碼覆蓋率、功能覆蓋率和斷言覆蓋率。使用UVM提供的隨機(jī)測試激勵(lì)以及帶約束的隨機(jī)測試(constrained random test,CRT)方法可以覆蓋各種情況[9-10],不用編寫定向的測試集,就可以達(dá)到盡可能高的覆蓋率。若還有未能覆蓋的邊界情況,可采用定向的測試激勵(lì)來進(jìn)行測試[11]。
文中以1394鏈路層作為主要分析對象,重點(diǎn)從基于覆蓋率驅(qū)動(dòng)的自動(dòng)化驗(yàn)證環(huán)境搭建、驗(yàn)證流程、驗(yàn)證平臺、隨機(jī)驗(yàn)證激勵(lì)用例開發(fā)、覆蓋率統(tǒng)計(jì)結(jié)果分析等方面重點(diǎn)闡述。并經(jīng)過功能仿真測試和覆蓋率分析表明,采用基于UVM的驗(yàn)證分層結(jié)構(gòu),實(shí)現(xiàn)的事務(wù)層請求模型、數(shù)據(jù)包模型、鏈路層監(jiān)控模型,物理層模型等激勵(lì)序列具有繼承性和靈活的隨機(jī)約束性,可使驗(yàn)證人員花費(fèi)較少的精力實(shí)現(xiàn)重用原有的激勵(lì)場景而構(gòu)成新的激勵(lì)場景?;跀嘌院透采w率驅(qū)動(dòng)的驗(yàn)證理念,以可約束的隨機(jī)向量為主,對仿真結(jié)果進(jìn)行覆蓋率統(tǒng)計(jì)和分析,并對隨機(jī)向量的約束進(jìn)行修改或補(bǔ)充定向向量,保證驗(yàn)證的完備性。
在前端設(shè)計(jì)中,文中先對1394總線鏈路層系統(tǒng)功能進(jìn)行分析,根據(jù)設(shè)計(jì)功能提取鏈路層驗(yàn)證功能點(diǎn),然后制定了相應(yīng)的驗(yàn)證策略與方法,并詳細(xì)描述了該方法中的驗(yàn)證環(huán)境、驗(yàn)證流程、虛擬驗(yàn)證平臺各組件功能以及工作原理。
1394總線鏈路層是1394高性能串行總線的重要部分,實(shí)現(xiàn)了IEEE Std 1394-2008協(xié)議規(guī)定的1394b高性能串行總線的節(jié)點(diǎn)鏈路層功能,其邏輯結(jié)構(gòu)框圖如圖1所示。主要包含數(shù)據(jù)搬運(yùn)(data mover)模塊、選擇控制模塊、異步發(fā)送FIFO模塊(asynchronous transmit FIFO,ATF)、通用接收FIFO(general receive FIFO,GRF)、微處理器接口(microcontroller interface)模塊、鏈路層核(link core)等功能模塊,實(shí)現(xiàn)的主要功能包括:
圖1 1394總線鏈路層結(jié)構(gòu)框圖
(a)負(fù)責(zé)在事務(wù)層和物理層之間傳遞異步、異步流和等時(shí)數(shù)據(jù);
(b)提供標(biāo)準(zhǔn)的Alpha類型物理層-鏈路層接口,用于連接物理層;
(c)提供數(shù)據(jù)搬運(yùn)接口(data mover),支持異步流數(shù)據(jù)的收發(fā),可通過寄存器訪問接口進(jìn)行異步發(fā)送物理配置包和異步包,通過訪問GRF接收異步包和自標(biāo)識包;
(d)當(dāng)進(jìn)行異步消息收發(fā)時(shí),鏈路層將數(shù)據(jù)從事物層傳遞給物理層,或?qū)⑽锢韺咏邮盏降臄?shù)據(jù)傳遞給事物層,并負(fù)責(zé)添加數(shù)據(jù)CRC校驗(yàn);
(e)在等時(shí)通訊過程中,負(fù)責(zé)周期發(fā)送、接收cycle start包,用于同步總線各節(jié)點(diǎn)的等時(shí)周期,并保證等時(shí)消息通訊能夠正常進(jìn)行。
文中采用UVM驗(yàn)證系統(tǒng)架構(gòu)、基于功能覆蓋率驅(qū)動(dòng)的驗(yàn)證方法,從鏈路層系統(tǒng)級功能分析角度出發(fā),制定出一套通用性強(qiáng)的1394總線鏈路層驗(yàn)證實(shí)施方案。
1.2.1 驗(yàn)證流程
文中將結(jié)合最新UVM驗(yàn)證技術(shù)、統(tǒng)一覆蓋率的驗(yàn)證管理技術(shù),采用新型閉環(huán)的驗(yàn)證流程[12],如圖2所示。
圖2 驗(yàn)證流程
實(shí)現(xiàn)對1394總線鏈路層功能驗(yàn)證,具體過程如下:
(a)首先,根據(jù)1394總線鏈路層功能規(guī)范編寫驗(yàn)證規(guī)范和驗(yàn)證計(jì)劃,即列出需要驗(yàn)證的關(guān)鍵功能特性、邊界情況和可能出現(xiàn)的故障模式。建立覆蓋率模型時(shí),先根據(jù)上述的驗(yàn)證規(guī)范,明確待驗(yàn)證的功能點(diǎn)以及如何對這些數(shù)據(jù)采樣,然后構(gòu)建能夠自動(dòng)統(tǒng)計(jì)功能覆蓋率的驗(yàn)證平臺,定義覆蓋組(Covergroup)來統(tǒng)計(jì)和分析功能覆蓋率,確保每個(gè)設(shè)計(jì)需求都被實(shí)現(xiàn)、驗(yàn)證且功能正確。下面以1394總線鏈路層寄存器訪問為例,設(shè)計(jì)的一個(gè)寄存器對象的功能覆蓋組代碼示例如下:
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é)搭建驗(yàn)證環(huán)境、開發(fā)驗(yàn)證代碼、驗(yàn)證管理功能,通過輸入測試計(jì)劃,即“產(chǎn)生的激勵(lì)”輸入到DUT(design under test)設(shè)計(jì)中,并且通過UVM內(nèi)部自帶的函數(shù)run_test()開啟UVM運(yùn)行仿真,并將產(chǎn)生結(jié)果輸出,引入功能覆蓋率模型,對覆蓋率的結(jié)果進(jìn)行分析,即將測試覆蓋率與測試對象聯(lián)系起來,從而為管理人員與工程師提供強(qiáng)大支持,使得持續(xù)不斷地跟蹤驗(yàn)證進(jìn)度和更為合理高效地配置資源成為可能。
(c)最后,經(jīng)過回歸測試、驗(yàn)證結(jié)果和覆蓋率分析,如果驗(yàn)證達(dá)不到要求,則需要反復(fù)迭代優(yōu)化驗(yàn)證方案,完善或更改驗(yàn)證計(jì)劃,通過UVM機(jī)制管理驗(yàn)證平臺、再運(yùn)行、再進(jìn)行結(jié)果分析等,直到完成驗(yàn)證激勵(lì)的開發(fā)調(diào)試,最終極大程度地實(shí)現(xiàn)1394總線鏈路層芯片驗(yàn)證工作的收斂。
1.2.2 驗(yàn)證平臺構(gòu)建
文中對不同的功能組件進(jìn)行單獨(dú)設(shè)計(jì),同時(shí)以UVM方法學(xué)為基礎(chǔ),設(shè)計(jì)了如圖3所示的高層次化驗(yàn)證平臺結(jié)構(gòu)。采用基于Systemverilog面向?qū)ο缶幊痰姆椒ň幋a實(shí)現(xiàn),每一個(gè)組件用一個(gè)類(class)單獨(dú)實(shí)現(xiàn),類中定義屬性(數(shù)據(jù))和屬性操作方法(包括任務(wù)和函數(shù))[13-15]。此驗(yàn)證平臺的結(jié)構(gòu)可以分為三個(gè)部分:首先實(shí)例化鏈路層DUT,是用于平臺中與其他組件進(jìn)行通信的接口;然后創(chuàng)建DUT外圍的驗(yàn)證組件UVC,是一種可以重用的對應(yīng)于鏈路層外圍接口協(xié)議的IP模型,與頂層DUT之間具備通信接口,分別是微控制器寄存器訪問(Microcontroller Agent)、事務(wù)層數(shù)據(jù)搬運(yùn)接口(Data_Mover Agent)、1394總線物理層模型(Phy model agent)、1394總線多節(jié)點(diǎn)的鏈路層模型(link node agent);最后是基于UVM開發(fā)的測試激勵(lì)Test Suites、測試腳本等。
圖3 基于UVM的1394總線鏈路層虛擬平臺驗(yàn)證架構(gòu)
文中搭建的驗(yàn)證平臺是一個(gè)1394總線多節(jié)點(diǎn)拓?fù)浣Y(jié)構(gòu),鏈路層DUT也是作為其中一個(gè)被測試節(jié)點(diǎn),其中,Test Suites是由UVM的Sequence機(jī)制實(shí)現(xiàn)的一系列隨機(jī)測試激勵(lì)。各模塊Agent內(nèi)部Sequencer是激勵(lì)產(chǎn)生器,產(chǎn)生協(xié)議規(guī)定的寄存器訪問類型、不同類型包數(shù)據(jù)格式,Sequence通過Sequencer將Seq_item送到驅(qū)動(dòng)器Driver,Driver通過虛接口virtual interface(vif)將事務(wù)級的數(shù)據(jù)按照信號層接口的時(shí)序要求轉(zhuǎn)換為DUT端的電信號,并驅(qū)動(dòng)DUT來發(fā)送接收數(shù)據(jù)包。平臺中的Configuration模塊用于系統(tǒng)的配置,根據(jù)不同的配置,使驅(qū)動(dòng)芯片外部管腳不同時(shí)序下激勵(lì)輸出和錯(cuò)誤注入。各Agent內(nèi)部的Monitor進(jìn)行數(shù)據(jù)采集監(jiān)控,最后將放到Coverage和記分板Scoreboard中,通過記分板Scoreboard與行為級模型進(jìn)行數(shù)據(jù)結(jié)果比較,通過UVM_report功能完成結(jié)果輸出。
在上述驗(yàn)證平臺中各功能模型Agent的主要功能如下:
(a)Microcontroller Agent,模擬1394鏈路層主機(jī)訪問寄存器讀寫,和通過填寫內(nèi)部包頭、包中和包尾寄存器來實(shí)現(xiàn)TAF中異步包、異步流包、物理配置包的發(fā)送以及通過GRF接收異步包、自標(biāo)識包等數(shù)據(jù)包的接收;
(b)Data_Mover Agent,模擬事務(wù)層進(jìn)行異步或等時(shí)通信模式下,數(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,用于驗(yàn)證的測試用例,是由UVM的sequence機(jī)制實(shí)現(xiàn)的一系列隨機(jī)測試激勵(lì)。測試用例均由uvm_test類派生而來,每個(gè)測試激勵(lì)都設(shè)置了默認(rèn)啟動(dòng)的測試激勵(lì),只需在命令行啟用這些測試用例。文中設(shè)計(jì)有3種類測試用例,分別是基本測試、隨機(jī)測試、注錯(cuò)測試。其中,隨機(jī)激勵(lì)測試可以找出預(yù)料不到的錯(cuò)誤,通過SystemVerilog語言對激勵(lì)進(jìn)行隨機(jī)化和約束?;緶y試用例是根據(jù)需要產(chǎn)生特定要求的激勵(lì),關(guān)注設(shè)計(jì)功能點(diǎn)本身。注錯(cuò)測試用例通過帶約束的隨機(jī)激勵(lì)產(chǎn)生各種錯(cuò)誤激勵(lì),用于測試某些極限情況下可能出現(xiàn)的故障問題,檢測設(shè)計(jì)本身的處理錯(cuò)誤能力;
(f)達(dá)到覆蓋各種情況,達(dá)到盡可能高的覆蓋率,從而完成驗(yàn)證目標(biāo)。
上述各Agent模塊均具有獨(dú)立結(jié)構(gòu),根據(jù)實(shí)際項(xiàng)目中1394總線節(jié)點(diǎn)通信個(gè)數(shù),只需要通過實(shí)例化多個(gè)Phy model Agent、link node agent來實(shí)現(xiàn)可重用,達(dá)到快速構(gòu)建驗(yàn)證平臺,便可以加快驗(yàn)證流程。
文中根據(jù)制定1394總線鏈路層主要功能建立的測試用例如表1所示。
表1 測試向量
續(xù)表1
1.2.3 驗(yàn)證環(huán)境
文中采用Metor Graphics公司提供的Questa作為功能仿真平臺,如圖4所示。利用其內(nèi)嵌斷言引擎、高性能約束求解,以及統(tǒng)一覆蓋率數(shù)據(jù)庫(UCDB)。斷言是對設(shè)計(jì)屬性的描述,采用斷言技術(shù)快速檢測到設(shè)計(jì)中潛藏的缺陷,如被檢測對象與預(yù)期檢測行為不一致,則上報(bào)斷言錯(cuò)誤,并直接追溯源代碼中最原始的信號。通過UCDB管理并收集所有的覆蓋率數(shù)據(jù):代碼覆蓋率、功能覆蓋率和斷言覆蓋率,并存儲在統(tǒng)一個(gè)數(shù)據(jù)庫中。驗(yàn)證管理功能通過輸入測試計(jì)劃、并將測試覆蓋率與測試對象聯(lián)系起來,利用Questa提供的強(qiáng)大分析能力,將原始覆蓋率數(shù)據(jù)轉(zhuǎn)變?yōu)榭刹僮饕鬃R別的信息。
圖4 功能仿真平臺
在Linux運(yùn)行環(huán)境QuestaSim功能仿真平臺,如表2所示,采用SystemVerilog、Makefile編程語言及腳本語言,將編譯、仿真、測試選擇、覆蓋率收集等功能設(shè)計(jì)為自動(dòng)化流程。不同的測試模式下,切換外部測試模型的應(yīng)用場景,把外部的測試激勵(lì)輸入給1394總線鏈路層被測設(shè)計(jì)。
表2 1394鏈路層驗(yàn)證環(huán)境
1.2.4 運(yùn)行流程
基于UVM驗(yàn)證方法學(xué),驗(yàn)證組件之間按照UVM的phase機(jī)制運(yùn)行,即仿真器首先從平臺頂層TOP執(zhí)行,遇到特定函數(shù)run_test()后驗(yàn)證平臺開始啟動(dòng),腳本運(yùn)行時(shí)利用UVM_TESTCASE從命令行中尋找testcase名字并創(chuàng)建該測試case實(shí)例,以樹形結(jié)構(gòu)方式依次執(zhí)行case及其成員變量的build_phase,順序執(zhí)行UVM樹各個(gè)節(jié)點(diǎn)build_phase、connect_phase以及run_phase各階段,直到所有的phase執(zhí)行結(jié)束。
使用上述描述的驗(yàn)證平臺對鏈路層DUT進(jìn)行功能驗(yàn)證,以事務(wù)層數(shù)據(jù)搬運(yùn)Data Mover接口的等時(shí)和異步模式通信仿真為例,采用上述規(guī)劃的測試激勵(lì),運(yùn)行UVM仿真平臺得到仿真結(jié)果波形,如圖5所示。圖中橢圓框出的部分為等時(shí)數(shù)據(jù)包的發(fā)送,長方形框出的部分為異步流數(shù)據(jù)包發(fā)送,圓角矩形框部分是等時(shí)數(shù)據(jù)包和異步流數(shù)據(jù)包的接收,可見該測試平臺能夠很好地模擬1394總線實(shí)際通信場景。仿真進(jìn)行到Check_phase階段通過檢查Scoreboard的對比結(jié)果以及其他組件的結(jié)果是否出現(xiàn)違例,確認(rèn)沒有遺留的數(shù)據(jù)要處理,到Report_phase階段產(chǎn)生報(bào)告仿真結(jié)果,或者生成的log文件中的報(bào)告及斷言來檢測DUT的正確性[16-17]。同時(shí),通過分析覆蓋率報(bào)告,不斷完善測試激勵(lì),添加新的測試激勵(lì),實(shí)現(xiàn)全面的功能驗(yàn)證,將所有測試向量測試完畢后,進(jìn)行回歸測試并進(jìn)行覆蓋率統(tǒng)計(jì),將輸出結(jié)果進(jìn)行打印。如圖6所示,覆蓋率已達(dá)到100%,滿足鏈路層系統(tǒng)功能驗(yàn)證的要求,證明了該驗(yàn)證平臺測試激勵(lì)的完整性,達(dá)到了預(yù)期驗(yàn)證目標(biāo)。
圖5 DM接口等時(shí)和異步流數(shù)據(jù)包收發(fā)通信仿真波形
文中針對1394總線鏈路層系統(tǒng)功能需求分析,制定了一套適用于鏈路層驗(yàn)證的方法,構(gòu)建了能夠自動(dòng)統(tǒng)計(jì)功能覆蓋率的驗(yàn)證平臺,基于高級驗(yàn)證方法學(xué)UVM的UVC實(shí)現(xiàn)了1394總線協(xié)議。采用monitor監(jiān)視收集數(shù)據(jù),利用功能覆蓋率統(tǒng)計(jì)各驗(yàn)證功能點(diǎn),并能夠在Scoreboard上比較輸出結(jié)果。采用基于UVM的高層次的以覆蓋率驅(qū)動(dòng)的驗(yàn)證方法,實(shí)現(xiàn)了鏈路層功能驗(yàn)證的100%的功能覆蓋率。能有效模擬鏈路層行為,極大地提高驗(yàn)證效率,縮短驗(yàn)證周期。