王怡林
(光電控制技術重點實驗室,河南 洛陽 471009)
摘要:針對雙DSP共享Flash進行程序加載引導的復雜問題,對基于TMS320C6414和ADSP2187的雙DSP程序加載引導方法進行了研究與設計。其中TMS320C6414作為主處理器,ADSP2187作為協(xié)處理器,共享的Flash芯片連接在TMS320C6414的EMIFB接口上,TMS320C6414通過EMFIA接口與ADSP2187的IDMA接口連接。系統(tǒng)上電后,TMS320C6414首先從Flash芯片讀出主處理程序并完成自身加載和引導,然后讀出協(xié)處理程序,發(fā)送給ADSP2187并協(xié)助其完成加載和引導。
關鍵詞:TMS320C6414;ADSP2187;共享Flash;加載;引導
中圖分類號:TP368文獻標識碼:ADOI: 10.19358/j.issn.16747720.2016.23.009
引用格式:王怡林. 雙DSP共享Flash程序加載引導設計與實現(xiàn)[J].微型機與應用,2016,35(23):31-34.
0引言
在紅外目標跟蹤領域,隨著算法復雜度的提升,運算量增長速度非常驚人,這使傳統(tǒng)的單DSP處理系統(tǒng)難以負荷, 因而對復雜的信號處理算法進行分塊并在硬件系統(tǒng)上采取多DSP 并行處理的方法勢在必行[1]。某信息處理平臺是某光電跟蹤裝置的核心,為滿足系統(tǒng)要求,該平臺以TMS320C6414和ADSP2187兩型DSP芯片為核心進行設計?;隗w積、成本等限制,需兩個DSP共用一片F(xiàn)lash完成程序存儲,并在上電時順利完成兩個DSP程序的加載和引導。本文針對這一要求進行研究,設計了一種兩個DSP共享Flash的程序加載引導方法。
1系統(tǒng)方案設計
TMS320C6414是TI公司推出的一款32位定點數(shù)字處理器,采用超長指令字結構,一個周期可同時執(zhí)行8條指令,主頻最高達600 MHz[2],內部包括64個用于配置的32位寄存器,還有6個計算單元(ALU),2個乘法器。接口方面具備2個外部存儲接口,3個多通道緩沖串行接口, 1個主機接口和通用I/O接口等,還具備EDMA功能。
ADSP2187是ADI公司的ADSP系列的定點數(shù)字信號處理器[3],內含3個相互獨立的計算單元,即ALU、MAC和桶形移位器。除此之外,還有1個程序控制器(PC),1個可編程的定時器,2個數(shù)據(jù)地址產生器,以及32 K×24 bit的程序存儲空間和32 K×16 bit的數(shù)據(jù)存儲空間。對外接口方面包括1個可編程的Flash I/O,2個串口,1個16 bit的內部DMA接口以及1 B DMA接口(BDMA)。
基于兩個處理器的特點,本設計將Flash芯片連接在TMS320C6414上,程序的加載和引導由TMS320C6414主導完成。首先對TMS320C6414 的啟動模式進行配置。TMS320C6414 的啟動模式由其上電時的EMIFB接口地址總線中的BEA[15:14](BOOTMODE[1:0])的連接電平決定, 在復位期間檢測這兩位的高低電平來決定TMS320C6414的引導模式。本設計將TMS320C6414的引導模式配置成使用默認的8位ROM時序。TMS320C6414完成自身的程序引導后,通過IDMA接口向ADSP2187發(fā)送其程序并控制對方完成引導[4]。兩個處理器及存儲器連接關系如圖1所示。
2接口電路設計
要通過TMS320C6414來完成ADSP2187的程序加載和引導,首先要使兩者之間建立通信連接,由于兩個處理器架構以及對外接口的不同,需要對兩個處理器的通信接口進行匹配性設計,以滿足數(shù)據(jù)傳輸需求。
TMS320C6414的對外通信接口主要有兩個EMIF接口、兩個McBSP接口、一個HPI接口以及通用I/O等其他接口。ADSP2187主要的對外數(shù)據(jù)通信接口是IDMA接口,且可通過IDMA完成程序加載和引導。根據(jù)這兩個處理器接口的特點,基于EMIFA接口和IDMA接口來進行兩個處理器的數(shù)據(jù)通信接口電路設計。
EMIF接口全稱為外部存儲器接口(External Memory Interface),是C6000系列DSP主要的外部存儲器擴展接口,最高數(shù)據(jù)吞吐率可達1 200 MB/s??梢耘c目前幾乎所有的存儲器類型直接連接,包括SBSRAM、SDRAM、SRAM、FIFO等以及其他可以共享內部存儲空間的設備。
相比C6000系列其他DSP型號,TMS320C6414的EMIFA接口具有以下特點:
?。?)總線寬度達64 bit。
?。?)接口時鐘可以基于其輸入時鐘在片內產生,有3種方案:1/6×CPU時鐘、1/4×CPU時鐘和外部輸入時鐘。
(3)具有一個可編程同步存儲器控制器。
(4)具備PDT信號,可支持外部設備之間的數(shù)據(jù)傳輸。
ADSP2187的IDMA接口實質上是一個并行的I/O接口,當ADSP2187作為從機時,主機可通過該接口讀/寫ADSP2187內部的存儲器和寄存器。IDMA接口具有復用的16 bit數(shù)據(jù)/地址總線,支持對其內部16 bit數(shù)據(jù)存儲器和24 bit程序存儲器的訪問,對IDMA的訪問是完全異步的。
IDMA接口的控制信號包括選擇信號(IS#)、讀取信號(IRD#)、寫入信號(IWR#)和地址鎖存信號(IAL#)。當選擇信號和地址鎖存信號有效時,ADSP2187將總線上的數(shù)據(jù)當做地址寫入IDMA控制寄存器,當選擇信號和讀取信號有效時,ADSP2187將控制寄存器內地址所指存儲單元的內容輸出到總線上,此過程構成一個完整的IDMA接口讀取操作。寫入操作和讀取操作的地址傳輸方式一致,完成地址傳輸后,將選擇信號和寫入信號置為有效,待寫入數(shù)據(jù)發(fā)送到總線上,ADSP2187將總線上的數(shù)據(jù)寫入IDMA控制寄存器內地址所指存儲單元。
本設計將EMIFA的CE2空間設成16 bit異步接口,數(shù)據(jù)總線ED15:0與IDMA總線IAD15:0對應連接,EMIFA地址總線EA6和EA7求異或后再與片選信號CE2求或后作為IDMA接口的選擇信號(IS#),EA6求非后與EA7、CE2以及EMIFA的讀取信號ARW共4個信號一起求與作為IDMA接口的讀取信號(IRD#)輸入, EA6求非后與EA7、CE2以及EMIFA寫入信號AWE共4個信號一起求作為IDMA接口的寫入信號(IWR#)輸入, EA7和EA6求非、ARE非、AEW非、CE2非共5個信號求與后作為地址鎖存信號(IAL#)輸入。CPLD具有編程靈活等優(yōu)點[5],本設計中采用CPLD完成譯碼。ADSP2187的IDMA接口輸入信號運算關系如下:
在TMS320C6414看來,ADSP2187控制寄存器的映射地址是0xA000 00A0,數(shù)據(jù)寄存器的映射地址是0xA000 0050。
值得說明的是,僅僅完成相關信號的譯碼和地址映射還不夠,還需要對EMIFA和IDMA進行時序匹配。對于IDMA來說,有短周期和長周期兩種讀/寫方式選擇,后者需要主機檢測IACK信號的狀態(tài)來判斷IDMA是否準備好。本設計選用短周期讀/寫操作,其寫入操作的時序圖如圖2所示。
本設計中,EMIFA時鐘設置為1/6×CPU時鐘,CPU時鐘為480 MHz,則EMIFA時鐘為120 MHz。EMIFA接口CE2空間的時序由寄存器CE2CTL控制,主要包括建立時間、處罰時間、保持時間三項參數(shù)設置,三項參數(shù)均以時鐘周期數(shù)來表示。
根據(jù)圖2中IDMA接口的時序要求,建立時間、觸發(fā)時間和保持時間的總和應大于tIWP,換算后3項參數(shù)的和應大于等于2,同時保持時間應大于tIDH,將CE2CTL相應參數(shù)設為1即可。
TMS320C6414向ADSP2187寫入數(shù)據(jù)的流程為:先向地址0xA000 00A0寫存儲地址,然后向0xA000 0050寫入待寫數(shù)據(jù)即可完成寫操作。讀操作的時序匹配方法和流程與寫操作相似,不再詳述。
3TMS320C6414加載引導方法
當光電跟蹤裝置上電后,TMS320C6414 進入復位狀態(tài),完成復位后, 其只能先將1 KB大小的程序代碼自動加載到內部RAM。通常情況下,光電跟蹤裝置的信息處理程序規(guī)模遠遠大于1 KB,為了完成整個程序的加載和引導,必須編寫一段程序搬移代碼來將整個信息處理程序搬運到內部RAM,并且搬移低代碼的大小不能超過1 KB,按照TMS320C6414用戶手冊的要求,須用匯編語言完成,搬移程序在完成了信息處理程序的搬運后,須將PC指針指向信息處理程序的入口,自此信息處理程序才能開始運行,進而完成目標識別和跟蹤任務。完整的搬移程序的代碼及注釋如下:
…………;
//相關寄存器初始化工作結束
S_R .setb4
D_R .seta4
//將程序長度、RAM首地址、Flash首地址的存儲首地址拷貝進寄存器A3
mvklcopy_table, A3
mvkhcopy_table, A3
//程序加載開始
copy_section_top:
ldw *A3++, B0//將程序長度加載到B0
ldw *A3++, A4//將運行首地址加載A4
ldw *A3++, B4//將程序在Flash中的首地址加載到B4
nop 2
?。?b0]bcopy_done//判斷拷貝是否完成
nop5
shr B0,2,B1//將B0除以4后加載到B1
//開始進行程序加載
copy_loop:
ldw*S_R++,B5
|| mvB1, A1//待拷貝長度加載進A1
|| subB1, 1, B1//長度減1
//將程序從Flash讀入B5
?。跙1]ldw*S_R++,B5
||[B1]subB1, 1, B1
//將B5中的程序加載到RAM中
stw B5,*D_R++
||sub A1, 1, A1
?。跘1]stwB5,*D_R++
||[A1]subA1, 1, A1
[B1]bcopy_loop//判斷是否完成加載
nop5
//跳轉到開始處進行下一段的加載
bcopy_section_top
nop5
//加載完成,對相應的寄存器進行設置
copy_done:
mvkl0x01840000,A4
mvkl0x0300,B4
mvkh0x01840000,A4
mvkh0x0300,B4
stw B4,*A4
nop 5
mvkl .S2 _c_int00, B0
mvkh .S2 _c_int00, B0
B.S2 B0
nop 5
//各段長度、RAM首地址、Flash首地址設置
copy_table:
; .text//代碼段長度
.word 0x00029220
.word 0x00000400
.word 0x64010400
; .cinit//變量段
.word 0x00002dcc
.word 0x000460e0
.word 0x64039620
.word 0x0//所有段結束標志
4ADSP2187加載引導方法
ADSP2187支持從片外ROM和IDMA接口引導兩種方式,非常方便用戶設計系統(tǒng)的需要[6]。本文所述信息處理機采用從IDMA接口引導的方式實現(xiàn)預處理程序的加載引導,ADSP2187上電后,從IDMA接口接收主處理器TMS320C6414傳輸?shù)某绦虿?zhí)行。
ADSP2187函數(shù)根據(jù)在存儲器中所處的位置分為函數(shù)段、數(shù)據(jù)段,函數(shù)段和數(shù)據(jù)段又根據(jù)所處的OVERLAY頁面再分為不同的段[7]。每段前3個數(shù)據(jù)標示了該段的數(shù)據(jù)長度、該段在存儲區(qū)域的首地址和該段所處的頁面。該段數(shù)據(jù)處于函數(shù)區(qū)還是數(shù)據(jù)區(qū)由首地址的14位標示。
TMS320C6414首先對ADSP2187進行復位操作,然后從Flash中讀取該段數(shù)據(jù)的函數(shù)區(qū)字節(jié)數(shù)、函數(shù)區(qū)首地址和函數(shù)段所處的頁面,再從Flash中搬移1 B,通過IDMA口寫到ADSP2187的函數(shù)區(qū),寫完后再從該函數(shù)區(qū)地址讀出數(shù)據(jù)并與所寫的數(shù)據(jù)進行比較,如果不相等則重新寫該地址和校對,循環(huán)TryCycle次退出;如果相等,則進行下一個字節(jié)的傳輸,直到該段數(shù)據(jù)全部傳輸?shù)紸DSP2187中。同樣地,TMS320C6414再把其余數(shù)據(jù)通過IDMA口傳輸?shù)紸DSP2187中,最后在ADSP2187的0地址寫數(shù)啟動ADSP2187運行,并以此判斷整個循環(huán)的結束。因為ADSP2187函數(shù)區(qū)數(shù)據(jù)為24 bit,因此對函數(shù)區(qū)數(shù)據(jù)讀寫時需要同時讀取2 B數(shù)據(jù)。
對ADSP2187芯片IDMA接口的讀寫,通過對IDMA的控制寄存器和OVERLAY寄存器的操作來實現(xiàn)。寄存器各位定義如圖3、圖4所示。
對ADSP2187IDMA口的操作需要先對IDMA口控制寄存器和OVERLAY寄存器進行配置,說明需要讀取的數(shù)據(jù)是程序區(qū)還是數(shù)據(jù)區(qū)、在哪個頁面中、地址為多少,然后對總線進行讀寫操作,從而實現(xiàn)對ADSP2187內部存儲區(qū)的讀寫。
得益于接口電路的作用,TMS320C6414可以通過對地址0x03200000的操作來實現(xiàn)對IDMA控制寄存器和OVERLAY寄存器的配置,當寫到該地址的數(shù)據(jù)最高位為1時,對OVERLAY寄存器進行操作,為0時則對控制寄存器進行操作;可以通過對地址0x03100000的讀寫實現(xiàn)對數(shù)據(jù)總線的讀寫。ADSP2187的程序加載引導邏輯流程如圖5所示。
5結論
本設計實現(xiàn)了TMS320C6414和ADSP2187兩個DSP芯片共享Flash的程序引導加載,該設計已成功應用于某光電跟蹤裝置上,較好地完成了信息處理程序的加載和引導,工作穩(wěn)定可靠。本文設計方法為將來其他多DSP共享Flash的信息處理機設計提供了參考,有著重要的實際意義。
參考文獻
?。?] 李宏,李偉,李蒙,等.基于多DSP的紅外目標跟蹤系統(tǒng)設計與實現(xiàn)[J]. 電子技術應用,2006,32(8):59-61.
?。?] 楊明,趙曉博,狄衛(wèi)國,等.基于TMS320C6414的大容量存儲器擴展設計[J]. 自動化技術與應用,2008(6):103-105.
?。?] 王冬,李登科.基于雙DSP的信息處理機設計[J].國外電子測量技術,2013,32(6):89-92.
?。?] 趙熠,景德勝.一種基于雙處理器的信息處理平臺的設計[J].電子技術設計與應用,2015(6):86-87.
?。?] 陳誠,陳曉平,王識君.基于DSP+CPLD的電動舵機控制系統(tǒng)的設計[J]. 電子技術應用,2015,41(4):84-86.
?。?] 陳勇,賈明永,董德新,等.ADSP2187L在某光電跟蹤裝置中的應用[J].航空兵器,2004(4):22-24.
?。?] 梁楷.ADSP218X的IDMA接口設計[J].網(wǎng)絡財富,2010(21):183.