摘要:該文闡述了通用異步收發(fā)器(UART)異步串行通信原理,介紹了實現(xiàn)UART異步串行通信的硬件接口電路及各部分硬件模塊。該文基于Verilog語言實現(xiàn)了接收器和發(fā)送器這兩個UART的內部核心功能模塊,通過Modelsim對相應Verilog-HDL程序的仿真,驗證了其異步串行數(shù)字接收和發(fā)送的功能。
關鍵詞:Modelsim仿真;硬件描述語言;Verilog;UART
中圖分類號:TP391文獻標識碼:A文章編號:1009-3044(2008)34-1752-03
Design and Simulation of Universal Asynchronous Receiver/transmitter Based on Verilog-HDL
LIU Li-jia
(Liaoning University Of Technology,The School of Electronics and Information Engineering, Jinzhou 121001, China)
Abstract: The paper expatiate the asynchronous serial communication theory of the UART, introduce the hardware interface circuit of asynchronous serial communication and the hardware module of each part. By using the Verilog-HDL ,the article realize the transmitter and receiver,which are kernel functional modules of the UART. Through the Modelism simulation,we validate the function of asynchronous serial receiver and transmitter.
Key words: Modelism simulation; hardware description language; Verilog; UART
1 引言
UART(Universal Asynchronous Receiver Transmitter)協(xié)議是一種串行數(shù)據(jù)傳輸協(xié)議。UART允許在串行鏈路上進行全雙工通信,在軍事、工業(yè)、通信、自動控制、話音圖像處理等眾多領域得到了廣泛運用。8250、NS16450等芯片都是常見的UART器件,這類芯片具有多種功能,但在實際應用中有時只需要使用UART的部分功能,因而會造成一定的資源浪費。本文使用Verilog HDL語言編寫出簡化型的異步串行數(shù)字接收、發(fā)送接口(UART)內部核心模塊的硬件描述程序及其相應的測試程序,然后應用Modelsim對所編的程序進行仿真,驗證其UART功能。
2 UART的結構
異步串行數(shù)據(jù)幀格式如圖1所示。在異步通信中,一個字符在傳輸時,除傳輸實際編碼信息外,還要傳輸幾個外加位,即傳輸開始時首先輸出起始位“0”。起始位后面為5~8個數(shù)據(jù)位,在同一個傳輸系統(tǒng)中,數(shù)據(jù)位的數(shù)目是固定的。數(shù)據(jù)位后面是奇偶校驗位。最后的數(shù)位為停止位“1”。
在本方案中,異步串行通信傳送一個字符,包括10位,其中有1個起始位,7個數(shù)據(jù)位,1個奇偶校驗位和1個停止位。奇偶校驗位采用的是奇校驗,即7個數(shù)據(jù)位中“1”的個數(shù)為奇數(shù)個校驗位輸出為“1”,個數(shù)為偶數(shù)個時校驗位輸出為“0”。
3 UART的Verilog HDL實現(xiàn)
UART主要由波特率發(fā)生模塊、發(fā)送模塊、接收模塊這三個部分組成。
波特率發(fā)生器用于產生一個本地時鐘信號來控制UART的接收與發(fā)送;UART接收模塊的用途是接收rxd端的串行信號,并將其轉化為并行數(shù)據(jù);UART發(fā)送模塊的用途是將準備輸出的并行數(shù)據(jù)按照基本UART幀格式轉為串行數(shù)據(jù)從txd端串行輸出。圖2為UART的三個子模塊。
3.1 波特率發(fā)生模塊
設計的UART的接收和發(fā)送按照相同的波特率進行,波特率可以通過接口模塊的總線接口進行設置。UART收發(fā)的每一個數(shù)據(jù)寬度都是波特率發(fā)生器輸出的時鐘周期的16倍,假如按照9600b/s進行收發(fā),那么波特率發(fā)生器的輸出時鐘頻率應該為9600×16Hz。假定提供的外部時鐘為1.6MHz,可以通過總線寫入不同的數(shù)值到波特率發(fā)生器保持寄存器,然后用計數(shù)器的方式生成所需要的各種波特率,即分頻器。計算公式為:1600000÷(16×RS)-1,其中RS為所期望的波特率。
如果要輸出10000Hz的波特率,可以得到從總線寫入的數(shù)值為1600000÷(16×10000)-1=9(即09H)。
3.2 接收模塊
1) 接收模塊原理
接收模塊的結構如圖3所示。接收模塊的作用是把收到的
串行數(shù)據(jù)轉換成并行數(shù)據(jù)進行輸出,并判斷收到數(shù)據(jù)是否有錯。
① rxd 接收串行數(shù)據(jù)輸入
② Ri 串行接收標志c)CLK 時鐘信號
③ LOAD 發(fā)送控制信號
④ rxdin[7:0] 并行數(shù)據(jù)輸出端
接收模塊是從rxd端接收數(shù)據(jù),rxd端由邏輯1跳變?yōu)檫壿?,此時視為一個數(shù)據(jù)幀的開始。接收模塊從捕捉到數(shù)據(jù)幀的第一個“0”開始工作,每經過一個clk,計數(shù)器point2計數(shù)一次,同時將起始位之后的7個數(shù)據(jù)位依次送入移位寄存器中,當計數(shù)為7時,完成一個字符的接收,此時這7位數(shù)據(jù)完成串并轉換并將并行數(shù)據(jù)輸出至端口rxdin的第0~6位,并行輸出口的第7位是奇偶校驗位,由寄存器sdi加載。之后,UART接收模塊繼續(xù)檢測下一個數(shù)據(jù)幀起始位的到來。
2) 接收模塊實現(xiàn)的流程
接收模塊實現(xiàn)的流程如圖4所示。
3) 接收模塊仿真分析
由圖5仿真結果我們可以看到:串行接收標志為0時,接收模塊從rxd處接收串行數(shù)據(jù),舍棄起始位0,取其后的7位數(shù)據(jù)位1000101送入寄存器,完成串并轉化由低到高輸出至端口rxdin,與此同時寄存器sdi把運算得到的校驗位1輸出至最高位,8位數(shù)據(jù)位以并行的形式輸出,完成了由串行到并行的轉換。
■
圖5 接收模塊仿真波形
3.3 發(fā)送模塊
1) 發(fā)送模塊原理
接收模塊主要實現(xiàn)對并行數(shù)據(jù)的緩存,并串轉換,然后把串行數(shù)據(jù)按照既定數(shù)據(jù)幀格式進行輸出,其結構如圖6所示:
■
圖6UART發(fā)送模塊
① txdin [6:0] 7位并行數(shù)據(jù)的輸入端
② Ti 串行發(fā)送標志Ti=0串行輸出,Ti為上升沿時停止輸出
③ Load 為系統(tǒng)復位輸入端,低電平有效d)txd 串行輸出端
發(fā)送模塊實現(xiàn)的功能是將要發(fā)送的7位并行數(shù)據(jù)變?yōu)榇袛?shù)據(jù),同時在數(shù)據(jù)頭部加起始位,在數(shù)據(jù)位尾部加奇偶校驗位和停止位。即,當UART發(fā)送模塊被復位信號LOAD復位以后,發(fā)送模塊讀取7位并行數(shù)據(jù)到寄存器txdbuff中,之后輸出邏輯0作為起始位,從起始位的下一位開始對時鐘CLK的上升沿計數(shù),每計一次數(shù)從寄存器中按照由低位到高位的順序取出一位數(shù)據(jù)送到txd端,當計數(shù)為7時,數(shù)據(jù)位發(fā)送完畢。之后,根據(jù)7位數(shù)據(jù)位中邏輯1的個數(shù)確定校驗位,然后輸出校驗位,最后輸出邏輯1作為停止位。
2) 發(fā)送模塊實現(xiàn)的流程
發(fā)送模塊實現(xiàn)的流程如圖7所示。
3) 仿真結果分析
由圖8仿真結果可以看到:發(fā)送模塊讀入并行數(shù)據(jù)0101101, 存入寄存器txdbuff中,串行輸出端txd首先送出起始位0,之后將txdbuff中的數(shù)據(jù)由低到高進行并串轉化從txd端順序送出,即1011010,然后發(fā)送校驗位0,最后送出終止位1,這一過程,實現(xiàn)了UART發(fā)送模塊并行數(shù)據(jù)轉化為串行數(shù)據(jù)的功能。當串行發(fā)送標志為0時,發(fā)送模塊再次讀入并行數(shù)據(jù)并經過并串轉化由txd端輸出。
■
圖8發(fā)送模塊仿真波形
4 結束語
Verilog-HDL是一種硬件描述語言,用于從算法級、門級到開關級的多種抽象設計層次的數(shù)字系統(tǒng)建模,該語言最大的特點是簡潔、靈活、高效,其風格類似C語言,容易學習和掌握,本文利用Verilog設計的靈活性實現(xiàn)了UART接收和發(fā)送模塊,并可以在接收數(shù)據(jù)時對其校驗位進行判斷,在發(fā)送數(shù)據(jù)時形成完整的一幀數(shù)據(jù)格式,實驗證明該簡化UART模塊設計占用資源少,工作穩(wěn)定可靠,可運用在中低端的異步通信系統(tǒng)中。
參考文獻:
[1] 季雄,段吉海,胡媛媛,等.基于VerilogHDL的UART設計[J].微計算機信息,2006,22(17):230-232.
[2] 李少東.基于FPGA的異步收發(fā)器模塊設計[J].電子質量,2008(1):14-16.
[3] 扈華,白鳳娥.基于Verilog-HDL的UART串行通訊模塊設計及仿真[J].計算機與現(xiàn)代化,2008(8):15-19.