基于共享存儲(chǔ)體的多處理器間數(shù)據(jù)交換的幾種方法
掃描二維碼
隨時(shí)隨地手機(jī)看文章
合成孔徑雷達(dá)信號(hào)處理機(jī)系統(tǒng)的任務(wù)就是對(duì)雷達(dá)回波信號(hào)進(jìn)行距離向和方位向的二維數(shù)據(jù)脈沖壓縮,從而得到地面目標(biāo)的高分辨率圖像。該系統(tǒng)是一個(gè)實(shí)時(shí)信號(hào)處理系統(tǒng),系統(tǒng)數(shù)據(jù)量大,運(yùn)算復(fù)雜。該系統(tǒng)A/D轉(zhuǎn)換模塊的采樣率為200Mbyte/s,雷達(dá)回波信號(hào)I/Q正交雙通道,每通道采樣2048點(diǎn),脈沖重復(fù)頻率為1.4kHz,則數(shù)據(jù)率為5.6Mbyte/s。系統(tǒng)在算法上主要完成距離向和方位向的脈沖壓縮,還要完成距離徙動(dòng)校正和運(yùn)動(dòng)補(bǔ)償。根據(jù)合成孔徑雷達(dá)成像算法,系統(tǒng)主要由A/D數(shù)據(jù)采集模塊、預(yù)處理模塊、標(biāo)量處理模塊、矢量處理模塊、后處理模塊、中心控制及數(shù)據(jù)顯示模塊組成。其中A/D數(shù)據(jù)采集模塊的A/D轉(zhuǎn)換器用MAXIM公司的SPT7750芯片,其采樣率為200Mbyte/s,分辨率為8bit。預(yù)處理用TMS320C6201定點(diǎn)處理器,峰值運(yùn)算速率為1600mips。標(biāo)量處理模塊用多片ADSP2106X來完成。矢量處理模塊用LH9124/9320芯片組來完成。后處理用TMS320C31來完成。中心控制器用i386EX單片機(jī)來完成,圖象顯示及人機(jī)接口用具有ISA總線及PCI總線的ALL IN ONE 來完成。顯而易見,這是一個(gè)多處理器系統(tǒng)。
作為一個(gè)系統(tǒng),多個(gè)處理器必須交換數(shù)據(jù),系統(tǒng)才能協(xié)同并行工作。處理器間交換數(shù)據(jù)可以有兩種方法,一種是利用標(biāo)準(zhǔn)總線結(jié)構(gòu)實(shí)現(xiàn)板間數(shù)據(jù)傳輸,如VME、Compact PCI總線等,利用這種方法傳輸數(shù)據(jù)要求本板有總線控制器接口電路,還要有0槽卡,系統(tǒng)復(fù)雜,成本高,這里不作討論。另一種是利用共享存儲(chǔ)體的方法,這是本文討論的重點(diǎn)。兩個(gè)處理器要交換數(shù)據(jù)則必須要有兩個(gè)處理器都可以訪問的共享存儲(chǔ)體,一個(gè)處理器將數(shù)據(jù)寫入存儲(chǔ)體,而由另一處理器將數(shù)據(jù)時(shí)分讀出,這種方法可以實(shí)現(xiàn)處理器總線的隔離,使兩個(gè)處理器間可以有效地交換數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)共享。兩個(gè)處理器要共同訪問一個(gè)存儲(chǔ)體有這樣幾種方法,其一是雙口RAM法、其二是先進(jìn)先出的FIFO法、其三是總線開關(guān)加存儲(chǔ)器法。這三種方法所要注意的問題是處理器間信號(hào)的握手,即當(dāng)一個(gè)處理器給存儲(chǔ)體寫入數(shù)據(jù)后產(chǎn)生旗標(biāo)通知另一處理器將數(shù)據(jù)取走。另一個(gè)問題是兩個(gè)處理器訪問同一存儲(chǔ)單元可能產(chǎn)生的沖突。下面就分別討論這三種方法。
1 用雙口RAM實(shí)現(xiàn)兩個(gè)處理器間數(shù)據(jù)交換
雙口RAM是一種雙端口器件,允許兩個(gè)處理器各訪問一個(gè)端口,每一個(gè)處理器都可以將雙口RAM看作自己的本地存儲(chǔ)器。雙口RAM的每個(gè)端口都有各自的數(shù)據(jù)、地址、控制總線,允許處理器對(duì)存儲(chǔ)器的任何地址執(zhí)行隨機(jī)讀寫操作。當(dāng)兩個(gè)處理器同時(shí)對(duì)同一地址單元操作(如同時(shí)寫、或一個(gè)寫一個(gè)讀),雙口RAM會(huì)自動(dòng)產(chǎn)生BUSY信號(hào)表示沖突。一般此BUSY信號(hào)接至處理器的READY端,使其讀或?qū)憰r(shí)序延長(zhǎng),最終讀出或?qū)懭搿?/p>
IDT公司的IDT7133是一種典型的雙口RAM芯片,其管腳分布如圖1所示。其中IO0~15表示數(shù)據(jù)總線、A0~10表示地址總線、R/W、CE、OE分別表示讀/寫、片選、讀選通,BUSY是IDT7133的輸出信號(hào)表示沖突,L、R分別表示左右端口,讀寫管腳中的L、U表示16Bit數(shù)據(jù)的低字節(jié)、高字節(jié)的區(qū)分,字母上方的—號(hào)表示該信號(hào)低電平有效。
作為雷達(dá)數(shù)字信號(hào)處理機(jī)的一個(gè)子系統(tǒng)的一部分,筆者設(shè)計(jì)了一個(gè)電路用于ISA總線和i386EX單片機(jī)交換數(shù)據(jù),其示意性原理圖如圖1所示。
其中EXD0~15和i386EX單片機(jī)的數(shù)據(jù)總線相連,EXB1~11和i386EX的地址總線相連,EXOE#、EXWRL#、EXWRH#由i386EX狀態(tài)信號(hào)、讀寫信號(hào)組合產(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ū)動(dòng)i386EX的READY信號(hào),結(jié)果表明i386EX和ISA總線間可以有效可靠地交換數(shù)據(jù)。[!--empirenews.page--]
2 用FIFO實(shí)現(xiàn)兩個(gè)處理器間數(shù)據(jù)交換
實(shí)現(xiàn)兩個(gè)處理器間數(shù)據(jù)交換的另一種方法是FIFO結(jié)構(gòu)。FIFO是一種先進(jìn)先出的結(jié)構(gòu),較之雙口RAM,它有如下特點(diǎn):第一它無地址線,布線簡(jiǎn)單;第二它不能像雙口RAM一樣可以對(duì)任意地址單元操作,實(shí)現(xiàn)隨機(jī)存取,只能是順序存取。FIFO只能實(shí)現(xiàn)塊操作,其讀出數(shù)據(jù)的順序和寫入的順序是一樣的。FIFO有單向雙向之分和同步異步之分。單向FIFO只能向一個(gè)方向傳輸數(shù)據(jù),雙向FIFO可以向兩個(gè)方向傳輸數(shù)據(jù)。目前FIFO的內(nèi)部結(jié)構(gòu)是由雙口RAM加驅(qū)動(dòng)雙口RAM 地址的計(jì)數(shù)器構(gòu)成。同步FIFO 是由專用時(shí)鐘管腳信號(hào)來使計(jì)數(shù)器翻轉(zhuǎn),片選和讀寫是使能信號(hào);異步FIFO是由讀寫信號(hào)使計(jì)數(shù)器翻轉(zhuǎn)。IDT7205(CY7C460)是單向異步FIFO的典型芯片,其管腳分布如圖2所示。
D0~8是數(shù)據(jù)輸入總線,Q0~8是數(shù)據(jù)輸出總線,R、W是讀、寫控制端,XI、XO是級(jí)聯(lián)控制端,HF、FF是FIFO狀態(tài)滿標(biāo)志,EF是FIFO狀態(tài)空標(biāo)志。根據(jù)HF、FF狀態(tài),寫處理器就可以知道FIFO是否已滿,根據(jù)EF狀態(tài)讀處理器就可以知道FIFO里是否有數(shù)據(jù)。
筆者設(shè)計(jì)了一個(gè)用于TMS320C30傳輸數(shù)據(jù)給i386EX的電路,和FIFO相關(guān)部分的示意性原理圖如圖2。如果要反向傳輸,F(xiàn)IFO的輸入輸出要交換位置,邏輯要作適當(dāng)?shù)男薷?。其中XD0~7和C30的副總線相連接,TMS_WRITE、TMS_RESET由C30副總線的觸發(fā)、讀寫及地址譯碼組合產(chǎn)生,TMS_FULL信號(hào)驅(qū)動(dòng)C30的XRDY信號(hào),以使FIFO滿時(shí),寫總線周期延長(zhǎng)。EXD0~7和i386EX單片機(jī)的數(shù)據(jù)總線相連,EX_READ是由i386EX狀態(tài)信號(hào)、讀寫信號(hào)及地址譯碼組合產(chǎn)生,EX_EMPTY供i386EX單片機(jī)的I/O口判讀。
3 用總線開關(guān)加存儲(chǔ)器實(shí)現(xiàn)兩個(gè)處理器間數(shù)據(jù)交換
第三種方法是總線開關(guān)法。對(duì)于像圖像處理等需要大量交換數(shù)據(jù)的應(yīng)用場(chǎng)合,用雙口RAM或FIFO方法就不太合適。雙口RAM和FIFO一般容量較小,而且價(jià)格昂貴。比如說常用的雙口RAM IDT7133 只有32Kbit(2K×16bit),而單向FIFO IDT7205也只有8K×9bit。用總線開關(guān)外加大容量存儲(chǔ)器很適合這種大容量的數(shù)據(jù)傳輸。
IDT74FST163212是一種典型的總線開關(guān)芯片,其管腳分布如圖3所示。
其中S0~2是總線開關(guān)控制端,A、B、C、D是四個(gè)總線端口,每個(gè)總線端口有12根線組成,由S0~2控制A、B和C、D總線端口的導(dǎo)通或不導(dǎo)通。例如當(dāng)S2、S1、S0為000時(shí),總線間不導(dǎo)通,呈高阻態(tài);當(dāng)為001時(shí),A總線端口和B總線端口導(dǎo)通,即A1和B1導(dǎo)通、A2和B2導(dǎo)通……;由于總線開關(guān)是由柵極可控的場(chǎng)效應(yīng)管組成,信號(hào)無方向性,導(dǎo)通電阻很小,只有幾個(gè)或十幾個(gè)歐姆。[!--empirenews.page--]
筆者設(shè)計(jì)了一個(gè)電路,由TMS320C30和一塊FPGA作主控器共同訪問一片存儲(chǔ)器,由于線較多,這里僅給出其示意性原理圖見圖4。由TMS320C30將數(shù)據(jù)塊寫入存儲(chǔ)器,再由FPGA將數(shù)據(jù)讀走。
利用共享存儲(chǔ)體實(shí)現(xiàn)處理器間的數(shù)據(jù)交換是一種簡(jiǎn)單易行的方法。用共享存儲(chǔ)體實(shí)現(xiàn)處理器間數(shù)據(jù)交換的各種方法中,雙口RAM、FIFO適用于小容量交換數(shù)據(jù)的場(chǎng)合,總線開關(guān)加存儲(chǔ)器的結(jié)構(gòu)適用于大容量數(shù)據(jù)交換的場(chǎng)合。