999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于FPGA的UART設計與實現

2010-04-12 00:00:00
現代電子技術 2010年11期

摘 要:介紹了應用現場可編程門陣列(FPGA)設計和實現通用異步收發器UART的方法。采用有限狀態機模型形式化描述了UART的功能,在此基礎上用硬件描述語言VHDL編程實現了UART,并使用Quartus Ⅱ軟件中的嵌入式邏輯分析儀SignalTapⅡ對數據傳輸進行了檢測,驗證了設計的正確性。

關鍵詞:FPGA; UART; 有限狀態機; SignalTapⅡ

中圖分類號:TP332 文獻標識碼:A

文章編號:1004-373X(2010)11-0154-03

Design and Realization of UART Based on FPGA

HE Yong

(College of Computer Science Information, Guizhou University, Guiyang 550025, China)

Abstract: A method to design and realize the universal asynchronous receiver/transmitter(UART) based on the field programmable gate array(FPGA) is introduced.The functions of UART are described formally by using the finite state machine model, by the way, UART is realized on the basis of VHDL. Moreover, the data transmission is detected with SignalTapⅡ which is an embedded logic analyzer in Quartus Ⅱ. The result proves the validity of the design.

Keywords: FPGA; UART; finite state machine; SignalTapⅡ

0 引 言

通用異步收發器(Universal Asynchronous Receiver/Transmitter,UART)可以和各種標準串行接口,如RS 232和RS 485等進行全雙工異步通信,具有傳輸距離遠、成本低、可靠性高等優點[1]。一般UART由專用芯片如8250,16450來實現,但專用芯片引腳都較多,內含許多輔助功能,在實際使用時往往只需要用到UART的基本功能,使用專用芯片會造成資源浪費和成本提高。

一般而言UART和外界通信只需要兩條信號線RXD和TXD,其中RXD是UART的接收端,TXD是UART的發送端, 接收與發送是全雙工形式。由于可編程邏輯器件技術的快速發展,FPGA的功能日益強大,其開發周期短、可重復編程的優點也越來越明顯,在FPGA芯片上集成UART功能模塊并和其他模塊組合可以很方便地實現一個能與其他設備進行串行通信的片上系統。

1 UART功能設計

1.1 UART的工作原理

異步通信時,UART發送/接收數據的傳輸格式如圖1所示,一個字符單位由開始位、數據位、停止位組成。

圖1 異步通信字符傳輸格式

異步通信的一幀傳輸經歷以下步驟:

(1) 無傳輸。發送方連續發送信號,處于信息“1”狀態。

(2) 起始傳輸。發送方在任何時刻將傳號變成空號,即“1”跳變到“0”,并持續1位時間表明發送方開始傳輸數據。而同時,接收方收到空號后,開始與發送方同步,并期望收到隨后的數據。

(3) 奇偶傳輸。數據傳輸之后是可供選擇的奇偶位發送或接收。

(4) 停止傳輸。最后是發送或接收的停止位,其狀態恒為“1”。

發送或接收一個完整的字節信息,首先是一個作為起始位的邏輯“0”位,接著是8個數據位,然后是停止位邏輯“1”位,數據線空閑時為高或“1”狀態。起始位和停止位的作用是使接收器能把局部時鐘與每個新開始接收的字符再同步。異步通信沒有可參照的時鐘信號,發送器可以隨時發送數據,任何時刻串行數據到來時,接收器必須準確地發現起始位下降沿的出現時間,從而正確采樣數據[2]。

設計時可參考由專用芯片實現的UART的功能并進行一定精簡,如可以用FPGA的片內RAM替代UART的FIFO[2-3],不用單獨在UART模塊中實現。設計的基本原則是保留最主要的功能,基于FPGA的UART系統由波特率時鐘發生器、接收器和發送器3個子模塊組成,如圖2所示。

圖2 UART功能框圖

1.2 接收器設計

比較而言,UART發送器的設計相對容易,只要每隔一個發送周期并按照數據幀格式輸出數據即可,本文將對接收器的設計和實現做詳細說明,發送器的設計方法基本相同。

接收器的工作過程如下,在接收數據寄存器被讀出一幀數據或系統開始工作以后,接收進程被啟動。接收進程啟動之后,檢測起始位,檢測到有效起始位后,以約定波特率的時鐘開始接收數據,根據數據位數的約定,計數器統計接收位數。一幀數據接收完畢之后,如果使用了奇偶校驗,則檢測校驗位,如無誤則接收停止位。停止位接收完畢后,將接收數據轉存到數據寄存器中。

為確保接收器可靠工作,在接收端開始接收數據位之前,處于搜索狀態,這時接收端以16倍波特率的速率讀取線路狀態,檢測線路上出現低電平的時刻。因為異步傳輸的特點是以起始位為基準同步的。然而,通信線上的噪音也極有可能使傳號“1”跳變到空號“0”。所以接收器以16倍的波特率對這種跳變進行檢測,直至在連續8個接收時鐘以后采樣值仍然是低電平,才認為是一個真正的起始位,而不是噪音引起的,其中若有一次采樣得到的為高電平則認為起始信號無效,返回初始狀態重新等待起始信號的到來。找到起始位以后,就開始接收數據,最可靠的接收應該是接收時鐘的出現時刻正好對著數據位的中央。由于在起始位檢測時,已使時鐘對準了位中央,用16倍波特率的時鐘作為接收時鐘,就是為了確保在位寬的中心時間對接收的位序列進行可靠采樣,當采樣計數器計數結束后所有數據位都已經輸入完成。最后對停止位的高電平進行檢測,若正確檢測到高電平,說明本幀的各位正確接收完畢,將數據轉存到數據寄存器中,否則出錯。

采用有限狀態機模型可以更清晰明確地描述接收器的功能,便于代碼實現[4-6]。接收器的狀態轉換圖如圖3所示,為突出主要過程,圖中省略了奇偶校驗的情況。接收器狀態機由5個工作狀態組成,分別是空閑狀態、起始位確認、采樣數據位、停止位確認和數據正確,觸發狀態轉換的事件和在各個狀態執行的動作見圖中的文字說明。

圖3 接收器狀態機狀態轉換圖

在狀態機模型的基礎上,使用VHDL來描述接收器功能,其主要代碼如下:

--狀態類型說明,定義各狀態子類型

type states is(u_idle,u_start,u_data,u_stop,u_move);

signal current_state, next_ state: states :=u_idle;

--時序進程,狀態機運轉和狀態轉換進程

process(div16)

begin

if (div16′event and div16=1)then current_state<=next_state;

end if;

end process;

--組合進程,各個狀態的工作過程和狀態轉換方式--在每個狀態中,執行規定動作并根據條件賦值next_state

process(current_state)

begin

case current_state is

when u_idle =>--狀態0,空閑狀態,檢測起始位

when u_start => --狀態1,起始位確認

when u_data => --狀態2,采樣數據位

when u_stop => --狀態3,停止位確認

when u_move=>--狀態4,數據幀正確,數據裝入數據寄存器

when others => next_states<=u_idle;

end case;

end process;

實現用16倍波特率時鐘確定起始位的具體方法是設計兩個輸入數據位寄存器rxd1和rxd2,使用語句“rxd1<=rxd;rxd2<=rxd1;”接收數據并進行判斷。當檢測到rxd1=0并且rxd2=1時可以確定下降沿發生,連續7個時鐘rxd2=0即確定檢測到起始位,之后為了確保在數據位中央接收數據,同樣用16倍波特率時鐘對數據位進行采樣。接收數據的方法是設計一個寄存器rxd_buf(7 downto 0),用語句“rxd_buf(7) <= rxd2; rxd_buf(6 DOWNTO 0) <= rxd_buf(7 DOWNTO 1);”實現移位寄存器右移操作,執行8次后接收到一個完整數據。

1.3 波特率發生器設計

波特率發生器實質是設計一個分頻器,用于產生和RS 232通信同步的時鐘[7]。在系統中用一個計數器來完成這個功能,分頻系數N決定了波特率的數值。該計數器一般工作在一個頻率較高的系統時鐘下,當計數到N/2時將輸出置為高電平,再計數到N/2的數值后將輸出置為低電平,如此反復即可得到占空比50%的波特率時鐘,具體的波特率依賴于所使用的系統時鐘頻率和N的大小。如系統時鐘頻率是40 MHz,要求波特率是9 600,則16倍波特率時鐘的周期約等于260個系統時鐘周期,則計數器取260/2=130時,當計數溢出時輸出電平取反就可以得到16倍約定波特率的時鐘。

使用VHDL來描述波特率發生器的完整代碼如下:

entity baud_generator is

port(clk,reset:in std_logic;

div16:out std_logic);

end baud_generator;

architecture beh of baud_generator is

begin

process(clk,reset)

variable cnt:integer;

begin

if (reset=′0′) then cnt:=0; div16<=′0′;

--設置分頻系數,即確定波特率

elsif clk′event and clk=′1′ then

if cnt=130-1 then

cnt:=0;div16 <= not div16;

else cnt:=cnt+1;

end if;

end if;

end process;

end beh;

2 數據傳輸測試

隨著邏輯設計復雜性的不斷增加,僅依賴于軟件方式的仿真測試來了解系統的硬件功能有很多的局限性[8],應用QuartusⅡ集成開發環境中提供的SignalTapⅡ嵌入式邏輯分析儀,可以將測試信息隨設計文件下載于目標芯片中,用以捕獲目標芯片內部系統信號節點處的信息或總線上的數據流,而又不影響原硬件系統的正常工作。測試信息通過器件的JTAG端口傳出,并送入計算機進行顯示和分析,這是一種高效的硬件測試手段,并很好地結合了傳統的系統測試方法。

本設計在Altera Cyclone系列的EP1C6Q240C8芯片上進行了驗證,使用QuartusⅡ軟件將編譯好的.pof格式文件以AS模式下載到配置芯片EPCS1中[9]。在計算機端運行串口調試助手軟件,將數據從計算機送出,并利用FPGA上的UART模塊進行接收,將發送數據與SignalTapⅡ獲取的波形進行對比,經多次測試表明收發數據完全相同。

以其中一次的測試為例進行說明,從PC上輸入ASCII碼的“6”,設定波特率發生器時鐘作為SignalTapⅡ的采樣時鐘,采樣波形如圖4所示,其中“recstart”表示開始接收數據幀標志;“div16”表示16倍波特率時鐘;“cnt_rxd”表示數據位采樣計數器,一次完整的采樣計數從0h~9h共10次采樣(1個起始位,8個數據位,1個停止位);“rxd”表示串口的接收端;“rxd_buf”表示移位寄存器,當數據停止位確認后,移位寄存器輸出收到的數據“36h”,表明了該UART工作穩定可靠。

圖4 嵌入式邏輯分析儀獲得的波形

應特別注意的是當利用SignalTapⅡ進行測試工作結束后,在生成最終產品前,應將SignalTapⅡ從芯片中除去,以免占用額外的資源,然后再重新編譯下載[10]。全程編譯后報告消耗邏輯單元142個,只占芯片總資源的2%,沒有占用芯片的存儲單元和PLL單元,對于一個中大規模的FPGA芯片而言這是非常少的資源消耗。

3 結 語

基于FPGA設計和實現UART,可以用片上很少的邏輯單元實現UART的基本功能。與傳統設計相比,能有效減少系統的PCB面積,降低系統的功耗,提高設計的穩定性和可靠性,并可方便地進行系統升級和移植。

本設計具有較大的靈活性,通過調整波特率發生器的分頻參數,就可以使其工作在不同的頻率。采用16倍波特率的采樣時鐘,可以實時有效探測數據的起始位,并可對數據位進行“對準”中央采樣,保證了所采樣數據的正確性。該模塊可以作為一個完整的IP核移植進各種FPGA中,在實際應用時可嵌入到其他系統中,很容易實現和遠端上位機的異步通信。

參考文獻

[1]張德,馬淑芬,李海,等.專用異步串行通信電路的FPGA實現[J].微計算機信息,2005,21(3):152-153.

[2]常勝,黃啟俊.基于異步FIFO實現不同時鐘域間數據傳遞的設計[J].電子設計應用,2004(8):57-59.

[3]CUMMINGS C E, ALFKE Peter. Simulation and synthesis techniques for asynchronous FIFO design with asynchronous pointer comparisons[M]. \\: SNUG, 2002.

[4]韓俊剛,杜慧敏.數字硬件的形式化驗證[M].北京:北京大學出版社,2001.

[5]茅劍鋒,趙千川.異步電路驗證算法[J].計算機學報,2004,27(1):67-78.

[6]蘇繼強,沈云付.基于模型檢查的VHDL到FSM的轉換[J].計算機工程與設計,2008,29(22):5840-5842.

[7]潘松,黃繼業.EDA技術與VHDL[M].2版.北京:清華大學出版社,2008.

[8]億特科技.CPLD/FPGA應用系統設計與產品開發[M].北京:人民郵電出版社,2005.

[9]Altera Corporation. Altera Digital Library[M]. \\: Altera, 2002.

[10]金德鵬,沙燕萍.Altera FPGA在數字通信系統設計中的應用[J].電子技術應用,2005(4):54-56.

主站蜘蛛池模板: 亚洲精品天堂自在久久77| 精品亚洲国产成人AV| 免费啪啪网址| 国产欧美精品一区aⅴ影院| 中文字幕中文字字幕码一二区| 特级aaaaaaaaa毛片免费视频| 国产系列在线| 欧美日本视频在线观看| 青青操国产| 免费大黄网站在线观看| 亚洲欧美日本国产专区一区| 亚洲国产欧美目韩成人综合| 欧美成人一级| 无码专区国产精品一区| 亚洲人成网址| 久久公开视频| 免费精品一区二区h| 亚洲有码在线播放| 青青国产在线| 国产黄色免费看| 四虎永久在线精品影院| 亚洲日韩精品欧美中文字幕| 欧美亚洲国产视频| 免费看a级毛片| 国产精品成人一区二区| 午夜啪啪网| 青青青视频91在线 | 波多野结衣一二三| 亚洲AⅤ永久无码精品毛片| 亚洲高清无在码在线无弹窗| 97精品久久久大香线焦| 日本三级欧美三级| 国产成人三级| 久久久黄色片| 国内精自视频品线一二区| 一级看片免费视频| 亚欧成人无码AV在线播放| 免费三A级毛片视频| 国产第二十一页| 99久久精品美女高潮喷水| 永久成人无码激情视频免费| 国产91丝袜在线播放动漫 | 99热最新在线| 少妇人妻无码首页| 国产香蕉一区二区在线网站| 日韩精品亚洲人旧成在线| 精品视频一区在线观看| 91麻豆精品视频| 伊人成色综合网| 国产黑丝一区| 日本一区二区三区精品视频| 国产成本人片免费a∨短片| 国产成+人+综合+亚洲欧美| 免费看黄片一区二区三区| 亚洲欧洲日本在线| 2020国产精品视频| 成人国产精品一级毛片天堂| 最新日韩AV网址在线观看| 亚洲一本大道在线| 国产精品网拍在线| 一级毛片中文字幕| 国产精品亚洲а∨天堂免下载| 国产正在播放| 91久久偷偷做嫩草影院精品| 国产精品无码一二三视频| 综合社区亚洲熟妇p| 五月天久久综合| 国产内射一区亚洲| 国产制服丝袜91在线| 亚洲日韩高清在线亚洲专区| 国产香蕉国产精品偷在线观看| 国产亚洲欧美日韩在线观看一区二区| 成人免费黄色小视频| 好紧太爽了视频免费无码| 色135综合网| 中文毛片无遮挡播放免费| 国产在线自乱拍播放| 亚洲第一黄色网址| 美女啪啪无遮挡| 美女被躁出白浆视频播放| 一级看片免费视频| 91破解版在线亚洲|