1. 程式人生 > >FPGA-UART協議與實現學習筆記

FPGA-UART協議與實現學習筆記

比特 系統 多少 rs232 計算 計數 時鐘 部分 寄存器

上一段時間學習了一下FPGA,現在寫一些學習心得,以及自已在學習的過程之中遇到的一些問題。

首先介紹一下UART(Universal Asynchronous Receiver/Transmitter)通用異步收發傳輸器。將數據在串行通信和並行通信之間的傳輸轉換。也就是說把多比特的數據轉化為單比特的數據,或者把單比特的數據轉化為多比特的數據。工作原理也就是把每一個比特一位接一位的傳輸的過程。UART是一種通用串行數據總線,用於異步通信。該總線雙向通信,可以實現全雙工傳輸和接收。RS232是UART的一種,是目前最常用的一種串行通訊接口,用於PC機與跟外部板級通信。至於具體內容可以自行百度,下面我就來講一講主要做了什麽。

具體就是運用RS232與串口調試助手,實現PC機與FPGA開發板上的通信。首先要進行通行我們就必須知道我們需要傳輸什麽數據,以及需要用多少的速率來傳輸這些數據,這裏我們選用9600的波特率來傳輸。波特率是什麽?波特率指的是單片機或者計算機在串口通信時的速率。指的是信號被調制以後在單位時間內的變化,即單位時間內載波的參數變化的次數。打個比方就是,比如載波是一條傳輸帶,然後我們要傳輸的數據就是一個一個的貨物類似為正方形,以1s作為單位時間,然後我們的波特率就是指在一秒中之內,這條傳輸帶傳送的貨物數量。如每秒鐘傳輸240個字節,而每個字符格式包含10位(為什麽會是10位詳見RS232通行協議)。也就是說1秒鐘可以傳輸10×240=2400位,那麽此時波特率就是2400波特。

下面就是如何在FPGA上面實現這個通信。首先我們需要知道FPGA系統時鐘是多少,在這裏系統時鐘是50MHZ,也就是一個周期時間是20ns。整個實驗流程是一開始從串口調試助手選擇9600的波率通過PC端的TX線傳送給FPGA端的RX線。我們是對FPGA進行操作,在這一步我們只需要考慮,FPGA板怎樣完整的接收到PC端傳輸來的數據信號。首先計算一下發送一個位數需要多久時間。1s中之內可以傳輸9600位,也就是傳輸1位需要1/9600s,FPGA系統時鐘周期為20ns,也就是發送一位的時間應該為1/9600s/20ns=5208個時鐘周期,我們需要采樣這個信號,只需要在這一段時間之內,讓RX線賦值給我們自己所設置的寄存器就可以。但是為了更加準確,我們選擇在發送時間的中間部位進行采樣,也就是在2604的計數時鐘進行采集,這樣可以保證我們采集的數據位準確無誤。所以我們要做的就是設計一個滿足RS232協議的接收模塊。然後會很輕松的確定輸入信號,輸出信號,以及設置寄存器。下面是我的部分時序。

技術分享圖片

技術分享圖片

FPGA-UART協議與實現學習筆記