《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > AET原創(chuàng) > TMS320C6678開發(fā)十大關(guān)鍵技巧問答

TMS320C6678開發(fā)十大關(guān)鍵技巧問答

2016-12-10
作者:朱長江
來源:電子技術(shù)應(yīng)用
關(guān)鍵詞: TMS320C6678 DSP

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開放板層出不窮,,學(xué)習(xí)這款芯片的人日益增多,。下面小編把工程師朋友在開發(fā)這款芯片的過程中遇到的問題和解決方法以問答的形式進(jìn)行了整理,希望對初學(xué)者能有所幫助,!

圖片1.png

一.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里,,這樣的話,我要是三個核同時運行,,豈不是對其中相同的堆棧進(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再映射到主機中斷輸出,,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多核程序的運行

1問:最近剛剛接觸多核DSP,我想問下,,在準(zhǔn)備運行多核程序時,,是需要將程序在每個核里面進(jìn)行l(wèi)oad吧?TI提供的多核運行例程有哪些,,具體在MSDK下的哪個位置,?另外對于API函數(shù),在對其進(jìn)行直接調(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ù),,再進(jìn)行運算,,然后再轉(zhuǎn)為浮點數(shù)?

答:1. 編譯器會根據(jù)客戶定義的數(shù)據(jù)類型來調(diào)用相關(guān)的匯編指令來進(jìn)行運算,,如果直接定義的是浮點數(shù),,那么編譯器就調(diào)用浮點數(shù)進(jìn)行運算。

2. 對于浮點和定點的選擇,,如果算法是從matlab或vc繼承過來的,,那么前期直接用浮點數(shù)進(jìn)行運算可以很容易的將算法在DSP上實現(xiàn),如果后期算法成熟了,,可以進(jì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)行運算,運算結(jié)束后將運算結(jié)果,,再發(fā)送給客戶端,。

現(xiàn)在的現(xiàn)象是,,當(dāng)客戶端連續(xù)發(fā)送多個數(shù)據(jù)請求時,發(fā)送到中間某一個時網(wǎng)絡(luò)會中斷,,當(dāng)前算法特點是,,由于運算最較大,運算時間比較長,暫未進(jìn)行優(yōu)化,,比如30s,50s,,我們現(xiàn)在就是希望能讓程序正常運行,完成我們的算法要求,,下一步工作再進(jìn)行優(yōu)化,,但是現(xiàn)在這個中斷的問題讓我們比較頭疼,請專家指教,。

經(jīng)過多次試驗,,最后我將我們的算法注掉,換成了下面代碼,網(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ù),。

答:因為你在DSP上沒有跑RTOS操作系統(tǒng),而你的代碼是一段無限的死循環(huán),,因此CPU的Cycle都消耗在你的算法代碼里了(即PC指針一直在里面,,沒有出來)。

在跑RTOS操作系統(tǒng)的情況下,,任務(wù)按照優(yōu)先級來進(jìn)行運行,,如果網(wǎng)絡(luò)屬于更高優(yōu)先級任務(wù),那么即使算法在持續(xù)運行,,調(diào)度器也會切換到網(wǎng)絡(luò)任務(wù),,并優(yōu)先運行,網(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)一的出錯處理機制,。
       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多人的專家團(tuán)隊來支持優(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

[email protected]

九.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獨立的寄存器,,每個core的寄存器的地址是一樣的,只能由本核訪問,。具體的corepac power down flow在corepac user guide有說明,。在power spreadsheet中可以分corepac設(shè)置其enable/diable status,設(shè)置為disable status即將該core power down,。


如需購買,,請直接點擊,官方大促75折


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。