uart使用的是 非同步,序列通訊。
序列通訊是指利用一條傳輸線將資料一位位地順序傳送。特點是通訊線路簡單,利用簡單的線纜就可實現通訊,降低成本,適用於遠距離通訊,但傳輸速度慢的應用場合。
非同步通訊以乙個字元為傳輸單位,通訊中兩個字元間的時間間隔多少是不固定的,然而在同乙個字元中的兩個相鄰位間的時間間隔是固定的。
資料傳送速率用波特率來表示,即每秒鐘傳送的二進位制位數。例如資料傳送速率為120字元/秒,而每乙個字元為10位(1個起始位,7個資料位,1個校驗位,1個結束位),則其傳送的波特率為10×120=1200字元/秒=1200波特。
資料通訊格式如下圖:
其中各位的意義如下:
起始位:先發出乙個邏輯」0」訊號,表示傳輸字元的開始。
資料位:可以是5~8位邏輯」0」或」1」。如ascii碼(7位),擴充套件bcd碼(8位)。
校驗位:資料位加上這一位後,使得「1」的位數應為偶數(偶校驗)或奇數(奇校驗)。
停止位:它是乙個字元資料的結束標誌。可以是1位、1.5位、2位的高電平。
空閒位:處於邏輯「1」狀態,表示當前線路上沒有資料傳送。
非同步通訊是按字元傳輸的,接收裝置在收到起始訊號之後只要在乙個字元的傳輸時間內能和傳送裝置保持同步就能正確接收。下乙個字元起始位的到來又使同步重新校準(依靠檢測起始位來實現傳送與接收方的時鐘自同步的)
本次在設計uart的verilog程式時,我們採用的uart通訊協議是:1個起始位,8個資料位,無校驗位,1個停止位。
波特率:我們採用9600波特率,但在fpga分頻電路上我們產生了乙個9600*16倍的波特率,即fpga的16個脈衝接收一位pc端的資料。為當取樣到rxd資料起始位訊號有效時,0-7-15開始計數,其中7為資料的中點,最穩定的時刻。因此在此時取樣資料,能夠達到最穩定的效果。
1)非同步資料的同步化
由於pc和fpga端的資料不同步,為了保證資料的同步,需要將外部輸入訊號同步化。採用簡單的d觸發器時序電路。
2)資料接收狀態機的設計
狀態機分配表:
r_idle:初始化等待狀態
r_start:接收到起始位0(還要判斷是否為資料抖動)
r_sample:接收資料
r_stop:等待停止位結束,回到初始化狀態
3)設計程式步驟:
兩段式狀態機
第一段:採用組合邏輯取判斷狀態轉換的條件
(1)在初始化狀態下檢測起始位,來實現狀態的轉換。r_idle
(2)判斷起始位是否抖動,在中點檢測訊號,當計數結束(smp_top)資料依然有效,則表示起始位的開始。 r_start
(3)接收8位資料,採用在資料中點取樣。 r_sample
(4)uart結束位的等待,完成一幀資料的接收。 r_stop
第二段:採用同步時序電路同步接收
最後輸出資料捕獲使能訊號rxd_flag,作為後續模組的捕獲使能訊號。
1)資料接收狀態機的設計
狀態機分配表:
t_idle:初始化等待狀態,等待傳送使能訊號
t_start:資料傳送,傳送完畢回到初始化狀態,等待下一次傳送使能。
2)設計程式步驟:
兩段式狀態機
第一段:採用組合邏輯取判斷狀態轉換的條件
(1)在初始化狀態下檢測傳送使能訊號,來實現狀態的轉換。t_idle
(2)傳送10位資料,採用在計數中點傳送。 等待下一次傳送 t_start
第二段:採用同步時序電路同步逐位傳送uart資料。10個資料需要按照uart的通訊協議傳送不得有誤。
最後輸出資料傳送完成訊號txd_flag,作為後續模組的使能訊號。
本文採用的時網友crazybingo的《fpga設計技巧與案例開發一書中的》程式07_pc2fpga_uart_test
FPGA視角 低速串列埠 UART
uart,只有一根資料通訊線,沒有伴隨時鐘線,屬於非同步通訊。這類介面的衍生諸如 rs232 rs422 rs485 spi等。資料互動時,一般做一收一發,通過固定頻率的高低電平的變換,傳遞資料。這裡只說明其邏輯特性,硬體特性不做說明。用於描述uart的通訊速率,單位bps,以最常見的9600bps...
基於FPGA的UART串列埠通訊
通過串列埠除錯助手pc傳送16bit給fpga,fpga接收後返還給pc。串列埠通訊其實沒我們想象中的那麼難,只要花點時間去理解,很快就會上手,在直入正題前,先來一點基礎知識。串列埠是指傳送和接收資料的序列口,就是我們開啟電腦裝置管理器後看到的com口。fpga或微控制器的板子中很多都用到的是uar...
uart串列埠學習筆記
uart是universal asynchronous receiver and transmitter簡稱,中文為通用非同步接收和傳送器,是常用的序列通訊介面。uart的作用是列印串列埠輸出資訊和連線各種外用裝置 優點是硬體簡單,而且傳輸資訊穩定 但是缺點也很明顯,傳輸資訊非常慢,因為uart是以...