摘 要: 提出了一種由多片TigerSHARC系列DSP芯片組成的任意拓?fù)浣Y(jié)構(gòu)" title="拓?fù)浣Y(jié)構(gòu)">拓?fù)浣Y(jié)構(gòu)的網(wǎng)絡(luò)系統(tǒng)的構(gòu)成和加載" title="加載">加載方法。首先通過鏈路" title="鏈路">鏈路口對TigerSHARC網(wǎng)絡(luò)進行檢測,由此得到該網(wǎng)絡(luò)的加載網(wǎng)表,;然后分析加載網(wǎng)表,,并實現(xiàn)整個網(wǎng)絡(luò)的加載,;最后給出網(wǎng)絡(luò)加載編程的流程圖,。
關(guān)鍵詞: TigerSHARC 加載 網(wǎng)表
?
隨著對實時信號處理要求的不斷提高,盡管DSP的運算能力在不斷增強,,但仍然需要由多個DSP組成大規(guī)模并行處理系統(tǒng),。ADI公司新推出的高性能靜態(tài)超標(biāo)量處理器——TigerSHARC系列DSP處理芯片(包括TS101S和TS20xS)具有很強的數(shù)據(jù)運算和吞吐能力,其獨特的結(jié)構(gòu)和功能(如DMA通道,、全雙工的鏈路口)特別適合用于構(gòu)成大規(guī)模信號處理系統(tǒng),。
由多片TigerSHARC系列DSP芯片組成的信號處理陣列,稱為TigerSHARC網(wǎng)絡(luò),。對于這樣一個復(fù)雜系統(tǒng),,在上電復(fù)位后,如何將可執(zhí)行文件放到指定的DSP中并按照規(guī)定的順序執(zhí)行程序是非常關(guān)鍵的,。在分析TigerSHARC系列DSP芯片的結(jié)構(gòu)特點和加載原理的基礎(chǔ)上,,本文提出一種任意拓?fù)浣Y(jié)構(gòu)的TigerSHARC網(wǎng)絡(luò)的構(gòu)成和加載方法。首先對TigerSHARC網(wǎng)絡(luò)進行自動檢測,,生成加載網(wǎng)表,;然后分析該加載網(wǎng)表,實現(xiàn)TigerSHARC網(wǎng)絡(luò)的加載,;最后給出網(wǎng)絡(luò)加載的流程圖,。
1 TigerSHARC網(wǎng)絡(luò)的構(gòu)成
TigerSHARC為實現(xiàn)多處理器互聯(lián)提供了兩種方案,。
(1)共享總線結(jié)構(gòu):多個TigerSHARC系列DSP芯片通過共享外部總線的方式構(gòu)成多處理器系統(tǒng)。一個總線上最多可以有八片TigerSHARC系列DSP芯片,。這樣的系統(tǒng)又稱為緊耦合系統(tǒng),,典型結(jié)構(gòu)如圖1所示。
(2)鏈路口耦合結(jié)構(gòu)" title="耦合結(jié)構(gòu)">耦合結(jié)構(gòu):利用鏈路口進行處理器間的無縫連接,可以連接成不同的拓?fù)浣Y(jié)構(gòu),,如流水線結(jié)構(gòu),、網(wǎng)格結(jié)構(gòu)等,構(gòu)建的多維處理器結(jié)構(gòu),,具有很好的擴展性和靈活性。這樣的系統(tǒng)也叫做松耦合系統(tǒng),。網(wǎng)格結(jié)構(gòu)如圖2所示,。
對于大型系統(tǒng),基于任務(wù)的分配,,將系統(tǒng)中的DSP分成若干個處理單元,,處理單元的內(nèi)部采用共享總線結(jié)構(gòu)或鏈路口耦合結(jié)構(gòu),處理單元間采用鏈路口耦合結(jié)構(gòu),。這樣可兼顧二者的優(yōu)點,。
每個處理單元或者每片DSP都可作為網(wǎng)絡(luò)中的一個節(jié)點(node)。為了討論方便,,本文中的節(jié)點指一片DSP,。首先被加載的節(jié)點稱為根節(jié)點,通過它加載的其余節(jié)點稱為從節(jié)點,。
2 TigerSHARC的加載方式
TigerSHARC有四種加載方式:鏈路口方式,、Host方式、EPROM方式,、no boot方式,。no boot方式不需要加載核,復(fù)位后通過使能中斷請求信號使DSP自動從相應(yīng)的存儲空間開始執(zhí)行,。ADI公司為前三種方式分別提供了加載核,,其核心思想和功能完全一樣,只是在實現(xiàn)代碼上稍有差異,。VisualDSP++的加載器應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序(elfloader.exe)接收加載核和用戶應(yīng)用程序,,生成相應(yīng)的加載程序。但只有DSP運行了相應(yīng)的加載核之后才能繼續(xù)加載用戶應(yīng)用程序,。
值得注意的是:在鏈路口加載核中,,定義的常數(shù)LINK指定用于接收的鏈路口號,要根據(jù)實際情況進行更改,。如果需要對系統(tǒng)進行不同的設(shè)置,,必須在修改加載核后重新編譯加載核,,但要保證加載核長度不超過256字,并在編譯后使用,。
3 加載網(wǎng)表的生成
要得到加載網(wǎng)表,,需要探測網(wǎng)絡(luò)中所有的鏈路連接信息,即判斷各鏈路口是否可用于加載,,可采用如下方法:
(1)主動式探測
設(shè)置被測鏈路口為發(fā)送狀態(tài),,往該鏈路口的發(fā)送緩沖區(qū)寫一批數(shù),如果一定時間后該發(fā)送緩沖區(qū)為空,,則該鏈路口可用于加載,。
(2)被動式探測
設(shè)置被測鏈路口為接收狀態(tài)并清空接收緩沖區(qū),如果一定時間后該鏈路口的接收緩沖區(qū)非空,,則該鏈路口可用于加載,。
根節(jié)點完成自身加載后,采用主動式探測依次判斷其各鏈路口是否可用于加載,。然后通過可用于加載的鏈路口發(fā)送從節(jié)點探測程序,,指導(dǎo)從節(jié)點繼續(xù)網(wǎng)絡(luò)探測;根據(jù)根節(jié)點發(fā)送所用的鏈路口號對從節(jié)點編號,,將該編號與發(fā)送所用鏈路口號一起發(fā)送到該從節(jié)點并回送到根節(jié)點中保存,,同時要標(biāo)記該從節(jié)點已被加載過(booted=1)。
已被加載過的從節(jié)點首先采用主動式探測,,如果發(fā)現(xiàn)有可用于加載的鏈路口,,表示存在下一級加載,則采用和根節(jié)點相同的探測過程,,并且在完成后再采取被動式探測,,得到該節(jié)點的其它鏈路連接信息并回送到根節(jié)點;如果發(fā)現(xiàn)沒有可用于加載的鏈路口,,就采用被動式探測,,得到該節(jié)點的其他鏈路連接信息并回送到根節(jié)點。該過程的流程圖如圖3所示,。
對于每個從節(jié)點,,有兩個鏈路口很重要:用于發(fā)送下級節(jié)點程序的鏈路口(LINKt)和接收本節(jié)點及下級節(jié)點程序的鏈路口(LINKr)。LINKt 作為本節(jié)點的加載路徑信息的一個元素,;LINKr用于本節(jié)點的鏈路口加載核的生成,。
因為一個從節(jié)點可能有多種加載路徑,在得到網(wǎng)絡(luò)的鏈路連接關(guān)系后,,可根據(jù)信號處理任務(wù)的分配為各節(jié)點選擇加載路徑,。將各節(jié)點的加載信息,包括加載路徑信息、加載程序,、代碼長度和參數(shù)等以一定的格式組織,,作為該節(jié)點的加載文件包;該網(wǎng)絡(luò)中所有節(jié)點的加載文件包組成該網(wǎng)絡(luò)的加載網(wǎng)表,;在加載網(wǎng)表的最后增加一個代碼長度為0的虛擬節(jié)點的加載文件包(見表1最后一行),,用來通知各節(jié)點網(wǎng)絡(luò)加載的結(jié)束。
圖4為某DSP系統(tǒng)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖,,表1為該網(wǎng)絡(luò)的加載網(wǎng)表,。
?
4 網(wǎng)絡(luò)加載過程分析
在這里采用一臺PC機作為主機。上電復(fù)位后,,PC機先指導(dǎo)TigerSHARC網(wǎng)絡(luò)進行自動檢測,,處理返回信息,生成加載網(wǎng)表,;然后進行網(wǎng)絡(luò)的加載,。根節(jié)點采用Host方式加載后,每次從PC機中讀取并分析一個從節(jié)點的加載文件包,,并通過鏈路口發(fā)送給從節(jié)點,指導(dǎo)從節(jié)點以鏈路口方式完成網(wǎng)絡(luò)加載,??梢詾槠鋯为殞懸粋€加載程序。
從節(jié)點的加載程序按功能可分為三部分:256字的LINK加載核,、網(wǎng)絡(luò)加載程序,、用戶程序。LINK加載核在完成本節(jié)點的初始化后,,繼續(xù)通過鏈路口接收本節(jié)點的網(wǎng)絡(luò)加載程序和用戶程序并完成自身的覆蓋,。然后開始執(zhí)行網(wǎng)絡(luò)加載程序,其作用是接收并發(fā)送下級節(jié)點的加載文件,,進行網(wǎng)絡(luò)加載,。網(wǎng)絡(luò)加載完成以后,就等待運行用戶程序,。
網(wǎng)絡(luò)加載程序是實現(xiàn)網(wǎng)絡(luò)加載的關(guān)鍵,,因此筆者寫一個適用于所有從節(jié)點的程序netboot()來完成此功能。在每個節(jié)點中設(shè)置一個有四個元素的數(shù)組booted[4]標(biāo)志各鏈路口的狀態(tài)(各元素依次對應(yīng)鏈路口0~3),,booted[4]為1表示鏈路口處于發(fā)送狀態(tài),;為0表示鏈路口被關(guān)閉。鏈路口方式加載采用的是核訪問方式,,即將要傳輸?shù)臄?shù)據(jù)通過鏈路口的發(fā)送緩沖區(qū)發(fā)送,。
netboot()程序流程如圖5所示,其過程如下:
(1)保存部分寄存器的值,用于在網(wǎng)絡(luò)加載完成后恢復(fù)這些寄存器的值,。禁止DMA傳輸,,設(shè)置數(shù)組booted[4]所有元素的值為0,開辟緩沖區(qū)temp,。
(2)接收并保存本節(jié)點的參數(shù)arc和argv,,供本節(jié)點用戶程序運行時使用。
(3)讀下一節(jié)點的代碼長度CodeLength,。如果CodeLength為零,,則表示網(wǎng)絡(luò)加載已經(jīng)結(jié)束,跳轉(zhuǎn)至(8),;否則,,繼續(xù)執(zhí)行加載。
(4)讀出發(fā)送下一節(jié)點程序所用的鏈路口t,。如果booted[t]=1,,將t從下一節(jié)點的加載路徑信息中去掉,并將代碼長度減去1,,其余信息不變,,然后將更新后的加載文件包發(fā)送到下一節(jié)點;如果booted[t],!=1,,則屏蔽寄存器中鏈路口t對應(yīng)的發(fā)送結(jié)束中斷,然后讀寄存器中鏈路口t對應(yīng)的發(fā)送請求標(biāo)志,。當(dāng)鏈路口t有發(fā)送請求時,,設(shè)置鏈路口t為核訪問方式輸出,且置booted[t]=1,。
(5)接收并發(fā)送下一節(jié)點的256字加載核程序,。
(6)等待一段時間,以保證加載核在下一節(jié)點的運行,。
(7)接收并發(fā)送下一節(jié)點余下的程序代碼,。完成后跳轉(zhuǎn)到(3)繼續(xù)執(zhí)行。
(8)關(guān)閉所有接收鏈路口,清除緩沖區(qū)temp和鏈路狀態(tài)寄存器,。
(9)依次通過本節(jié)點用于加載的鏈路口向下一節(jié)點發(fā)送緩沖區(qū)temp中的值,,然后關(guān)閉該鏈路口。由于緩沖區(qū)temp中的數(shù)據(jù)為0,,被下一個節(jié)點當(dāng)作代碼長度使用,,從而結(jié)束后續(xù)各節(jié)點的加載過程。
(10)清中斷鎖存器,,等待一段時間后,,恢復(fù)寄存器設(shè)置。結(jié)束netboot()過程,并等待執(zhí)行本節(jié)點的用戶程序,。
本文介紹的TigerSHARC網(wǎng)絡(luò)加載和編程方法簡單,、可靠,并在筆者研制的基于TS101S和TS201S的信號處理系統(tǒng)上進行了驗證,。該方法具有一定的普遍性,,對同類DSP的應(yīng)用具有較高的參考價值。
參考文獻
1 ADSP-TS201S TigerSHARC Processor Hardware Refer-ence. Analog Devices Inc.,,2003
2 ADSP-TS201S TigerSHARC Processor Programming Reference. Analog Devices Inc.,,2003
3 VisualDSP++3.5 Loader Manual for 32-bit Processors. Analog Devices Inc.,2003