摘要:一個大型復雜系統(tǒng)往往有多個處理器,處理器間要協(xié)同工作依必須交換數(shù)據(jù)。給出基于存儲體共享的處理器交換數(shù)據(jù)的三種方法,即:基于雙口RAM的方法、基于單向或雙向FIFO的方法、基于總線開關加存儲器的方法。在某型合成孔徑雷達實時信號處理系統(tǒng)設計中,用這三種方法都取得了預期的結(jié)果。
關鍵詞:多處理器 數(shù)據(jù)交換 雙口RAM 單向(或雙向)FIFO 總線開關加存儲器
合成孔徑雷達信號處理機系統(tǒng)的任務就是對雷達回波信號進行距離向和方位向的二維數(shù)據(jù)脈沖壓縮,從而得到地面目標的高分辨率圖像。該系統(tǒng)是一個實時信號處理系統(tǒng),系統(tǒng)數(shù)據(jù)量大,運算復雜。
該系統(tǒng)A/D轉(zhuǎn)換模塊的采樣率為200Mbyte/s,雷達回波信號I/Q正交雙通道,每通道采樣2048Mbtyte/s,雷達回波信號I/Q正交雙通道,每通道采樣2048點,脈沖重復頻率為1.4kHz,則數(shù)據(jù)率為5.6Mbyte/s。系統(tǒng)在算法上主要完成距離向和方位向的脈沖壓縮,還要完成距離徙動校正和運動補償。根據(jù)合成孔徑雷達成像算法,系統(tǒng)主要由A/D數(shù)據(jù)采集模塊、預處理模塊、標量處理模塊、矢量處理模塊、后處理模塊、中心控制及數(shù)據(jù)顯示模塊組成。其中A/D數(shù)據(jù)采集模塊的A/D轉(zhuǎn)換器用MAMIM公司的SPT7750芯片,其采樣率為200Mbyte/s,分辨率為8bit。預處理用 TMS320C6201定點處理器,峰值運算速率為1600mips。標量處理模塊用多片ADSP2106X來完成。矢量處理模塊用 LH9124/9320芯片組來完成。后處理用TMS320C31來完成。中心控制器用i386FX單片機來完成,圖象顯示及人機接口用具ISA總線及 PCI總線的ALL INONE來完成。顯面易見,這是一個多處理器系統(tǒng)。作為一個系統(tǒng),多個處理器必須交換數(shù)據(jù),系統(tǒng)才能協(xié)同并行工作。處理器間交換數(shù)據(jù)可以有兩種方法,一種是利用標準總線結(jié)構實現(xiàn)板間數(shù)據(jù)傳輸,如VME、 Compact PCI總線等,利用這種方法傳輸數(shù)據(jù)要求本板有總線控制器接口電路,還要有0槽卡,系統(tǒng)復雜,成本高,這里不作討論。另一種是利用共享存儲體的方法,這是本文討論的重點。兩個處理器要交換數(shù)據(jù)則必須要有兩個處理器都可以訪問的共享存儲體,一個處理器將數(shù)據(jù)寫入存儲體,而由另一處理器將數(shù)據(jù)時分讀出,這種方法可以實現(xiàn)處理器總線的隔離,使兩個處理器間可以有效地交換數(shù)據(jù),實現(xiàn)數(shù)據(jù)共享。兩個處理器要共同訪問一個存儲體有這樣幾種方法,其一是雙口RAM法、其二是先進先出的FIFO法、其三是總線開關加存儲器法。這三種方法所要注意的問題是處理器間信號的握手,即當一個處理器給存儲體寫入數(shù)據(jù)后產(chǎn)生旗標通知另一處理器將數(shù)據(jù)取走。另一個問題是兩個處理器訪問同一存儲單元可能產(chǎn)生的沖突。下面依分別討論這三種方法。
1 用雙口RAM實現(xiàn)兩個處理器間數(shù)據(jù)交換
雙口RAM是一種雙端口器件,充許兩個處理器各訪問一個端口,
每一個處理器都可以將雙口RAM看作自己的本地存儲器。雙口RAM的每個端口都有各自的數(shù)據(jù)、地址、控制總線,允許處理器對存儲器的任何地址執(zhí)行隨機讀寫操作。當兩個處理器同時對同一地址單元操作(如同時寫、或一個寫一個讀),雙口RAM會自動產(chǎn)生BUSY信號表示沖突。一般此BUSY信號接至處理器的 READY端,使其讀或?qū)憰r序延長,最終讀出或?qū)懭搿?br>IDT公司的IDT7133是一種典型的雙口RAM芯片,其管腳分布如圖1所示。其中IO0~15表示數(shù)據(jù)總線、A0~10表示地址總線、R/W、CE、 OE分別表示讀/寫、片選、讀選通,BUSY是IDT7133的輸出信號表示沖突,L、R分別表示左右端口,讀寫管腳中的L、U表示16Bit數(shù)據(jù)的低字節(jié)、高字節(jié)的區(qū)分,字母上方的一號表示該信號低電平有效。
作為雷達數(shù)字信號處理機的一個子系統(tǒng)的一部分,筆者設計了一個電路用于ISA總線和i386EX單片機交換數(shù)據(jù),其示意性原理圖如圖1所示。
其中EXD0~15和i386EX單片機的數(shù)據(jù)總線相連,EXB1~11和i386EX的址總線相連,EXOE#、EXWEL#、EXWRH#由 i386EX狀態(tài)信號、讀寫信號組合產(chǎn)生,EXCS#則i386EX高端地址譯碼產(chǎn)生。ISAD0~15和ISA數(shù)據(jù)總線相連,ISAB1~11和ISA 的地址總線相連,ISAOER#、ISAWRL#、ISAWRH#、ISACS#是由ISA總線的地址、讀寫、狀態(tài)組合產(chǎn)生,BUSY驅(qū)動i386EX的 READY信號,結(jié)果表明i386EX和ISA總線間可以有效可靠地交換數(shù)據(jù)。
2 用FIFO實現(xiàn)兩個處理器間數(shù)據(jù)交換

實現(xiàn)兩個處理器間數(shù)據(jù)交換的另一種方法是FIFO結(jié)構。FIFO是一種先進先出的結(jié)構,較之雙口RAM,它有如下特點:第一它無地址線,布線簡單;第二它不能像雙口RAM一樣可以對任意地址單元操作,實現(xiàn)隨機存取,只能是順序存取。FIFO只能實現(xiàn)塊操作,其讀出數(shù)據(jù)的順序和寫入的順序是一樣的。FIFO有單向雙向之分和同步異步之分。單向FIFO只能向一個方向傳輸數(shù)據(jù),雙向FIFO可以向兩個方向傳輸數(shù)據(jù)。目前FIFO的內(nèi)部結(jié)構是由雙口RAM加驅(qū)動雙口RAM地址的計數(shù)器構成。同步FIFO是由專用時鐘管腳信號來使計數(shù)器翻轉(zhuǎn),片選和讀寫是使能信號;異步FIFO是由讀寫信號使計數(shù)器翻轉(zhuǎn)。 IDT7205(CY7C460)是單向異步FIFO的典型芯片,其管腳分布如圖2所示。
D0~8是數(shù)據(jù)輸入總線,Q0~8是數(shù)據(jù)輸出總線,R、W是讀、寫控制端,XI、XO是級聯(lián)控制端,HF、FF是FIFO狀態(tài)滿標志,EF是FIFO狀態(tài)空標志。根據(jù)HF、FF狀態(tài),寫處理器依可以知道FIFO是否已滿,根據(jù)EF狀態(tài)讀處理器依可以知道FIFO里是否有數(shù)據(jù)。
筆者設計了一個用于TMS320C30傳輸數(shù)據(jù)給i386EX的電路,和FIFO相關部分的示總性原理圖如圖2。如果要反向傳輸,FIFO的輸入輸出要交換位置,邏輯要作適當?shù)男薷。其中XD0~7和C30的副總線相連接,TMS_WRITE、TMS_RESET由C30副總線的觸發(fā)、讀寫及地址譯碼組合產(chǎn)生,TMS_FULL信號驅(qū)動C30的XRDY信號,以使FIFO滿時,寫總疆周期延長。EXD0~7和i386EX單片機的數(shù)據(jù)總線相連, EX_READ是由i386EX狀態(tài)信號、讀寫信號及地址譯碼組合產(chǎn)生,EX_EMPTY供i386EX單片機的I/O口判讀。
3 用總線開關加存儲器實現(xiàn)兩個處理器間數(shù)據(jù)交換
第三種方法是總線開關法。對于像圖像處理等需要大量交換數(shù)據(jù)的應用場合,用雙口RAM或FIFO方法依不太合適。雙口RAM和FIFO一般容量較小,而且價格昂貴。比如說常用的雙口RAM IDT7133只有32Kbit(2K×16bit),而單向FIFO IDT7205也只有8K×9bit。用總線開關外加大容量存儲器很適合這種大容量的數(shù)據(jù)傳輸。
IDT74FST163212是一種典型的總線開關芯片,
其管腳分布如圖3所示。其中S0~2是總線開關控制端,A、B、C、D是四個總線端口,每個總線端口有12根線組成,由S0~2控制A、B和C、D總線端口的導通或不導通。例如當S2、S1、S0為000時,總線間不導通,呈高阻態(tài);當為001時,A總線端口和B總線端口導通,即A1和B1導通、A2和B2導通……;由于總線開關是由柵極可控的場效應管組成,信號無方向性,導通電阻很小,只有幾個或十幾個歐姆。
筆者設計了一個電路,由TMS320C30和一塊FPGA作主控器共同訪問一片存儲器,由于線較多,這里僅給出其示意性原理圖見圖4。由TMS320C30將數(shù)據(jù)塊寫入存儲器,再由FPGA將數(shù)據(jù)讀走。
利用共享存儲體實現(xiàn)處理器間的數(shù)據(jù)交換是一種簡單易行的方法。用共享存儲體實現(xiàn)處理器間數(shù)據(jù)交換的各種方法中,雙口RAM、FIFO適用于小容量交換數(shù)據(jù)的場合,總線開關加存儲器的結(jié)構適用于大容量數(shù)據(jù)交換的場合。





