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