摘 要: SoC系統(tǒng)的RTL級(jí)驗(yàn)證分為模塊級(jí)、子系統(tǒng)級(jí)、系統(tǒng)級(jí)三個(gè)階段。本文描述了高速數(shù)字信號(hào)處理器ZSP500的基本結(jié)構(gòu)和子系統(tǒng)級(jí)驗(yàn)證的具體概念,詳細(xì)介紹了3G手機(jī)芯片中的IDLE模塊的結(jié)構(gòu),包括工作模式和空閑模式。介紹通過(guò)ZSP500編程工具構(gòu)造SoC子系統(tǒng)級(jí)驗(yàn)證的測(cè)試?yán)?,利用生成的目?biāo)文件對(duì)模塊進(jìn)行子系統(tǒng)級(jí)驗(yàn)證。最后得出基于ZSP500的子系統(tǒng)級(jí)驗(yàn)證效率高并且實(shí)現(xiàn)簡(jiǎn)單的結(jié)論。
關(guān)鍵詞: RTL;ZSP500;TD-SCDMA;IDLE;子系統(tǒng)級(jí)驗(yàn)證
SoC系統(tǒng)驗(yàn)證是指對(duì)基于IP核實(shí)現(xiàn)的SoC系統(tǒng)進(jìn)行功能驗(yàn)證、靜態(tài)時(shí)序分析、功耗分析及規(guī)則檢查等,以保證正確的系統(tǒng)功能和良好的產(chǎn)品性能。在設(shè)計(jì)被綜合前,首先要對(duì)RTL描述進(jìn)行邏輯功能驗(yàn)證,其目的是為了確保驗(yàn)證過(guò)的模塊或芯片具有100%的功能正確性。通常,RTL級(jí)功能驗(yàn)證主要采用自底向上的驗(yàn)證策略,即在模塊集成到芯片以前盡可能地對(duì)每一個(gè)IP核或模塊進(jìn)行驗(yàn)證,然后再對(duì)整個(gè)芯片或系統(tǒng)進(jìn)行驗(yàn)證,因此RTL級(jí)驗(yàn)證可分為模塊級(jí)驗(yàn)證、子系統(tǒng)級(jí)驗(yàn)證和系統(tǒng)級(jí)驗(yàn)證三個(gè)階段。模塊級(jí)驗(yàn)證就是對(duì)SoC系統(tǒng)中某個(gè)模塊或IP核進(jìn)行單獨(dú)的驗(yàn)證。當(dāng)單個(gè)模塊被驗(yàn)證完畢之后,就把它集成到其從屬的子系統(tǒng)中去驗(yàn)證;子系統(tǒng)級(jí)驗(yàn)證主要側(cè)重于模塊間接口的驗(yàn)證和模塊間交互的驗(yàn)證;系統(tǒng)級(jí)驗(yàn)證就是對(duì)整個(gè)系統(tǒng)芯片進(jìn)行驗(yàn)證,它通過(guò)模擬一個(gè)芯片運(yùn)行的真實(shí)環(huán)境,測(cè)試系統(tǒng)運(yùn)行的狀況是否與設(shè)計(jì)規(guī)范中的要求相符合。本文主要論述基于ZSP500的子系統(tǒng)級(jí)驗(yàn)證實(shí)現(xiàn)。
1 ZSP500介紹
ZSP500[1]為16bit定點(diǎn)DSP,是LSI Logic家族系列中ZSP G2架構(gòu)DSP核的最新產(chǎn)品。ZSP500內(nèi)核以獨(dú)有的高效面積、極低功耗、一流代碼密度、實(shí)現(xiàn)四MAC的性能等優(yōu)點(diǎn)成為高帶寬3G頻帶處理和豐富多媒體應(yīng)用的理想選擇。ZSP500的運(yùn)行頻率為250MHz,處理能力可達(dá)1000MIps。其處理單元主要包括預(yù)取單元(PFU)、指令單元(ISU)、管線控制單元(PCU)、地址生成單元(AGU)、協(xié)處理器接口(CPI)、算術(shù)邏輯單元(ALU)等。結(jié)構(gòu)框圖如圖1所示。
?
?
如圖1可知,ZSP500具有兩個(gè)專有的AGU,可驅(qū)動(dòng)各自專有的裝載/存儲(chǔ)端口,每周內(nèi)可完成兩次裝載或兩次存儲(chǔ),或一次裝載一次存儲(chǔ)。每個(gè)數(shù)據(jù)端口寬度為32位,因此每個(gè)周期內(nèi)可完成64bit(4個(gè)字)的數(shù)據(jù)傳輸。另外PFU中還有一個(gè)跳轉(zhuǎn)預(yù)測(cè)邏輯,能夠提供zero-overhead循環(huán),產(chǎn)生高效的跳轉(zhuǎn)和調(diào)用。使用靜態(tài)分組規(guī)則決定每個(gè)時(shí)鐘周期執(zhí)行的跳轉(zhuǎn)條數(shù),在程序員邏輯上正確編寫代碼時(shí),保證多條指令并行執(zhí)行,從而提高了效率。
2 子系統(tǒng)級(jí)驗(yàn)證
當(dāng)單個(gè)模塊驗(yàn)證完畢后就可以集成到子系統(tǒng)驗(yàn)證環(huán)境中驗(yàn)證。因?yàn)槊總€(gè)模塊在模塊級(jí)驗(yàn)證中沒有問(wèn)題,并不能確保它在整個(gè)芯片中能正常工作,模塊級(jí)驗(yàn)證只能說(shuō)明模塊本身的功能是正確的,而它與其他模塊之間的接口以及模塊與模塊之間信號(hào)的相互連接是否正常仍然不能確定,所以在子系統(tǒng)級(jí)驗(yàn)證中主要側(cè)重于接口的驗(yàn)證和模塊間交互的驗(yàn)證[2]。子系統(tǒng)級(jí)驗(yàn)證平臺(tái)與模塊級(jí)驗(yàn)證平臺(tái)稍有不同,它不只是包含單個(gè)被測(cè)的模塊,而且包含被測(cè)對(duì)象所從屬的子系統(tǒng)中的所有模塊,但是驗(yàn)證模塊仍然可以應(yīng)用模塊級(jí)驗(yàn)證中使用的總線功能模型。實(shí)現(xiàn)時(shí)主要構(gòu)造被測(cè)模塊的測(cè)試?yán)鴮?duì)子系統(tǒng)中的其他模塊進(jìn)行功能抽象,假定它們都是功能正確的。基于ZSP500的子系統(tǒng)級(jí)驗(yàn)證就是用ZSP500編程工具來(lái)構(gòu)造模塊的測(cè)試?yán)?,然后生成目?biāo)文件,在驗(yàn)證環(huán)境中利用生成的目標(biāo)文件在系統(tǒng)中運(yùn)行,得出該模塊的仿真波形,最后對(duì)仿真波形進(jìn)行詳細(xì)分析。
3 IDLE模塊簡(jiǎn)介
在TD-SCDMA手機(jī)芯片中,為了最大限度地達(dá)到省電的目的,設(shè)計(jì)出了IDLE電路。在空閑模式下,可將除32kHz外的時(shí)鐘都關(guān)閉(包括PLL1/2),僅留32kHz時(shí)鐘維持IDLE模塊電路的工作[3]。本芯片共有兩種運(yùn)行模式:工作模式和空閑模式。
3.1 工作模式和空閑模式
在工作模式下,3G手機(jī)芯片的PLL1一直打開,用于產(chǎn)生系統(tǒng)時(shí)鐘;PLL2可控,當(dāng)需要48MHz時(shí)鐘時(shí)才予以打開,ARM時(shí)鐘一直有效,其他模塊(包括ZSP1,ZSP2)的時(shí)鐘可由ARM、ZSP1、ZSP2控制其關(guān)閉。
在空閑模式下又可分為淺睡眠和深睡眠兩種睡眠方式。在淺睡眠模式下,PLL1保持打開狀態(tài),產(chǎn)生系統(tǒng)時(shí)鐘,ARM以及各模塊的時(shí)鐘可選擇關(guān)閉;在深睡眠模式下,PLL1/2時(shí)鐘將被關(guān)閉,整個(gè)芯片沒有高頻工作時(shí)鐘(只保留32kHz時(shí)鐘),整個(gè)電路只有32kHz時(shí)鐘維持IDLE模塊工作。當(dāng)IDLE電路運(yùn)行結(jié)束并等待5ms之后才打開PLL時(shí)鐘電路;在PLL打開0.63ms之后,才將時(shí)鐘輸出到系統(tǒng)。
3.2 IDLE模塊結(jié)構(gòu)
IDLE電路的功能結(jié)構(gòu)如圖2,整個(gè)IDLE模塊由三個(gè)模塊構(gòu)成:F_timer主要用于幀計(jì)數(shù)、幀號(hào)計(jì)數(shù)以及產(chǎn)生幀中斷信號(hào)、DHI中斷信號(hào);H值計(jì)算電路用于提供退出IDLE時(shí)同步幀號(hào)和幀計(jì)數(shù)器值得計(jì)算參數(shù)H,H電路計(jì)算方式分為兩種:一是ARM或ZSP控制啟動(dòng)H電路計(jì)算,二是H電路自動(dòng)定時(shí)更新;IDLE時(shí)間計(jì)算電路用于控制IDLE持續(xù)的時(shí)間以及計(jì)算退出IDLE時(shí)同步的幀號(hào)和幀計(jì)數(shù)器值。
?
3.3 IDLE運(yùn)行時(shí)間的計(jì)算
在IDLE狀態(tài)中有四個(gè)時(shí)間段,分別是X、M0、M1、Y。系統(tǒng)進(jìn)入IDLE運(yùn)行的時(shí)間計(jì)算公式為:Idle time=((H*M)/N+X+Y)/f,其中f是系統(tǒng)時(shí)鐘頻率。M是M0與M1的和,是用32kHz時(shí)鐘計(jì)數(shù)的時(shí)鐘周期。X時(shí)間是用來(lái)計(jì)算空閑時(shí)間的,是不定值,根據(jù)每次進(jìn)入IDLE的實(shí)際情況而定。M0時(shí)間段是芯片進(jìn)入IDLE深睡眠時(shí),用來(lái)關(guān)閉晶振和PLL時(shí)鐘的,pllon信號(hào)在這段時(shí)間內(nèi)將被拉低。M1時(shí)間是用來(lái)打開晶振和PLL時(shí)鐘的,并且使晶振和PLL時(shí)鐘在這段時(shí)間內(nèi)穩(wěn)定。Y時(shí)間段是計(jì)算時(shí)間,計(jì)算退出IDLE時(shí)同步的幀號(hào)和幀計(jì)數(shù)器的值。H是系統(tǒng)時(shí)鐘與32kHz時(shí)鐘之間的比例關(guān)系。N是計(jì)算H系數(shù)所用的32kHz的時(shí)鐘個(gè)數(shù)。
4 基于ZSP500的IDLE模塊子系統(tǒng)級(jí)驗(yàn)證的實(shí)現(xiàn)
基于ZSP500的子系統(tǒng)級(jí)驗(yàn)證,是在ZSP500的平臺(tái)上編寫測(cè)試?yán)?,生成目?biāo)文件,在驗(yàn)證環(huán)境中通過(guò)運(yùn)行命令把目標(biāo)文件和ZSP1、ZSP2同時(shí)啟動(dòng),把所有的芯片模塊聯(lián)系起來(lái)運(yùn)行,得到仿真波形,通過(guò)分析仿真波形來(lái)驗(yàn)證模塊的功能是否正確,前提是系統(tǒng)中其他模塊的功能都是正確的。
4.1 IDLE模塊的測(cè)試?yán)龢?gòu)造
TD-SCDMA系統(tǒng)子幀長(zhǎng)度為5ms,共6 400個(gè)chip[4]。當(dāng)IDLE模塊的計(jì)數(shù)精度為1/16chip時(shí),幀計(jì)數(shù)器從1開始計(jì)數(shù),當(dāng)記到設(shè)置的幀長(zhǎng)時(shí)返回為1繼續(xù)計(jì)數(shù),同時(shí)向ZSP1/2、ARM發(fā)出幀中斷信號(hào),同時(shí)幀號(hào)計(jì)數(shù)器加1。為了提高效率,在驗(yàn)證時(shí)根據(jù)實(shí)際需要設(shè)置幀長(zhǎng)計(jì)數(shù)器的值。系統(tǒng)進(jìn)入IDLE模式之后,根據(jù)喚醒信號(hào)到來(lái)的時(shí)刻不同產(chǎn)生不同的波形,操作過(guò)程如圖3。
?
下面主要對(duì)H計(jì)算電路為自動(dòng)更新模式的情況進(jìn)行仿真。主要的測(cè)試?yán)缦拢?BR>movhw?a0,0x0089
movlw?a0,0x002C
mov??r0,0x0cf8? ??????? //設(shè)置的幀長(zhǎng)寄存器
??????? //framlr=0x0cf8,為了提高驗(yàn)證的
mov??r1,0x0001 ???????? //速度幀長(zhǎng)設(shè)置較短
std??r0,a0
movhw?a0,0x0089
movlw?a0,REG_IDL_IDM0?????? //配置M0和M1的值,
???????????????????????????? //以設(shè)置空閑的時(shí)間
mov??r0,0x8000???????????? //以及晶振和PLL的穩(wěn)定時(shí)間
mov??r1,0x0000
std??r0,a0
movhw?a0,0x0089
movlw?a0,REG_IDL_IDM1
mov??r0,0x0100
st??r0,a0
movhw?a0,0x0089
movlw?a0,0x0032 //PLL時(shí)鐘使能寄存器,
//設(shè)置為深睡眠狀態(tài)
mov??r0,0x0002
st??r0,a0
movhw?a0,0x0089 //配置空閑模式控制寄存器,
//選擇H值的更新時(shí)間和
movlw?a0,REG_IDL_IDCT //計(jì)算時(shí)間,注意
//更新時(shí)間一定要大于計(jì)算時(shí)間,
mov??r0,0x1048 //否則H值沒有計(jì)算完畢
//就自動(dòng)更新了。選擇H電路計(jì)
mov??r1,0x00?????????????? //算模式為“自動(dòng)更新模式”,
??????????????????????????? //并且選擇芯片工作模式
std??r0,a0???????????????? //為空閑模式
waitInt:
ldd?r0,a0 ?????????? //查詢IDCT第一位,當(dāng)該位變?yōu)?時(shí),
//說(shuō)明H電路獲
??? bitt?r0,1???????????? //得最新的H值,可以通過(guò)ICHR
?????????? //寄存器查看H的值
????bz?waitInt
??????
??? ?mov %loop0,100
????loop:
??????? mov?r2,0x00
?? agn0 loop
movhw?a0,0x0089
movlw?a0,REG_IDL_IDCT? //獲得H值后就可以
??????????????? //讓芯片進(jìn)入IDLE狀態(tài),發(fā)出
mov??r0,0x104d???????? //進(jìn)入IDLE的命令,
??????????? //在下一幀到來(lái)時(shí),芯片即進(jìn)
mov??r1,0x00?????????? //入IDLE狀態(tài)
std??r0,a0
4.2 IDLE模塊的系統(tǒng)級(jí)仿真波形
Clk:仿真環(huán)境提供的時(shí)鐘,并不是芯片本身的系統(tǒng)時(shí)鐘。芯片內(nèi)部的clk在IDLE狀態(tài)下應(yīng)該關(guān)閉。
Clk32K:32kHz晶振時(shí)鐘
f_int:幀中斷
ichr_o:存儲(chǔ)計(jì)算出來(lái)的H值
cfsr_o:幀號(hào)寄存器
framlr[15:0]和framlr_i_17bit:設(shè)置的幀長(zhǎng)
??? framc_o[15:0]和framc_17bit:幀長(zhǎng)計(jì)數(shù)器。從1開始,當(dāng)它的計(jì)數(shù)值等于幀長(zhǎng)時(shí),f_int產(chǎn)生幀中斷,同時(shí)幀號(hào)計(jì)數(shù)器的值加1
??? icst_o:芯片的狀態(tài)(1:處于工作狀態(tài),0:處于空閑狀態(tài))
??? pllon:PLL時(shí)鐘使能(1:關(guān)閉PLL,0:打開PLL)
??? wake:?jiǎn)拘研盘?hào)
??? 從圖4~圖6所示的仿真波形來(lái)看,IDLE模塊在X時(shí)間段有wake信號(hào)到來(lái),芯片在X時(shí)間段結(jié)束后將直接進(jìn)入M1時(shí)間段工作,pllon信號(hào)也不會(huì)被拉低,芯片沒有進(jìn)入睡眠狀態(tài)。如果在M0時(shí)間段有wake信號(hào)到來(lái),IDLE模塊將立即結(jié)束M0時(shí)間段,進(jìn)入M1時(shí)間段工作,pllon信號(hào)被拉高,并記錄下M0時(shí)間段實(shí)際運(yùn)行的時(shí)間,用于退出時(shí)的計(jì)算。如果在M1或Y時(shí)間段有wake信號(hào),IDLE模塊不影響wake信號(hào),按設(shè)定工作。具體分析時(shí)還應(yīng)該觀察幀計(jì)數(shù)器和幀號(hào)計(jì)數(shù)器在喚醒時(shí)計(jì)數(shù)的準(zhǔn)確性以及H計(jì)算電路的誤差范圍應(yīng)該在50ns以內(nèi),否則不能滿足精度要求。
?
本文所介紹的子系統(tǒng)級(jí)驗(yàn)證是在利用RVM層次化驗(yàn)證方法對(duì)IP模塊進(jìn)行了完備驗(yàn)證之后進(jìn)行的?;赯SP500的子系統(tǒng)級(jí)驗(yàn)證方法簡(jiǎn)單易于實(shí)現(xiàn),只需要在理解協(xié)議的基礎(chǔ)上配置寄存器,就可以把生成的目標(biāo)文件用來(lái)得到仿真波形。然后仔細(xì)分析仿真波形就可以驗(yàn)證模塊在整個(gè)系統(tǒng)中是否實(shí)現(xiàn)了應(yīng)有的功能。此方法不需要驗(yàn)證工程師具有豐富的編寫驗(yàn)證代碼的經(jīng)驗(yàn),而且實(shí)現(xiàn)效率高,大大縮短了SoC系統(tǒng)級(jí)驗(yàn)證的周期。
參考文獻(xiàn)
[1] 史小玲,張毓波.LSI Logic的ZSP可授權(quán)DSP內(nèi)核加速SoC設(shè)計(jì)[EB/OL].Http://dsp.blueidea.com/news/infolTo1.
asp.
[2] CHISHOLM D,BAILLIE A.SystemC Verification,Simulation & Emulation of Secure Digital IP.(Available at:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1818988).
[3] 重慶重郵信科股份有限公司.C3220芯片用戶手冊(cè).2006.
[4] 李小文.TD-SCDMA第三代移動(dòng)通信系統(tǒng)、信令及實(shí)現(xiàn)[M].北京:人民郵電出版社,2003.