摘 要: 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),,包括工作模式和空閑模式,。介紹通過ZSP500編程工具構(gòu)造SoC子系統(tǒng)級(jí)驗(yàn)證的測試?yán)?,利用生成的目?biāo)文件對(duì)模塊進(jìn)行子系統(tǒng)級(jí)驗(yàn)證。最后得出基于ZSP500的子系統(tǒng)級(jí)驗(yàn)證效率高并且實(shí)現(xià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)證過的模塊或芯片具有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)證,,它通過模擬一個(gè)芯片運(yùn)行的真實(shí)環(huán)境,,測試系統(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ù)測邏輯,,能夠提供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)證中沒有問題,,并不能確保它在整個(gè)芯片中能正常工作,,模塊級(jí)驗(yàn)證只能說明模塊本身的功能是正確的,而它與其他模塊之間的接口以及模塊與模塊之間信號(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è)被測的模塊,,而且包含被測對(duì)象所從屬的子系統(tǒng)中的所有模塊,,但是驗(yàn)證模塊仍然可以應(yīng)用模塊級(jí)驗(yàn)證中使用的總線功能模型。實(shí)現(xiàn)時(shí)主要構(gòu)造被測模塊的測試?yán)?,而?duì)子系統(tǒng)中的其他模塊進(jìn)行功能抽象,,假定它們都是功能正確的?;赯SP500的子系統(tǒng)級(jí)驗(yàn)證就是用ZSP500編程工具來構(gòu)造模塊的測試?yán)?,然后生成目?biāo)文件,在驗(yàn)證環(huán)境中利用生成的目標(biāo)文件在系統(tǒng)中運(yùn)行,,得出該模塊的仿真波形,,最后對(duì)仿真波形進(jìn)行詳細(xì)分析。
3 IDLE模塊簡介
在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í)間是用來計(jì)算空閑時(shí)間的,,是不定值,根據(jù)每次進(jìn)入IDLE的實(shí)際情況而定,。M0時(shí)間段是芯片進(jìn)入IDLE深睡眠時(shí),,用來關(guān)閉晶振和PLL時(shí)鐘的,,pllon信號(hào)在這段時(shí)間內(nèi)將被拉低。M1時(shí)間是用來打開晶振和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)上編寫測試?yán)?,生成目?biāo)文件,在驗(yàn)證環(huán)境中通過運(yùn)行命令把目標(biāo)文件和ZSP1,、ZSP2同時(shí)啟動(dòng),,把所有的芯片模塊聯(lián)系起來運(yùn)行,得到仿真波形,,通過分析仿真波形來驗(yàn)證模塊的功能是否正確,,前提是系統(tǒng)中其他模塊的功能都是正確的。
4.1 IDLE模塊的測試?yán)龢?gòu)造
TD-SCDMA系統(tǒng)子幀長度為5ms,,共6 400個(gè)chip[4],。當(dāng)IDLE模塊的計(jì)數(shù)精度為1/16chip時(shí),幀計(jì)數(shù)器從1開始計(jì)數(shù),,當(dāng)記到設(shè)置的幀長時(shí)返回為1繼續(xù)計(jì)數(shù),,同時(shí)向ZSP1/2、ARM發(fā)出幀中斷信號(hào),,同時(shí)幀號(hào)計(jì)數(shù)器加1,。為了提高效率,在驗(yàn)證時(shí)根據(jù)實(shí)際需要設(shè)置幀長計(jì)數(shù)器的值,。系統(tǒng)進(jìn)入IDLE模式之后,,根據(jù)喚醒信號(hào)到來的時(shí)刻不同產(chǎn)生不同的波形,操作過程如圖3,。
?
下面主要對(duì)H計(jì)算電路為自動(dòng)更新模式的情況進(jìn)行仿真,。主要的測試?yán)缦拢?BR>movhw?a0,0x0089
movlw?a0,,0x002C
mov??r0,,0x0cf8? ??????? //設(shè)置的幀長寄存器
??????? //framlr=0x0cf8,為了提高驗(yàn)證的
mov??r1,,0x0001 ???????? //速度幀長設(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í),
//說明H電路獲
??? bitt?r0,,1???????????? //得最新的H值,,可以通過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的命令,
??????????? //在下一幀到來時(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ì)算出來的H值
cfsr_o:幀號(hào)寄存器
framlr[15:0]和framlr_i_17bit:設(shè)置的幀長
??? framc_o[15:0]和framc_17bit:幀長計(jì)數(shù)器。從1開始,,當(dāng)它的計(jì)數(shù)值等于幀長時(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:喚醒信號(hào)
??? 從圖4~圖6所示的仿真波形來看,IDLE模塊在X時(shí)間段有wake信號(hào)到來,,芯片在X時(shí)間段結(jié)束后將直接進(jìn)入M1時(shí)間段工作,,pllon信號(hào)也不會(huì)被拉低,芯片沒有進(jìn)入睡眠狀態(tài),。如果在M0時(shí)間段有wake信號(hào)到來,,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)證方法簡單易于實(shí)現(xiàn),只需要在理解協(xié)議的基礎(chǔ)上配置寄存器,,就可以把生成的目標(biāo)文件用來得到仿真波形,。然后仔細(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.