馬 鵬,劉 佩,張 偉
(華東計(jì)算技術(shù)研究所,上海 201808)
SoC (System on Chip)產(chǎn)品研發(fā)一般采用正向設(shè)計(jì)方法,產(chǎn)品的開發(fā)流程包括:項(xiàng)目策劃、系統(tǒng)說明以及行為描述、RTL 描述、前端仿真、后端設(shè)計(jì)、流片階段、出樣等[1].項(xiàng)目策劃階段會對市場需求進(jìn)行調(diào)研,形成產(chǎn)品規(guī)格書.在系統(tǒng)說明及行為描述階段,確定設(shè)計(jì)對象和目標(biāo),明確芯片功能、內(nèi)外部性能要求等,從而定制RTL 代碼.本文以一款工控CPU 芯片研制為例,芯片內(nèi)部需要集成CPU 核以及大量的外設(shè)(如SPI、I2C、UART、CAN、SPI、PCIE、USB、DMA 等),在RTL 描述階段將整體任務(wù)劃分為各個子模塊實(shí)現(xiàn),根據(jù)任務(wù)書的需求分析,通用性IP 配置達(dá)不到目標(biāo)需求.因此,這部分模塊只能通過自研的方式實(shí)現(xiàn).而自研代碼相比較于成熟IP 而言可靠性不高,風(fēng)險大,必須依靠前仿驗(yàn)證保證RTL 代碼功能的完善完備性,前仿任務(wù)艱巨繁重.
傳統(tǒng)的驗(yàn)證方法[2],需要驗(yàn)證人員具備豐富的經(jīng)驗(yàn),人的因素很大,進(jìn)度不可控,難以滿足復(fù)雜的SoC驗(yàn)證需求.目前,市場上流行的驗(yàn)證方式是UVM (Universal Verification Methodology)驗(yàn)證方法學(xué).
UVM 驗(yàn)證方法學(xué)[2],由Accellera 于2011年2月推出,以SystemVerilog類庫為主體的驗(yàn)證平臺開發(fā)框架,繼承了VMM和OVM的優(yōu)點(diǎn),構(gòu)建的驗(yàn)證環(huán)境具備可重用組件構(gòu)建標(biāo)準(zhǔn)化和層次化特性,并且得到了Synopsys、Mentor和Cadence 公司的支持,EDA 環(huán)境構(gòu)建完善.它目前已經(jīng)得到市場的驗(yàn)證,現(xiàn)在市面上很多IC 設(shè)計(jì)公司都已經(jīng)在使用[1].UVM 方法學(xué)的特點(diǎn)是能夠產(chǎn)生帶約束的隨機(jī)測試激勵、通過refm 設(shè)定可以判定輸出結(jié)果是否符合預(yù)期,能夠進(jìn)行大量的隨機(jī)驗(yàn)證,平臺本身具備可靠性,加入覆蓋語句、斷言語句,獲取到代碼覆蓋率、功能覆蓋率、斷言覆蓋率的百分比,通過分析能夠量化的科學(xué)的判定驗(yàn)證的程度,驗(yàn)證進(jìn)度可控.
AMBA (Advanced Microcontroller Bus Architecture)由ARM 公司研發(fā)推出,定義了一種嵌入式高性能微控制器的片上通信標(biāo)準(zhǔn)[3].目前,已被廣泛地應(yīng)用于大型復(fù)雜SoC 系統(tǒng)中[2].
本文以工控處理器SoC 芯片驗(yàn)證為背景,目標(biāo)芯片內(nèi)部采用AMBA 總線作為片上通信的總線架構(gòu),搭建基于UVM 驗(yàn)證方法學(xué)的AMBA 總線接口的驗(yàn)證平臺,平臺具備可靠性、可擴(kuò)展性、通用性、高效性,能夠減少驗(yàn)證準(zhǔn)備工作的重復(fù)性,節(jié)約驗(yàn)證時間,可靠的高效完成整個芯片的驗(yàn)證工作,保障RTL 代碼功能的正確性和完備性,提高芯片成功率.
在AMBA 3.0 版本中,介紹了4 種接口類型,AMBA APB (Advanced Peripheral Bus)總線[3]、AMBA AHB(Advanced High-performance Bus)總線[4]、AMBA AXI(Advanced eXtensible Interface)總線[5]和AMBA ATB(Advanced Trace Bus)總線[6].
目標(biāo)芯片系統(tǒng)結(jié)構(gòu)圖,如圖1所示,片上總線采用AMBA 總線、內(nèi)部集成大量低速外設(shè)包括多路UART控制器、I2C 控制器、Timer 控制器、Watchdog 控制器、PWM 控制器、GPIO 控制器等;高速設(shè)備,L2 Cache 控制器、DMA 控制器、PCIE 控制器、USB 控制器、EMMC 控制器、SMC 控制器等;基于系統(tǒng)性能設(shè)計(jì)考慮,目標(biāo)芯片系統(tǒng)架構(gòu)設(shè)計(jì)采用AMBA 協(xié)議中的3 種類型,AMBA[7]AXI、AMBA AHB[8]、AMBA APB 總線協(xié)議,選擇高速總線AMBA AXI 總線作為處理器與外設(shè)相連的一級總線,選擇AMBA AHB[9]總線作為片上本地總線,選擇AMBA APB 總線,連接低速設(shè)備.如圖1所示,AMBA-AXI 總線上掛接CPU 核以及高速緩存控制器AXI-L2Cache 控制器、AXI-SRAM控制器、AXI-PCIE 控制器等,這類子模塊的驗(yàn)證工作需要平臺包含AMBA AXI 總線驅(qū)動;通過AXI2AHB橋控制器,完成AMBA AXI 總線與AMBA AHB 總線橋接工作,AMBA AHB 作為本地高性能總線,掛接AHB-DMA 控制器、AHB-SPI 控制器等高速外設(shè),這類子模塊的驗(yàn)證工作需要平臺包含AMBA AHB 總線驅(qū)動;通過AHB2APB橋控制器,完成AMBA AHB 總線與AMBA APB 總線橋接工作,AMBA APB 總線作為低速外設(shè)總線,掛接低速外設(shè)APB-UART、APBWDT 等模塊,這類子模塊的驗(yàn)證工作需要平臺包含AMBA APB 總線驅(qū)動.
圖1 目標(biāo)芯片系統(tǒng)結(jié)構(gòu)圖
本驗(yàn)證平臺采用Agent 以及TLM 通信機(jī)制設(shè)計(jì),實(shí)現(xiàn)平臺可擴(kuò)展性,支持外設(shè)接口類型為AMBA APB、AMBA AHB、AMBA AXI 單一接口或者組合接口多樣性的驗(yàn)證工作,具備通用性,可操作類型:
1)AMBA APB 接口:支持外設(shè)地址位寬配置、支持32 位數(shù)據(jù)讀寫操作,符合AMBA APB 3.0 協(xié)議規(guī)范.
2)AMBA AHB 接口:支持外設(shè)地址位寬配置,支持8 位、16 位、32 位、64 位 SINGLE 讀寫操作,支持BURST INCR 類型讀寫操作(len 覆蓋1~16),符合AMBA AHB 協(xié)議規(guī)范.
3)AMBA AXI 接口:支持外設(shè)地址位寬可配置,支持8 位、16 位、32 位、64 位SINGLE 讀寫操作,支持BURST INCR、BURST WRAP、BURST FIXED 類型讀寫操作(len 覆蓋1~16),符合AMBA AXI 協(xié)議規(guī)范.
因此,驗(yàn)證平臺能夠滿足系統(tǒng)內(nèi)集成的所有子模塊的驗(yàn)證工作,所包含的總線驅(qū)動,覆蓋目標(biāo)芯片驗(yàn)證所需的全部AMBA 接口驅(qū)動類型,具備通用性,能夠通過平臺結(jié)構(gòu)擴(kuò)展性滿足子模塊驗(yàn)證需要的接口類型以及數(shù)目的多樣性,例如AHB-DMA 控制器,通過AMBA AXI 接口進(jìn)行數(shù)據(jù)傳輸、AMBA AHB 接口進(jìn)行控制器寄存器配置,需要在同一環(huán)境集成AXI 總線驅(qū)動以及AHB 總線驅(qū)動才能完成驗(yàn)證工作,驗(yàn)證平臺具備的可擴(kuò)展性能夠滿足驗(yàn)證需求.
APB是高級外圍總線,定義了APB 總線協(xié)議,本平臺設(shè)計(jì)的APB 總線接口,支持待測模塊地址位寬可配置,數(shù)據(jù)接口位寬可配置,驅(qū)動設(shè)計(jì)符合AMBA APB 3.0 協(xié)議規(guī)范.
根據(jù)AMBA APB 協(xié)議,定義sequence itemmonitor transfer,如表1和表2所示,根據(jù)`define APB_ADDR_WIDTH 配置支持地址位寬16 位或者32 位接口類型,根據(jù)`define APB_DATA_WIDTH 配置支持?jǐn)?shù)據(jù)位寬16 位或者32 位接口類型;APB 接口驅(qū)動設(shè)計(jì)流程如圖2所示,在VIF.clk 上升沿將激勵值賦給對應(yīng)接口,在時鐘的下一個上升沿,將VIF.penable 拉高,之后,在每個時鐘的上升沿判斷VIF.pready 信號是否拉高,本節(jié)拍等待VIF.pready=1’b1 成功將VIF.prdata 值賦值給item.pdata,下節(jié)拍上升沿,將控制信號以及接口地址信號清零,APB 寫驅(qū)動效果圖,如圖3所示.APB 接口監(jiān)控設(shè)計(jì),在VIF.clk 下降沿,判斷讀數(shù)據(jù)是否有效(psel==1’b1 &penable==1’b1 &pready==1’b1),滿足條件當(dāng)拍將VIF.prdata 賦值給mtr.prdata,流程如圖2所示.APB 讀驅(qū)動效果圖,如圖4所示.
圖2 APB Driver 及Monitor 設(shè)計(jì)流程圖
圖3 APB 寫效果圖
圖4 APB 讀效果圖
表1 APB sequence item
表2 APB monitor transfer
AHB是高級高性能總線,定義了AHB 總線協(xié)議,本平臺設(shè)計(jì)的AHB總線接口,支持待測模塊地址位寬8 位、16 位或者32 位接口類型,支持?jǐn)?shù)據(jù)8 位、16 位、32 位、64 位SINGLE 以及BURST INCR 訪問,符合AMBA AHB協(xié)議規(guī)范.
根據(jù)AMBA AHB 協(xié)議規(guī)范,定義sequence item,如表3所示.根據(jù)define AHB_ADDR_WIDTH 配置地址位寬16,32,64 位接口類型;AHB 接口驅(qū)動設(shè)計(jì),根據(jù)協(xié)議規(guī)范,在時鐘上升沿等待hready 拉高,通過trans_len 判斷是否為SINGLE 操作,設(shè)置VIF.Hburst 參數(shù)值(AHB_BURST_SINGLEAHB_BURST_INCR),并將sequence item 賦值給對應(yīng)的接口信號;通過item.hwrite 判斷當(dāng)前操作類型,若值為WR,如圖5所示,寫操作,在下一節(jié)拍上升沿且hready為高電平,當(dāng)前操作為SINGLE,VIF.htrans 賦值A(chǔ)HB_TRANS_IDLE,若當(dāng)前操作為BURST 操作,VIF.htrans 賦值A(chǔ)HB_TRANS_SEQ;根據(jù)數(shù)據(jù)單元大小8 bit16 bit32 bit64 bit 操作,對地址在item.trans_len個clk 節(jié)拍上升沿,分別進(jìn)行VIF.haddr 加1 或者item.hsize*2 操作,同時,根據(jù)hsize 類型,進(jìn)行hwdata 與VIF.hwdata 賦值操作,例如,若AHB 發(fā)起字節(jié)操作,hwdata 低8 位值賦給VIF.hwdata[31:0],且hwdata 右移8 位,等待下個節(jié)拍操作,直到trans_len 設(shè)定的數(shù)據(jù)傳輸完成,在最后一個節(jié)拍VIF.htrans=AHB_TRANS_IDLE,寫操作完成.AHB 寫驅(qū)動效果圖,如圖6所示.
圖5 AHB 驅(qū)動設(shè)計(jì)流程圖
圖6 AHB 寫效果圖
表3 AHB sequence item
若值為RD,如圖5所示,讀操作,通過trans_len 判斷當(dāng)前操作,若是SINGLE 操作,在時鐘上升沿,將VIF.hrdata 值賦值給item.hrdata,VIF.htrans 賦值A(chǔ)HB_TRANS_IDLE,若BURST 操作,在時鐘上升沿,VIF.htrans 賦值A(chǔ)HB_TRANS_SEQ,地址按照數(shù)據(jù)單元值進(jìn)行疊加VIF.haddr=item.haddr + trans_len*item.hsize*2,根據(jù)trans_len的值,進(jìn)行循環(huán)操作,在最后節(jié)拍,VIF.trans=AHB_TRANS_IDLE.AHB 讀驅(qū)動效果圖,如圖7所示.
圖7 AHB 讀效果圖
AXI是高級可擴(kuò)展接口,定義了AXI 總線協(xié)議,具有5個獨(dú)立的傳輸通路(讀地址通道、讀數(shù)據(jù)通道、寫地址通道、寫數(shù)據(jù)通道、寫應(yīng)答通道),支持亂序傳輸,以點(diǎn)對點(diǎn)的方式進(jìn)行握手交互,傳輸具有高效性,一般應(yīng)用于處理器與高速設(shè)備之間的連接.本平臺設(shè)計(jì)的AXI 接口驅(qū)動,支持待測模塊地址為位寬32 位或者64 位接口了類型,支持?jǐn)?shù)據(jù)8 位、16 位、32 位、64 位single 操作,支持BURST 類型FIXED、INCR、WRAP 三種類型、支持Burst len 覆蓋0~16,支持讀寫亂序發(fā)送,符合AMBA AXI 協(xié)議規(guī)范.
根據(jù)AMBA AXI 協(xié)議規(guī)范,定義sequence item,如表4所示.根據(jù)define AXI_ADDR_WIDTH 配置地址位寬32,64 位接口類型;AXI 接口驅(qū)動設(shè)計(jì),按照操作類型分成 AXI_WR 及AXI_RD 操作.
表4 AXI sequence item
AXI_WR 寫操作,如圖8所示,首先,等待VIF.awready 拉高,完成寫地址通道握手操作;在下一拍時鐘上升拉高VIF.wvalid 及VIF.bready,通過trans_len !=0,判斷當(dāng)前操作是否SINGLE 操作,若為SINGLE,在下一節(jié)拍VIF.wvalid 拉低;若為BURST 操作,VIF.wvalid 值不變,根據(jù)burst 類型(AXI_BURST_FIXED、AXI_BURST_INCR、AXI_BURST_WRAP),選擇進(jìn)入各自邏輯,根據(jù)trans_len 設(shè)置循環(huán)操作,通過tran_len==item.trans_len–1,判斷是否為最后一次傳輸,滿足條件,當(dāng)前節(jié)拍拉高VIF.wlast,在下節(jié)拍對控制信號進(jìn)行清零,等待slave 應(yīng)答VIF.bvalid 拉高,滿足條件,當(dāng)前節(jié)拍VIF.bready=1’b0,完成寫操作,AXI 寫驅(qū)動效果圖,如圖9所示.其中,AXI 涉及的3 種驅(qū)動邏輯.
圖8 AXI_WR Driver 流程圖
圖9 AXI_WR 效果圖
1)AXI_BURST_FIXED 類型:操作訪問地址不變,驅(qū)動設(shè)計(jì)關(guān)鍵在數(shù)據(jù)選通信號設(shè)計(jì),根據(jù)item.trans_size(8 bit16 bit32 bit64 bit),若為8 bit,VIF.wstrb=(8’h1< 圖10 AXI_BURST_FIXED 流程圖 2)AXI_BURST_INCR 類型:操作地址以數(shù)據(jù)單元大小進(jìn)行累加,在fixed 類型基礎(chǔ)上增加地址設(shè)計(jì)邏輯,若為8 bit:item.axi_addr=item.axi_addr + 32’h1;若為16 bit,item.axi_addr=item.axi_addr + 32’h2;若為32 bit,item.axi_addr=item.axi_addr + 32’h4;若為64 bit,item.axi_addr=item.axi_addr + 32’h8,如圖11所示. 圖11 AXI_BURST_INCR 流程圖 3)AXI_BURST_WRAP 類型,操作地址具有回卷特點(diǎn),以item.size*item.len為wrap boundary,地址循環(huán)操作;以item.trans_size=8 bit為例,首先確認(rèn)回卷地址訪問以及起始地址wrap_axi_addr[log2(item.trans_len)–1:0]=item.axi_addr[log2(item.trans_len)–1:0],設(shè)計(jì)數(shù)據(jù)選通信號VIF.wstrb=(8’h1< 圖12 AXI_BURST_WRAP 流程圖 AXI 讀驅(qū)動效果圖,如圖13所示.AXI_RD 讀操作,配置讀地址通道,VIF.arvalid=1,配置傳輸?shù)刂?等待valid 與ready handshake,在時鐘上升沿等待VIF.arready=1,若成立,拉低VIF.arvalid,讀地址通道配置完成,開始讀數(shù)據(jù)通道配置操作,拉高VIF.rready,給入傳輸id 配置,通過VIF.rdata 讀回數(shù)據(jù),如圖14所示. 圖13 AXI_RD 效果圖 圖14 AXI_RD DRIVER 流程圖 本驗(yàn)證平臺采用UVM 驗(yàn)證方法[10]學(xué)集成了上述前3 種接口類型.經(jīng)典的驗(yàn)證平臺結(jié)構(gòu)包含,如圖15所示,需要實(shí)現(xiàn)激勵功能的driver 組件,預(yù)判DUT 輸出的reference model 組件,DUT 輸出信息收集的monitor組件,以及給出驗(yàn)證結(jié)果的scoreboard 組件. 圖15 經(jīng)典驗(yàn)證平臺結(jié)構(gòu) 為了滿足目標(biāo)芯片的驗(yàn)證工作,減少驗(yàn)證的前期準(zhǔn)備工作,通常待測模塊需要的接口數(shù)量是不定,例如測試AXI[11]轉(zhuǎn)AHB 接口的橋模塊,需要驅(qū)動多路AXI總線接口以及觀測多路AHB 總線接口,基于可擴(kuò)展性考慮,驗(yàn)證平臺定義一個通用的Agent 模板. Agent[12]是容器化概念,本平臺設(shè)計(jì)的通用Agent 模板內(nèi)部集成了monitor、driver、sequencer、以及driver 與reference model 通信隊(duì)列傳輸通道、DUT 與scoreboard 通信隊(duì)列傳輸通道、reference model 與scoreboard 通信隊(duì)列傳輸通道,Agent 定義了各個組件應(yīng)該存放的位置以及之間如何進(jìn)行通信[13],如圖16所示.對于不同總線驅(qū)動設(shè)計(jì),整體Agent[14]框架不變,新創(chuàng)建文件夾,改變關(guān)鍵字以及driver_item_dut內(nèi)容既可.對于相同總線接口的擴(kuò)展,例如原AMBA_UVM[15]平臺內(nèi)部,只定義了一路AXI_MASTER,驗(yàn)證PCIE 需要兩路AXI_MASTER,此時只需要對uvm/axi_uvc 進(jìn)行復(fù)制,uvm/axi1_uvc,更改axi1_uvc 關(guān)鍵字即可,這樣能便于靈活擴(kuò)展,實(shí)現(xiàn)驗(yàn)證環(huán)境集成兩路AXI_MASTER 接口驅(qū)動可以同時使用,滿足驗(yàn)證需求. 圖16 平臺整體結(jié)構(gòu)圖 通信隊(duì)列傳輸通道利用TLM 事務(wù)級端口設(shè)計(jì),將組件之間的通信細(xì)節(jié)(信息交換細(xì)節(jié))與通信架構(gòu)的細(xì)節(jié)分離開來,事務(wù)請求在調(diào)用通信隊(duì)列時發(fā)生.本平臺利用通用的uvm_tlm_analysis_fifo 組件,明確了數(shù)據(jù)傳輸方向,數(shù)據(jù)通過get_ap 獲取,通過put_ap傳送出去,實(shí)現(xiàn)各個組件之間的通信.在頂層tb 例化uvm_tlm_analysis_fifo 事務(wù),與通用agent 模板內(nèi)預(yù)先設(shè)計(jì)通路配合使用,實(shí)現(xiàn)各個模塊之間的通信,如圖17所示. 圖17 平臺通信隊(duì)列 uvm_tlm_analysis_fifo(xx_monitor_sequencer_item)dut2scb_mtr_fifo; Uvm_tlm_analysis_fifo(xx_monitor_sequencer_item)rm2scb_mtr_fifo; Uvm_tlm_analysis_fifo(xx_sequence_item) drv2rm_item_fifo; 平臺可擴(kuò)展性實(shí)現(xiàn)還需要定制激勵發(fā)送形式,這個過程由sequencer 實(shí)現(xiàn).可以將sequencer 看作是個瞄準(zhǔn)器,sequence item 就是要發(fā)射的物件.為了便于擴(kuò)展,本驗(yàn)證平臺建立一個通用的dut_virtual_ sequencer,內(nèi)部對各個接口sequencer 進(jìn)行例化.可以實(shí)現(xiàn)通過一個通道發(fā)送不同的sequence item 目的,如圖16所示.當(dāng)平臺接口數(shù)目需要擴(kuò)展時,可以通過在dut_virtual_seuqncer 進(jìn)行例化. class dut_virtual_sequencer extends uvm_sequencer; `uvm_component_utils(dut_virtual_sequencer) dut_apb_sequencer apb_seqr; dut_ahb_sequencer ahb_seqr; dut_axi_sequencer axi_seqr; … endclass class dut_tb extends uvm_env; `uvm_component_utils(dut_tb) dut_virtual_sequencer vsqr; … function void connect_phase(uvm_phase phase); $display("connect_phase
"); vsqr.apb_seqr=apb.common_agent.sequencer; vsqr.ahb_seqr=ahb.common_agent.sequencer; vsqr.axi_seqr=axi.common_agent.sequencer; … Endclass 本平臺是基于UVM 驗(yàn)證方法學(xué)[16–19]結(jié)合Agnet以及TLM 通信機(jī)制進(jìn)行設(shè)計(jì)的驗(yàn)證平臺,平臺的架構(gòu)本身具備穩(wěn)定性,能夠確保驗(yàn)證工作的展開;而本平臺在driver 以及monitor 設(shè)計(jì)中預(yù)留了probe 用于覆蓋率數(shù)據(jù)收集,能夠在驗(yàn)證工作完成之后,通過EDA工具對數(shù)據(jù)進(jìn)行分析,形成代碼、功能、斷言覆蓋率,用于總結(jié)子模塊的驗(yàn)證工作是否完備,若未達(dá)到驗(yàn)證需求,根據(jù)覆蓋率能夠快速準(zhǔn)確地找到未覆蓋的點(diǎn),創(chuàng)造場景激勵,實(shí)現(xiàn)全面覆蓋,最終保障驗(yàn)證的完備性. 目標(biāo)芯片系統(tǒng)內(nèi)部按照需求集成了1 MB的片上存儲設(shè)備,作為boot ram 使用.以自研模塊AXI2SRAM控制器為例進(jìn)行驗(yàn)證平臺使用說明. 對待測子模塊接口進(jìn)行分析,有兩種接口類型,一路AXI 接口[20]用于與系統(tǒng)內(nèi)部CPU 或者其它master設(shè)備進(jìn)行數(shù)據(jù)傳輸,一路slave sram 接口用于掛接存儲設(shè)備.因此,根據(jù)待測子模塊的功能特性將掛接local_mem的axi2sram 控制器整體作為被測試目標(biāo),驗(yàn)證平臺搭建如圖18所示. 本平臺具備驗(yàn)證所需的AXI 接口驅(qū)動,在平臺tb中例化連接axi_if 接口驅(qū)動和axi2sram 控制器,控制器外接local_mem,如圖18所示,完成驗(yàn)證環(huán)境構(gòu)造.根據(jù)dut 特點(diǎn),編寫reference model,驗(yàn)證覆蓋,axi 8 bit、16 bit、32 bit、64 bit single 操作,axi burst fixed、incr、wrap 操作,burst_len 覆蓋1~16;基于UVM 平臺特點(diǎn)[21,22],產(chǎn)生大量的帶約束的隨機(jī)操作,例如,以axi_test_64bit_wrap 測試場景為例,如圖19所示為激勵構(gòu)造思路,激勵axi_bit64_wrap_randomize 能夠?qū)崿F(xiàn)數(shù)據(jù)隨機(jī)、傳輸長度隨機(jī)、地址隨機(jī),交叉組合;平臺定義的通用dut_virtual_sequencer 機(jī)制利用p_sequencer.axi_seqr 能夠準(zhǔn)確的將測試激勵賦值給指定axi_if 接口,最終完成隨機(jī)測試. 圖18 axi2sram 驗(yàn)證平臺結(jié)構(gòu) 圖19 axi_test_64bit_wrap 實(shí)驗(yàn)結(jié)果,如圖20所示,本驗(yàn)證平臺定義了一個通用的記分板,用于收集DUT 接口以及reference model分別發(fā)送回Scoreboard的數(shù)據(jù),并對數(shù)據(jù)進(jìn)行分析,最終打印出比較結(jié)果.基于待測模塊結(jié)構(gòu)特點(diǎn),平臺僅應(yīng)用AMBA AXI[23]驅(qū)動,因此,記分板對比結(jié)果僅axi 接口具有有效數(shù)據(jù),dut_mtr為待測模傳輸給scb的反饋結(jié)果,rm_mtr為參考模型[24]傳輸給scb的期望結(jié)果,mch_mtr為成功對比的數(shù)目,nmch_mtr為不符合預(yù)期結(jié)果的數(shù)目;通過結(jié)果可分析,產(chǎn)生隨機(jī)次數(shù)為150028 次,其中待測目標(biāo)發(fā)送給記分板的數(shù)據(jù)數(shù)目是150028 次,參考模型發(fā)送給記分板的數(shù)據(jù)數(shù)目是150 028 次,其中,按照數(shù)值產(chǎn)生的先后數(shù)據(jù)進(jìn)行對比,對比失敗的數(shù)據(jù)數(shù)目為0,因此,認(rèn)為本次隨機(jī)場景測試結(jié)果有效.運(yùn)行波形如圖21. 圖20 axi_test_64bit_wrap 實(shí)驗(yàn)結(jié)果 圖21 axi_test_64bit_wrap 運(yùn)行波形 根據(jù)驗(yàn)證大綱,對所列驗(yàn)證點(diǎn)進(jìn)行遞歸運(yùn)行,在運(yùn)行腳本中加入define COV_WORK,開啟驗(yàn)證平臺的probe 功能,運(yùn)行腳本cov.sh 收集覆蓋率數(shù)據(jù);運(yùn)行merge.sh 最終通過Cadence 工具得到覆蓋率報告,如圖22所示,代碼覆蓋率100%,如圖23所示,功能覆蓋率100%;能夠得到結(jié)論,AXI2SRAM 控制器通過驗(yàn)證過后硬件代碼具備功能完備且可靠,達(dá)到驗(yàn)證目標(biāo),完成驗(yàn)證工作. 圖22 代碼覆蓋率 圖23 功能覆蓋率 //cov.sh 腳本 select_coverage -betf -module dut_tb_top… set_assign_scoring set_branch_scoring set_statement_scoring set_expr_scoring -all set_fsm_scoring -hold_transition set_fsm_arc_scoring set_glitch_strobe 1 ns set_toggle_strobe 1 ns set_covergroup -per_instance_default_one select_functional //merge.sh 腳本 load_test cov_work/scope/* test_order -b -e>./coverage_test_order.log union merge_code report_summary -instance -besaftd dut_tb_top…>./cov_summary.log 目前,本平臺能夠支持AMBA 總線接口[25]的DUT測試工作,在未來,隨著應(yīng)用以及芯片驗(yàn)證的需要,基于平臺結(jié)構(gòu)的可擴(kuò)展性,能夠加入其它接口協(xié)議,豐富接口類型,最終實(shí)現(xiàn)接口驅(qū)動豐富的面向全芯片模塊驗(yàn)證的UVM 平臺.1.4 驗(yàn)證平臺實(shí)現(xiàn)
2 AXI-SRAM 控制器驗(yàn)證
3 結(jié)論與展望