王 燕
(上海諾基亞貝爾股份有限公司,江蘇 南京 210037)
隨著集成電路規(guī)模的日益增長,芯片設(shè)計的難度逐步提升,對芯片驗證也提出了更高的要求。統(tǒng)計表明,芯片驗證占據(jù)了整個開發(fā)周期的70%以上,如何能快速高效地在前期就盡可能地挖掘出所有故障,是迫在眉睫的需求。UVM驗證方法學(xué)[1]應(yīng)運而生,綜合了其他方法學(xué)的優(yōu)點,成為業(yè)界的主流。
通用公共無線接口(Common Public Radio Interface)[3]是一種標(biāo)準(zhǔn)化協(xié)議,定義了無線基礎(chǔ)設(shè)施基站的射頻設(shè)備控制(REC)和射頻設(shè)備(RE)之間的數(shù)字接口。這實現(xiàn)了不同供應(yīng)商設(shè)備的互操作性,保護了無線服務(wù)提供商的軟件投入。CPRI協(xié)議涉及同步流程、用戶面數(shù)據(jù)、控制管理面的傳輸機制,用傳統(tǒng)的verilog語言搭建測試平臺、編寫B(tài)FM模型會非常地艱巨。
本文將采用UVM驗證方法學(xué)對CPRI接口進(jìn)行驗證,利用其sequence級聯(lián)的方式構(gòu)建超幀激勵,高效全面地覆蓋所有功能點。
UVM(Universal Verification Methodology)即通用驗證方法學(xué),是一個以SystemVerilog[2]類庫為主體的驗證平臺開發(fā)框架,驗證工程師利用其可重用組件可以構(gòu)建具有標(biāo)準(zhǔn)化層次結(jié)構(gòu)和接口的功能驗證環(huán)境。UVM有效結(jié)合了測試激勵隨機生成、自測試平臺和隨機化約束等方法,采用最佳框架以實現(xiàn)覆蓋率驅(qū)動的驗證,使驗證工程師通過采用高級驗證技術(shù)來降低風(fēng)險,滿足縮短產(chǎn)品上市時間的迫切需求。
典型的UVM驗證平臺如圖1所示,這是一種層次化的驗證架構(gòu)。
圖1 典型的UVM驗證平臺框圖
驗證平臺主要包含了下列組件:
driver:driver是驗證平臺最基本的組件,是數(shù)據(jù)流的源泉,它負(fù)責(zé)將transaction驅(qū)動至DUT的接口。
monitor:monitor負(fù)責(zé)采集DUT接口的輸出,將其轉(zhuǎn)化成transaction之后送入scoreboard進(jìn)行比對。
sequencer:sequencer 只有在 sequence 出現(xiàn)的情況下才能體現(xiàn)它的價值,這兩者是相輔相成的,共同負(fù)責(zé)產(chǎn)生 driver 所需的 transaction 激勵。
agent:agent 負(fù)責(zé)對 driver 、 monitor和 sequencer進(jìn)行封裝。driver和sequencer之間需要通過connect函數(shù)進(jìn)行連接,從而實現(xiàn)數(shù)據(jù)的傳遞。driver和 monitor 負(fù)責(zé)的工作是相對的,但都是在做transaction 級和 DUT 端口級的數(shù)據(jù)之間的轉(zhuǎn)換,其本質(zhì)可以被定義為一種協(xié)議,因而使用 agent 對這兩者進(jìn)行封裝,再在 env 中直接實例化 agent,每一個 agent 都分別代表不同的協(xié)議。
reference model:reference model采用 system verilog簡潔高效的task/function進(jìn)行編寫,是設(shè)計的預(yù)計輸出,其結(jié)果傳輸至 scoreboard,用于 DUT 實際結(jié)果的比對。
scoreboard:scoreboard 是驗證平臺的計分板,驗證平臺將通過這個組件比對來源于reference model 的輸出標(biāo)準(zhǔn)和源于 monitor 收集到的實際輸出,比較結(jié)果是否一致。
env:由于驗證平臺的組件擴展越來越豐富,為了在保證代碼結(jié)構(gòu)層次清晰的前提下,又能方便地對這些組件的實例化,驗證平臺中引入了一個env 容器類,當(dāng)使用 run_test 函數(shù)時,傳遞的參數(shù)就是這個容器類,使得 UVM 能夠自動地創(chuàng)建組件實例,大大地減少了代碼的冗余。
sequence機制、factory機制和phase機制是UVM的三大法寶。引入sequence機制的好處是將激勵從driver中剝離出來,有利于測試平臺的重用。通過編寫不同的sequence,實現(xiàn)不同的測試用例。factory機制實現(xiàn)了方便的重載,在不改變測試層次和結(jié)構(gòu)的前提下,靈活地進(jìn)行組件的擴展。phase是使各驗證組件能夠按需自動化執(zhí)行的一種機制,增加了驗證平臺在各個階段的可控性和復(fù)用性。按仿真前后可以分為仿真前的build_phase(細(xì)分為4個phase),仿真中的 run_phase (細(xì)分為12個phase)以及仿真后的 cleanup_phase(細(xì)分為4個phase)。
CPRI接口模塊包含接收通路模塊和發(fā)送通路模塊兩大部分,支持CPRI協(xié)議中的rate6和rate8。CPRI接口模塊架構(gòu)如圖2所示。
在接收方向,根據(jù)40bit并口上的數(shù)據(jù)和控制位,進(jìn)行超幀同步頭的提取,解析控制字段的信息,結(jié)合protocol版本、p_pointer值的匹配進(jìn)行同步。待完成同步流程之后,對fast_cm控制字進(jìn)行5b/4b解碼,從而還原出其承載的以太報文并通過GMII接口發(fā)出,同時解析I/Q數(shù)據(jù),根據(jù)unpack配置,通過axc接口送出。
在發(fā)送方向,GMII接口接收以太報文,進(jìn)行4b/5b編碼,axc接口接收I/Q數(shù)據(jù),根據(jù)pack配置,iq交織之后存放進(jìn)32bit位寬的數(shù)據(jù)RAM,cpri_tx_core將各類控制信息、I/Q數(shù)據(jù)組幀之后在40bit的并行數(shù)據(jù)口發(fā)出。
圖2 CPRI接口模塊架構(gòu)圖
CPRI協(xié)議定義了10ms內(nèi)包含150個超幀,每個超幀由256個基本幀組成,每個基本幀分為16個W(W的字節(jié)數(shù)根據(jù)不同的CPRI速率而定),第1個W為控制字,其余15個W用于傳輸I/Q。因此每個超幀包含256個控制字,用途如3所示,這是整個接口實現(xiàn)的難點。
圖3 CPRI控制字圖解
對于一個超幀,控制字0固定用作同步頭,可以根據(jù)它來定位超幀的起始;控制字64/128/192用作超幀計數(shù)和BFN(10ms幀)計數(shù)。Ns=1對應(yīng)的控制字用于承載Slow C&M即HDLC協(xié)議;Ns=2對應(yīng)的控制字用于層1的帶內(nèi)協(xié)議;Ns=4~7對應(yīng)的是AxC的控制字;p指針定義了fast C&M的起始Ns,p指針開始一直到Ns=63都是fast C&M的傳輸范圍,因此p指針可以根據(jù)傳輸能力的需求而定;Ns=16直到p指針-1,用戶可以自定義用途。另外還有一些保留字段用于日后的擴展。
CPRI 接口模塊驗證平臺如圖4所示。
tb_top是整個測試的頂層,例化了DUT,將其端口與指定的interface進(jìn)行連接,并通過uvm_config_db語句將interface下發(fā)到cpri_test下逐層的對應(yīng)接口,從而實現(xiàn)了DUT與各BFM之間的連接。測試采用以40b并口為主,其他接口為輔的策略,因此GMII接口和AxC接口采用環(huán)回方式,40b并口側(cè)進(jìn)行數(shù)據(jù)的激勵和環(huán)回之后的比對。
cpri_test是測試用例集,base_test中實例化cpri_env,并對cpri_config進(jìn)行約束化的隨機。各測試用例基于base_test進(jìn)行擴展,可對cpri_config改寫約束,可對底層的sequence進(jìn)行override,從而實現(xiàn)不同功能點的覆蓋。
圖4 CPRI接口模塊驗證平臺
cpri_env主 要 包 含 兩 個agent:cpri_agent和axi_agent,分別對應(yīng)兩個接口。cpri_agent工作在TRANSCEIVER模式,下層的cpri_master_agent產(chǎn)生cpri超幀,通過自定義的40b并口總線機制對CPRI接口模塊進(jìn)行激勵,同時發(fā)送一份給計分板。cpri_slave_agent在模塊發(fā)送方向的40b并口總線進(jìn)行數(shù)據(jù)的采集,并進(jìn)行超幀分解和控制字段/數(shù)據(jù)的解析,然后送往計分板跟預(yù)期數(shù)值進(jìn)行比對。axi_agent負(fù)責(zé)對AXI_Lite接口的激勵,完成模塊寄存器的配置,并進(jìn)行相關(guān)狀態(tài)寄存器的讀取分析。
cpri_agent是整個驗證平臺的關(guān)鍵,由cpri_master_agent、cpri_slave_agent兩大主體組成,另外還配備了cpri_config、timer、cpri_scoreboard等輔助功能模塊,實現(xiàn)框圖如圖5所示。
圖5 cpri_agent實現(xiàn)框圖
對cpri協(xié)議的控制字進(jìn)行梳理,按功能劃分有(1)帶內(nèi)控制字即inband,包括超幀號、p指針、協(xié)議版本、遠(yuǎn)程復(fù)位和告警等,主要用于同步和層1的管理;(2)slow C&M控制字即HDLC,通過HDLC協(xié)議承載層2的管理信息,因為占據(jù)的控制字個數(shù)少,所以只能用于慢速的信息傳遞;(3)fast C&M控制字即Eth,通過以太網(wǎng)協(xié)議承載層2的管理信息,是標(biāo)準(zhǔn)的以太網(wǎng)封裝格式,并且進(jìn)行了4b/5b的編碼,配置的p指針可以在合法范圍內(nèi)數(shù)值越小,fast C&M的傳輸帶寬越大;(4)用戶自定義控制字即Vendor,這個通常由各廠商自己實現(xiàn)特定用途;(5)保留字段,用于日后的協(xié)議擴展。
因此底層的sequencer和monitor就考慮分成六大塊,即上述五類控制字再加上IQ數(shù)據(jù)。
在master_agent中,控制字sequence的產(chǎn)生以超幀為單位,而IQ數(shù)據(jù)的產(chǎn)生以基本幀為單位,通過sequence級聯(lián),匯聚到Hyperfrm sequencer組成超幀格式,再經(jīng)過scramble sqr進(jìn)行加擾處理,傳遞到driver,轉(zhuǎn)換成40b并口的接口方式驅(qū)動DUT。各sequence將產(chǎn)生的transction復(fù)制一份通過analysis_port發(fā)往cpri_scoreboard。
在 slave_agent中,listener負(fù)責(zé)從interface上采集DUT輸出的數(shù)據(jù),從同步頭開始緩存1個超幀,然后轉(zhuǎn)化為內(nèi)部的transaction格式傳遞給Descramble monitor進(jìn)行解擾處理,De-frame monitor將超幀分解為五類控制字以及IQ數(shù)據(jù),分別送往對應(yīng)的monitor進(jìn)行分析,之后通過analysis_port發(fā)往cpri_scoreboard與預(yù)期值進(jìn)行比對。
timer模塊產(chǎn)生內(nèi)部組幀/解幀的時間信息。外部輸入的clock應(yīng)與cpri的線速相匹配,同時外部輸入10ms脈沖標(biāo)記,依據(jù)clock和10ms標(biāo)簽而產(chǎn)生內(nèi)部的cnt_z(超幀計數(shù),0~149循環(huán))、cnt_x(基本幀計數(shù),0~255循環(huán))、cnt_y(每個W內(nèi)的字節(jié)計數(shù),最大值由cpri的線速決定)、cnt_w(每個基本幀內(nèi)的W計數(shù),0~15循環(huán))。根據(jù)這些計數(shù)器可以清晰地定位出超幀中的任意一個位置,從而保證組幀/解幀時的正確性。
cpri_config模塊作用于整個cpri_agent,定義并約束了各sequence和monitor需要的變量,羅列了部分如表1所示。
表1 約束項目變量
激勵成功發(fā)送,cpri模塊完成同步后,接口上產(chǎn)生正確的數(shù)據(jù)交互,時序信息如圖6所示。
圖6 cpri模塊接口時序圖
本次驗證針對rate6和rate8兩種速率的cpri接口,參照協(xié)議和設(shè)計spec進(jìn)行功能點的測試,對各個功能點對應(yīng)的功能覆蓋率進(jìn)行統(tǒng)計,得到功能覆蓋率為100%,并針對RTL進(jìn)行代碼覆蓋率的統(tǒng)計,語句覆蓋率可以達(dá)到99.3%,狀態(tài)機覆蓋率達(dá)到100%。通過UVM驗證,計分板對實際報文和預(yù)期報文進(jìn)行實時比對,數(shù)據(jù)比對的一致性為100%。相關(guān)數(shù)據(jù)可以表明cpri接口的功能需求正確實現(xiàn)。
UVM 作為IC 驗證最前沿的方法學(xué),雖然前端仿真搭建平臺的周期較長,但是可移植性和擴展性強,用例的編寫效率高,可以明顯縮短整個研發(fā)的驗證時間。本文利用sequence級聯(lián)的方式搭建基于UVM 的CPRI接口模塊驗證平臺,充分驗證了CPRI接口模塊的功能,為芯片的研發(fā)質(zhì)量保駕護航。這種驗證架構(gòu)可以移植到其他項目中,使得驗證平臺發(fā)揮重要的指導(dǎo)作用,在數(shù)字接口的設(shè)計中具有重要的應(yīng)用價值。