|
勇敢的芯伴你玩轉Altera FPGA連載67:UART loopback測試 特權同學,版權所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1i5LMUUD
UART(Universal Asynchronous Receiver/Transmitter),即通用異步收發,它的數據傳輸不需要時鐘,只要兩條信號線分別進行數據收發。既然沒有時鐘,那么他們是如何保證數據收發的準確性的?很簡單,收發雙方首先需要做到知己知彼,約定好數據傳輸的速率(簡單的講就是約定好一個數據位傳輸的時間)和幀格式(即一幀的長短,一幀由哪些位組成,他們的功能都是什么)。 我們看看UART的一個幀定義。簡單的串口幀格式如圖8.49所示,它由1個起始位(必須為0)、8個數據位(用戶數據)、1個奇偶校驗位(用于簡單的糾錯以保證傳輸可靠性)和1或2個停止位(必須為1)組成。除了奇偶校驗位,其他三個部分都是必須的。當信號線空閑時,必須為高電平。要發起數據傳輸時,1個低電平的脈沖表示起始位,然后連續傳輸8個數據位和若干個高電平的停止位,這樣便完成一次傳輸。
圖8.49串口幀格式 該實驗要實現的功能是FPGA實時監測uart_rx信號是否有數據,若接收到數據,則把接收到的數據通過uart_tx發回給對方。PC機使用一個串口調試助手進行通信。 在代碼設計中,speed_setting.v模塊里可以修改收發數據的波特率,如9600bps,19200bps,38400bps,57600bps或115200bps等。發送的數據幀格式為:1bit起始位,8bit數據,無校驗位,1bit停止位。 該實例的內部功能如圖8.50所示。
圖8.50 串口實例功能框圖 該工程實例的設計模塊層次如圖8.51所示。
圖8.51 串口實例模塊層次 |