串行通信是指利用一條傳輸線將資料一位位地順序傳送。特點是通信線路簡單,利用簡單的線纜就可實現(xiàn)通信,降低成本,適用于遠(yuǎn)距離通信,但傳輸速度慢的應(yīng)用場合。
異步通信以一個字符為傳輸單位,通信中兩個字符間的時間間隔多少是不固定的,然而在同一個字符中的兩個相鄰位間的時間間隔是固定的。
數(shù)據(jù)傳送速率用波特率來表示,即每秒鐘傳送的二進制位數(shù)。例如數(shù)據(jù)傳送速率為120字符/秒,而每一個字符為10位(1個起始位,7個數(shù)據(jù)位,1個校驗位,1個結(jié)束位),則其傳送的波特率為10&TImes;120=1200字符/秒=1200波特。
數(shù)據(jù)通信格式如下圖:
其中各位的意義如下:
起始位:先發(fā)出一個邏輯”0”信號,表示傳輸字符的開始。
數(shù)據(jù)位:可以是5~8位邏輯”0”或”1”。如ASCII碼(7位),擴展BCD碼(8位)。
校驗位:數(shù)據(jù)位加上這一位后,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗)或奇數(shù)(奇校驗)。
停止位:它是一個字符數(shù)據(jù)的結(jié)束標(biāo)志。可以是1位、1.5位、2位的高電平。
空閑位:處于邏輯“1”狀態(tài),表示當(dāng)前線路上沒有資料傳送。
異步通信是按字符傳輸?shù)模邮赵O(shè)備在收到起始信號之后只要在一個字符的傳輸時間內(nèi)能和發(fā)送設(shè)備保持同步就能正確接收。下一個字符起始位的到來又使同步重新校準(zhǔn)(依靠檢測起始位來實現(xiàn)發(fā)送與接收方的時鐘自同步的)
串行通信的硬件接口電路原理設(shè)計在串行通信中,普遍采用的是RS-232-C接口的標(biāo)準(zhǔn)。RS-232-C接口信號引腳的連接方式規(guī)定了25芯的D型連接器(DB225),實際使用中多采用的是一個9芯的D型連接器(DB29),本方案采用了DB29連接器
本方案的異步串行通信的硬件接口電路圖如圖2所示,由三部分組成:FPGA串口模塊、MAX232和DB29。MAXIM公司的MAX232是為滿足EIA/TEA2232E的標(biāo)準(zhǔn)而設(shè)計的,具有功耗低、波特率高、價格低等優(yōu)點,工作電源為+5V,外界電容僅為0.1uF或1Uf,為雙組RS2232收發(fā)器。MAX232有兩個發(fā)送器,若只用其中一個發(fā)送器,另外一個發(fā)送器的輸入、輸出端可以懸空。本方案把異步通信電路作為一個整體來實現(xiàn),數(shù)據(jù)由DB29的RxD端輸入,經(jīng)過MAX232進行電平轉(zhuǎn)換由FPGA串口模塊的RxD端進入,進行串并轉(zhuǎn)換后經(jīng)由8位數(shù)據(jù)總線(D72D0)進入FPGA的其它模塊或其它的處理芯片。數(shù)據(jù)處理后經(jīng)由8位數(shù)據(jù)總線進入FPGA串口模塊,在其中進行并串轉(zhuǎn)換后由TxD端輸出MAX232的12管腳,在MAX232種經(jīng)過電平轉(zhuǎn)換后由DB29的TxD端輸出。
FPGA串口模塊設(shè)計FPGA串口模塊是本設(shè)計的關(guān)鍵所在,的內(nèi)部邏輯結(jié)構(gòu)及各部件的功能。如圖3所示,主要由波特率發(fā)生模塊、發(fā)送模塊,接收模塊組成。用Verilog實現(xiàn)設(shè)計的各部件功能說明如圖3
波特率發(fā)生模塊
設(shè)計的UART的接收和發(fā)送按照相同的波特率進行,波特率可以通過接口模塊的總線接口進行設(shè)置。UART收發(fā)的每一個數(shù)據(jù)寬度都是波特率發(fā)生器輸出的時鐘周期的16倍,即假定當(dāng)前按照9600b/s進行收發(fā),那么波特率發(fā)生器的輸出時鐘頻率應(yīng)該為9600&TImes;16Hz。假定提供的外部時鐘為1.6MHz,可以很簡單地通過總線寫入不同的數(shù)值到波特率發(fā)生器保持寄存器,然后用計數(shù)器的方式生成所需要的各種波特率,即分頻器。計算公式為:1600000/(16&TImes;所期望的波特率)-1,如果希望輸出10000Hz的波特率,可以得出從總線寫入的數(shù)值為1600000/(16&TImes;10000)-1=9(09H)。
發(fā)送模塊根據(jù)UART協(xié)議的描述,發(fā)送數(shù)據(jù)由接口模塊控制,接口模塊給出wrn信號,發(fā)送器根據(jù)此信號將并行數(shù)據(jù)鎖存,并通過發(fā)送保持寄存器和發(fā)送移位寄存器發(fā)送并行數(shù)據(jù)。由計數(shù)器no-bs-sent控制狀態(tài)的轉(zhuǎn)移,即數(shù)據(jù)的發(fā)送,計數(shù)值為1時,數(shù)據(jù)從發(fā)送保持寄存器傳送到發(fā)送移位寄存器,計數(shù)值為2時,發(fā)送開始位(1b低電平),計數(shù)值為3~10,發(fā)送8位數(shù)據(jù),計數(shù)器為11,發(fā)送校驗位,計數(shù)值為12,發(fā)送1位停止位,計數(shù)器隨后清零。發(fā)送時鐘是根據(jù)數(shù)據(jù)傳輸?shù)牟ㄌ芈十a(chǎn)生的,16倍于波特率發(fā)生器產(chǎn)生的時鐘。
在Xilinx的ISE7.1.02i集成環(huán)境中,用Verilog編寫代碼,Synplifypro8.1進行邏輯綜合,Modelsim6.0d進行仿真,其結(jié)果如圖4所示。
接收模塊
接收邏輯首先通過檢測輸入數(shù)據(jù)的下降沿來檢查起始位,然后產(chǎn)生接收時鐘,利用接收時鐘來采樣串行輸入數(shù)據(jù),在緩沖器中作移位操作,同時產(chǎn)生校驗位,在第9位處比較校驗位是否正確,在第10位處比較停止位是否為高,在校驗位錯誤或停止位錯誤的情況下產(chǎn)生錯誤指示信號。接收時鐘是根據(jù)數(shù)據(jù)傳輸?shù)牟ㄌ芈十a(chǎn)生的,16倍于波特率發(fā)生器產(chǎn)生的時鐘。
使用Modelsim6.0對接收模塊做了時序仿真,其結(jié)果如圖5所示。接收時鐘與發(fā)送時鐘相同,接收到一幀串行數(shù)據(jù),由接收模塊轉(zhuǎn)換為并行輸出,并且檢驗校驗位和停止位,產(chǎn)生framing-error和parity-error信號輸出。
接口控制模塊
接口控制模塊連接控制發(fā)送、接收、波特率發(fā)生模塊,并與外部并行總線相連接,從外部(CPU或單片機)接收控制信號(nrst,nwrn,nbdn,nrdn),來控制UART的發(fā)送、接收以及內(nèi)部時鐘的生成。在nwrn有效并且內(nèi)部信號tbre=‘0’(發(fā)送緩沖寄存器空)時,將數(shù)據(jù)總線輸入的并行數(shù)據(jù)發(fā)送給發(fā)送模塊數(shù)據(jù)線din(7:0),執(zhí)行發(fā)送數(shù)據(jù)功能。在nrdn有效并且內(nèi)部信號data-ready,parity-error,framing-error有效時,允許從接收模塊讀入接收到的數(shù)據(jù)。波特率發(fā)生器和發(fā)送模塊的并行數(shù)據(jù)輸入端口共用一個數(shù)據(jù)總線。
綜合實現(xiàn)其性能分析使用Xilinx的SpatanIIxc2s100FPGA芯片,對整個FPGA設(shè)計使用Synplifypro8.1進行邏輯綜合,其實占用的FPGA資源總共僅為56個查找表(LUTs),占用的資源很少,可以很方便的集成在其他的FPGA設(shè)計中;最高時鐘速度可以到達121.8MHz,可見此設(shè)計完全可以滿足任何一種標(biāo)準(zhǔn)的波特率系列
硬件電路實現(xiàn)及軟件實現(xiàn)在驗證此UARTFPGA設(shè)計時,使用了PADS來設(shè)計電路原理圖和PCB圖,并最終在硬件上下載調(diào)試成功。在驗證UART通信時,此設(shè)計的PC機串口通信程序,采用了Ac2tiveX控件方式來實現(xiàn)。
用FPGA實現(xiàn)了UART通信功能,可以實現(xiàn)對數(shù)據(jù)的接收和發(fā)送,并可以在接收數(shù)據(jù)時對其校驗位、停止位進行判斷,在發(fā)送數(shù)據(jù)時可以形成完整的一幀數(shù)據(jù)格式。其接收和發(fā)送數(shù)據(jù)的時鐘有內(nèi)部波特率發(fā)生器產(chǎn)生,根據(jù)預(yù)置的分頻系數(shù),對外部時鐘進行分頻,產(chǎn)生需要的接收或發(fā)送時鐘。將該UARTFPGA設(shè)計作為一功能塊嵌入到一個FPGA實現(xiàn)的數(shù)據(jù)采集與處理系統(tǒng)中,可以成功地實現(xiàn)和遠(yuǎn)端的PC機進行異步串行通信。實驗證明該UART設(shè)計占用資源少,工作穩(wěn)定可靠,可運使用在低端的異步通信。