《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 帶硬件地址識別的UART IP的設(shè)計和實現(xiàn)
帶硬件地址識別的UART IP的設(shè)計和實現(xiàn)
繆眾林 丁克忠
摘要: 本UART IP全部采用Verilog HDL設(shè)計,可以在采用FPGA實現(xiàn)的通訊和控制系統(tǒng)中作為系統(tǒng)多點通訊控制器,,也可以用于片上系統(tǒng)(SoC)的設(shè)計,。用于多點通信時,可以有效降低CPU的額外負(fù)擔(dān),,提高CPU系統(tǒng)的利用率,。由于采用語言描述,移植性強,,可以用于不同廠家,、不同型號的FPGA芯片中,提高了系統(tǒng)的設(shè)計速度和效率,。
Abstract:
Key words :

    摘 要: 在通信和控制系統(tǒng)中,,常使用異步串行通信控制器(UART)實現(xiàn)系統(tǒng)輔助信息的傳輸。為實現(xiàn)多點通信,,通常用軟件識別發(fā)往本站點或其它站點的數(shù)據(jù),,這會加大CPU的開銷。介紹了一種基于FPGA的UART IP,由硬件實現(xiàn)多點通信時的數(shù)據(jù)過濾功能,,降低了CPU的負(fù)擔(dān),,提高了系統(tǒng)性能。
    關(guān)鍵詞: UART  多點通信  FPGA  知識產(chǎn)權(quán)

    在通信和控制系統(tǒng)中,,常使用異步串行通信實現(xiàn)多塊單板之間的輔助通信,,各個單板通過總線方式連接,。為了實現(xiàn)點對點通信,,需要由軟件定義一套較復(fù)雜的通信協(xié)議,過濾往來的數(shù)據(jù),消耗了CPU較多的時間,。89C51單片機有一種九位通信方式,,采用一位地址位來實現(xiàn)通信對象的選擇,只對發(fā)往本地址的地址發(fā)生中斷進(jìn)而接收數(shù)據(jù),。通用的UART芯片如16C550和89C51等構(gòu)成總線式的通信系統(tǒng)時,,需要由CPU通過軟件處理接收到的地址和產(chǎn)生九位的數(shù)據(jù)。本文介紹的UART采用Verilog HDL硬件描述語言設(shè)計,,可以用FPGA實現(xiàn),,可應(yīng)用于SoC設(shè)計中。其主要特性如下:

    ·全硬件地址識別,,過濾數(shù)據(jù)不需要CPU的介入,;支持一個特殊地址,可用于監(jiān)聽和廣播,。
    ·支持查詢和中斷兩種工作方式,,中斷可編程。
    ·接收和發(fā)送通路分別有128Byte FIFO,,每個接收字節(jié)附帶狀態(tài)信息,。
    ·設(shè)計采用Verilog HDL語言,全同步接口,,可移植性好,。
    ·支持自環(huán)測試功能。
    ·波特率可以編程,,支持八位或者九位兩種數(shù)據(jù)格式,。
    設(shè)計的UART的九位串行數(shù)據(jù)格式如圖1所示。在空閑狀態(tài),,數(shù)據(jù)線處于高電平狀態(tài),。總線由高到低跳變,,寬度為一個波特率時間的負(fù)脈沖為開始位,,然后是8bit的數(shù)據(jù)位。數(shù)據(jù)位后面是1bit的地址信息位。如果此位是1,,表示發(fā)送的字節(jié)是地址信息,;如果此位是0,傳輸?shù)氖钦?shù)據(jù)信息,。地址指示位后是串行數(shù)據(jù)的停止位,。

 


1 UART設(shè)計
    UART采用模塊化、層次化的設(shè)計思想,,全部設(shè)計都采用Verilog HDL實現(xiàn),,其組成框圖如圖2所示。整個UART IP由串行數(shù)據(jù)發(fā)送模塊,、串行數(shù)據(jù)接收模塊,、接收地址識別模塊、接收和發(fā)送FIFO,、總線接口邏輯,、寄存器和控制邏輯構(gòu)成。串行發(fā)送模塊和接收完成并/串及串/并的轉(zhuǎn)換,,接收地址的識別由接收地址識別模塊完成,。發(fā)送和接收FIFO用于緩存發(fā)送和接收的數(shù)據(jù)??偩€接口邏輯用于連接UART IP內(nèi)部總線和HOST接口,。寄存器和控制邏輯實現(xiàn)UART IP內(nèi)部所有數(shù)據(jù)的收發(fā)、控制和狀態(tài)寄存器,、內(nèi)部中斷的控制及波特率信號的產(chǎn)生,。以下詳細(xì)說明主要部分的設(shè)計原理。

 


1.1 串行數(shù)據(jù)發(fā)送模塊
    串行數(shù)據(jù)發(fā)送模塊將數(shù)據(jù)或地址碼由并行轉(zhuǎn)換為串行,,并從串行總線輸出,。設(shè)計采用有限狀態(tài)機實現(xiàn),分為空閑,、取數(shù),、發(fā)送三個狀態(tài)。其狀態(tài)遷移如圖3所示,。各個狀態(tài)說明如下:

 


    空閑狀態(tài):狀態(tài)機不斷檢測發(fā)送使能位,、UART使能位和發(fā)送FIFO空/滿標(biāo)志位,如果使能位為高,、UART使能打開且FIFO空標(biāo)志位為低,,串行發(fā)送進(jìn)入取數(shù)狀態(tài)。
    取數(shù)狀態(tài):在此狀態(tài),,分兩個周期從發(fā)送FIFO中取出待發(fā)送的數(shù)據(jù)或者地址,,然后進(jìn)入發(fā)送狀態(tài),。
    發(fā)送狀態(tài):在此狀態(tài),狀態(tài)機按照九位串行數(shù)據(jù)的格式依次發(fā)送開始位,、數(shù)據(jù)位,、地址指示位。待停止位發(fā)送完畢后,,返回空閑狀態(tài),。一個字節(jié)的數(shù)據(jù)發(fā)送完畢后,進(jìn)行下一個字節(jié)數(shù)據(jù)的發(fā)送流程,。
1.2 串行數(shù)據(jù)接收模塊
    串行數(shù)據(jù)接收模塊用于檢測串行數(shù)據(jù)的開始位,,將串行總線上的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)并輸出。接收邏輯也采用有限狀態(tài)機實現(xiàn),,分為空閑狀態(tài),、尋找開始位,、接收數(shù)據(jù)和保存數(shù)據(jù)四個狀態(tài),。其狀態(tài)遷移圖如圖4所示。各個狀態(tài)說明如下:

 


    空閑狀態(tài):在此狀態(tài),,不斷檢測接收使能,、UART使能和串行輸入信號的狀態(tài)。如果串行輸入信號出現(xiàn)由高到低的電平變化且UART使能和接收使能都為高,,則將采樣計數(shù)器復(fù)位,,并進(jìn)入尋找開始位狀態(tài)。
    尋找開始位:在此狀態(tài),,狀態(tài)機等待半個波特率的時間,,然后重新檢測串行輸入的電平。如果為低,,則判斷收到的開始位有效,,進(jìn)入接收數(shù)據(jù)狀態(tài);否則認(rèn)為數(shù)據(jù)總線上出現(xiàn)干擾,,開始位無效,,重新返回空閑狀態(tài)。
    接收數(shù)據(jù):在此狀態(tài),,依次接收串行數(shù)據(jù)線上的數(shù)據(jù)位,、地址指示位和停止位,結(jié)束后進(jìn)入保存數(shù)據(jù)狀態(tài),。
    保存數(shù)據(jù):此狀態(tài)將收到的串行數(shù)據(jù)以并行方式從接口的并行總線輸出,,然后返回空閑狀態(tài),準(zhǔn)備進(jìn)行下一個字節(jié)數(shù)據(jù)的搜索和接收,。
    為提高對串行輸入上突發(fā)干擾的抵抗能力,,對于接收數(shù)據(jù),,在脈沖的中間位置連續(xù)采樣三次,較多的電平作為接收的有效數(shù)據(jù),。所有接收數(shù)據(jù)的采樣頻率為接收波特率的16倍,。
1.3  硬件地址識別模塊
    硬件地址識別模塊用于從接收到的數(shù)據(jù)中判斷出地址和數(shù)據(jù),在地址識別功能打開時,,選擇數(shù)據(jù)通過或者丟棄,;而該功能關(guān)閉時,所有數(shù)據(jù)都會通過,。地址識別模塊是一個有兩個狀態(tài)的有限狀態(tài)機,,分為地址和數(shù)據(jù)兩個狀態(tài)。其狀態(tài)遷移圖如圖5所示,。狀態(tài)說明如下:

 


    地址狀態(tài):在此狀態(tài)時,,判斷接收到的數(shù)據(jù)以及地址識別使能位。如果地址識別功能沒有打開,,對于接收的任何地址,,都進(jìn)入數(shù)據(jù)狀態(tài)。如果地址識別功能打開,,則將收到的地址和本地地址比較,,如果相等,則保存此地址,,進(jìn)入數(shù)據(jù)狀態(tài),;否則繼續(xù)在此狀態(tài)接收數(shù)據(jù)和地址,將收到的數(shù)據(jù)忽略,。
    數(shù)據(jù)狀態(tài):將接收到的數(shù)據(jù)輸出,,直到收到地址位時,返回地址狀態(tài),,處理地址,。
    為實現(xiàn)監(jiān)聽和廣播功能,將地址255作為特殊地址,,它可以和任何地址匹配,。若本站的地址為255,此站點可以接收任何地址的數(shù)據(jù),,此功能可以用于監(jiān)聽總線上的數(shù)據(jù),;若發(fā)送數(shù)據(jù)的目的地址為255,則任何站點都會接收到此數(shù)據(jù),,此功能可以用于發(fā)送廣播數(shù)據(jù),。
1.4  FIFO設(shè)計
    FIFO由控制邏輯和雙口RAM組成,控制邏輯用來實現(xiàn)將一個雙口RAM轉(zhuǎn)換成兩個FIFO的功能,,這兩個FIFO分別用于發(fā)送和接收數(shù)據(jù)緩存,;中斷控制用于在中斷工作方式時管理UART內(nèi)部的中斷狀態(tài)和控制信息,。
    為減少所需塊RAM的數(shù)量,接收和發(fā)送FIFO使用同一個塊RAM實現(xiàn),,使用仲裁機制保證兩個FIFO的四個端口,,在同一時刻最多只有兩個操作,不影響對FIFO的讀寫,。
1.5  總線接口
    UART采用同步接口,,所有信號都在系統(tǒng)時鐘的上升沿采樣,設(shè)備的握手用一位應(yīng)答信號完成,。
    數(shù)據(jù)總線寬度采用8+2的方式,。和16位或者32位寬度的數(shù)據(jù)總線連接時,可以一次讀取接收數(shù)據(jù)的數(shù)據(jù)和地址指示位,,減少總線操作次數(shù),;若和8位系統(tǒng)連接,可以只連接低8位數(shù)據(jù)線,,接收數(shù)據(jù)的地址信息可以通過內(nèi)部的狀態(tài)寄存器讀取,。
1.6  寄存器和控制邏輯
    寄存器部分實現(xiàn)UART內(nèi)部所有數(shù)據(jù)的收發(fā)、控制和狀態(tài)寄存,,用于設(shè)置UART的數(shù)據(jù)格式,、收發(fā)波特率、FIFO控制,、本地地址、地址識別,、中斷控制和狀態(tài)寄存,,實現(xiàn)對UART工作的控制。
    控制邏輯產(chǎn)生所需的所有波特率信號及對應(yīng)的上升和下降沿指示信號,,并根據(jù)實際工作所選擇的波特率輸出與系統(tǒng)時鐘同步的對應(yīng)信號,。波特率產(chǎn)生邏輯的組成框圖如圖6所示。

 


2  功能和時序仿真
    首先結(jié)合功能仿真設(shè)計系統(tǒng)的仿真平臺,。仿真平臺如圖7所示,。系統(tǒng)仿真平臺和仿真激勵采用Verilog HDL語言設(shè)計,可同時用于功能仿真和時序仿真,,不能用于二者的綜合,。寄存器級模型為用于UART IP設(shè)計的RTL描述,全部采用可以綜合的Verilog HDL語句編寫,。仿真使用的軟件為ModelSim,。

 


    功能仿真包括以下幾個方面:
    (1)基本模塊連線時序的仿真。首先用描述方式設(shè)計UART的接口模型,,利用仿真激勵進(jìn)行簡單的讀寫操作,,設(shè)計出仿真激勵信號和系統(tǒng)仿真平臺,。然后結(jié)合仿真激勵信號逐步完成UART的各個子模塊的設(shè)計。仿真時,,需要逐步觀察UART接口信號的波形,、UART內(nèi)部模塊的接口信號波形、各種狀態(tài)機的狀態(tài)遷移和數(shù)據(jù)指針的值以及狀態(tài)位的值,,逐步完成寄存器傳輸級的UART設(shè)計,。

    (2)UART的工作仿真。完成RTL的寄存器傳輸級模型后,,根據(jù)系統(tǒng)軟件工作的模式,,用HDL設(shè)計出數(shù)據(jù)收發(fā)的仿真激勵,打開自環(huán)功能,,進(jìn)行數(shù)據(jù)的發(fā)送和接收,。仿真可以分為仿真查詢和中斷兩種工作方式。對于中斷工作方式,,需要用HDL語言模擬軟件的中斷機制,,進(jìn)行中斷工作方式的仿真。最后打開地址識別功能,,發(fā)送不同目的地址的數(shù)據(jù),,觀察UART的硬件地址識別情況。
    完成功能仿真后,,將設(shè)計進(jìn)行布局布線,,生成Verilog HDL形式的時序仿真模型和標(biāo)準(zhǔn)時延文件,利用與功能仿真相同的仿真平臺進(jìn)行時序仿真,。時序仿真只需要仿真工作方式,。功能仿真和時序仿真使用相同的仿真平臺和激勵向量,這樣便于比較二者的差異,,發(fā)現(xiàn)設(shè)計代碼存在的問題,。
3 綜合和測試結(jié)果
    本設(shè)計用Synplicity公司的Synplify Pro作為綜合工具,用Xilinx ISE5.2作為布局布線工具,,采用器件為XC2S100IIE-7,。綜合結(jié)果顯示,該UART IP占用資源情況為:SLICE 275個,、內(nèi)部塊RAM 1個,、I/O 24個,HOST總線可以達(dá)到的頻率為73.2MHz,。
    測試程序參考仿真激勵的生成,,用C語言在vxWorks操作系統(tǒng)下設(shè)計。測試所用方法和工作仿真完全相同,,只是仿真激勵對應(yīng)測試程序,,而RTL模型對應(yīng)實際的FPGA器件,。
    多點測試使用了五塊單板,采用半雙工總線方式,,定義簡單的數(shù)據(jù)包格式,,用于檢測數(shù)據(jù)錯誤并返回數(shù)據(jù)。數(shù)據(jù)包的格式為地址開頭,,后面是最大255Byte的數(shù)據(jù),;數(shù)據(jù)部分包括發(fā)送方的地址、數(shù)據(jù)校驗和及包的長度,。另外,,還定義簡單的驅(qū)動程序格式,完成基本數(shù)據(jù)的收發(fā)和控制,,然后在上層加載多點通信協(xié)議,。其中的一塊加載主設(shè)備程序,其它單板加載從設(shè)備程序,。主設(shè)備周期性地向其它從設(shè)備發(fā)送測試數(shù)據(jù),,并在規(guī)定的時間內(nèi)等待接收目標(biāo)單板的數(shù)據(jù)。從設(shè)備軟件只接收發(fā)給本單板的數(shù)據(jù),,如果校驗正確,,將收到的數(shù)據(jù)發(fā)給主設(shè)備;如果有錯誤,,則不進(jìn)行任何操作,。主設(shè)備若在規(guī)定時間內(nèi)無法接收從設(shè)備的數(shù)據(jù)或者接收數(shù)據(jù)錯誤,則判斷通信異常,,進(jìn)行下一個設(shè)備的測試,。
    測試時,數(shù)據(jù)包長為240Byte,,波特率為115200。常溫和高低溫環(huán)境下的測試結(jié)果表明,,UART IP工作穩(wěn)定可靠,,達(dá)到了設(shè)計要求。
    本UART IP全部采用Verilog HDL設(shè)計,,可以在采用FPGA實現(xiàn)的通訊和控制系統(tǒng)中作為系統(tǒng)多點通訊控制器,,也可以用于片上系統(tǒng)(SoC)的設(shè)計。用于多點通信時,,可以有效降低CPU的額外負(fù)擔(dān),,提高CPU系統(tǒng)的利用率。由于采用語言描述,,移植性強,,可以用于不同廠家,、不同型號的FPGA芯片中,提高了系統(tǒng)的設(shè)計速度和效率,。
參考文獻(xiàn)
1 Spartan-IIE 1.8V FPGA Family Product Specification.Xilinx Corp. July 9, 2003
2 戴梅萼.微型計算機技術(shù)及應(yīng)用.北京:清華大學(xué)出版社,,1994.1
3 張 明.Verilog HDL實用教程.成都:電子科技大學(xué)出版社,1999.11
4 孫涵芳,徐愛卿.MCS-51/96系列單片機原理及應(yīng)用.北京:北京航空航天大學(xué)出版社,,1999.5

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。