基于ARM的SoC設(shè)計(jì)入門(mén)
要設(shè)計(jì)一個(gè)基于ARM的SoC,我們首先要了解一個(gè)基于ARM的SoC的結(jié)構(gòu)。圖1是一個(gè)典型的SoC的結(jié)構(gòu):
圖1
從圖1我們可以了解這個(gè)的SoC的基本構(gòu)成:
- ARM core:ARM966E
- AMBA 總線:AHB+APB
- 外設(shè)IP(Peripheral IPs):VIC(Vector Interrupt Controller), DMA, UART, RTC, SSP, WDT……
- Memory blocks:SRAM, FLASH……
- 模擬IP:ADC, PLL……
如果公司已經(jīng)決定要開(kāi)始進(jìn)行一個(gè)基于ARM的SoC的設(shè)計(jì),我們將會(huì)面臨一系列與這些基本構(gòu)成相關(guān)的問(wèn)題,在下面的篇幅中,我們嘗試討論這些問(wèn)題。
1. 我們應(yīng)該選擇那種內(nèi)核?
的確,ARM為我們提供了非常多的選擇,從下面的表-1中我們可以看到各種不同ARM內(nèi)核的不同特點(diǎn):
表1
ARM已經(jīng)給出了基本的參考意見(jiàn):
- 如果您在開(kāi)發(fā)嵌入式實(shí)時(shí)系統(tǒng),例如汽車(chē)控制、工業(yè)控制或網(wǎng)絡(luò)應(yīng)用,則應(yīng)該選擇Embedded core。
- 如果您在開(kāi)發(fā)以應(yīng)用程序?yàn)橹鞑⒁褂貌僮飨到y(tǒng),例如Linux, Palm OS, Symbian OS 或 Windows CE等等,則應(yīng)選擇Application core。
- 如果您在開(kāi)發(fā)象Smart card,SIM卡或者POS機(jī)一樣的需要安全保密的系統(tǒng),則需要選擇Secure Core。
舉個(gè)例子,假如今天我們需要設(shè)計(jì)的是一個(gè)VoIP電話使用的SoC,由于這個(gè)應(yīng)用不需要使用到操作系統(tǒng),所以我們可以考慮使用沒(méi)有MMU的內(nèi)核。另外由于網(wǎng)絡(luò)協(xié)議盞對(duì)實(shí)時(shí)性的要求較高,所以我們可以考慮ARM9系列的內(nèi)核。又由于VoIP有語(yǔ)音編解碼方面的需求,所以需要有DSP功能擴(kuò)展的內(nèi)核,所以ARM946E-S或ARM966E-S應(yīng)該是比較合適的選擇。
當(dāng)然,在實(shí)際工作中的問(wèn)題要比這個(gè)例子要復(fù)雜的多,比如在上一個(gè)例子中,我們也可以選擇ARM7TDMI內(nèi)核加一個(gè)DSP的解決方案,由ARM來(lái)完成系統(tǒng)控制以及網(wǎng)絡(luò)協(xié)議盞的處理,由單獨(dú)的DSP來(lái)完成語(yǔ)音編解碼的功能。我們需要對(duì)比不同方案的面積,功耗和性能等方面的優(yōu)缺點(diǎn)。同時(shí)我們還要考慮Cache size,TCM size,實(shí)際的內(nèi)核工作頻率等等相關(guān)問(wèn)題,所以我們需要的一個(gè)能構(gòu)快速建模的工具來(lái)幫助我們決定這些問(wèn)題?,F(xiàn)在的EDA工具為我們提供了這樣的可能,例如Synopsys®的CCSS(CoCentric System Studio)以及Axys®公司的Maxsim®等工具都可以幫助我們實(shí)現(xiàn)快速建模,并在硬件還沒(méi)有實(shí)現(xiàn)以前就可以提供一個(gè)軟件的仿真平臺(tái),讓我們?cè)谶@個(gè)平臺(tái)上進(jìn)行軟硬聯(lián)仿,評(píng)估我們?cè)O(shè)想的硬件是否滿足需求。
2.我們應(yīng)該選擇那種總線結(jié)構(gòu)?
在提供內(nèi)核給我們的同時(shí),ARM也提供了多種的總線結(jié)構(gòu)。例如ASB,AHB,AHB lite,AXI等等,在定義使用何種總線的同時(shí),我們還要評(píng)估到底怎樣的總線頻率才能滿足我們的需求,而同時(shí)不會(huì)消耗過(guò)多的功耗和片上面積。這就是我們平時(shí)常說(shuō)的Architecture Exploration的問(wèn)題。
和上一個(gè)問(wèn)題一樣,這樣的問(wèn)題也需要我們使用快速建模的工具來(lái)幫我們作決定。通常,這些工具能為我們提供抽象級(jí)別很高的TLM(Transaction Level Models)模型來(lái)幫助我們建模,常用的IP在這些工具提供的庫(kù)中都可以找到,例如各種ARM core,AHB/APB BFM(Bus Function Model),DMAC以及各種外設(shè)IP。這些工具和TLM模型提供了比RTL仿真快100~10000倍的軟硬聯(lián)仿性能,并提供系統(tǒng)的分析功能,如果系統(tǒng)架構(gòu)不能滿足需要,那么瓶頸在系統(tǒng)的什么地方,是否是內(nèi)核速度不夠?總線頻率太低?Cache太???還是中斷響應(yīng)開(kāi)銷(xiāo)太多?是否需要添加DMA?等等,諸如此類(lèi)的問(wèn)題,我們多可以在工具的幫助下解決。
當(dāng)然,機(jī)器不是萬(wàn)能的,不要指望工具能告訴你問(wèn)題在哪里并告訴你怎么解決,工具能提供給你的只是一些統(tǒng)計(jì)的數(shù)據(jù),而需要我們工程師去分析問(wèn)題出在哪里并想出解決辦法,所以熟悉AMBA體系結(jié)構(gòu)和ARM內(nèi)核是非常必要的。
3.如何選擇外設(shè)IP,使用現(xiàn)成的IP還是自己定制?
使用IP最大的優(yōu)勢(shì)是Time to Market,ARM提供了相當(dāng)多的外設(shè)IP供我們選擇。ARM提供的外設(shè)IP集(PrimeCell® IP)包括了常用的絕大部分外設(shè),我們可以參考表2:
表2:
PrimeCell®的IP一直在增加,ARM會(huì)不定期在網(wǎng)站上公布最新可用的PrimeCell® IP,詳情情參考:
http://www.arm.com/products/solutions/PrimeCellPeripherals.html
ARM除了提供這些IP的RTL之外,還提供這些外設(shè)的驅(qū)動(dòng)程序及測(cè)試程序。
使用現(xiàn)成IP方便的,但同時(shí)也帶來(lái)靈活性的限制。舉個(gè)例子,當(dāng)我們需要一個(gè)SPI總線接口的時(shí)候,我們應(yīng)該使用ARM的SSP(Synchronous Serial Interface)這個(gè)IP,但是這個(gè)IP為了提供能與Motorola SPI,TI SSP,NS Microwire都兼容的功能,犧牲了片上面積,導(dǎo)致IP復(fù)雜度增加了。如果我們的應(yīng)用僅僅是需要和Motorola SPI的標(biāo)準(zhǔn)兼容,那我們又何必需要一個(gè)這樣復(fù)雜的IP呢?
自己定制IP雖然得到了靈活性的優(yōu)勢(shì),但是確需要設(shè)計(jì)工程師完成自己的一套驗(yàn)證,同時(shí)也要為這個(gè)IP開(kāi)發(fā)驅(qū)動(dòng)程序,工作增加了許多。我的建議是具體情況具體分析,在選擇IP的時(shí)候也可以考慮第三方公司提供的基于AMBA總線標(biāo)準(zhǔn)的IP,比如Synopsys®的DesignWare® IP庫(kù)中就有很多基于AMBA標(biāo)準(zhǔn)的IP可供選擇,有時(shí)這些IP能夠提供比ARM的IP更好的靈活性并同時(shí)使用更少的片上面積和功耗。比如同樣是Memory Controller,DesignWare®的DW_memctl就比ARM的MPMC(Multi-port Memory Controller)更靈活,可以定制更多的參數(shù)。關(guān)于DesignWare® IP的詳細(xì)資料,請(qǐng)參考:
http://www.synopsys.com/products/designware/designware.html
4.自己設(shè)計(jì)的連接在AMBA總線上的IP如何驗(yàn)證?
如果我們確實(shí)要自己設(shè)計(jì)連接在AMBA總線的IP,那么熟悉AMBA的總線標(biāo)準(zhǔn)是必須的。但是設(shè)計(jì)往往不是問(wèn)題,問(wèn)題是如何驗(yàn)證我們的IP能符合所有AMBA標(biāo)準(zhǔn)定義的行為 呢?
作為一個(gè)IP的驗(yàn)證,我們常常會(huì)使用所謂的Component-Based Verification,具體做法如圖-2所示:
圖2
在圖2中我們要驗(yàn)證的是一個(gè)USB的IP,這個(gè)USB模塊直接連到AHB總線上,在我們的testbench中需要如圖中所示的各種VIP(Verification IP),如圖中所示的BFM,Bus Monitor,才能夠模擬一個(gè)USB模塊會(huì)在真實(shí)的總線結(jié)構(gòu)中會(huì)遇到的全部情況。這些VIP可以由EDA vender提供,也可以由工程師自己編寫(xiě),但通常這些VIP不會(huì)使用HDL語(yǔ)言編寫(xiě),而是使用HVL(Hardware Verification Language)語(yǔ)言。例如:e®, Vera等語(yǔ)言,當(dāng)然同時(shí)也要使用支持這些語(yǔ)言的工具,如Verisity®的Specman®。由于系統(tǒng)高速總線(通常是AHB或AXI)上的行為比較復(fù)雜,所以我建議這樣的VIP不要由工程師自己開(kāi)發(fā),而盡量使用EDA vender提供經(jīng)過(guò)了完善測(cè)試的VIP。對(duì)于低速外設(shè)總線(APB)或SPI,I2C,USB等總線,則自己開(kāi)發(fā)BFM模型和Monitor是可行的。
5. 搭建好的平臺(tái)如何驗(yàn)證?
我們選擇了適合的ARM core和總線結(jié)構(gòu),挑選了合適的IP,然后搭好了積木,TOP完成了,問(wèn)題也來(lái)了,TOP該如何驗(yàn)證?
關(guān)于SoC的驗(yàn)證確實(shí)是個(gè)大題目,特別是在以IP為基礎(chǔ)的SoC設(shè)計(jì)方法出現(xiàn)以后,在工程師的設(shè)計(jì)能力和驗(yàn)證能力中間出現(xiàn)了差距,也就是我們能在短時(shí)間內(nèi)完成設(shè)計(jì),卻需要化數(shù)倍于設(shè)計(jì)的時(shí)間和人力來(lái)驗(yàn)證。最消耗時(shí)間的工作一般來(lái)說(shuō)發(fā)生在軟硬聯(lián)仿(SW/HW Co-simulation/Co-verification)的階段。
大家知道,抽象級(jí)越高的仿真越快,反之越慢,所以如果在我們的TOP文件中所有的模塊都是RTL或Gate level的(包括ARM core),那么仿真的速度是誰(shuí)也無(wú)法接受的,所以現(xiàn)實(shí)一點(diǎn)的方法是使用ARM core的DSM(Design Simulation Model)模型。具體方法如圖-3所示:
圖3
我們?cè)趫D3中可以看到,對(duì)于內(nèi)核(Processor)和Memory Controller我們都使用了使用高級(jí)語(yǔ)言編寫(xiě)的行為模型,并在這些行為模型和真正的RTL之間使用PLI(Program Language Interface)語(yǔ)言編寫(xiě)的接口。當(dāng)然,所有別的外設(shè)IP和總線結(jié)構(gòu)都還是使用RTL(因?yàn)槲覀兙褪且?yàn)證這些RTL)。DSM模型大多由IP提供商提供,如果使用的是ARM core,當(dāng)然就由ARM提供了。軟件由ARM提供的開(kāi)發(fā)工具(ADS,RealView)編譯好,產(chǎn)生bin文件,然后儲(chǔ)存的Memory的模型中。
這時(shí)我們已經(jīng)可以開(kāi)始仿真了,ARM的DSM模型會(huì)在仿真的過(guò)程中產(chǎn)生一個(gè)log.eis文件,這個(gè)文件順序記錄了ARM core曾經(jīng)執(zhí)行過(guò)的所有指令,通過(guò)這個(gè)文件,我們就可以對(duì)軟件進(jìn)行debug了。
當(dāng)然,使用這個(gè)文件對(duì)軟件進(jìn)行debug是很痛苦的,因?yàn)楣こ處煵粌H不能中斷、跟蹤、單步執(zhí)行軟件,更不能使用Semihosting功能進(jìn)行文件操作和調(diào)試信息傳遞。如果可以使用AXD或Realview Debugger來(lái)對(duì)軟件進(jìn)行debug將給工程師帶來(lái)極大的方便,所以EDA公司也推出了相關(guān)的產(chǎn)品,例如Mentor Graphics®公司的Seamless®以及我們前面提到的Axys®公司的Maxsim®等工具都能提供與AXD或者Realview Debugger協(xié)同仿真的接口。這樣我們就可以象在目標(biāo)板上調(diào)軟件一樣在仿真平臺(tái)上調(diào)試軟件了。
在這個(gè)抽象級(jí)別的仿真速度比純RTL平臺(tái)要快一些,大約能夠做到1~100指令每秒的速度。在這樣的平臺(tái)上進(jìn)行驅(qū)動(dòng)程序和啟動(dòng)代碼驗(yàn)證是可行的,但是如果要進(jìn)行應(yīng)用程序的全功能驗(yàn)證,特別是有操作系統(tǒng)的應(yīng)用,這樣的平臺(tái)還是太慢了。比如在這樣的平臺(tái)上啟動(dòng)一個(gè)uClinux™,往往需要化數(shù)周的時(shí)間。顯然,在這樣的速度下驗(yàn)證應(yīng)用程序還是不現(xiàn)實(shí)的。
解決這個(gè)問(wèn)題我們有兩個(gè)個(gè)選擇:
(1) 使用硬件加速器
某些EDA vender會(huì)提供相關(guān)的解決方案,例如Cadence®公司的PALLADIUM® Accelerator/Emulator 和Mentor Graphics®的VStationPRO® Emulation system。這些都是能夠加速我們仿真的加速器,但是一般價(jià)格昂貴,所以對(duì)大多數(shù)的Design House來(lái)說(shuō),這個(gè)方法不但性價(jià)比不高,而且也沒(méi)有必要。
(2)使用FPGA原型進(jìn)行測(cè)試
這個(gè)方法對(duì)于大多數(shù)公司來(lái)說(shuō)是比較現(xiàn)實(shí)的。這正是我們的下一個(gè)問(wèn)題。
6. 如何完成FPGA原型驗(yàn)證?
完善的FPGA驗(yàn)證對(duì)芯片功能驗(yàn)證是非常必要的,同時(shí)正如我們?cè)谏弦粋€(gè)問(wèn)題中提到的,要完成完整的功能驗(yàn)證,沒(méi)有FPGA原型的幫助是非常困難的。具體到基于ARM的SoC,我們可以選擇以下的一些方法:
(1) 由ARM公司提供的Integrator® prototyping board
ARM提供了一套名叫Integrator®開(kāi)發(fā)套版,使工程師能夠在這個(gè)套版上搭建和設(shè)計(jì)芯片盡量一致的驗(yàn)證平臺(tái)。簡(jiǎn)單來(lái)說(shuō),ARM提供了Integrator® CT (Core Tile)來(lái)實(shí)現(xiàn)相應(yīng)的ARM Core的功能和行為;使用Integrator® LT(Logic Tile)來(lái)實(shí)現(xiàn)我們芯片中除了ARM Core以外的所有數(shù)字邏輯(Integrator® LM上有個(gè)FPGA),使用Integrator® IM(Interface Module)連接模擬器件,再把這三個(gè)板作為子板統(tǒng)統(tǒng)插接到Integrator® AP(ASIC development Platform)。這樣我們就像裝電腦一樣裝出了一個(gè)SoC。在這個(gè)平臺(tái)上,基本上所有的功能驗(yàn)證都可以做到,只要你對(duì)頻率的要求不是太高(比如在你的應(yīng)用中ARM core要跑在100MHz),這個(gè)平臺(tái)是可以完成實(shí)時(shí)測(cè)試的。
(2) 由第三方供應(yīng)商提供的FPGA驗(yàn)證平臺(tái)
例如ALDEC®公司的Riviera-IPT FPGA verification system。這個(gè)系統(tǒng)的硬件是一塊PCI接口的板卡,這個(gè)板卡的核心的一個(gè)FPGA,我們的數(shù)字邏輯還是放在這個(gè)FPGA中。同時(shí),在這個(gè)母板上可以插上不同的ARM core的Integrator® CM,這樣就完成了數(shù)字部分的搭建了。這個(gè)系統(tǒng)同樣能提供與ARM的方案差不多的性能,但是它比ARM的方案有更多一些的靈活性。
Riviera提供了一個(gè)能讓ARM core, FPGA中的已綜合邏輯和未綜合的RTL三方協(xié)同仿真的功能。這個(gè)功能的好處的我們可以復(fù)用原來(lái)在工作站環(huán)境下仿真時(shí)使用的Testbench、激勵(lì)和參考輸出,并可以把RTL象搬積木一樣一塊一塊的搬到FPGA中。也就是說(shuō),在開(kāi)始時(shí)所有RTL和Testbench都可以在PC機(jī)上進(jìn)行仿真(當(dāng)然是使用Riviera提供的仿真器),這時(shí)仿真的速度是比較慢的;一旦工程師覺(jué)得哪一塊的RTL已經(jīng)OK了,那么他就可以將這一塊RTL綜合到FPGA中,隨著越來(lái)越多的模塊進(jìn)入FPGA,仿真的速對(duì)會(huì)越來(lái)越快。最后,所有的數(shù)字邏輯都綜合到了FPGA中。在RTL仿真和FPGA之間建立交互還有一個(gè)好處是在FPGA debug的時(shí)候給我們帶來(lái)了很多方便。調(diào)試過(guò)FPGA的工程師常常有著痛苦的回憶,由于FPGA內(nèi)部的信號(hào)不可見(jiàn),F(xiàn)PGA的debug往往非常耗時(shí),Riviera在提供RTL和FPGA聯(lián)仿的同時(shí),還可以提供觀察FPGA內(nèi)部信號(hào)的功能,類(lèi)似Xilinx®的CHIPSCOPE。詳細(xì)資料請(qǐng)參照網(wǎng)頁(yè):
http://www.aldec.com/products/riviera-ipt/pages/coverification/
(3) 自己開(kāi)發(fā)FPGA原型板
當(dāng)然,如果自己設(shè)計(jì)FPGA原型板,那么工程師就會(huì)擁有最大的靈活性,自己的開(kāi)發(fā)板上可以放置任何需要的器件。選用的FPGA可以盡量貼近實(shí)際SoC的運(yùn)行速度,如果有Analog IP對(duì)應(yīng)的Analog器件,那么功能驗(yàn)證的覆蓋率將會(huì)非常小,最大程度減少投片不成功的風(fēng)險(xiǎn)。這個(gè)方案的代價(jià)是設(shè)計(jì)和調(diào)試驗(yàn)證板的時(shí)間,有時(shí)這個(gè)時(shí)間還會(huì)超過(guò)芯片設(shè)計(jì)的時(shí)間,同時(shí)也需要工程師擁有設(shè)計(jì)高速PCB的相關(guān)知識(shí)。
ARM core的測(cè)試樣片是驗(yàn)證板的核心,這個(gè)測(cè)試樣片實(shí)際上就是直接將內(nèi)核拿去流片得到的(當(dāng)然還要加上必要的PLL)。通常,ARM授權(quán)的Foundry會(huì)提供這樣的測(cè)試樣片,需要注意的是這個(gè)測(cè)試樣片是否能達(dá)到應(yīng)用所要求的速度,如果不能,那么實(shí)時(shí)測(cè)試將不可能實(shí)現(xiàn)。
另外一個(gè)需要注意的問(wèn)題是FPGA的容量。在做AMBA總線結(jié)構(gòu)FPGA綜合的時(shí)候工程師會(huì)發(fā)現(xiàn)以AMBA總線為基礎(chǔ)的RTL對(duì)FPGA資源的消耗非常驚人,有時(shí)一個(gè)150K Gate Count的數(shù)字邏輯會(huì)無(wú)法綜合到一個(gè)150萬(wàn)門(mén)的FPGA中(如Xilinx®的XC2V1500),所以在驗(yàn)證板的規(guī)劃初期一定要選擇一個(gè)留有余量的FPGA(或幾個(gè)FPGA組成陣列)。
評(píng)論