張春芳(江南大學(xué),江蘇 無錫 214122;安徽工商職業(yè)學(xué)院,安徽 合肥 231131)
?
基于FPGA的多串口通訊設(shè)計(jì)
張春芳
(江南大學(xué),江蘇無錫214122;安徽工商職業(yè)學(xué)院,安徽合肥231131)
摘要:在工程實(shí)現(xiàn)中,經(jīng)常需要一個(gè)系統(tǒng)與另一個(gè)系統(tǒng)進(jìn)行多串口通信,為此本文設(shè)計(jì)了基于FPGA的串行通訊模塊,詳述了各模塊的設(shè)計(jì)思路和方法.經(jīng)綜合、布局布線后,將程序下載到FPGA芯片中,經(jīng)測試運(yùn)行,數(shù)據(jù)接收正確無誤,模塊工作穩(wěn)定、可靠,通過復(fù)制基本模塊,可滿足需要多個(gè)串口場合的系統(tǒng)要求.
關(guān)鍵詞:FPGA;串口;綜合;布局布線
通用異步收發(fā)器因其簡單可靠而被廣泛使用,各種微處理器,不論是單片機(jī)、DSP、ARM等,UART都是基本外圍模塊,許多場合如系統(tǒng)監(jiān)控、數(shù)據(jù)采集、串口服務(wù)器都要用到多個(gè)串口通信,此時(shí)通常采用專用芯片擴(kuò)展串口,專用芯片使用簡單,然而缺乏靈活性,同時(shí)專用芯片集成的串口數(shù)量也有限,有時(shí)需使用多個(gè)芯片才能滿足要求,增加了系統(tǒng)的復(fù)雜度,降低了可靠性.關(guān)于FPGA串口的研究已有文獻(xiàn)[1-5],在此基礎(chǔ)上本文提出了一種基于FPGA串口設(shè)計(jì)方案,由于FPGA的可編程性、豐富的資源,可根據(jù)系統(tǒng)需要,在不用更改系統(tǒng)硬件的條件下,隨時(shí)實(shí)現(xiàn)多個(gè)串口,具有設(shè)計(jì)靈活、升級方便、集成度高等優(yōu)點(diǎn).
在設(shè)計(jì)一款電磁干擾系統(tǒng)時(shí),系統(tǒng)監(jiān)控分系統(tǒng)需要通過串口對后級的激勵分機(jī)進(jìn)行控制和監(jiān)視,由于電磁干擾系統(tǒng)需要對多個(gè)頻段進(jìn)行全覆蓋,如對講機(jī)、WIFI、遙控器、2G移動通信、3G移動通信等各種頻段進(jìn)行干擾,系統(tǒng)需要多個(gè)激勵分機(jī),這樣就要求監(jiān)控分系統(tǒng)需多個(gè)串口和激勵分機(jī)通信,本系統(tǒng)需要12個(gè)串口,同時(shí)監(jiān)控系統(tǒng)還要和上位機(jī)通過串口通信,又需要1個(gè)串口,市面上無論是8位和32位單片機(jī)均沒有這么多的串口資源.
為此我們選用由FPGA芯片來實(shí)現(xiàn)多串口的設(shè)計(jì),作為一種高速、靈活、可靠的可編程邏輯器件,不僅提高了系統(tǒng)的集成度、靈活性、可靠性,而且降低了產(chǎn)品的開發(fā)周期和成本.本設(shè)計(jì)的FPGA芯片選用的是Altera公司的CycloneIIFPGA系列中的產(chǎn)品EP2C35F484I8,這種低成本的FPGA芯片功耗大大低于同等容量的其他FPGA,待機(jī)功耗不到200mw,非常適合集成度高和需要低功耗的多種應(yīng)用.
2.1UART通訊原理
UART即通用異步收發(fā)器是一個(gè)字符接一個(gè)字符傳輸,一個(gè)字符的信息由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位組成,如圖1所示.字符的前面是一位起始位,用時(shí)鐘下降沿通知接收方傳輸開始,緊跟著起始位之后的是數(shù)據(jù)位,一般由5~8位數(shù)據(jù)位組成.數(shù)據(jù)位后面是奇偶校驗(yàn)位,最后是停止位.停止位是高電平標(biāo)志一個(gè)字符的結(jié)束,并為下一個(gè)字符的開始傳送做準(zhǔn)備.停止位后面是不定長度的空閑位.停止位和空閑位都規(guī)定高電平,這樣可以保證起始位開始處有一個(gè)下降沿.方案中采用1位起始位,8位數(shù)據(jù)位,不設(shè)奇偶校驗(yàn)位,1位停止位,波特率可調(diào)的數(shù)據(jù)傳輸方式.
圖1 串口幀格式
2.2UART發(fā)送模塊
圖2右邊是發(fā)送模塊VHDL生成的符號圖,其中writenot為上級模塊加載并行數(shù)據(jù)指示信號,txidle為一字節(jié)發(fā)送完指示信號,通知上一級發(fā)送下一字節(jié)數(shù)據(jù).Writenot、txidle可以說是串口發(fā)送模塊和上一級模塊的握手信號,因?yàn)楸驹O(shè)計(jì)的全局時(shí)鐘為10MHz,而串口的通信波特率一般為4800bps、9600bps、19200bps等速率,遠(yuǎn)低于10M時(shí)鐘速率,故需在發(fā)送模塊和上一級模塊之間建立握手信號. resetnot為全局復(fù)位信號,clk_10m為全局時(shí)鐘,dataout[7..0]為并行數(shù)據(jù)輸入端,txd為串行數(shù)據(jù)輸出端,baudrate[2..0]為發(fā)送模塊的波特率選擇信號.
圖2 串口發(fā)送模塊符號圖
發(fā)送模塊在每個(gè)全局時(shí)鐘上升沿檢測是否有加載數(shù)據(jù)指示信號(writenot),若檢測到其上升沿,則將并行8位數(shù)據(jù)鎖存進(jìn)發(fā)送寄存器,接下來在每個(gè)發(fā)送時(shí)鐘(即波特率時(shí)鐘)的觸發(fā)下,8位移位寄存器就可以將其中的數(shù)據(jù)逐次移位發(fā)出,當(dāng)一個(gè)字節(jié)數(shù)據(jù)發(fā)送結(jié)束,txidle反饋一個(gè)脈沖信號,通知上一級模塊(twochanelstxpartmp)可發(fā)送下一字節(jié),這樣依次串行發(fā)送一連串字節(jié)數(shù)據(jù).波特率的選擇計(jì)算如下:以9600bps的波特率為例,需對全局時(shí)鐘進(jìn)行計(jì)數(shù),并對10MHz時(shí)鐘進(jìn)行分頻,得到9600Hz頻率的時(shí)鐘,10MHz/9.6KHz=1042,即對10MHz時(shí)鐘進(jìn)行1042分頻.
2.3UART接收模塊
圖3左邊是接收模塊VHDL生成的符號圖,其中resetnot為全局復(fù)位信號,clk_10m為全局時(shí)鐘,baudrate[2..0]為發(fā)送模塊的波特率設(shè)置,dataout [7..0]為并行數(shù)據(jù)輸出端,rxd為串行數(shù)據(jù)輸入端.
圖3 串口接收模塊符號圖
UART接收模塊時(shí)時(shí)檢測線路,當(dāng)線路產(chǎn)生下降沿時(shí),即認(rèn)為線路有數(shù)據(jù)傳輸,啟動接收數(shù)據(jù)進(jìn)程進(jìn)行接收,按從低位到高位接收數(shù)據(jù).將接收數(shù)據(jù)的送入8位移位寄存器中,在8比特?cái)?shù)據(jù)采樣結(jié)束后,再間隔16個(gè)采樣周期采樣停止位.如果采樣得到的是高電平,則認(rèn)為該幀數(shù)據(jù)有效,同時(shí)將輸出數(shù)據(jù)標(biāo)識位(rxidle)置高,將移位寄存器中的數(shù)據(jù)并行送出到下一級模塊(rxpartmp)后,重新等待下一幀的到來.
接收模塊設(shè)計(jì)時(shí),我們用一個(gè)有限狀態(tài)機(jī)來進(jìn)行數(shù)據(jù)的接收判斷,一共有S0、S1、S2、S3、S4、S5、S6、 S7、S8、send等10個(gè)狀態(tài),系統(tǒng)的初始狀態(tài)為S0,當(dāng)接收使能信號rxden為1時(shí),即檢測到數(shù)據(jù)下降沿來臨,將次態(tài)rxstate1置為s1,在下一個(gè)波特率時(shí)鐘上升沿來到時(shí),將次態(tài)rxstate1賦給現(xiàn)態(tài)rxstate0,狀態(tài)轉(zhuǎn)換為s2,依次進(jìn)行狀態(tài)轉(zhuǎn)換,當(dāng)現(xiàn)態(tài)rxstate0為send狀態(tài)時(shí),則模塊將接收到的一字節(jié)數(shù)據(jù)并行送出到下一級模塊(rxpartmp),從而保證了數(shù)據(jù)的完整接收.
2.4系統(tǒng)測試結(jié)果
將發(fā)送模塊和接收模塊組合起來,如圖4上圖所示,就能較容易地實(shí)現(xiàn)通用異步收發(fā)器總模塊設(shè)計(jì),如圖所示,再綜合、布局、布線,在PC機(jī)上安裝一個(gè)串口調(diào)試工具,通過串口調(diào)試工具向FPGA發(fā)送一串?dāng)?shù)據(jù),再在PC機(jī)上接受FPGA發(fā)送的數(shù)據(jù).試驗(yàn)結(jié)果顯示串口調(diào)試工具均能正確收到發(fā)送的數(shù)據(jù),QuartusⅡ的SignalTap數(shù)據(jù)采樣結(jié)果如圖4下圖所示,數(shù)據(jù)在輸入端和輸出端是一致的,表明設(shè)計(jì)的串口傳輸可靠、穩(wěn)定.
圖4 接收發(fā)送總模塊及SignalTap采樣數(shù)據(jù)圖
本文詳細(xì)地介紹了FPGA實(shí)現(xiàn)串口的整個(gè)過程,包括發(fā)送模塊、接收模塊的實(shí)現(xiàn).本設(shè)計(jì)可作為FPGA開發(fā)多串口設(shè)備的一個(gè)基本模塊,通過復(fù)制基本模塊,可在一片F(xiàn)PGA芯片上擴(kuò)展出多個(gè)串口,而數(shù)量僅與FPGA可用資源有關(guān),滿足多串口場合的需要,替代采用專用串口芯片的傳統(tǒng)設(shè)計(jì)方案,降低多串口系統(tǒng)的復(fù)雜度,提高系統(tǒng)可靠性.
參考文獻(xiàn):
〔1〕沈克寧,林錦瀘,等.基于的多串口服務(wù)器設(shè)計(jì)[J].武漢理工大學(xué)學(xué)報(bào),2011,33(2):204-206.
〔2〕粟慧龍,肖遼亮.基于CPLD/FPGA的多串口設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2011,19(2):77-79.
〔3〕劉鳳新,趙堅(jiān)固.基于FPGA的多路并行獨(dú)立串口的實(shí)現(xiàn) [J].儀表技術(shù)與傳感器,2010,11(6):45-46.
〔4〕陳志逸,趙敏,等.基于并行控制的FPGA多串口拓展實(shí)現(xiàn) [J].機(jī)械制造與自動化,2014,43(1):124-127.
〔5〕盧俊文,鄭鷺斌.等,基于IP核的多UART擴(kuò)展及其FPGA實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20 (6):188-191.
中圖分類號:TP368.1
文獻(xiàn)標(biāo)識碼:A
文章編號:1673-260X(2016)06-0027-02
收稿日期:2016-03-11
基金項(xiàng)目:2015年安徽省高等學(xué)校自然科學(xué)研究重點(diǎn)項(xiàng)目 (KJ2015A450);2016年安徽省高等學(xué)校自然科學(xué)研究重點(diǎn)項(xiàng)目(KJ2016A081);2016年安徽省高等學(xué)校自然科學(xué)研究一般項(xiàng)目(KJ2016B001)