基于TMS320C6678的多核DSP加載模式研究
摘要:德州儀器TI推出的八核DSP芯片TMS320C6678是目前基于Keystone架構的最高性能的DSP器件,是市場上應用廣泛的C6455高端處理平臺升級的理想選擇。本文主要研究了C6678 DSP程序的各種單核加栽和多核加載的幾種模式,主要用到多核boot技術,對EMIF16 FLASH boot引導模式、主機(PCIe接口)引導模式、I2C引導模式、SRIO引導模式、網絡引導boot引導模式的方法做了研究,對TI的高性能多核架構DSP芯片的程序加載提供了有效的參考幫助。
本文引用地址:http://butianyuan.cn/article/201610/306465.htm近年來,以數字信號處理器(DSP)為基礎的通用信號處理模塊的研制受到人們的重視,DSP技術廣泛應用于雷達、通信、圖像處理等領域。隨著聲納、雷達、高清視頻以及嵌入式機器視覺等需求不斷攀升,多核DSP的應用已成為滿足發(fā)展的重要途徑。由于DSP系統穩(wěn)定運行起來后,在實際的應用中都要脫離仿真器件,實現系統的自動加載,尤其是多核DSP加載過程中,不同于多芯片間的加載方式,需要實現核間的調度,數據協同處理,因此多核啟動的加載方式需要做具體研究。
TMS320C6678 DSP是TI最新發(fā)布的一款基于KeyStone架構高性能的超長指令字(VLIW)架構芯片,片內有8個內核,每個核頻率為1.25 GHz,單核每秒高達40 GB MAC定點運算和20 GB FLOP浮點運算能力,工作速度可達10GHz。與目前應用較為廣泛的TMS320C6455 DSP,為單核1.2GHz工作,定點處理能力為9600M MAC??梢奀6678的處理能力要遠強于C6455。針對C6678多核協同處理特性,本文以自定義的雙6678板卡平臺為基礎,深入研究C6678的多種加載方式,對EMIF16 FLASH boot引導模式、I2C引導模式、SRIO引導模式、網絡引導boot模式做了分析和說明,主機(PCIe接口)引導模式、HYPERLINK引導模式和SPI引導模式的使用,本文不做說明。
1 多核加載方式論述
在C6678的片內地址空間0x20800000到0x20B1FFFF間集成了一塊128K的內部ROM程序,又叫做RBL(ROMBoot Loader),Rom code是C6678出廠時固化在Rom中的,用戶不能改變,在DSP復位或上電時實現將DSP代碼從外部接口讀入到內部高速ram。啟動過程可以大致分為主機引導和內存引導啟動,在內存引導啟動過程代碼從一個外部內存的加載初始應用程序到內部的內存來執(zhí)行。如果主機模式,啟動程序配置DSP在被動狀態(tài),等待代碼將DSP應用程序程序由外部主機寫入ram開始執(zhí)行。為適應不同的系統要求,RBL提供了幾種啟動的執(zhí)行方式。不同的引導方式如表1所示。
2 多核boot預處理
C6678有8個核,采用基于KeyStone架構的中斷控制器、核間通信寄存器以及合適的通信拓撲結構實現多核間的通信,core0為主核,其它7個核可以統一執(zhí)行相同的Romcode代碼,也可以不同,或者根據核號(即DNUM)進行不同程序的分支。對于core0來說,它主要是讀取DEVS TAT寄存器的加載模式,并根據當前加載模式進行一些接口的初始化和PLL的配置,還要根據加載模式決定是否搬移數據。對于其它的7個核來說,它們主要是掛載IPC中斷,然后進入IDLE狀態(tài)等待core0發(fā)過來的中斷。中斷一到,就跳到入口地址開始執(zhí)行程序,待加載工程總體流程如圖1所示。
代碼讀入前要根據不同的boot方式進行轉換格式,轉換工具是將各核的.out文件轉換成.dat或.bin文件,也有網絡boot時要轉換成.eth格式的文件來傳送,不同的轉化方式在各自的boot說明中詳細闡述。無論哪一種啟動方式,首先要boot起來core0之后再引導其他的從核,重點是從核在boot啟動時通過host向DSP寫了MAGIC_ADDRESS并觸發(fā)IPC中斷,DSP跳轉到BOOT_MAIGC_ADDRESS所指向的地址執(zhí)行程序。
3 C6678 EMIF flash boot
3.1 core0加載
C6678的EMIF16加載是一種直接從Nor Flash(必須掛在CE2空間:0x70000000)加載core0的模式,不需要I2CEEPROM的參與,由Rom code初始化EMIF16接口,由于EMIF16外接Nor Flash是一種XIP器件,因此直接跳到Nor Flash的起始地址處開始執(zhí)行。
為了將Nor Flash中的代碼搬移到C6678的core0的L2SRAM中,需要在core0的待加載工程中編寫引導代碼,此引導代碼的作用就是將core0的代碼按段加載到內存中,最后跳到入口地址處開始執(zhí)行。引導代碼放在L2 SRAM的前1KB空間,并燒寫到Nor Flash的前1KB空間,應用代碼放到1KB后面,生成.out文件編寫轉化工具生成.dat文件,如圖2所示Nor Flash代碼格式:
3.2 core0加載其它核
在多核加載過程中,core0是主核,corel-core7是從核,由core0加載從核,具體步驟是:
1)上電后,core0完成程序加載,并跳到入口地址開始執(zhí)行程序。
2)在core0主程序中.core0從Nor Flash中讀取corel的代碼,并按段加載到core1的L2 SRAM,然后將core1程序的入口地址寫到core1的BOOT_MAGIC_ADDRESS,最后向core1發(fā)送IPC中斷,其它核的加載過程一樣。各個核的Nor Flash空間分配如表2所示。
在將c_int00地址寫到magic address時,注意需要確保寫的是全局地址,如當程序放在L2時,c_int00地址應該轉換為0x1n8xxxxx,其中n為coreID.
4 C6678 I2C boot
C6678的I2C boot是通過I2C總線讀取掛載在總線上的eepromm中的IBL讀取參數表配置RBL加載應用程序到的指定數據塊??梢圆僮髦鱅2C模式或從模式,在主模式的DSP讀取帶有鏡像文件的I2C從設備。在從模式,DSP為I2C連接的從設備,主設備大多是另一個DSP或FPGA。
4.1 單核啟動模式
單核啟動包括:RBL、IBL、應用程序。對于I2C啟動,需要做的主要有4步:
1)編譯IBL:不同版本的IBL,其目錄下的內容有些差別。編譯IBL需要的工具有TI CGEN eompiler CGT_C6000_7.x和MinGW。
2)將編譯好的IBL寫到EEPROM中,并根據需要修改EEPROM中的IBL configuration table;
3)將應用程序寫到NOR FLASH或NAND FLASH中:
首先要編寫格式轉化工具,將CCS生成的應用程序拷貝到格式轉化工具中,將ELF格式的.out轉換成CCS格式的數據文件.dat,然后將該.dat寫到NOR FLASH或者NAND FLASH即可。
4)將撥碼開關撥到相應的啟動模式。C6678板卡NORboot的bootmode[]=101000100010000,NAND boot的bootmode[]=101010000010000。
4.2 多核啟動模式
多核啟動包括核內RBL、IBL、MAD、應用程序。
采用pre-link模式:在這種操作模式下的MAP工具為應用程序段做地址分配和調用pre-linker。這種模式適合使用在多核,是應用程序開發(fā)人員想要MAP工具協助地址分配,使多核應用之間的通用代碼共享。
MAD引導的多核裝載的過程有以下幾個步驟:
1)在啟動時候,DSP設備將運行ROM引導裝載程序,將加載并運行在i2c eeprom上載好的IBL。
2)IBL將下載MAD鏡像文件從tftp服務器(MAD文件也可以存數在板上的NOR/NAND FLASH中)到DDR中。給IBL配置了一個執(zhí)行程序的入口地址,在非MAD引導的情況下,此地址將是運行程序下載的入口地址,在MAD引導情況下,IBL配置為跳轉到MAD Lader的入口地址。
3)MAD引導裝載程序情況,裝載應用程序段,在每個配置好的核的運行地址開始執(zhí)行程序。
5 C6678網絡boot
C6678芯片網絡通過MARVEL控制芯片與外部RJ45網絡接口相連,注意增加通過MDIO對MARVEL芯片的控制,從而實現與PC的通信。建立C66 78的網絡boot主要有圖3所示過程。
DSP內RBL主要配置SerDes,SGMII,SWITCH以及多核導航器,準備通過千兆以太網接口接收boot table。這些最初的配置是通過查詢與啟動模式相關的DEVSTAT寄存器和引導網絡boot的parameter table。在啟動模式選定后,PA子系統的時鐘主要參考main PLL的參考時鐘或Ser Des參考時鐘。
1)使用arp指令查看網絡緩存區(qū)鏈接狀態(tài),arp-a檢測網口外接的設備。
2)使用hex6x.exe將out文件生成hex文件:要有*.cmd文件和hex6x.exe和*.out文件。
3)編譯生成.eth網絡boot格式文件:最好將編譯工具放到本目錄下編譯,轉化得到.eth網絡文件。
4)獲取板卡的MAC地址:正確配置板卡的撥碼開關。
配置正確以后PC就能收到板卡發(fā)出的BOOTP包(3 s周期),設置C6678的bootmode[]=010000100111000。查看板卡的MAC地址:通過wires hark抓包獲取板卡板的MAC地址。
5)傳輸boot文件:MINGW環(huán)境里面運行指令,綁定板卡的MAC地址和IP,設置板卡IP地址為192.168.1.2,PC端的地址為192.168. 1.1。文件傳輸指令pcsendpkt.exe simple.eth 192.168.1.2。發(fā)送文件到板卡內存,傳輸文件成功后可以板卡停止向PC發(fā)送MAC地址,并且可以看到PC向板卡利用UDP協議傳輸DSP Core0的代碼,Wireshark抓取網口數據包結果如圖4所示。
將Core0的代碼存到DSP的內存,此時Core0仍處于boot load的EMAC加載模式,當發(fā)送完畢代碼后,向Core0發(fā)送結束包.Core0根據EMAC加載協議,當收到該包后則從加載模式跳轉為正常模式,PC指針從指定的程序入口地址處開始運行。
6)在core0加載的程序中編寫core1到core7的加載程序,通過網口讀入coreN各個核的代碼程序到對應的RAM中,如果7個從核的代碼相同,只用讀入一次從核心代碼,加載到7個核中,0核像7個核發(fā)送IPC中斷觸發(fā)運行程序。觀察程序跳轉地址到設定的地址處,驗證程序運行結果。
6 C6678 SRIO boot
C6678支持的SRIO協議為2.1版本,link rate速率即1.25G,2.5G,3.125Gbit,使用4x模式。SRIO協議規(guī)定有兩種傳輸方式:Direct IO與Message方式。當DSP處于SRIO bootload模式時,將代碼直接寫入DSP內存并中斷.DSP立即從boot模式跳轉到正常模式,執(zhí)行加載的代碼.
1)程序文件格式的轉換:
①使用代碼轉換工具hex6x.exe轉換ELF格式的out文件成為十六進制格式的boot table文件。
②使用Bttbl2Hfile.exe,hfite2array.exe將boot table文件轉換為一個DAT格式文件。
③復制生成文件到srioboot_examplesrc,使boot image鏈接到DSP的啟動程序中。
2)DSP boot過程:DSP boot工程使用多核程序包的BIOS支持庫來初始化DDR,它首先從SRIO連接的DSP中通過SRIO將DDR的初始化程序的代碼讀入到Core0的L2RAM中,然后寫入DDR初始化引導程序的入口地址到core0的boot magic address中。在DSP上運行的RBL檢測到core0發(fā)起的入口地址,并跳轉開始啟動初始化DDR。DDR的初始化代碼在初始化DDR正確后將繼續(xù)校驗SRIO boot magicaddress,SRIO boot引導流程如圖5所示。
然后從DSP將由SRIO把應用程序引導到本地的DDR內存啟動板卡,寫入的應用程序的入口地址到core0。Core0開始啟動和打印啟動信息,并通過write_boot_magic_number()和一個IPC中斷發(fā)送到其它核心,寫入入口地址啟動其它從核,程序會跳轉到其它核上運行的寫boot地址命令開始啟動,每個核心將寫入0xBABEFACE到對應的SRIO boot magicaddress。
3)板卡SRIO boot:板卡上包含兩片C6678芯片,SRIOboot。兩片C6678通過4xlane差分線互聯,使用RS-232總線連接到PC的串行端口,板卡設置boot模式,C6678_A的bootmode []=100000101011000,C6678_B的bootmode []=100000101011100。這將設置引導板從SRIO啟動,參考時鐘頻率為312.5 MHz,數據速率3.125 GBs和lane設置4x端口,在1GHz的系統時鐘。
打開超級終端或TERA終端連接,設置波特率115200,數據8位,無奇偶校驗,停止位和流量控制,連接主機的CCSv5,加載和運行srio boot_example_evm66xxl.out程序。CCS控制臺將顯示以下消息:…[C66xx_0]Transfer boot code via SRIO successfully
超級終端會顯示以下消息:SRIO Boot Hello World Example Version 01.00.00.01;Booting Hello World image on Core0 from SRIO … … Booting Hello World image on Core7 from Core 0
7 結 論
TMS320C6678是8內核的DSP,主要實現了系統自動加載boot load程序,支持的多種加載方式:主要有EMIFFLASH加載、網絡EMAC加載,以及SRIO加載和I2C加載。多種加載方式能為實測項目應用中達到更高的效率,在數字信號處理系統中多核DSP的發(fā)展必然成為一種趨勢,多核間的有效加載更直接影響到項目的整體特性,按照該設計思路編制的boot load方法已在TMS320CC6678+FPCA的CPCI處理卡中得到應用,應用的高端處理平臺可使用于航天領域、船舶領域、無線平臺和高速圖像處理領域等,多核DSP系統能很好的復位及快速完成多核間的加載,系統運行穩(wěn)定可靠性較高。
評論