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