王鎮(zhèn)道,姚小姣
(湖南大學(xué)物理與微電子科學(xué)學(xué)院,湖南長(zhǎng)沙 410082)
隨著半導(dǎo)體工藝不斷突破新的極限,數(shù)字電路集成度和復(fù)雜度陡增,如何提升設(shè)計(jì)效率、縮短芯片設(shè)計(jì)周期、提高設(shè)計(jì)可靠性是IC 設(shè)計(jì)急需解決的問(wèn)題[1-2].功能驗(yàn)證能夠在IC設(shè)計(jì)RTL階段發(fā)現(xiàn)設(shè)計(jì)缺陷,是在芯片硅前流程提高設(shè)計(jì)質(zhì)量的最有效方式.在復(fù)雜的IC 設(shè)計(jì)中,設(shè)計(jì)開發(fā)時(shí)間的70%用于驗(yàn)證[3],提高驗(yàn)證效率和完備性對(duì)降低設(shè)計(jì)成本、縮短設(shè)計(jì)周期十分重要[4].微處理器可以說(shuō)是數(shù)字芯片的“頭腦”,其性能和設(shè)計(jì)質(zhì)量的好壞直接決定整個(gè)芯片的質(zhì)量[5-6],而功能驗(yàn)證是微處理器設(shè)計(jì)驗(yàn)證的重中之重[7],如何優(yōu)化微處理器的功能驗(yàn)證具有重要的現(xiàn)實(shí)意義.
模擬仿真方法是當(dāng)前微處理器功能驗(yàn)證的主要方法[8],包括功能覆蓋率驅(qū)動(dòng)的基于UVM 的RTL 驗(yàn)證[9]和FPGA硬件原型驗(yàn)證[10]等.為提高微處理器驗(yàn)證的效率和可靠性,研究者們提出了很多方案,如RTL 動(dòng)態(tài)仿真與FPGA 硬件仿真相結(jié)合[11]、分階段引入處理器局部建模[8]等.文獻(xiàn)[9]采用功能覆蓋率為導(dǎo)向的UVM 驗(yàn)證方法對(duì)DUT 進(jìn)行驗(yàn)證,實(shí)現(xiàn)了內(nèi)核驗(yàn)證所需的功能覆蓋范圍且驗(yàn)證平臺(tái)可重用性好,但仿真速度存在局限性;文獻(xiàn)[8]為提高驗(yàn)證收斂速度,在文獻(xiàn)[9]方法的基礎(chǔ)上對(duì)微處理器局部建模,在驗(yàn)證后期利用局部模型指導(dǎo)測(cè)試激勵(lì)的生成,可快速完成對(duì)未覆蓋功能點(diǎn)的驗(yàn)證,一定程度上加快了驗(yàn)證收斂,但平臺(tái)的可重用性有所下降;文獻(xiàn)[10]在FPGA上對(duì)微處理器進(jìn)行硬件原型驗(yàn)證,仿真速度比文獻(xiàn)[9]快且驗(yàn)證平臺(tái)的搭建簡(jiǎn)單,但測(cè)試用例的隨機(jī)性差、平臺(tái)的可重用性差;文獻(xiàn)[11]中RTL動(dòng)態(tài)仿真與FPGA 硬件仿真相結(jié)合的驗(yàn)證方式保證了驗(yàn)證平臺(tái)的可重用性且極大地提升了驗(yàn)證收斂速度,但FPGA 驗(yàn)證的可調(diào)試性差,對(duì)微處理器指令集的隨機(jī)驗(yàn)證不夠充分.綜上,微處理器驗(yàn)證可以采取動(dòng)態(tài)仿真與FPGA硬件驗(yàn)證相結(jié)合的方式,但需要對(duì)指令序列隨機(jī)性做改進(jìn).
本文設(shè)計(jì)了一種適用于8bit RISC架構(gòu)內(nèi)核的驗(yàn)證參考模型,模擬內(nèi)核指令集系統(tǒng)結(jié)構(gòu)來(lái)滿足指令的完全隨機(jī)組合,同時(shí)實(shí)現(xiàn)內(nèi)核存儲(chǔ)空間的可參數(shù)化配置來(lái)提高可重用性.所設(shè)計(jì)參考模型集成到文獻(xiàn)[11]所提方法的UVM 平臺(tái)中,應(yīng)用到一款8 位MCU的內(nèi)核驗(yàn)證中,很好地保證了指令序列隨機(jī)性,所有測(cè)試用例均仿真通過(guò),代碼和功能覆蓋率均達(dá)100%.
精簡(jiǎn)指令集計(jì)算機(jī)(RISC)不同于復(fù)雜指令集計(jì)算機(jī)(CISC),其指令長(zhǎng)度固定、指令數(shù)目精簡(jiǎn).基于RISC 架構(gòu)的計(jì)算機(jī)結(jié)構(gòu)更簡(jiǎn)化合理,且開發(fā)者可根據(jù)需求對(duì)指令集進(jìn)行擴(kuò)展[12].RISC-V 是基于RISC原理建立的開源指令集架構(gòu),其架構(gòu)簡(jiǎn)潔、指令集模塊化且可擴(kuò)展,是最具革命意義的開發(fā)處理器架構(gòu).RISC-V 指令集大部分指令執(zhí)行只需一個(gè)周期,配合流水線結(jié)構(gòu)的實(shí)現(xiàn)使得內(nèi)核程序執(zhí)行速度更快[13-14].可由下面公式推導(dǎo)而得:
其中,P為執(zhí)行一段程序所需的總時(shí)間;I是這段程序所包含的總指令條數(shù);CPI是每條指令執(zhí)行所需的時(shí)鐘周期數(shù)的平均值;T是內(nèi)核參考時(shí)鐘的周期.同一段程序,雖然RISC 比CISC 的總指令條數(shù)多,但CISC的CPI會(huì)比RISC大很多,且RISC的時(shí)鐘周期比CISC小,所以程序總的執(zhí)行時(shí)間RISC 更短.且RISC-V 架構(gòu)對(duì)中斷的響應(yīng)速度更快.
所研究?jī)?nèi)核是基于RISC-V 架構(gòu)的8 位MCU,綜合考慮芯片性能、成本及實(shí)際應(yīng)用需求,其指令集在RISC-V 指令集基礎(chǔ)上進(jìn)行了簡(jiǎn)化和刪減,修改后的指令集僅有44 條基礎(chǔ)指令和6 條擴(kuò)展指令,大大簡(jiǎn)化了內(nèi)核結(jié)構(gòu).圖1所示為內(nèi)核結(jié)構(gòu)原理圖.
圖1 內(nèi)核結(jié)構(gòu)原理圖Fig.1 Schematic diagram of the core′s structure
該內(nèi)核有直接尋址和寄存器間接尋址兩種訪存方式,直接尋址即通過(guò)指令譯碼出的數(shù)據(jù)存儲(chǔ)器地址進(jìn)行讀寫操作,由于指令編碼中數(shù)據(jù)存儲(chǔ)器地址是9bits,所以尋址空間為512Byte,超出此范圍的地址需通過(guò)切換PAGE 進(jìn)行訪存.寄存器間接尋址是通過(guò)內(nèi)核特殊寄存器IND/FSR 對(duì)數(shù)據(jù)存儲(chǔ)器間接訪存,具體方式如圖2所示.
圖2 間接地址訪問(wèn)Fig.2 Indirect address access
由圖2 可知,內(nèi)核從間接地址寄存器(IND)讀數(shù)據(jù),實(shí)際上是以FSR 中的值為地址去讀數(shù)據(jù)存儲(chǔ)器;向IND 寫數(shù)據(jù)實(shí)際上是以FSR 中的值為地址將數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)器相應(yīng)地址.
所設(shè)計(jì)參考模型的指令集是基于RISC-V 構(gòu)架基本指令集修改并擴(kuò)展的,包括44 條基本指令和6條擴(kuò)展指令,指令長(zhǎng)度均為16bits,按操作分為位操作類、立即數(shù)操作類、字節(jié)操作類、跳轉(zhuǎn)類和控制類五大類.表1給出了各類指令的編碼方式.
表1 各類指令編碼方式Tab.1 Various instruction encoding methods
為尋址方便,所研究?jī)?nèi)核設(shè)置了特殊功能寄存器,包括間接尋址寄存器(IND)、寄存器選擇寄存器(FSR)、狀態(tài)寄存器(STATUS)、工作寄存器(WORK)、全局中斷使能寄存器(INTE)、PAGE 選擇寄存器(BSR)和PC 加載寄存器(PCLOADL/PCLOADH).
圖3 為本文所設(shè)計(jì)的8 位內(nèi)核驗(yàn)證參考模型的結(jié)構(gòu)框圖,為簡(jiǎn)化只給出主要組成部分和數(shù)據(jù)流通路.參考模型有四個(gè)主要的組件:程序存儲(chǔ)器(flash_array)、數(shù)據(jù)存儲(chǔ)器(sram_array)、指令譯碼器(core_decoder)和運(yùn)算單元(core_alu),外部激勵(lì)給到程序存儲(chǔ)器,經(jīng)過(guò)參考模型執(zhí)行處理后改變相應(yīng)地址的數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)并發(fā)送transaction(flash_tr/sram_tr)給UVM 驗(yàn)證平臺(tái)的計(jì)分板,作為DUT 響應(yīng)數(shù)據(jù)的期望值[15],實(shí)現(xiàn)原理后續(xù)展開討論.
圖3 驗(yàn)證參考模型結(jié)構(gòu)圖Fig.3 Verification reference model structure
參考模型設(shè)計(jì)依據(jù)是內(nèi)核指令集和指令執(zhí)行流程即取指—譯碼—讀取—執(zhí)行/寫回和,整個(gè)內(nèi)部實(shí)現(xiàn)是按指令執(zhí)行四個(gè)步驟來(lái)設(shè)計(jì)的.基于System Verilog 語(yǔ)言,整個(gè)參考模型定義成一個(gè)派生自UVM基本類uvm_component 的類.在設(shè)計(jì)實(shí)現(xiàn)前,首先對(duì)PC 位寬、堆棧級(jí)數(shù)、堆棧起始地址等參數(shù)宏定義,并自定義了一個(gè)包含指令集所有指令的枚舉類型供后續(xù)類的定義使用.
參考模型的類首先對(duì)變量進(jìn)行定義,包括內(nèi)核特殊寄存器、transactions、程序和數(shù)據(jù)存儲(chǔ)器、PC 堆棧和數(shù)據(jù)堆棧以及一些中間變量;接著聲明、定義類的函數(shù),主要是圖3 中參考模型組件對(duì)應(yīng)的函數(shù):取指、譯碼、讀取、指令執(zhí)行、寫回函數(shù).基于處理器結(jié)構(gòu)原理,取指函數(shù)根據(jù)當(dāng)前pc 值從程序存儲(chǔ)器取指存入IR 寄存器,為配合跳轉(zhuǎn)指令和長(zhǎng)搬移指令執(zhí)行還會(huì)預(yù)取指pc+1和pc+2;譯碼函數(shù)依據(jù)IR寄存器的數(shù)據(jù),對(duì)照指令集編碼將16 位指令碼譯成具體指令確定后續(xù)執(zhí)行內(nèi)容;讀取函數(shù)根據(jù)譯碼所得ram_addr 訪問(wèn)數(shù)據(jù)空間獲取指令操作數(shù);指令執(zhí)行函數(shù)根據(jù)譯碼結(jié)果執(zhí)行操作或運(yùn)算,并將要寫回?cái)?shù)據(jù)空間的數(shù)據(jù)加以緩存;寫回函數(shù)依據(jù)具體指令是否需要寫回,將指令執(zhí)行后所得數(shù)據(jù)寫回相應(yīng)地址.
參考模型模擬內(nèi)核行為的整個(gè)過(guò)程是在main_phase函數(shù)中實(shí)現(xiàn)的,main_phase函數(shù)分別調(diào)用前述函數(shù),模擬內(nèi)核程序執(zhí)行過(guò)程,并參照實(shí)際內(nèi)核行為對(duì)異常情況加以處理,主要有非法指令復(fù)位和中斷響應(yīng).
通過(guò)對(duì)內(nèi)核指令集建模,參考模型實(shí)現(xiàn)了對(duì)內(nèi)核指令集系統(tǒng)的模擬,可對(duì)內(nèi)核指令集功能點(diǎn)黑盒驗(yàn)證,能夠解決以往驗(yàn)證方法指令序列隨機(jī)性差的問(wèn)題,且結(jié)合perl 腳本工具的使用,可自動(dòng)化生成指令隨機(jī)序列,減少了繁瑣編寫測(cè)試用例的工作量.
為提高可復(fù)用性,參考模型對(duì)內(nèi)核存儲(chǔ)空間及堆棧級(jí)數(shù)等關(guān)鍵指標(biāo)進(jìn)行了可參數(shù)化配置設(shè)計(jì).驗(yàn)證人員只需根據(jù)實(shí)際存儲(chǔ)空間設(shè)置參考模型的相應(yīng)參數(shù),即可對(duì)目標(biāo)類芯片不同存儲(chǔ)配置進(jìn)行驗(yàn)證.
利用UVM 的cofig_db 機(jī)制,在UVM 驗(yàn)證平臺(tái)頂層top_tb 中執(zhí)行set 操作,根據(jù)內(nèi)核存儲(chǔ)指標(biāo)配置相應(yīng)參數(shù)的值;在驗(yàn)證參考模型中執(zhí)行g(shù)et 操作,獲取相應(yīng)參數(shù)值,從而實(shí)現(xiàn)不修改參考模型即可滿足不同存儲(chǔ)空間的內(nèi)核的驗(yàn)證.
驗(yàn)證參考模型中的代碼實(shí)現(xiàn)如下所示:
本文設(shè)計(jì)的內(nèi)核驗(yàn)證參考模型已成功應(yīng)用于一款基于RISC-V 架構(gòu)的8 位MCU 芯片的內(nèi)核模塊級(jí)驗(yàn)證中,該內(nèi)核指令集包括44 條基礎(chǔ)指令和6 條擴(kuò)展指令,仿真驗(yàn)證是在Linux平臺(tái)上用System Verilog語(yǔ)言搭建的UVM 驗(yàn)證平臺(tái)上進(jìn)行,所用仿真工具是synopsys 公司的VCS,仿真波形和覆蓋率的查看使用synopsys 公司的Verdi,UVM 驗(yàn)證平臺(tái)框圖如圖4 所示[16].驗(yàn)證結(jié)果表明集成了本文所設(shè)計(jì)的內(nèi)核驗(yàn)證參考模型的UVM 仿真驗(yàn)證平臺(tái)能夠滿足對(duì)8位內(nèi)核的模塊級(jí)驗(yàn)證需求,結(jié)合受約束隨機(jī)激勵(lì)生成技術(shù)對(duì)內(nèi)核指令序列進(jìn)行了完全隨機(jī)組合驗(yàn)證.
圖4 內(nèi)核模塊級(jí)驗(yàn)證平臺(tái)框圖Fig.4 Block diagram of core′s module-level verification platform
圖5 為內(nèi)核模塊驗(yàn)證指令集隨機(jī)測(cè)試用例的仿真波形圖.
圖5 隨機(jī)用例仿真波形圖Fig.5 Random testcase′s simulation waveform
圖6 為內(nèi)核模塊驗(yàn)證用例回歸后所收集到的加過(guò)濾文件的代碼覆蓋率,過(guò)濾部分均為與設(shè)計(jì)人員確認(rèn)無(wú)法覆蓋的,由圖可知各項(xiàng)代碼覆蓋率均達(dá)100%,實(shí)現(xiàn)了內(nèi)核驗(yàn)證所需的功能覆蓋范圍.
圖6 內(nèi)核模塊代碼覆蓋率Fig.6 Code coverage of core module
圖7 為內(nèi)核模塊驗(yàn)證的功能覆蓋率,均達(dá)到100%.
圖7 內(nèi)核模塊功能覆蓋率Fig.7 Function coverage of core module
圖8 為本文所用驗(yàn)證方法和文獻(xiàn)[9]的功能覆蓋率為導(dǎo)向的驗(yàn)證方法分別對(duì)目標(biāo)內(nèi)核進(jìn)行驗(yàn)證的缺陷收斂圖示.
圖8 缺陷收斂圖示Fig.8 Defect convergence diagram
由圖8 可看到,隨著驗(yàn)證工作的推進(jìn),內(nèi)核模塊的缺陷數(shù)量均呈現(xiàn)收斂狀態(tài),但本文曲線相比文獻(xiàn)[9]的而言變化更平緩、收斂速度更快,且驗(yàn)證周期縮短了10%,說(shuō)明集成了本文所設(shè)計(jì)參考模型的UVM 驗(yàn)證平臺(tái)具有更好的魯棒性,且驗(yàn)證效率和完備性更好.
表2 給出了基于本文驗(yàn)證參考模型和部分文獻(xiàn)的方法,對(duì)同一DUT 進(jìn)行驗(yàn)證的性能對(duì)比結(jié)果,可以看出本文的驗(yàn)證方法仿真速度較快、激勵(lì)隨機(jī)性好、測(cè)試用例編寫簡(jiǎn)單,且驗(yàn)證平臺(tái)具有很好的可重用性.
表2 驗(yàn)證性能對(duì)比Tab.2 Verification performance comparison
圖9 為集成有本文驗(yàn)證內(nèi)核的電源充電管理芯片的版圖,采用華宏0.11 μm 工藝進(jìn)行流片,芯片總面積為3.4 mm2,系統(tǒng)時(shí)鐘頻率為24 MHz,流片測(cè)試結(jié)果表明,內(nèi)核模塊設(shè)計(jì)符合設(shè)計(jì)文檔要求.
圖9 芯片版圖Fig.9 Layout of the chip
本文設(shè)計(jì)了一種適用于8位RISC架構(gòu)內(nèi)核驗(yàn)證的參考模型.對(duì)內(nèi)核指令集驗(yàn)證建模提高了激勵(lì)的可隨機(jī)化程度,同時(shí)實(shí)現(xiàn)了內(nèi)核存儲(chǔ)指標(biāo)的可參數(shù)化設(shè)置,使得參考模型可直接用于擴(kuò)展或繼承類芯片的內(nèi)核驗(yàn)證.將驗(yàn)證參考模型應(yīng)用到一款8位4級(jí)流水線的MCU 芯片內(nèi)核驗(yàn)證中,驗(yàn)證結(jié)果良好,最后所驗(yàn)證內(nèi)核采用華宏0.11um 工藝成功流片,證明了參考模型對(duì)內(nèi)核驗(yàn)證的有效性.