C6000多核常見(jiàn)問(wèn)題匯總
2014-11-21
ARM Part
1. TI Keystone系列產(chǎn)品包含哪幾類ARM的處理器?
A: TI Keystone系列產(chǎn)品按照其產(chǎn)品定位以及應(yīng)用領(lǐng)域主要采用ARMv7 Cortex-A架構(gòu)的處理器,目前主要有包含單核Cortex-A8的產(chǎn)品以及包含多核(1, 2, 4核)Cortex-A15的產(chǎn)品。
2. TI產(chǎn)品集成的ARM處理器是否有功能上的裁剪?
A: TI產(chǎn)品內(nèi)集成的ARM處理器基本保留Cortex-A架構(gòu)內(nèi)的所有特性,最新的集成Cortex-A15的KeystoneII產(chǎn)品繼承了Cortex-A架構(gòu)的所有屬性,包括安全擴(kuò)展的TrustZone以及硬件虛擬化功能的支持。
3. TI是否提供其產(chǎn)品中ARM上的編譯器或是推薦用哪種編譯器?
A: 目前TI沒(méi)有相關(guān)ARM編譯器的開(kāi)發(fā)及支持計(jì)劃,TI推薦使用開(kāi)源交叉編譯鏈Launchpad(Linaro組織下的編譯非Linux ABI的編譯器),由于ARM是這個(gè)組織的主要貢獻(xiàn)者和開(kāi)發(fā)者,所以該編譯器對(duì)于ARM部分能夠有很好的版本演進(jìn)以及優(yōu)化支持。
4. TI的CCS是否可以像編譯DSP那樣通過(guò)圖形界面編譯ARM的工程?
A: TI的CCS自v5.4.0開(kāi)始集成基于了GCCv4.7.3的Luanchpad開(kāi)源交叉編譯鏈(CCS后續(xù)版本會(huì)隨GCC版本演進(jìn)而集成更新版本), 用戶可以不需要手工編寫(xiě)Makefile而通過(guò)CCS的圖形界面來(lái)進(jìn)行代碼修改及編譯。
5. TI的CCS是否可以運(yùn)行及調(diào)試其相應(yīng)產(chǎn)品中的ARM工程?
A: TI提供其集成ARM的產(chǎn)品的軟件仿真器(Simulator),可以通過(guò)CCS進(jìn)行加載及運(yùn)行以進(jìn)行代碼仿真;并且支持在安裝相應(yīng)版本的Emulation packet及驅(qū)動(dòng)后連接TI相應(yīng)產(chǎn)品的EVM板以在硬件上運(yùn)行和調(diào)試代碼。在使用相應(yīng)仿真器之后可以實(shí)現(xiàn)軟件、硬件斷點(diǎn),全局、局部變量查看,核內(nèi)寄存器及反匯編代碼查看等類似于DSP下使用的調(diào)試手段。
Linux Part
1. TI是否有相應(yīng)產(chǎn)品中的ARM使用的Linux及U-boot版本及源碼?
A: TI提供其相應(yīng)產(chǎn)品中ARM所使用的Linux Kernel及U-boot,由于新特性支持需要以及日后功能擴(kuò)展考慮,目前提供的Linux Kernel及U-boot都是基于3.X版本的LinuxKernel且支持DTS,相關(guān)源碼發(fā)布在arago的開(kāi)源平臺(tái)上。
相關(guān)Git目錄都包含多個(gè)版本,這些版本對(duì)應(yīng)著(Keystone I)SC-MCSDK v2.X或是(Keystone II)MCSDK v3.X的相應(yīng)發(fā)布版本號(hào),這些SDK安裝之后會(huì)包含相應(yīng)版本Linux Kernel預(yù)編譯好的uImage,root file system,Image,zImage和U-Boot預(yù)編譯好的bin文件以及帶SPL的bin文件,如果用戶不需要修改的話可以直接將這些編譯好的成品文件進(jìn)行啟動(dòng)和運(yùn)行。
2. 如何使用Git下載TI的ARM相關(guān)產(chǎn)品的Linux及U-boot源碼并切換到相應(yīng)版本?
A: Git是常用的代碼開(kāi)發(fā)時(shí)使用的版本維護(hù)工具
3. 如何編譯,燒寫(xiě)及運(yùn)行TI的ARM相關(guān)產(chǎn)品的Linux及U-boot代碼?
A: 這部分操作與不同硬件平臺(tái)以及不同Linux及U-boot版本而有所不同,如果用戶使用的是TI的TCI6638K2K及66AK2H12的EVM的話,
另外,TI推薦使用Linaro組織的Linaro開(kāi)源交叉編譯鏈來(lái)編譯相應(yīng)產(chǎn)品上ARM部分Linux ABI的編譯,目前發(fā)布的版本是基于GCC4.7.3的,下載鏈接請(qǐng)見(jiàn)上述鏈接內(nèi)文檔。
4. TI是否提供其集成ARM相關(guān)產(chǎn)品的用于Linux及U-boot的驅(qū)動(dòng)?
A: 這部分TI只能提供基于TI相關(guān)產(chǎn)品EVM板上的配置及驅(qū)動(dòng),在U-boot(主要在 /arch/arm/cpu/armv7/相應(yīng)EVM或是架構(gòu),/board/ti/相應(yīng)EVM或是架構(gòu))和Linux Kernel(主要在/arch/arm/mach-相應(yīng)架構(gòu))中都包含相應(yīng)源碼,用戶可以根據(jù)自己硬件板配置進(jìn)行修改及裁剪。
PCIe Part
1. TI Keystone PCIE 有幾條Lane, 最大帶寬是多少? 最多有幾個(gè)port?
答:有2條Lane,每個(gè)Lane的最大帶寬是5Gbps,所以在2個(gè)Lane都使用的情況下,最大帶寬是10Gbps。PCIE只有1個(gè)port,即無(wú)論使用1條Lane或者2條Lane,都只能外掛一個(gè)PCIE設(shè)備。
2. TI Keystone PCIE 支持和PCI設(shè)備相連嗎?
答:支持,但由于電氣特性的差別,與PCI設(shè)備相連時(shí),需要通過(guò)橋片或者Switch進(jìn)行轉(zhuǎn)換
3. TI Keystone PCIE 支持熱插拔嗎?
答:暫時(shí)還不能支持 Hot Plug功能
4. 對(duì)于Inbound操作, 如果 TLP的 PCIE address滿足多個(gè)BAR的匹配要求, 那么inbound 規(guī)則應(yīng)該選取哪個(gè)BAR對(duì)應(yīng)的IB_BAR配置呢?
答:對(duì)于有TLP address落在多個(gè)BAR空間內(nèi)的場(chǎng)景,TI PCIE IP所選取的Inbound 翻譯的機(jī)制是選擇和TLP PCIE address 最接近的BAR地址所映射的IB Region寄存器組。這里最接近可以理解為比TLP PCIE address 小的BAR地址中的最大值。
5. 對(duì)于RC作為64bit空間配置時(shí), 是否BAR0和BAR1全作為Address space0空間?
答:是的,在這種模式下BAR0和BAR1會(huì)映射local application registers, local configuration accesses, remote configuration accesses and remote IO accesses 。因此RC不能通過(guò)BAR的映射規(guī)則來(lái)訪問(wèn)data 空間,一個(gè)變通的辦法是可以通過(guò)設(shè)置Base/limit 寄存器來(lái)訪問(wèn)data空間
6. 通過(guò)Keystone PCIE做數(shù)據(jù)訪問(wèn)時(shí)需要做Cache一致性維護(hù)嗎?
答:PCIE 協(xié)議有 Cache Snoop這一特性,但目前就Keystone PCIE 而言,如果設(shè)置PCIE data空間為可cache空間,則需要軟件來(lái)完成Cache一致性維護(hù)
7. 我測(cè)試的Keystone PCIE速度怎么達(dá)不到手冊(cè)宣稱的帶寬? TI實(shí)測(cè)的帶寬是多少?
答:請(qǐng)確保測(cè)試outbound側(cè)是通過(guò)EDMA進(jìn)行,并且選用EDMA的DBS為128bytes的通道,以滿足outbound的最大payload size為128bytes的要求。就Keystone 器件而言,采用CC0通道進(jìn)行傳輸。TI 實(shí)測(cè)的帶寬為 PCIe Read Throughput Performance 為6.45Gbps/Lane(DBS=128bytes)PCIe Write Throughput Performance 為5.91Gbps(DBS=128bytes)
8. 如果采用TI的 PCIE EVM板連接到PC的主板上, 應(yīng)該做些什么修改和操作?
答:a. 將IBL升級(jí)為MCSDK2.0GA及以上版本??梢詤⒄?span lang="EN-US">MCSDK目錄下tools\boot_loader\ibl\doc\evmc66xx-instructions.txt中的步驟,需要特別注意的是在執(zhí)行第一步“Programming IBL on the EEPROM at bus address 0x51”時(shí),應(yīng)確保tools\writer\eeprom\evmc66xxl\bin\eepromwriter_input.txt 中的“swap_data = 0”
b. 參考 tools\boot_loader\examples\pcie\docs\readme.pdf 將EVM板設(shè)置為PCIE BOOT模式
c. 將電腦主板電源關(guān)閉
d. 通過(guò)TMDXEVMPCI轉(zhuǎn)接卡將6678EVM插入到主板的PCIE插槽中,注意:此時(shí)不需要有任何外接電源供給EVM板
e. 將主板電源打開(kāi)
f. 在WINDOWS操作系統(tǒng)中,在Device manager中,您將會(huì)看到如下畫(huà)面
Misc Part
1. 將MCSDK相關(guān)例程導(dǎo)入后編譯不通過(guò),可能都有哪些原因?qū)е?span lang="EN-US">?
答:工程編譯出錯(cuò)的原因很多,下面列出兩點(diǎn)通用的原因,具體問(wèn)題還得具體分析:
a)由于工程中可能使用絕對(duì)路徑,所以工程更換路徑后需要作出相應(yīng)修改,可以通過(guò)project->properties->CCS Build->C6000 Compiler->include options下面的include search path確認(rèn)是否符合當(dāng)前工程的頭文件所在路徑;如果在工程中包含lib,則需要同時(shí)確認(rèn)修改C6000 linker->file search path中的library search path;
b) 工程中可能使用link的方式加入源文件,所以在工程路徑變更后,源文件路徑可能變化,此時(shí)需要將link的源文件從工程中刪除,然后將文件拖到工程中選擇link即可。
2. 在進(jìn)行程序性能測(cè)試時(shí), 發(fā)現(xiàn)運(yùn)行cycle很長(zhǎng),可能的原因有哪些?
答:a) 在工程中加入正確的PLL及DDR初始化配置,可以加入gel文件,也可在源文件中加入相應(yīng)初始化代碼;
b) 使能cache配置,包括配置L1/L2 cache,數(shù)據(jù)存放的memory通過(guò)配置MAR寄存器使能cache;
c) 盡可能將常用的大塊數(shù)據(jù)放在LL2,降低數(shù)據(jù)讀寫(xiě)時(shí)延;
d) 修改optimization level為-o3。
關(guān)于各函數(shù)的性能分析可以使用如下鏈接的工具,對(duì)于關(guān)鍵的算法代碼可以參考C6000優(yōu)化手冊(cè)。
3. 使用MCSDK中的IPC進(jìn)行核間通信測(cè)試時(shí), 發(fā)現(xiàn)核間通信時(shí)間很長(zhǎng),該如何解決, TI推薦的核間通信方式有哪些?
答:a) 首先確認(rèn)時(shí)延測(cè)試方法的正確性,需要確認(rèn)記錄時(shí)間點(diǎn)基準(zhǔn)一致,如在保證發(fā)送和接收core同步的基礎(chǔ)上,記錄發(fā)送和接收時(shí)間點(diǎn);
b) 核間通信的方法有很多,如shared memory、semaphore、IPC register、QMSS等,前三種方法相對(duì)簡(jiǎn)單,但是各有限制,相對(duì)來(lái)說(shuō)QMSS靈活性更高,容錯(cuò)性更高,所以QMSS是Keystone中推薦的一種常用核間通信的方式。
4. TI EVM都有IBL,這個(gè)IBL的作用是什么, 是否所有的Keystone板子設(shè)計(jì)都需要EEPROM,并且在上面燒寫(xiě)IBL呢?
答:EVM上存在IBL主要有兩個(gè)作用:a)解決C667x PG1.0芯片中PLL unlock的問(wèn)題,具體可參考Errata Advisory8,即首先進(jìn)入IBL對(duì)PLL進(jìn)行重配并lock,之后再跳轉(zhuǎn)到二級(jí)boot;b)支持Norflash、Nandflash及Ethernet二級(jí)boot。在設(shè)計(jì)板子時(shí),如果不需要二級(jí)boot,則EEPROM及IBL不是必須的;考慮到C667x PG1.0 PLL Unlock的問(wèn)題,建議在設(shè)計(jì)時(shí)帶上EEPROM。
5. Keystone 對(duì)CVDD的參考電壓設(shè)計(jì)都要求smartreflex,如果對(duì)功耗要求沒(méi)有那么嚴(yán)格,是否可以使用固定電壓供電呢?
答:從芯片的功耗、壽命及穩(wěn)定性考慮,推薦使用smartreflex。如果使用固定電壓供電,當(dāng)電壓低于smart reflex 要求的電壓,芯片不一定能正常工作。 當(dāng)電壓高于CVDD額定電壓,不僅芯片的功耗可能會(huì)急劇上升,也不排除芯片可能出現(xiàn)不可預(yù)知的問(wèn)題。
6. 對(duì)于多核編程,每個(gè)核可以運(yùn)行不同的程序,如果多核運(yùn)行同一個(gè)程序,對(duì)于不同的核該如何區(qū)分代碼和私有變量呢?
答:多核編程時(shí),對(duì)于代碼段可以將共享代碼放在共享memory,代碼中通過(guò)DNUM區(qū)分核;對(duì)于數(shù)據(jù)段,堆棧必須每個(gè)核私有,全局私有變量,可以通過(guò)MPAX單元配置達(dá)到各核看到相同的邏輯地址但是對(duì)應(yīng)不同的私有物理地址。
7. JTAG連接不上目標(biāo)板怎么辦?
A: JTAG連接不上目標(biāo)板,有可能是硬件信號(hào)有問(wèn)題,也有可能是軟件配置不對(duì)。
8. DSP死機(jī)了,有哪些手段去查找原因?
A:DSP死機(jī)主要分以下幾種場(chǎng)景:
1) 出現(xiàn)死機(jī)時(shí),仿真器不能連接上DSP,也不能通過(guò)外設(shè)對(duì)DSP進(jìn)行訪問(wèn)。
2) 出現(xiàn)死機(jī)時(shí),仿真器不能連接上DSP,但還可以通過(guò)外設(shè)(PCIe,SRIO等)對(duì)DSP進(jìn)行內(nèi)存訪問(wèn)
3) 出現(xiàn)死機(jī)時(shí),仿真器能連接上DSP進(jìn)行調(diào)試。這種情況下,通常是代碼跑飛了,DSP core并沒(méi)有跑死。
對(duì)于場(chǎng)景1, 最有效的方法還是檢查代碼,比較出錯(cuò)版本和正常版本之間的差異,找出可疑點(diǎn)進(jìn)行分析。
另外,可以并將DDR設(shè)置成self-refresh模式, 把一些調(diào)試信息記錄到DDR。 死機(jī)后,復(fù)位 DSP, 但不要重新初始化DDR,這時(shí)候通??梢詮?span lang="EN-US">DDR中讀到上一次死機(jī)記錄的信息進(jìn)行分析。
對(duì)于場(chǎng)景2和場(chǎng)景3,可以分別用外設(shè)和仿真器進(jìn)行調(diào)試信息的分析。
另外,TI的多核DSP支持trace功能,可以記錄DSP的運(yùn)行軌跡進(jìn)行錯(cuò)誤分析。