專利名稱:一種基于fpga的擴(kuò)展多串口裝置及其數(shù)據(jù)收發(fā)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及現(xiàn)場可編程門陣列FPGA技術(shù)領(lǐng)域,尤其涉及一種基于FPGA的多串ロ控制器設(shè)計,可用于DSP単一中斷源的多串ロ擴(kuò)展。
背景技術(shù):
隨著電子技術(shù)的飛躍發(fā)展,通用數(shù)字信號處理器(DSP)的性能價格比不斷提高,數(shù)據(jù)處理能力不斷加強(qiáng),其應(yīng)用領(lǐng)域日益增多,在數(shù)據(jù)實時采集及高速數(shù)字信號處理中應(yīng)用尤其廣泛。當(dāng)DSP獨立構(gòu)成ー個處理單元時,往往需要和外設(shè)進(jìn)行數(shù)據(jù)交換,其通信能力至關(guān)重要,常用的通信方法就有串ロ通信。目前比較通用的實現(xiàn)方案是采用通用異步通信芯片實現(xiàn)串ロ擴(kuò)展,采用FPGA實 現(xiàn)DSP與異步串ロ擴(kuò)展芯片之間的邏輯控制,完全基于DSP接收和發(fā)送數(shù)據(jù)。該方案的缺點是當(dāng)數(shù)據(jù)量較大、多串ロ同時工作時占用DSP的時間較長,影響DSP的工作效率,且會造成數(shù)據(jù)丟失。目前多串ロ擴(kuò)展常用的技術(shù)是使用專用的串ロ擴(kuò)展芯片,采用FPGA實現(xiàn)DSP與異步串ロ擴(kuò)展芯片之間的邏輯控制,完全基于DSP接收和發(fā)送數(shù)據(jù),例如GM8123、GM8125等,其功能是將ー個全雙エ串ロ擴(kuò)展成多個串ロ,通過外部引腳控制串ロ擴(kuò)展模式,并且波特率統(tǒng)ー調(diào)節(jié),最高波特率有一定限制,其特點是外部控制少,編程使用簡單。其存在的缺點也比較顯著,擴(kuò)展出的串ロ個數(shù)有限且固定,擴(kuò)展后的串口數(shù)據(jù)傳輸速度會降低,各個串ロ波特率無法單獨設(shè)置,使用擴(kuò)展的接ロ為單ー的串ロ,無法對特定接ロ進(jìn)行擴(kuò)展。
發(fā)明內(nèi)容
本發(fā)明ー種基于FPGA的多串ロ控制器設(shè)計解決了 DSP的單一中斷源的多串ロ擴(kuò)展的問題,擴(kuò)展的各個串ロ全雙エ收發(fā)互不影響,每個串ロ完全獨立,波特率可単獨設(shè)置且速度不會降低,所需的串ロ個數(shù)可以自由定制串ロ接收不存在中斷優(yōu)先級的問題。本發(fā)明提供了一種基于FPGA的擴(kuò)展多串口裝置,采用現(xiàn)場可編程門陣列FPGA通過數(shù)據(jù)總線連接數(shù)字處理器DSP實現(xiàn)串ロ的擴(kuò)展,所述擴(kuò)展多串口裝置包括控制器,至少ー個串ロ模塊,以及連接所述控制器與串ロ模塊的緩存模塊。進(jìn)ー步地,所述串ロ模塊包括波特率發(fā)生器子模塊,串ロ接收子模塊和串ロ發(fā)送子模塊。所述波特率發(fā)生器子模塊是分配器,用于將輸入時鐘分頻成所述串ロ模塊需要的時鐘。單個串ロ均設(shè)計有波特率發(fā)生器就從硬件上保證了擴(kuò)展的每個串ロ波特率可調(diào)可設(shè)。每ー個所述串ロ模塊與控制器之間都具有単獨的緩存模塊,所述緩存模塊為FIFO緩存,所述串ロ模塊與FIFO緩存之間通過異步方式連接。FIFO深度可自由設(shè)置,串ロ與FIFO連接采用異步方式,該設(shè)計從硬件上保證了擴(kuò)展的串ロ均為全雙エ串ロ,各個串ロ互不干擾,單個串ロ收發(fā)也互不影響。所述擴(kuò)展多串口裝置多個串ロ模塊共用一個控制器,提供ー個中斷接ロ,用干與DSP之間傳遞中斷信號,采用單一的中斷源實現(xiàn)多串ロ擴(kuò)展。本發(fā)明還提供了一種如權(quán)利要求I所述的基于FPGA的擴(kuò)展多串口裝置數(shù)據(jù)收發(fā)方法,用于采用FPGA通過數(shù)據(jù)總線連接DSP實現(xiàn)多串口數(shù)據(jù)的收發(fā),其特征在于,所述包括步驟串ロ模塊接收外部串行數(shù)據(jù)的輸入,將串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)寫入緩存模塊;當(dāng)緩存模塊半滿時,通知控制器產(chǎn)生半滿標(biāo)志位標(biāo)識所述緩存模塊為半滿狀態(tài);DSP查詢緩存模塊的半滿標(biāo)志位,通過數(shù)據(jù)總線從具有半滿標(biāo)志位的緩存模塊讀取數(shù)據(jù),直到該緩存模塊為空;DSP通過數(shù)據(jù)總線將數(shù)據(jù)寫入緩存模塊,緩存模塊立即將并行數(shù)據(jù)讀出到串ロ模塊,串ロ模塊將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)發(fā)送。 進(jìn)ー步地,所述數(shù)據(jù)收發(fā)方法還包括步驟所述串ロ模塊中設(shè)置的波特率發(fā)生器將輸入時鐘分頻成所述串ロ模塊需要的時鐘。進(jìn)ー步地,所述數(shù)據(jù)收發(fā)方法還包括步驟,當(dāng)緩存模塊半滿時,通知控制器產(chǎn)生中斷信號,并將所述中斷信號上傳到DSP以觸發(fā)DSP從具有半滿標(biāo)志位的緩存模塊讀取數(shù)據(jù)。本發(fā)明的有益效果是,擴(kuò)展的各個串ロ全雙エ收發(fā)互不影響,每個串ロ完全獨立,波特率可単獨設(shè)置且速度不會降低,需要的串ロ個數(shù)可以自行定制,串ロ接收數(shù)據(jù)向DSP請求中斷后可由DSP選擇數(shù)據(jù)讀取方式,F(xiàn)PGA上串ロ接收不存在優(yōu)先級問題,DSP上只需ー個中斷源進(jìn)行多串ロ擴(kuò)展。
圖I為本發(fā)明擴(kuò)展多串口裝置結(jié)構(gòu)示意圖;圖2為本發(fā)明實施例示意圖。
具體實施例方式下面結(jié)合附圖和實施例對本發(fā)明技術(shù)方案做進(jìn)ー步詳細(xì)說明,以下實施例不構(gòu)成對本發(fā)明的限定。本發(fā)明的實施例使用的是Xilinx的Spartan3系列的XC3S400FPGA與ー塊TMS320C6713DSP相連,實現(xiàn)單一中斷源的多串ロ擴(kuò)展。如圖I所示,本發(fā)明基于FPGA的擴(kuò)展多串口裝置采用Xilinx的Spartan3系列的現(xiàn)場可編程門陣列I (XC3S400FPGA,以下簡稱FPGA),通過數(shù)據(jù)總線連接數(shù)字信號處理器33(TMS320C6713DSP,以下簡稱DSP)實現(xiàn)串ロ的擴(kuò)展。DSP作為上層主控制器,F(xiàn)PGA作為協(xié)處理器作串ロ擴(kuò)展,DSP與FPGA采用同步方式進(jìn)行數(shù)據(jù)通信。其中FPGA的輸入是串ロ接收總線rxd[N:0]2、時鐘CLK4、復(fù)位reset5、地址總線EA8、片選CE9、A0E10、讀使能11、寫使能12、DSP同步時鐘32 ;輸出是串ロ發(fā)送總線txd[N:0]3、中斷 INT6、數(shù)據(jù)總線 ED7。需要說明的是,DSP可同時外接多塊FPGA,通過片選信號CE9來選擇對應(yīng)的FPGA。串ロ接收總線rxd [N: 0] 2和串ロ發(fā)送總線txd [N: 0] 3對應(yīng)的一組串ロ接收和串ロ發(fā)送組成一個完整的擴(kuò)展串ロ,在FPGA硬件允許,特別是FPGA中Block RAM容量允許的條件下,N的取值根據(jù)設(shè)計需要的串口數(shù)自行定制,當(dāng)需要擴(kuò)展三個串ロ時,設(shè)置N為2,rxd [2:0]和串ロ發(fā)送txd[2:0]表示有三個擴(kuò)展串ロ,分別對應(yīng)串ロ 0,串ロ I和串ロ 2。FPGA設(shè)計主要包括FPGA芯片電路、存儲器、輸入/輸出接ロ電路等幾個部分,其中芯片電路是最核心的部分,存儲器的設(shè)計可以參考芯片手冊的標(biāo)準(zhǔn)設(shè)計,輸入輸出管腳可以自行定義并配置電平標(biāo)準(zhǔn),從FPGA管腳出來的串口數(shù)據(jù)信號可以通過電平轉(zhuǎn)換接至所需要的接ロ。核心部分芯片電路設(shè)計主要分為三部分單個串ロ收發(fā)模塊、對應(yīng)的存儲模塊和控制模塊。單個的串ロ收發(fā)模塊由三個子模塊組成波特率發(fā)生器子模塊、串ロ接收子模塊、串ロ發(fā)送子模塊。其中波特率發(fā)生器實質(zhì)上是ー個分頻器,將FPGA的輸入時鐘分頻成串ロ需要的時鐘,單個串ロ均設(shè)計有波特率發(fā)生器就從硬件上保證了擴(kuò)展的每個串ロ波特率可調(diào)可設(shè)。串ロ接收子模塊和串ロ發(fā)送子模塊均根據(jù)串口數(shù)據(jù)定義,采用有限狀態(tài)機(jī)設(shè)計,每個串ロ收發(fā)子模塊與均有與之對應(yīng)的存儲單元,存儲單元的結(jié)構(gòu)選擇FIFO,F(xiàn)IFO深度可設(shè),本例中為512字節(jié)。串ロ與FIFO連接采用異步方式,該設(shè)計從硬件上保證了擴(kuò)展的串ロ均為全雙エ串ロ,各個串ロ互不干擾,單個串ロ收發(fā)也互不影響。 本例中對于串ロ接收,即對接收FIFO讀操作采取的策略是當(dāng)FIFO半滿時產(chǎn)生半滿標(biāo)志位和中斷信號,標(biāo)明該FIFO半滿并告知TMS320C6713DSP讀取該FIFO中緩存的數(shù)據(jù);這樣使得串ロ接收不存在優(yōu)先級問題;對于串ロ發(fā)送則是當(dāng)發(fā)送FIFO中寫入有數(shù)據(jù)時,即將其讀出到串ロ發(fā)送子模塊發(fā)送出去。該控制設(shè)計使得多個串ロ不存在優(yōu)先級的區(qū)另IJ,讀取FIFO時只要中斷信號產(chǎn)生,即由DSP詢查半滿標(biāo)志位讀出對應(yīng)FIFO數(shù)據(jù),有多個標(biāo)志位則讀取多個標(biāo)志位對應(yīng)FIFO的數(shù)據(jù);寫FIFO時只要FIFO有數(shù)據(jù)則硬件完成數(shù)據(jù)發(fā)送。本發(fā)明的ー個具體實施例以三串ロ擴(kuò)展為例,如圖2所示,每個串ロ由三個部分相互連接構(gòu)成串ロ模塊、FIFO、控制器,組成三串ロ的基于FPGA的擴(kuò)展多串口裝置。其中每個串ロ模塊均包括串ロ波特率發(fā)生器、串ロ接收子模塊、串ロ發(fā)送子模塊,并通過FIFO與控制器相連,通過串ロ接收和串ロ發(fā)送接ロ接收和發(fā)送數(shù)據(jù)。具體地,串ロ模塊13包括波特率發(fā)生器14、串ロ接收子模塊15、串ロ發(fā)送子模塊16,通過接收FIF017和發(fā)送FIF018與控制器19相連,通過串ロ接收34接收數(shù)據(jù),通過串ロ發(fā)送35發(fā)送數(shù)據(jù),串ロ接收34對應(yīng)于串ロ接收總線2的rxd
,串ロ發(fā)送35對應(yīng)串ロ發(fā)送總線3的txd
;串ロ模塊20包括波特率發(fā)生器21、串ロ接收子模塊22、串ロ發(fā)送子模塊23,通過接收FIF024和發(fā)送FIF025與控制器19相連,通過串ロ接收36接收數(shù)據(jù),通過串ロ發(fā)送36發(fā)送數(shù)據(jù),串ロ接收36對應(yīng)于串ロ接收總線2的rxd[l],串ロ發(fā)送37對應(yīng)串ロ發(fā)送總線3的txd[l];串ロ模塊26包括波特率發(fā)生器27、串ロ接收子模塊28、串ロ發(fā)送子模塊29,通過接收FIF030和發(fā)送FIF031與控制器19相連,通過串ロ接收38接收數(shù)據(jù),通過串ロ發(fā)送39發(fā)送數(shù)據(jù),串ロ接收38對應(yīng)于串ロ接收總線2的rxd [2],串ロ發(fā)送39對應(yīng)串ロ發(fā)送總線3的txd[2]。圖中三個串ロ模塊共用一個控制器19,每個串ロ模塊具有各自的FIFO和串ロ收發(fā)接ロ,構(gòu)成三個獨立的串ロ。下面以ー個串ロ為例說明連接原理,串ロ模塊13,由三個子模塊組成串ロ波特率發(fā)生器14、串ロ接收子模塊15、串ロ發(fā)送子模塊16。由于每個串ロ都有各自的三個子模塊,因此每個串ロ均是全雙エ的,收發(fā)互不影響,各自的波特率可調(diào)可設(shè),各個串ロ相互獨立。串ロ模塊13的串ロ接收子模塊15與串ロ接收FIF017相連,串ロ發(fā)送FIF018與串ロ發(fā)送子模塊16相連。串口數(shù)據(jù)接收過程為從串ロ接收總線rxd[N:0](對應(yīng)串ロ接收34)接收的對應(yīng)串行數(shù)據(jù)經(jīng)過串 ロ模塊13轉(zhuǎn)換為并行數(shù)據(jù)后寫入串ロ接收FIF017 ;當(dāng)串ロ接收FIFO半滿后告知控制器19,由控制器19向上層DSP控制器產(chǎn)生中斷INT6,控制器19同時標(biāo)識串ロ接收FIF017為半滿狀態(tài);等DSP給出DSP同步時鐘32、讀使能AREl I,并且片選CE9和A0E10信號有效時,控制器19根據(jù)地址總線EA8從指向的串ロ對應(yīng)的接收FIFO (此處應(yīng)為串ロ接收FIF017)中讀取數(shù)據(jù)到數(shù)據(jù)總線ED7上至串ロ接收FIF017為空。對DSP而言,當(dāng)中斷INT6產(chǎn)生后,通過數(shù)據(jù)總線ED7和地址總線EA8向控制器19查詢半滿串ロ接收FIFO,然后告知控制器19讀取該串ロ接收FIFO ;若中斷產(chǎn)生時同時有多個串ロ產(chǎn)生半滿,則由DSP選擇讀取某一串ロ接收FIFO中的數(shù)據(jù)或者讀取所有串ロ接收FIFO,對FPGA來說,串ロ接收不存在優(yōu)先級問題。串口數(shù)據(jù)發(fā)送過程為控制器19與串ロ發(fā)送FIFO 18相連,當(dāng)上層DSP通過地址總線EA8、數(shù)據(jù)總線ED7寫入數(shù)據(jù)時,控制器19將數(shù)據(jù)寫入串ロ發(fā)送FIF018 ;串ロ發(fā)送FIF018與串ロ發(fā)送子模塊16相連,當(dāng)串ロ發(fā)送FIF018中有數(shù)據(jù)時,立即將該并行數(shù)據(jù)讀出到串ロ發(fā)送子模塊16轉(zhuǎn)換為串行串ロ發(fā)送數(shù)據(jù),并寫入到串ロ發(fā)送總線txd[N:0](對應(yīng)為串ロ發(fā)送35)。以上實施例僅用以說明本發(fā)明的技術(shù)方案而非對其進(jìn)行限制,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種基于FPGA的擴(kuò)展多串口裝置,采用現(xiàn)場可編程門陣列FPGA通過數(shù)據(jù)總線連接數(shù)字處理器DSP實現(xiàn)串口的擴(kuò)展,其特征在于,所述擴(kuò)展多串口裝置包括控制器,至少一個串口模塊,以及連接所述控制器與所述串口模塊的緩存模塊。
2.如權(quán)利要求I所述的基于FPGA的擴(kuò)展多串口裝置,其特征在于,所述串口模塊包括波特率發(fā)生器子模塊,串口接收子模塊和串口發(fā)送子模塊。
3.如權(quán)利要求2所述的基于FPGA的擴(kuò)展多串口裝置,其特征在于,所述波特率發(fā)生器子模塊是分配器,用于將輸入時鐘分頻成所述串口模塊需要的時鐘。
4.如權(quán)利要求I所述的基于FPGA的擴(kuò)展多串口裝置,其特征在于,每一個所述串口模塊與控制器之間都具有單獨的緩存模塊,所述緩存模塊為先入先出FIFO緩存模塊。
5.如權(quán)利要求4所述的基于FPGA的擴(kuò)展多串口裝置,其特征在于,所述串口模塊與FIFO緩存模塊之間通過異步方式連接。
6.如權(quán)利要求I所述的基于FPGA的擴(kuò)展多串口裝置,其特征在于,所述串口模塊共用所述控制器。
7.如權(quán)利要求6所述的基于FPGA的擴(kuò)展多串口裝置,其特征在于,所述擴(kuò)展多串口裝置還包括中斷接口,用于與DSP之間傳遞中斷信號。
8.—種如權(quán)利要求I所述的基于FPGA的擴(kuò)展多串口裝置數(shù)據(jù)收發(fā)方法,用于采用FPGA通過數(shù)據(jù)總線連接DSP實現(xiàn)多串口數(shù)據(jù)的收發(fā),其特征在于,所述包括步驟 串口模塊接收外部串行數(shù)據(jù)的輸入,將串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)寫入緩存模塊; 當(dāng)緩存模塊半滿時,通知控制器產(chǎn)生半滿標(biāo)志位標(biāo)識所述緩存模塊為半滿狀態(tài); DSP查詢緩存模塊的半滿標(biāo)志位,通過數(shù)據(jù)總線從具有半滿標(biāo)志位的緩存模塊讀取數(shù)據(jù),直到該緩存模塊為空; DSP通過數(shù)據(jù)總線將數(shù)據(jù)寫入緩存模塊,緩存模塊立即將并行數(shù)據(jù)讀出到串口模塊,串口模塊將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)發(fā)送。
9.如權(quán)利要求8所述的數(shù)據(jù)收發(fā)方法,其特征在于,還包括步驟所述串口模塊中設(shè)置的波特率發(fā)生器將輸入時鐘分頻成所述串口模塊需要的時鐘。
10.如權(quán)利要求8所述的數(shù)據(jù)收發(fā)方法,其特征在于,還包括步驟,當(dāng)所述緩存模塊半滿時,通知控制器產(chǎn)生中斷信號,并將所述中斷信號上傳到DSP以觸發(fā)DSP從具有半滿標(biāo)志位的緩存模塊讀取數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種基于FPGA的擴(kuò)展多串口裝置,采用現(xiàn)場可編程門陣列FPGA通過數(shù)據(jù)總線連接DSP實現(xiàn)串口的擴(kuò)展,包括控制器,至少一個串口模塊,以及連接控制器與串口模塊的緩存模塊,其中串口模塊包括波特率發(fā)生器子模塊,串口接收子模塊和串口發(fā)送子模塊。本發(fā)明還公開了基于FPGA的擴(kuò)展多串口裝置的數(shù)據(jù)收發(fā)方法,當(dāng)串口模塊接收收據(jù)后,將串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)輸入到緩存模塊,當(dāng)緩存模塊半滿時,產(chǎn)生半滿標(biāo)志位和中斷信號,觸發(fā)DSP讀取數(shù)據(jù),當(dāng)有數(shù)據(jù)發(fā)送時,DSP直接將數(shù)據(jù)寫入緩存模塊,串口模塊從緩存模塊讀取數(shù)據(jù),轉(zhuǎn)換為串行數(shù)據(jù)發(fā)送。本發(fā)明擴(kuò)展的各個串口全雙工收發(fā)互不影響,串口個數(shù)可以自行定制,DSP上只需一個中斷源進(jìn)行多串口擴(kuò)展。
文檔編號G06F13/24GK102760111SQ201210223598
公開日2012年10月31日 申請日期2012年6月27日 優(yōu)先權(quán)日2012年6月27日
發(fā)明者李平, 郭首宇 申請人:浙江大學(xué)