標籤:style blog http 使用 資料 2014 art ar
RS232串口經常使用在PC機與FPGA通訊中,用於兩者之間的資料轉送,因為UART協議簡單、易實現,故經常使用。
DB9介面只需要使用3根線,RXD(2)、TXD(3)和GND(5),如所示。而用FPGA實現控制器時只需要利用RXD和TXD兩根線即可完成串口通訊。
UART的非同步通訊協議如下所示:
1. 首先接受雙方提前定義好通訊的速度和格式等資訊;
2. 如果是空閑狀態,發送器一直將資料線拉高;
3. 開始通訊時,發送器將資料線拉低,從而接收器能知道資料位元組即將過來;
4. 資料位元通常是8位,低位先發送,高位後發送;
5. 停止通訊時,發送器將資料線再次拉高。
控制器包括3部分:傳輸速率發生器、發送器和接收器,本設計發送器和接收器都帶有非同步FIFO快取資料。本設計完成如下功能;串口助手發送資料位元組給FPGA,FPGA將資料返回給串口助手。傳輸速率採用11520bps,資料格式1位開始位、8位元據位和1位停止位,無校正位。
1. 傳輸速率發生器
傳輸速率發生器需要對主時鐘進行分頻產生發送器和接收器的工作時鐘。發送器的時鐘就等于波特率,而接收器的時鐘頻率是傳輸速率的8倍或者16倍,即對發送器發過來的資料進行過採樣以獲得準確的資料。下面是接收器和發送器的分頻係數。
parameter Div_rcv = Clk_freq/Bandrate/16-1; //8倍
parameter Div_trans = Clk_freq/Bandrate/2-1;
發送完一個資料位元組後,等待FIFO_T非空或者FIFO_R非空。
2. 發送器
發送器發送的資料從FIFO_T中讀取,而FIFO_T資料是從FIFO_R獲得。如果FIFO_T非空,讀取一個資料位元組並在末尾添加資料位元0(開始通訊位,拉低資料線),下一步進行9次右移操作,串列輸出資料位元。
XMT_shftreg <= { 1‘b1,XMT_shftreg[word_size:1]};
assign Serial_out = XMT_shftreg[0];
3. 接收器
本設計採樣時鐘頻率是傳輸速率的8倍,資料有效中間時刻採樣資料,即在第4個採樣時鐘擷取資料。先採樣到起始資料0之後,通過一個計數器計滿8個時鐘採樣下一個有效資料。當採樣獲得8位元據後將8位元據寫入FIFO_R,從而產生非空訊號準備供發送器FIFO_T讀取。
RCV_shftreg <= {Serial_in,RCV_shftreg[word_size - 1:1]};
4. 實驗結果
在實驗板測試UART通訊,接收資料個數等於發送資料個數,能滿足一般的通訊要求。如果想提高準確度,可提高採樣頻率、增加校正位或者增加停止位個數(1.5或2)。
此外,3個模組可以共使用一個系統時鐘clk。接收器和發送器工作時鐘可以作為clk的時鐘使能訊號,這樣這個設計就只使用了一個時鐘。