TMS320C6678 是基于TI最新 DSP 系列器件 TMS320C66x 之上,采用 8 個 1.25GHz DSP 內(nèi)核構(gòu)建而成,,并在單個器件上完美集成了 320 GMAC 與 160 GFLOP 定點(diǎn)及浮點(diǎn)性能,,從而使用戶不僅能整合多個 DSP 以縮小板級空間并降低成本,同時還能減少整體的功耗要求,,充分滿足移動網(wǎng)絡(luò)領(lǐng)域?qū)νǖ烂芏燃案哔|(zhì)量媒體服務(wù)日益增長的需求,。自2011年德州儀器推出多核DSP TMS320C6678后,以該芯片為核心的DSP開放板層出不窮,,學(xué)習(xí)這款芯片的人日益增多,。下面小編把工程師朋友在開發(fā)這款芯片的過程中遇到的問題和解決方法以問答的形式進(jìn)行了整理,希望對初學(xué)者能有所幫助,!
一.TMS320C6678 網(wǎng)絡(luò)問題
1問:用自己開發(fā)的板子,,采用的雙網(wǎng)口設(shè)計,網(wǎng)口0和網(wǎng)口1,。用TI官方給的例子只能網(wǎng)口1通信,,在例子上修改了sgmii初始化了sgmii0和sgmii1但是還是只能網(wǎng)口1通信。
答:要修改網(wǎng)絡(luò)接口管理單元的庫,,nimu,。在EMACInit_Core函數(shù)中有設(shè)置發(fā)送接口配置的信息。這個函數(shù)是隱形的被NDK調(diào)用,。所以剛開始比較難找到相應(yīng)的位置,。
2問:c6678的兩個網(wǎng)口是如何同時使用的, 能不能多個cpu core 同時使用同一個網(wǎng)口, 請賜教,。
答:C6678的EMAC是cppi器件,,即通過Navigator進(jìn)行包的管理,所以收發(fā)的數(shù)據(jù)包都是Queue來管理,,可以同時使用;需要注意的是可以配置每個發(fā)送的包由指定的port發(fā)出,,或者向兩個port廣播,。
二.TMS320C6678 關(guān)于多核編程問題
1問:目前的C++程序的段,都放到了DDR3里,,這樣的話,,我要是三個核同時運(yùn)行,豈不是對其中相同的堆棧進(jìn)行訪問嗎,?嗯,,對于所有段都放到DDR3的情況,,怎樣進(jìn)行多核編程呢?
答:在6678里面有MPAX MMU的,,可以在DDR3上給每個核都開辟一個私有的空間,,在物理地址上是連續(xù)的,但對每個核讀/寫來說地址都是相同的,。不同core的system stack及task stack必須不一樣,。
三.TMS320C6678主頻設(shè)置問題
1問:datasheet里面講TMS320C6678的主頻為1G,1.25G,,1.4G可選,,請問,如何設(shè)置TMS320C6678的主頻參數(shù)呢,?是在boot的時候作設(shè)置嗎,?與cmd文件有沒有關(guān)系呢?
答:首先要確定你的芯片是不是支持1.2G和1.4G,,不是所有的C6678都支持,。其次,主頻你是在MAINPLL里面配置的,,根據(jù)你的輸入時鐘頻率,,配置MAINPLL得到一個主頻。你可以通過boot做配置,,也可以通過boot后軟件配置,。與cmd文件沒有關(guān)聯(lián)。
四.tms320c6678 的中斷響應(yīng)
1問:在中斷響應(yīng)的過程中,,1024個系統(tǒng)事件先是通過ch_map映射到channel ,,channel再映射到主機(jī)中斷輸出,host interrupt output 是需要映射到INTC的system events然后才能掛接到dsp可以識別的12中斷上,,這里host interrupt output是256個,,INTC的system events是128個,這里host interrupt output 和system events是有什么映射關(guān)系嗎,?有的話是如何映射的,?
答:chip interrupt controller的輸入稱作host interrupt event,這些事件經(jīng)過映射可以與任意的chip INTC channel進(jìn)行映射輸出,;chip INTC channel的某些輸出事件是直接與corepac INTC的對應(yīng)輸入事件一一連接,,具體的對應(yīng)關(guān)系參考6678 data manual interrupt表格。chip intc只有特定的輸出才會core intc與的某些輸入一一對應(yīng),,所以只有將Chip INTC的輸入256個事件與這些特定的輸出映射起來,,才可以最終路由到core內(nèi)部12個中斷矢量表。
參考中斷分享:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/25518.aspx
五.TMS320C6678多核程序的運(yùn)行
1問:最近剛剛接觸多核DSP,,我想問下,,在準(zhǔn)備運(yùn)行多核程序時,,是需要將程序在每個核里面進(jìn)行l(wèi)oad吧?TI提供的多核運(yùn)行例程有哪些,,具體在MSDK下的哪個位置,?另外對于API函數(shù),在對其進(jìn)行直接調(diào)用時,,能否在不用SYS/BIOS的情況下,,使用中斷實(shí)現(xiàn)調(diào)用,例如uart通信,,直接調(diào)用API函數(shù)實(shí)現(xiàn)查詢式通信,,能否添加中斷函數(shù),調(diào)用uart的API函數(shù)實(shí)現(xiàn)中斷式通信,?
答:程序用到哪個核就需要load到哪個核里邊,,在MCSDK的以下位置有多核運(yùn)行的例程:demos\image_processing\ipc,不使用SYS/BIOS也可以使用API函數(shù),。
六.TMS320C6678系統(tǒng)設(shè)計中PCIECLK問題
1問:請問在設(shè)計基于TMS320C6678系統(tǒng)板時,,如果不用PCIE模塊,是不是可以懸空PCIECLKP和PCIECLKN引腳,,還是是分別接高電平和低電平,。
答:請參考Keystone硬件設(shè)計手冊,PCIE不用時,,PCIECLKP端接CVDD,,N端接地,不可懸空,。
七.TMS320C6678的定點(diǎn)運(yùn)算與浮點(diǎn)運(yùn)算
1問:看介紹,,TMS320C6678是定點(diǎn)與浮點(diǎn)運(yùn)算都支持的DSP芯片。現(xiàn)在自己編寫的程序中,,所使用的數(shù)據(jù)除了整型之外都是浮點(diǎn)數(shù),。想問一下,在運(yùn)算浮點(diǎn)數(shù)的時候,,DSP是否會將浮點(diǎn)數(shù)轉(zhuǎn)為定點(diǎn)數(shù),,再進(jìn)行運(yùn)算,然后再轉(zhuǎn)為浮點(diǎn)數(shù),?
答:1. 編譯器會根據(jù)客戶定義的數(shù)據(jù)類型來調(diào)用相關(guān)的匯編指令來進(jìn)行運(yùn)算,,如果直接定義的是浮點(diǎn)數(shù),那么編譯器就調(diào)用浮點(diǎn)數(shù)進(jìn)行運(yùn)算,。
2. 對于浮點(diǎn)和定點(diǎn)的選擇,如果算法是從matlab或vc繼承過來的,,那么前期直接用浮點(diǎn)數(shù)進(jìn)行運(yùn)算可以很容易的將算法在DSP上實(shí)現(xiàn),,如果后期算法成熟了,,可以進(jìn)行定點(diǎn)化,提高運(yùn)行效率,。
2問:c6678的兩個網(wǎng)口是如何同時使用的,, 能不能多個cpu core 同時使用同一個網(wǎng)口, 請賜教。
答:C6678的EMAC是cppi器件,,即通過Navigator進(jìn)行包的管理,,所以收發(fā)的數(shù)據(jù)包都是Queue來管理,可以同時使用,;需要注意的是可以配置每個發(fā)送的包由指定的port發(fā)出,,或者向兩個port廣播。
八.TMS320C6678 系統(tǒng)如何獲得CPU
1問:我們目前在使用DSP做一個算法處理服務(wù)器,,客戶端通過TCP網(wǎng)絡(luò),,按照網(wǎng)絡(luò)協(xié)議將需要處理的數(shù)據(jù)發(fā)送給DSP服務(wù)器,DSP接到數(shù)據(jù)后進(jìn)行運(yùn)算,,運(yùn)算結(jié)束后將運(yùn)算結(jié)果,,再發(fā)送給客戶端。
現(xiàn)在的現(xiàn)象是,,當(dāng)客戶端連續(xù)發(fā)送多個數(shù)據(jù)請求時,,發(fā)送到中間某一個時網(wǎng)絡(luò)會中斷,當(dāng)前算法特點(diǎn)是,,由于運(yùn)算最較大,,運(yùn)算時間比較長,暫未進(jìn)行優(yōu)化,比如30s,50s,,我們現(xiàn)在就是希望能讓程序正常運(yùn)行,,完成我們的算法要求,下一步工作再進(jìn)行優(yōu)化,,但是現(xiàn)在這個中斷的問題讓我們比較頭疼,,請專家指教。
經(jīng)過多次試驗(yàn),,最后我將我們的算法注掉,,換成了下面代碼,網(wǎng)絡(luò)是正常的,不會中斷,。
void Test(指定時間間隔)
{
獲取系統(tǒng)當(dāng)前時間1
while(1)
{
獲取系統(tǒng)當(dāng)前時間2
if(時間2-時間1 >= 指定時間間隔)
return;
}
}
我又將我們的算法換成了下面代碼,網(wǎng)絡(luò)很快就會中斷,。
void Test()
{
while(...)
{
for(...)
{
純算法,加減剩除,,專門用來耗時,。
}
}
}
從上面的現(xiàn)象看,我們猜測,,是由于算法占用CPU時間過長,,系統(tǒng)無法獲得CPU,沒有時間處理網(wǎng)絡(luò)相關(guān)信息,,造成的,各位大俠有什么好辦法,,請多多回復(fù),。
答:因?yàn)槟阍贒SP上沒有跑RTOS操作系統(tǒng),而你的代碼是一段無限的死循環(huán),,因此CPU的Cycle都消耗在你的算法代碼里了(即PC指針一直在里面,,沒有出來)。
在跑RTOS操作系統(tǒng)的情況下,,任務(wù)按照優(yōu)先級來進(jìn)行運(yùn)行,,如果網(wǎng)絡(luò)屬于更高優(yōu)先級任務(wù),那么即使算法在持續(xù)運(yùn)行,,調(diào)度器也會切換到網(wǎng)絡(luò)任務(wù),,并優(yōu)先運(yùn)行,網(wǎng)絡(luò)也就不會斷了,。
我們Enea是TI的白金合作伙伴,,在6678上提供整套的商用平臺軟件解決方案,可以解決您的問題,,有后續(xù)問題歡迎聯(lián)系我 [email protected]
我們可以在C6678上提供全套的平臺軟件,包括操作系統(tǒng),、BSP驅(qū)動、中間件和開發(fā)工具,。
OSEck RTOS 軟件平臺包括:
OSEck RTOS內(nèi)核:
1 穩(wěn)定可靠,,支持所有DSP,有20+年歷史,。
2 專門針對C66x優(yōu)化,。沒有內(nèi)存碎片的內(nèi)存管理。
3 內(nèi)存自動裁剪,,統(tǒng)一的出錯處理機(jī)制,。
4 BSP(驅(qū)動)源代碼:優(yōu)化高效的驅(qū)動,如RapidIO,,Ethernet等,。
5LINX IPC: 支持分布式系統(tǒng)的IPC.
6使多核、多DSP,、多板卡的編程好像單核編程一樣,。
7支持任何物理介質(zhì),如C66x多核之間(EDMA),,多DSP之間(RapidIO),,多板卡之間(RapidIO, Ethernet)。
8TCP/IP協(xié)議
9Package Flow 軟件加速包
10Optima開發(fā)優(yōu)化工具:CPU,內(nèi)存等性能優(yōu)化工具,。
Enea在DSP RTOS領(lǐng)域有近20年的開發(fā),、現(xiàn)場使用經(jīng)驗(yàn),針對復(fù)雜的C6678,,從2010年起專門投入30多人的專家團(tuán)隊(duì)來支持優(yōu)化6678軟件平臺,包括:
內(nèi)核,、重寫高性能驅(qū)動,、分布式支持、網(wǎng)絡(luò)加速,、優(yōu)化工具等,,現(xiàn)在以及有30多個客戶使用Enea針對6678的軟件平臺:
1. 成熟、穩(wěn)定,、可靠,、現(xiàn)場驗(yàn)證的,專門針對6678 DSP特別優(yōu)化的OSEck RTOS,。
2. 成熟穩(wěn)定的針對C6678的驅(qū)動程序,,支持包括SRIO、以太網(wǎng),、PA,、Multicore Navigator、MPAX,、中斷管理等,。
3. 跨核、跨DSP,、跨板卡系統(tǒng)的透明傳輸模塊LINX,。
Best Regards
William
九.tms320c6678電源問題
1問:在評估板上,固定1V的電流值是5A,,c6678_power_consumption_summary_rev3-2表格中固定1V所需電流值僅需1A左右,,修改后也達(dá)不到2A,這是為什么,?
答:修改表格使能所有模塊后,,在1GHz, 85度下,,CVDD對應(yīng)的電流大概在6A,,CVDD1的電流在2A左右。你的5A可能測的是CVDD對應(yīng)的值,。
十.TMS320C6678降低功耗
1問:在C6678中有PDCCMD寄存器可以選擇是否關(guān)閉C66x CorePac來降低功耗,,寄存器的地址是0x18000000,但是怎么選擇具體關(guān)閉哪個CorePac呢?難道在PDCCMD寄存器中設(shè)置關(guān)閉內(nèi)核就都關(guān)閉了嗎,?可是在提供的功耗估計表里,,8個內(nèi)核可以選擇具體使能哪個呀。那其他核的PDCCMD寄存器是什么地址呢,?
答:PDCCMD是每個core獨(dú)立的寄存器,,每個core的寄存器的地址是一樣的,只能由本核訪問,。具體的corepac power down flow在corepac user guide有說明,。在power spreadsheet中可以分corepac設(shè)置其enable/diable status,設(shè)置為disable status即將該core power down,。