基于FIFO實(shí)現(xiàn)DSP間的雙向并行異步通訊
介紹了利用CYPRESS公司的FIFO芯片CY7C419實(shí)現(xiàn)DSP間雙向并行異步通訊的方法,該方法簡(jiǎn)單實(shí)用,速度快,特別適用于小數(shù)據(jù)量的數(shù)據(jù)相互傳送。文中給出了CY7C419的引腳功能以及用FIFO實(shí)現(xiàn)DSP間雙向并行異步通訊的硬件結(jié)構(gòu)和軟件流程。
在多CPU的分布式信號(hào)處理系統(tǒng)中,往往涉及CPU間的通訊與數(shù)據(jù)交換,大數(shù)據(jù)量的數(shù)據(jù)傳輸一般采用DMA方式,而小數(shù)據(jù)量的數(shù)據(jù)交換采用并行接口則比較快速靈活。因此,對(duì)于傳輸速度要求較高的DSP間的小數(shù)據(jù)量的數(shù)據(jù)交換及通訊來(lái)說(shuō),要提高DSP的工作效率,不僅要求并行接口的響應(yīng)快,而且必須采用異步方式以免相互等待。本文介紹了采用CYPRESS公司的FIFO芯片CY7C419來(lái)實(shí)現(xiàn)DSP間的雙向并行異步通訊接口。該方法不僅比用TTL鎖存器的方式速度快,而且譯碼邏輯簡(jiǎn)單,另外,由于FIFO芯片有一定的深度(256個(gè)),因此,在少于256個(gè)數(shù)據(jù)傳輸時(shí),可實(shí)現(xiàn)零等待時(shí)間。
1 FIFO芯片簡(jiǎn)介
全滿(FF)和全空(EF)標(biāo)志用以防止數(shù)據(jù)溢出或不足;
擴(kuò)展輸入(XI)、擴(kuò)展輸出(X0)、首次裝載(FL):用以實(shí)現(xiàn)無(wú)限的寬度及深度擴(kuò)展,深度擴(kuò)展技術(shù)可使操縱控制信號(hào)從一個(gè)元件并行傳至另一個(gè)元件,因而消除了傳輸延遲的串行附加,其最高讀、寫(xiě)速度可達(dá)50MHz,讀寫(xiě)信號(hào)低電平有效;
當(dāng)CY7C419獨(dú)立使用或多片實(shí)現(xiàn)寬度擴(kuò)展結(jié)構(gòu)時(shí),半空標(biāo)志(HF)輸出有效,在深度擴(kuò)展結(jié)構(gòu)中,該此腳輸出擴(kuò)展輸出信息(XO)并告知下一個(gè)FIFO;
D0~D8為數(shù)據(jù)輸入,Q0~Q8為數(shù)據(jù)輸出。
R、W及MR分別為讀、寫(xiě)及復(fù)位信號(hào)的輸入端,它們均為低電平有效。
2 硬件結(jié)構(gòu)與通訊流程
2.1 硬件結(jié)構(gòu)
利用FIFO實(shí)現(xiàn)DSP間雙向并行異步通訊的結(jié)構(gòu)原理如圖2所示。DSP56001和ADSP21020分別樹(shù)熊美國(guó)Motorola和ADI公司的DSP芯片。兩個(gè)CY7C419芯片U1、U2分別用于DSP56001和ADSP21020間雙向并行接口的一個(gè)方向,其中U1用于完成DSP56001向ADSP21020的數(shù)據(jù)傳送,U2則用于完成ADSP21020向DSP56001的數(shù)據(jù)傳送。U1的全滿標(biāo)志(FF)與U2的全空標(biāo)志(EF)通過(guò)緩沖器74LS245與DSP56001的數(shù)據(jù)總線相連,該緩沖器被映射為DSP56001數(shù)據(jù)區(qū)的一個(gè)地址單元(0x600),因此,DSP56001通過(guò)對(duì)該地址單元的讀操作便可獲知U1是否已寫(xiě)滿以及U2是否有數(shù)所要讀。同理,U2的全志(FF)與U1的全空標(biāo)志(EF)通過(guò)一緩沖器74LS245連于ADSP21020的數(shù)據(jù)總線,該片74LS245補(bǔ)映射為ADSP21020數(shù)據(jù)區(qū)的一個(gè)地址單元(身份地址+0x100000),這樣ADSP21020通過(guò)對(duì)該地址單元的讀操作也可獲知U2是否已寫(xiě)滿以及U1是否有數(shù)據(jù)要讀。另外,DSP56001對(duì)U1的寫(xiě)操作、對(duì)U2的讀操作映射為對(duì)其數(shù)據(jù)存儲(chǔ)區(qū)一個(gè)地址單元(0x200)的寫(xiě)、讀操作;而ADSP21020對(duì)U2的寫(xiě)操作和對(duì)U1的讀操作則被映射為對(duì)其數(shù)據(jù)存儲(chǔ)區(qū)地址單元(身份地址+0x180000)的寫(xiě)、讀操作。兩個(gè)DSP芯睡均可同時(shí)對(duì)U1、U2進(jìn)行復(fù)位操作。
DSP56001對(duì)雙向口的讀56FIFOR、寫(xiě)56FIFOW、復(fù)位56FIFORST及對(duì)標(biāo)志口狀態(tài)56FLGR的讀信號(hào)可由DSP56001的地址線與讀寫(xiě)信號(hào)譯碼獲得;ADSP21020對(duì)雙向口的讀21FIFOR、寫(xiě)21FIFOW、復(fù)位56FIFORST及對(duì)標(biāo)志口狀態(tài)56FLGR的讀信號(hào)則可由ADSP21020的地址線與讀寫(xiě)信號(hào)譯碼獲得。各譯碼輸出的邏輯表達(dá)式如下:
56FIFOR=AdEn+Ma10+Ma9+MRD
(映射地址為:0x200)
56FIFOW=AdEn+Ma10+Ma9+MWR
(映射地址為:0x200)
56FIFOORST=AdEn+Ma10+Ma9+MWR
(映射地址為:0x400)
56FLGR=AdEn+Ma10+Ma9+MRD
(映射地址為:0x600)
AdEn=DS+Ma15+Ma14+Ma13+Ma12+Ma11
21FIFOR=IDMAT+A21+A20+A19+RD
(映射地址為:身份地址+0x180000)
21FIFOW=IDMAT+A21+A20+A19+WR
(映射地址為:身份地址+0x180000)
FIFORST=(IDMAT+A21+A20+A19+WR)56FIFORST
(映射地址為:身份地址+0x200000)
21FLGR=IDMAT+A21+A20+A19+RD
(映射地址為:身份地址+0x100000)
為區(qū)分兩個(gè)DSP的讀、寫(xiě)信號(hào),在邏輯表達(dá)式中用MRD和MWR分別表示DSP56001的讀、寫(xiě)信號(hào)RD和WR。ADSP21020作為主芯片同時(shí)與多個(gè)DSP56001(圖2僅畫(huà)出其中一個(gè))相連,因此每一個(gè)DSP56001均有一個(gè)不同的身份地址,表示該身份地址的地址線(A25~A22)的譯碼結(jié)果為IDNAT。為簡(jiǎn)化硬件電路,譯碼邏輯均采用PAL器件實(shí)現(xiàn)。
2.2 軟件流程
圖3所示為DSP56001對(duì)并口進(jìn)行讀、寫(xiě)數(shù)據(jù)的軟件流程。ADSP21020向DSP56001傳送數(shù)據(jù)及從并行口讀取由DSP56001傳送過(guò)來(lái)的數(shù)據(jù)步驟與上述流程相同。對(duì)DSP56001和ADSP21020來(lái)說(shuō),并行接口均為異步雙向口。當(dāng)DSP56001要向ADSP21020傳送數(shù)據(jù)時(shí),首先讀狀態(tài)標(biāo)志口(口地址0x600),若標(biāo)志第0位為0(全滿),則重復(fù)讀狀態(tài)標(biāo)志口,直至標(biāo)志第0位為1(數(shù)據(jù)未滿,已被ADSP21020全部或部分讀出)時(shí),DSP56001才向接口(地址0x200)寫(xiě)入數(shù)據(jù);當(dāng)DSP56001要讀取由ADSP21020傳送過(guò)來(lái)的數(shù)據(jù)時(shí),首先讀狀態(tài)標(biāo)志口(口地址0x600),若標(biāo)志第1位為0(全空),則重復(fù)讀狀態(tài)口,直至標(biāo)志第1位為1時(shí)(不空,已郵ADSP21020寫(xiě)入數(shù)據(jù)),DSP56001讀接口(地址0x200)即可獲得所需數(shù)據(jù)。
該方法已成功應(yīng)用于一臺(tái)自動(dòng)研制的基于DSP的實(shí)時(shí)模擬及被頻信號(hào)采集與處理系統(tǒng)。實(shí)際運(yùn)行結(jié)果表明,該方法不僅速度較高,而且譯碼邏輯也十分簡(jiǎn)單。
評(píng)論