基于Visual DSP++4.0開(kāi)發(fā)的TigerSHARC DSP多處理器系統及其應用
0 引言
ADI公司的高性能數字信號處理器Tiger-SHARC系歹0包括ADSP-TS101S、ADSP-TS201S、ADSP-TS202S和ADSP-TS203S等芯片。它們被廣泛應用于視頻和通信市場(chǎng),包括3G蜂窩和寬帶無(wú)線(xiàn)基站以及國防軍事設備,如戰地雷達、航空器和聲納等。目前,TigerSHARC高性能數字信號處理器已成為多個(gè)DSP并行處理應用的實(shí)用標準,對加快數字信號處理技術(shù)的發(fā)展和擴大DSP的應用起到了十分突出的促進(jìn)作用。Visual DSP++4.0是一種使用方便的集成調試開(kāi)發(fā)軟件平臺,它支持ADI公司浮點(diǎn)系列處理器的各種產(chǎn)品(如SHARC系列,BLACKfin系列和TigerSHARC系列)。它可以通過(guò)可視化的圖形窗口方式與用戶(hù)進(jìn)行信息交換,也可以在窗口中進(jìn)行高效的工程管理,并輕松地在編輯、編譯和調試之間相互切換,以實(shí)現高效率的程序開(kāi)發(fā)。 本文結合某圖像實(shí)時(shí)處理系統的實(shí)現,重點(diǎn)介紹了基于ADSP-TS201S的多處理器系統的構建方法,討論了其數據傳輸的模式,從而實(shí)現了以Visual DSP++4.0為平臺,面向ADSP-TS201S EZ-KitLite,并采用共享外部總線(xiàn)的模式構成的MP系統。
1 多處理器系統的構建
當系統中存在多個(gè)處理器,且用戶(hù)想一起控制/調試這些處理器時(shí),必須要為協(xié)調功能進(jìn)行額外的編程,以便調試和構建多處理器系統。
1.1 MP系統的連接描述文件(LDF)
建立MP系統的第一步是使用鏈接器的多處理器功能創(chuàng )建一個(gè)多處理器工程和一個(gè)描述系統的LDF文件。
其中LDF文件用于描述多處理器的存儲器偏移量、共享存儲區和每個(gè)處理器的存儲空間。在書(shū)寫(xiě)MP系統的LDF文件時(shí),必須考慮以下LDF命令:
◇MPMEMORY {},該命令定義了每個(gè)處理器在多處理器存儲空間(MMS)中的偏移量。在多處理器鏈接過(guò)程中,鏈接器使用該偏移量來(lái)鏈接各個(gè)處理器;
◇MEMORY {},該命令可定義系統中每個(gè)處理器的存儲空間;
◇PROCESSOR {} 和SECTIONS {},利用這兩個(gè)命令可定義各個(gè)處理器,并可使用存儲器定義將每個(gè)處理器的輸出文件放置到程序段中。
◇SHARED_MEMORY {},當在系統中使用了外部共享存儲器時(shí),需要使用該命令。該命令能識別共享存儲器項的輸出,并生成駐留在MP系統的共享存儲空間中的共享存儲區的可執行文件(.SM)。
◇SM文件由工程文件中的源文件(.ASM,.C或CPP)產(chǎn)生,該文件包含有放置于外部共享存儲器中的數據變量的定義。
◇LINK_AGAINST (),該命令可解析多處理器存儲空間中的符號,并命令鏈接器檢查指定的可執行文件(.DXEs and.SMs),以解析局部沒(méi)有解析的變量和標號,以及在MMS (也就是系統中其他處理器的內部存儲器)中定義的表達式或變量。通常在LDF文件中,必須使用LINK_A-GAINST 0命令。
如果命令行中包含.SM和DXE文件,則必須先放.SM文件,后面接著(zhù)放其他DXE文件,只有這樣,鏈接器才能正確的解析變量。一個(gè)LDF文件中最多可以說(shuō)明的處理器數量是由處理器結構指定的(比如ADSP TS201最多支持8片)。應該注意的是,在同一個(gè)LDF文件中,VisualDSP++4.0不支持有不同結構的DSP混合使用(如ADSP-TS201S和ADSP-21160混合使用)。
1.2 多處理器存儲空間(MMS)
多處理器存儲空間可分成許多不同的地址區(地址區的數量是處理器指定的),這些地址區與MP系統中各個(gè)DSP的內部存儲器空間是一致的。圖1所示是對ADSP-TS201S的多處理器存儲空間的描述。
多處理器系統中某個(gè)特定的處理器的內部存儲器既可以作為源地址訪(fǎng)問(wèn),也可以作為目的地址來(lái)訪(fǎng)問(wèn),具體訪(fǎng)問(wèn)取決于使用的地址區。對廣播區寫(xiě)數據時(shí),將訪(fǎng)問(wèn)多處理器系統中所有DSP的內部存儲器。例如,訪(fǎng)問(wèn)地址空間0x1000000-0x13FFFFF中的某個(gè)存儲單元,與訪(fǎng)問(wèn)多處理器系統中ID號為0的DSP的內部存儲空間是等價(jià)的。
TigerSHARC處理器可通過(guò)對其多處理器空間的寫(xiě)操作來(lái)訪(fǎng)問(wèn),也可以訪(fǎng)問(wèn)其自身的內部存儲空間,但該操作是通過(guò)外部總線(xiàn)完成,在數據通過(guò)TigerSHARC總線(xiàn)接口的特殊情況下,一般不應使用該操作。而對多處理器空間自身的讀訪(fǎng)問(wèn)將設置SYSTAT寄存器中的SELF MPROC READ錯誤標志位,表示該操作是非法訪(fǎng)問(wèn)。
下面是使用MMS來(lái)訪(fǎng)問(wèn)系統中另一片DSP芯片存儲區的源程序(此時(shí),ID號為0的DSP訪(fǎng)問(wèn)ID號為1的DSP的內部存儲空間):
其中,ID1的MMS地址為0x14000000,該地址與ID1相對應的內部存儲器(0X800000)地址相加,就可以IDO對ID1的內部存儲區進(jìn)行讀訪(fǎng)問(wèn)。
在DSP多處理器系統中,必須存在ID號為0且接有SDRAM的DSP,該DSP用于執行對SDRAM的初始化(MRS)。這樣,就存在一個(gè)僅由ID=000的DSP使能開(kāi)漏上拉的相關(guān)問(wèn)題。也就是說(shuō),在復位后。ID0就是總線(xiàn)控制器,由它來(lái)以循環(huán)優(yōu)先級方式將總線(xiàn)控制權從當前主處理器轉移到其它處理器。
![]() |
1.3外部存儲器
ADSP-TS201S片內的24Mbit嵌入式DRAM (e-DRAM)既可以存放程序,也可以存放數據。然而,在某些應用中,也需要使用外部存儲器。外部存儲器可在MP系統中作為系統中所有DSP的共享資源,也可以由某個(gè)處理器專(zhuān)用。
在硬件系統中使用不同類(lèi)型的存儲器時(shí),系統中所有的DSP都必須建立對它恰當的訪(fǎng)問(wèn)方式。用戶(hù)可通過(guò)系統控制寄存器(SYSCON)來(lái)對訪(fǎng)問(wèn)方式進(jìn)行編程。用戶(hù)定義的設置必須支持與存儲器設備相一致的訪(fǎng)問(wèn)模式,而該訪(fǎng)問(wèn)模式正是用戶(hù)希望在硬件系統中使用的訪(fǎng)問(wèn)方式。共享外部總線(xiàn)簇連接的所有處理器的SYSCON寄存器都必須有相同的設置。 ADSP-TS201S支持對SDRAM的無(wú)縫連接。和SYSCON寄存器一樣,所有處理器的SDRAM配置寄存器(SDRCON)也必須設置成相同的值。DSP的內部存儲器控制器一旦配置,DSP就可以通過(guò)外部總線(xiàn)訪(fǎng)問(wèn)外部存儲器。
筆者設計的本系統有兩個(gè)DSP,并將SDRAM作為它們的外部共享資源。下面是其程序代碼,從該代碼可見(jiàn),其與SDRCON寄存器的初始化相一致。
1.4矢量中斷(VIRPT)
矢量中斷用于主機和DSP之間,或者DSP和DSP之間的通信。該中斷是其它主處理器使用的通用中斷。通過(guò)把中斷子程序的地址寫(xiě)入VIRPT寄存器,主機或主DSP就可以從DSP發(fā)出矢量中斷命令。當服務(wù)該中斷時(shí),高優(yōu)先級中斷將使DSP轉到子程序地址,以服務(wù)該子程序。

上例中,通過(guò)把ID0中服務(wù)子程序地址寫(xiě)到ID0中的VIRPT寄存器(0x11807300=0x1807300VIRPT地址+0x10000000 MMS ID0)中,可使ID1觸發(fā)ID0的矢量中斷。
一旦外部定義的標號用作ISR地址(如例中的VIRPT_ISR_ID0),服務(wù)中斷(MMS_ID0)的DSP的MMS偏移量就必須減去某個(gè)值,才能正確的對應到ISR的矢量地址。
上例僅僅說(shuō)明了如何使用內部處理器的VIRPT中斷作為標志,或者表征MP系統中程序已經(jīng)執行完成。
2多處理器的數據傳輸
多處理器系統往往需要進(jìn)行海量數據流的處理,以提高系統的工作效率。通常用于實(shí)現ID0和ID1之間的直接存儲器(DMA)、從ID0和ID1到外部存儲器(SDRAM)、從ID1到ID0的核傳輸、對系統中所有DSP廣播式寫(xiě)操作等幾種外部端口(EP)的數據傳輸。
TigerSHARC包含了14個(gè)DMA通道,其中4個(gè)指定為外部存儲器設備(通道0、1、2、3)。
2.1 從ID0到ID1的DMA傳輸
本實(shí)例說(shuō)明了從ID0內部存儲器到ID1外部存儲器的DMA數據傳輸。在這種情況下,DMA通道0可將tx_ID0中存儲的數據傳輸到rx_ID1中。但這種傳輸方式必須建立兩個(gè)傳輸控制塊(TCBs),其中一個(gè)是源地址,另一個(gè)是目的地址。
由于在該實(shí)例中沒(méi)有選擇2維DMA,因此,應注意寄存器xr2和yr2中的值是不相關(guān)的。只要源和目的TCB裝入新值,DMA傳輸就會(huì )開(kāi)始。一旦DMA完成,就產(chǎn)生中斷,并運行_dma_int矢量中斷程序。
下面是用DMA通道0將值載入到每個(gè)TCB的程序代碼:

2.2 ID0到SDRAM的DMA傳輸
從ID0內部存儲器到SDRAM進(jìn)行數據傳輸時(shí),只需對以前的例子作細微的改動(dòng)即可。即先使源TCB裝人的值和前面(xR3:0)寄存器的值相同,目的TCB則用寄存器yr3:0的值寫(xiě)入,而yr0的值則由rx_ID1改變?yōu)閟hared_data。這種情況下,就可通過(guò)DCS0和DCD0分別代替DCS1和DCD1,并用DMA通道1實(shí)現數據傳輸。代碼如下:

向一個(gè)激活的TCB寫(xiě)數據時(shí),如在完成當前傳輸之前,那么,使用相同的DMA通道執行數據的回寫(xiě)操作,可能會(huì )導致非法操作,其錯誤標志將保存到DMA狀態(tài)寄存器(DSTAT)中。
2.3 ID1到SDRAM的DMA傳輸
下面的實(shí)例是從內部存儲器到SDRAM的DMA數據傳輸(只是從ID1,而不是ID0)??蓱孟嗤母拍钤O置源和目的TCB:

本例中,源TCB中裝入的值和前面(xR3:0)寄存器中的值相同,唯一的差別就是索引量現在指向ID1的內部存儲器tx_ID1。目的TCB中寫(xiě)入的值與yr3:0寄存器的值相同,而此處yr0指向shared_data+TAPS。TAPS是指到緩沖區后半部分的偏移量,該緩沖區可在SDRAM中防止覆蓋ID0已經(jīng)傳輸的數據,以便下一次使用通道0。
2.4 從ID1到ID0的核傳輸
核傳輸是不使用DMA的另外一種數據處理方式。這種情況下,整數算術(shù)邏輯單元(IALU)用于從ID1到ID0內部存儲器的數據傳輸。實(shí)例說(shuō)明如下:

本例說(shuō)明了兩個(gè)數組,每個(gè)DSP的內部存儲器中都有一個(gè)。通過(guò)MMS(tx_ID1到tx_ID0)可用ID1將數據寫(xiě)到ID0中的數組中。IALU寄存器用于訪(fǎng)問(wèn)兩個(gè)數據緩沖區,以執行直接數據傳輸。
3 ID檢測
在多處理器系統構建完成后,接下來(lái)還要注意:所生成的可執行文件要載人到該系統中正確的DSP中,以免出錯,以下子程序可用于檢測所生成的可執行文件是否載入到了系統中正確的DSP中,以確保沒(méi)有ID失配:

該程序可從SYSTAT寄存器中讀入DSP的ID值,并和DSP的理論ID值相比較。本例中的程序為ID1編寫(xiě),因此,應保證它載入到了正確的目標DSP1。如果不正確,程序就會(huì )進(jìn)入無(wú)窮循環(huán),同時(shí)標志錯誤發(fā)生。
4結束語(yǔ)
除了多處理器系統的構建方法和數據傳輸的模式外,MP系統應用中還有DSP資源的分配、總線(xiàn)連接和多DSP系統與FPGA等內容。隨著(zhù)ADSP-TS201S芯片的廣泛應用,該處理器的運算速度、存儲能力和通信邏輯處理優(yōu)勢已明顯的表現出來(lái),而且鏈路口的傳輸速度、可靠性和靈活性也較以前有了較大的改觀(guān)。TigerSHARC功能強大的運算單元和支持多處理器并行處理的特性,使得它特別適用于復雜的系統,如國防工業(yè)、醫用圖像處理以及復雜無(wú)線(xiàn)通信算法的處理。
評論