【摘要】由于串口通訊的只能一位一位的特殊性,因此在我們實(shí)際操作過程難免會(huì)遇到并行數(shù)據(jù)數(shù)據(jù)的傳輸問題,如果設(shè)計(jì)不好,很容易造成傳輸數(shù)據(jù)的不準(zhǔn)確。本文提出一種基于FPGA的并行數(shù)據(jù)傳輸?shù)拇谕ㄓ嵖刂破鞯脑O(shè)計(jì),很好的解決了這一問題,能夠順利、準(zhǔn)確的完成數(shù)據(jù)通訊任務(wù)。
【關(guān)鍵詞】FPGA;串口通訊;RS-232-C通訊協(xié)議
【中圖分類號(hào)】$972.7+6 【文獻(xiàn)標(biāo)識(shí)碼】A 【文章編號(hào)】1672-5158(2012)09-0151-01
1、串口通訊
串口通信(Serial Communication),是指外設(shè)和計(jì)算機(jī)問,通過數(shù)據(jù)信號(hào)線、地線、控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。這種通信方式使用的數(shù)據(jù)線少,在遠(yuǎn)距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)汀kS著計(jì)算機(jī)系統(tǒng)的應(yīng)用和微機(jī)網(wǎng)絡(luò)的發(fā)展,通信功能越來越顯得重要.這里所說的通信是指計(jì)算機(jī)與外界的信息交換。因此,通信既包括計(jì)算機(jī)與外部設(shè)備之間,也包括計(jì)算機(jī)和計(jì)算N2_問的信息交換。由于串行通信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,并且可以借助現(xiàn)成的電話網(wǎng)進(jìn)行信息傳送,因此,特別適合于遠(yuǎn)距離傳輸。對(duì)于那些與計(jì)算機(jī)相距不遠(yuǎn)的人一機(jī)交換設(shè)備和串行存儲(chǔ)的外部設(shè)備如終端、打印機(jī)、邏輯分析儀、磁盤等,采用串行方式交換數(shù)據(jù)也很普遍。在實(shí)時(shí)控制和管理方面,采用多臺(tái)微機(jī)處理機(jī)組成分級(jí)分布控制系統(tǒng)中,各CPU之間的通信一般都是串行方式.所以串行接口是微機(jī)應(yīng)用系統(tǒng)常用的接口。由于串口通訊的只能一位一位的特殊性,因此在我們實(shí)際操作過程難免會(huì)遇到并行數(shù)據(jù)數(shù)據(jù)的傳輸問題,如果設(shè)計(jì)不好,很容易造成傳輸數(shù)據(jù)的不準(zhǔn)確。本文提出一種基于FPGA的并行數(shù)據(jù)傳輸?shù)拇谕ㄓ嵖刂破鞯脑O(shè)計(jì),很好的解決了這一問題,能夠順利、準(zhǔn)確的完成數(shù)據(jù)通訊任務(wù)。
2、RS-232-0通訊協(xié)議
RS-232-C標(biāo)準(zhǔn)(協(xié)議)的全稱是EIA-RS-232C標(biāo)準(zhǔn),其中EIA(Electronic Industry Association)代表美國電子工業(yè)協(xié)會(huì),RS(recommended standard)代表推薦標(biāo)準(zhǔn),232是標(biāo)識(shí)號(hào),c代表RS232的最新一次修改(1969),在這之前,有RS232B、RS232A。它規(guī)定連接電纜和機(jī)械、電氣特性、信號(hào)功能及傳送過程。常用物理標(biāo)準(zhǔn)還有有EIA RSl422A、EIA RS-423A、EIA RS-485。這里只介紹EIARS-232C(簡(jiǎn)稱232,RS232)。例如,目前在IBMPC機(jī)上的COMl、COM2接口,就是RS-232-C接口。
最為簡(jiǎn)單且常用的RS-232C連接方法就是3線連接法,即地、接收數(shù)據(jù)和發(fā)送數(shù)據(jù)3腳相連。這是因?yàn)槭铡l(fā)數(shù)據(jù)是時(shí)分的,二者不會(huì)同時(shí)傳輸。RS-232-C的串行總線在空閑的時(shí)候保持為邏輯“1”狀態(tài),即串行連接線的電平為-3--15V。當(dāng)需要傳輸一個(gè)字符時(shí),會(huì)發(fā)送一個(gè)邏輯為“o”的起始位,表示開始發(fā)送書庫:之后就逐個(gè)發(fā)送數(shù)據(jù)位、奇偶校驗(yàn)位和停止位(邏輯1),每一次傳輸1個(gè)字符(可以設(shè)成5-8個(gè)比特)。由于任意兩字字符對(duì)應(yīng)瞬間的時(shí)間間隔是可變的,因此也成為異步格式。在RS-232-C協(xié)議中,可以設(shè)置數(shù)據(jù)的傳輸速率。除此之外,字符的位寬、奇偶校驗(yàn)位、停止位都可以被設(shè)置。字符可以為設(shè)置成5-8比特,奇偶校驗(yàn)位可以被除去;停止位為可以設(shè)置為1位、2位甚至1.5位。目前,大部分的處理器都集成了支持RS-232-C的通用異步收發(fā)器,輔助處理器和串行設(shè)備之間的通訊。這也為我們后續(xù)對(duì)于串口通訊控制器提供了有利條件。
3、并行數(shù)據(jù)的串口通訊控制器的設(shè)計(jì)
一般的串口通訊控制器的頂層模塊是有三個(gè)子模塊實(shí)現(xiàn)的,包括波特率發(fā)生器、接收模塊以及發(fā)送模塊。為了滿足并行數(shù)據(jù)傳輸?shù)男枰覀冊(cè)谠锌刂破鞯幕A(chǔ)上增加了一個(gè)模塊:發(fā)送控制模塊。這個(gè)模塊的作用就是將數(shù)據(jù)進(jìn)行處理、排隊(duì)、等待數(shù)據(jù)傳輸,最終完成數(shù)據(jù)傳輸任務(wù)。改進(jìn)串口控制器其結(jié)構(gòu)如圖所示:
發(fā)送模塊的發(fā)送任務(wù)是由狀態(tài)機(jī)完成的,其主要分為一下幾部分:空閑狀態(tài)、起始狀態(tài)、等待狀態(tài)、數(shù)據(jù)移位狀態(tài)、發(fā)送截lL狀態(tài)。當(dāng)復(fù)位信號(hào)有效或者發(fā)送任務(wù)已經(jīng)完成的時(shí)候,發(fā)送模塊就處于空閑狀態(tài),等待發(fā)送指令(tx cmd)的到來,此時(shí)tx ready為高電平,表示隨時(shí)可以接受外部的發(fā)送指令。當(dāng)tx cmd有效時(shí),發(fā)送模塊進(jìn)入起始狀態(tài),同時(shí)拉低tx ready,表明發(fā)送模塊正在處于工作狀態(tài),并拉低比特線txd,給出起始位,然后跳轉(zhuǎn)到等待狀態(tài)。在等待狀態(tài),保持所有信號(hào)值不變,判斷8個(gè)有效數(shù)據(jù)比特是否發(fā)送完畢,如果發(fā)送完畢跳轉(zhuǎn)到發(fā)送停止?fàn)顟B(tài),否則跳轉(zhuǎn)至數(shù)據(jù)位移狀態(tài)。在數(shù)據(jù)位移狀態(tài),發(fā)送模塊將下一個(gè)要發(fā)送的數(shù)據(jù)移動(dòng)到發(fā)送端口上,然后直接跳轉(zhuǎn)至等待狀態(tài)。最后進(jìn)入發(fā)送截止?fàn)顟B(tài),完成后自動(dòng)進(jìn)入空閑狀態(tài),并且將tx teady拉高,數(shù)據(jù)發(fā)送完成。
接收模塊的接收任務(wù)也是由狀態(tài)機(jī)完成的,其主要分為以下幾部分:空閑狀態(tài)、數(shù)據(jù)采樣狀態(tài)、檢驗(yàn)停止位狀態(tài)。空閑狀態(tài),用于檢測(cè)接受數(shù)據(jù)鏈上的起始信號(hào)。系統(tǒng)復(fù)位以后,接受模塊就處于這一狀態(tài),一直檢測(cè)rxd數(shù)據(jù)是否從1變?yōu)镺,一旦檢測(cè)到起始位,立刻進(jìn)入數(shù)據(jù)采樣狀態(tài),采集有效數(shù)據(jù)。在此狀態(tài)下,rx ready信號(hào)的值為1.數(shù)據(jù)采樣狀態(tài),在此狀態(tài)下,接受模塊連續(xù)采樣數(shù)據(jù),直到接受完8個(gè)數(shù)據(jù)比特后,直接進(jìn)入檢測(cè)停止位。在此狀態(tài)下,rx_ready信號(hào)的值為o。檢測(cè)停止位,為了使接受模塊的使用范圍更廣,本程序在這一狀態(tài)等待一段時(shí)間后,直接跳轉(zhuǎn)至空閑狀態(tài)。
發(fā)送控制模塊的任務(wù)也是由狀態(tài)機(jī)完成的,分為以下幾個(gè)部分:空閑狀態(tài)、數(shù)據(jù)排隊(duì)狀態(tài)、等待狀態(tài)、停止?fàn)顟B(tài)。空閑狀態(tài),用于檢測(cè)接受模塊是否接受到相應(yīng)的傳輸數(shù)據(jù)命令。若接到傳輸命令,則進(jìn)入數(shù)據(jù)排隊(duì)狀態(tài)。數(shù)據(jù)排隊(duì)狀態(tài)就是將所需要傳輸?shù)牟⑿袛?shù)據(jù)每8位一組,傳遞到發(fā)送模塊,然后進(jìn)入等待狀態(tài)。等待狀態(tài)就是等待送入發(fā)送模塊的數(shù)據(jù)發(fā)送完成,完成后,再進(jìn)入數(shù)據(jù)排隊(duì)狀態(tài),繼續(xù)發(fā)送數(shù)據(jù),直到數(shù)據(jù)發(fā)送完畢。停止?fàn)顟B(tài)就是數(shù)據(jù)發(fā)送完畢,這時(shí)控制模塊直接進(jìn)入空閑狀態(tài),等待下次數(shù)據(jù)傳輸。
波特率發(fā)生器就是一個(gè)時(shí)鐘產(chǎn)生裝置,根據(jù)不同的波特率,設(shè)置產(chǎn)生不同的時(shí)鐘。由于設(shè)計(jì)比較簡(jiǎn)單,這里不復(fù)贅述。
4、設(shè)計(jì)驗(yàn)證
我們對(duì)上述思路設(shè)計(jì)進(jìn)行了驗(yàn)證。我們向串口發(fā)送相應(yīng)的指令(F),串口發(fā)送回我們相應(yīng)的數(shù)據(jù)(數(shù)據(jù)等間隔,且間隔中間全是零)。結(jié)果截圖如下:
F指令的接受證明接受模塊運(yùn)行良好,發(fā)回我們想要的數(shù)據(jù)證明發(fā)送與發(fā)送控制模塊運(yùn)行良好。這同時(shí)也證明我們的方法具有一定的可行性,能夠完成正常的數(shù)據(jù)通訊任務(wù)。