汪超宇
摘要:通用異步收發(fā)器是一種能同時支持短距離和長距離數據傳輸的串行通信接口,被廣泛應用于微機和外設之間的數據交換,本文對FPGA的通用異步收發(fā)器設計進行分析。
關鍵詞:通用異步收發(fā)器數據傳輸數據交換
串行通信方式傳遞數據所傳輸的距離比較遠,所用的數據線也很少,并且其穩(wěn)定性也高。因此在數據通信方面能夠被廣泛的使用。異步收發(fā)器(UART)是經常被使用來進行串口通信的設備。本文就是用VHDL語言編寫的應用在FPGA上的一個UART。在傳遞數據時,我們僅僅需要使用UART的幾個作用,所以如果專門購置專用的UART,則會造成資金和功能上的浪費。恰好VHDL可以用硬件語言搭建出UART的模型,可以根據所需要的功能來進行程序的編寫,這樣既省費用又省步驟。
1UART的工作原理
UART(UniversalAsynchronousReceiverTransmitter,通用異步收發(fā)器)是通常使用的異步串行傳遞數據的傳輸協(xié)議。在串行通信中,數據是一個字節(jié)幀一個字節(jié)幀來發(fā)送信息的。發(fā)送端和接收端在接收數據幀的時候必須有約定的格式和約定的波特率。一個數據幀由1位起始位(低電平)、5~8位數據位、1位校驗位(可選可不選)和停止位來組成。一個數據幀的開始便是起始位,起始位處于邏輯0狀態(tài),處于邏輯0狀態(tài)就表明發(fā)送端已經準備開始發(fā)送數據了。一個數據幀的結束是停止位,停止位處于邏輯1狀態(tài),處于邏輯1就表明接收端已經停止接收數據了。而波特率采用標準速率9600字節(jié)每秒。數據在傳輸時,低位在前,高位在后。接收端檢測并確認起始位后,開始接收數據位。當接到停止位后,FPGA向CPU發(fā)出中斷信號。發(fā)送數據時,CPU設置波特率為9600字節(jié)每秒,然后FPGA將數據一幀一幀的通過總線傳遞給CPU,當CPU接收到低電平時,表示此時數據傳送結束。
2程序設計與仿真
頂層程序與仿真:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitytopis
port(clk32mhz,reset,rxd,xmit_cmd_p_in:instd_logic;
rec_ready,txd_out,txd_done_out:outstd_logic;
txdbuf_in:instd_logic_vector(7downto0);
rec_buf:outstd_logic_vector(7downto0);
bclkout:outstd_logic
);
endtop;
architectureBehavioraloftopis
componentreciever
port(bclkr,resetr,rxdr:instd_logic;
r_ready:outstd_logic;
rbuf:outstd_logic_vector(7downto0));
endcomponent;
componenttransfer
port(bclkt,resett,xmit_cmd_p:instd_logic;
txdbuf:instd_logic_vector(7downto0);
txd:outstd_logic;
txd_done:outstd_logic);
endcomponent;
componentbaud
port(clk,resetb:instd_logic;
bclk:outstd_logic);
endcomponent;
signalb:std_logic;
begin
u1:baudportmap(clk=>clk32mhz,resetb=>reset,bclk=>b);
u2:recieverportmap(bclkr=>b,resetr=>reset,rxdr=>rxd,r_ready=>rec_ready,rbuf=>rec_buf);
u3:transferportmap(bclkt=>b,resett=>reset,xmit_cmd_p=>xmit_cmd_p_in,txdbuf=>txdbuf_in,txd=>txd_out,txd_done=>txd_done_out);
bclkout<=b;
endBehavioral;
3總結
UlART經常用于數據之間的串行通信,它所需要使用的線路較少,并且穩(wěn)定性高,數據可以傳輸很長的距離,因此芯片或計算機系統(tǒng)之間進行數據傳送時經常用UART。使用VHDL語言,可以把UART有限狀態(tài)機做的更加精密,更加適合于數據的通信,數據之間的傳遞的穩(wěn)定性更高。
參考文獻:
[1]朱勤.基于VHDL/FPGA的嵌入式UART的設計及FPGA驗證[D].蘇州大學,2011.
[2]劉李明.基于FPGA的通用實時信號處理系統(tǒng)的硬件設計與實現[D].北京工業(yè)大學,2009.
[3]劉志平.基于FPGA的高速數據采集存儲系統(tǒng)設計[D].西安電子科技大學,2009.