TMS320C6678 是基于TI最新 DSP 系列器件 TMS320C66x 之上,采用 8 個 1.25GHz DSP 內(nèi)核構(gòu)建而成,并在單個器件上完美集成了 320 GMAC 與 160 GFLOP 定點及浮點性能,從而使用戶不僅能整合多個 DSP 以縮小板級空間并降低成本,同時還能減少整體的功耗要求,充分滿足移動網(wǎng)絡(luò)領(lǐng)域?qū)νǖ烂芏燃案哔|(zhì)量媒體服務(wù)日益增長的需求。自2011年德州儀器推出多核DSP TMS320C6678后,以該芯片為核心的DSP開放板層出不窮,學習這款芯片的人日益增多。下面小編把工程師朋友在開發(fā)這款芯片的過程中遇到的問題和解決方法以問答的形式進行了整理,希望對初學者能有所幫助!
一.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進行包的管理,所以收發(fā)的數(shù)據(jù)包都是Queue來管理,可以同時使用;需要注意的是可以配置每個發(fā)送的包由指定的port發(fā)出,或者向兩個port廣播。
二.TMS320C6678 關(guān)于多核編程問題
1問:目前的C++程序的段,都放到了DDR3里,這樣的話,我要是三個核同時運行,豈不是對其中相同的堆棧進行訪問嗎?嗯,對于所有段都放到DDR3的情況,怎樣進行多核編程呢?
答:在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再映射到主機中斷輸出,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進行映射輸出;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多核程序的運行
1問:最近剛剛接觸多核DSP,我想問下,在準備運行多核程序時,是需要將程序在每個核里面進行l(wèi)oad吧?TI提供的多核運行例程有哪些,具體在MSDK下的哪個位置?另外對于API函數(shù),在對其進行直接調(diào)用時,能否在不用SYS/BIOS的情況下,使用中斷實現(xiàn)調(diào)用,例如uart通信,直接調(diào)用API函數(shù)實現(xiàn)查詢式通信,能否添加中斷函數(shù),調(diào)用uart的API函數(shù)實現(xiàn)中斷式通信?
答:程序用到哪個核就需要load到哪個核里邊,在MCSDK的以下位置有多核運行的例程: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的定點運算與浮點運算
1問:看介紹,TMS320C6678是定點與浮點運算都支持的DSP芯片?,F(xiàn)在自己編寫的程序中,所使用的數(shù)據(jù)除了整型之外都是浮點數(shù)。想問一下,在運算浮點數(shù)的時候,DSP是否會將浮點數(shù)轉(zhuǎn)為定點數(shù),再進行運算,然后再轉(zhuǎn)為浮點數(shù)?
答:1. 編譯器會根據(jù)客戶定義的數(shù)據(jù)類型來調(diào)用相關(guān)的匯編指令來進行運算,如果直接定義的是浮點數(shù),那么編譯器就調(diào)用浮點數(shù)進行運算。
2. 對于浮點和定點的選擇,如果算法是從matlab或vc繼承過來的,那么前期直接用浮點數(shù)進行運算可以很容易的將算法在DSP上實現(xiàn),如果后期算法成熟了,可以進行定點化,提高運行效率。
2問:c6678的兩個網(wǎng)口是如何同時使用的, 能不能多個cpu core 同時使用同一個網(wǎng)口, 請賜教。
答:C6678的EMAC是cppi器件,即通過Navigator進行包的管理,所以收發(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ù)后進行運算,運算結(jié)束后將運算結(jié)果,再發(fā)送給客戶端。
現(xiàn)在的現(xiàn)象是,當客戶端連續(xù)發(fā)送多個數(shù)據(jù)請求時,發(fā)送到中間某一個時網(wǎng)絡(luò)會中斷,當前算法特點是,由于運算最較大,運算時間比較長,暫未進行優(yōu)化,比如30s,50s,我們現(xiàn)在就是希望能讓程序正常運行,完成我們的算法要求,下一步工作再進行優(yōu)化,但是現(xiàn)在這個中斷的問題讓我們比較頭疼,請專家指教。
經(jīng)過多次試驗,最后我將我們的算法注掉,換成了下面代碼,網(wǎng)絡(luò)是正常的,不會中斷。
void Test(指定時間間隔)
{
獲取系統(tǒng)當前時間1
while(1)
{
獲取系統(tǒ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ù)。
答:因為你在DSP上沒有跑RTOS操作系統(tǒng),而你的代碼是一段無限的死循環(huán),因此CPU的Cycle都消耗在你的算法代碼里了(即PC指針一直在里面,沒有出來)。
在跑RTOS操作系統(tǒng)的情況下,任務(wù)按照優(yōu)先級來進行運行,如果網(wǎng)絡(luò)屬于更高優(yōu)先級任務(wù),那么即使算法在持續(xù)運行,調(diào)度器也會切換到網(wǎng)絡(luò)任務(wù),并優(yōu)先運行,網(wǎng)絡(luò)也就不會斷了。
我們Enea是TI的白金合作伙伴,在6678上提供整套的商用平臺軟件解決方案,可以解決您的問題,有后續(xù)問題歡迎聯(lián)系我 william.dong@enea.com
我們可以在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)一的出錯處理機制。
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)驗,針對復(fù)雜的C6678,從2010年起專門投入30多人的專家團隊來支持優(yōu)化6678軟件平臺,包括:
內(nèi)核、重寫高性能驅(qū)動、分布式支持、網(wǎng)絡(luò)加速、優(yōu)化工具等,現(xiàn)在以及有30多個客戶使用Enea針對6678的軟件平臺:
1. 成熟、穩(wěn)定、可靠、現(xià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
William.dong@enea.com
九.tms320c6678電源問題
1問:在評估板上,固定1V的電流值是5A,c6678_power_consumption_summary_rev3-2表格中固定1V所需電流值僅需1A左右,修改后也達不到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獨立的寄存器,每個core的寄存器的地址是一樣的,只能由本核訪問。具體的corepac power down flow在corepac user guide有說明。在power spreadsheet中可以分corepac設(shè)置其enable/diable status,設(shè)置為disable status即將該core power down。