隨著集成電路與嵌入式技術(shù)的發(fā)展與廣泛應(yīng)用,,許多嵌入式系統(tǒng)都需要進行串行通信,,因此在片上嵌入式系統(tǒng)芯片中集成uART(通用異步接發(fā)裝置)的IP核已成為一種趨勢。
在基于IP核復(fù)用技術(shù)的集成電路設(shè)計中,,片上總線的選取是最為關(guān)鍵的問題,。目前,許多廠商已經(jīng)開發(fā)了適用于各自片上總線標準的UART IP核,,例如基于AMBA總線的UART IP核,、基于CoreConnect總線的UART IP核等。如果用戶要使用這些商業(yè)化的UART核,,則需要得到授權(quán),。因此從成本、性能,、開放性的角度來看,,采用開源、易于實現(xiàn)的Wishbone總線標準設(shè)計出的UART IP核將會擁有廣泛的市場,。
1 UART IP核的設(shè)計原理
1.1 UART工作原理
通用非同步收發(fā)裝置(UART)是計算機進行串行通信的重要組成部分,。它將微機系統(tǒng)內(nèi)部傳送過來的并行數(shù)據(jù)轉(zhuǎn)換為串行輸出數(shù)據(jù)流,以電平的形式傳輸出去,;將微機系統(tǒng)外部傳送來的串行數(shù)據(jù)轉(zhuǎn)換為字節(jié),,供微機系統(tǒng)內(nèi)部使用并行數(shù)據(jù)的器件使用;在輸出的串行數(shù)據(jù)流中加入奇偶校驗位,,并對從外部接收的數(shù)據(jù)流進行奇偶校驗,;在輸出數(shù)據(jù)流中加入啟停標記,并從接收數(shù)據(jù)流中刪除狀態(tài)標記,。
對于UART而言,,總線上的所有信號都是至關(guān)重要的。這些信號包括所需的控制信息和數(shù)據(jù),。因此總線接口的設(shè)計決定著UART的設(shè)計細節(jié),。本設(shè)計采用Wishbone總線作為UART核與微機系統(tǒng)進行通信的主機接口。UART核的接口信號如圖1所示,。
1.2 Wishbone總線接口
在集成電路設(shè)計領(lǐng)域,,Wishbone總線結(jié)構(gòu)是一種靈活、開源的設(shè)計方法,。其目的是促進設(shè)計的再利用,,簡化系統(tǒng)級芯片的集成問題,。通過在IP核之間創(chuàng)建一個總線接口,從而將各個IP核能方便地進行連接,。這就提高了設(shè)計的可復(fù)用性和系統(tǒng)的可靠性,,加快了產(chǎn)品推向市場的速度。在此之前,,IP核之間都是使用非標準的總線規(guī)范進行連接的,,這就難以實現(xiàn)復(fù)用。因此采用標準化的E總線結(jié)構(gòu)設(shè)計IP核,,已成為IC設(shè)計行業(yè)的主流,。
在設(shè)計中,Wishbone總線為微機系統(tǒng)和UART控制器提供了操作接口,。Wishbone總線接口的主要功能是協(xié)調(diào)處理器和UART核之間的信號,,使處理器能正確地使用UART核進行數(shù)據(jù)通信。
2 UART IP核的設(shè)計實現(xiàn)
UART IP核的研發(fā)是遵照RS232協(xié)議和Wishbone總線標準進行的,,集成了UART的基本功能,。
UART IP核的主要技術(shù)特征包括:
(1)支持標準RSR232接口標準和Wishbone總線規(guī)范。
(2)全雙工獨立收發(fā)功能,。
(3)接收通道進行奇偶校驗,,溢出,產(chǎn)生可選中斷,。
(4)內(nèi)置支持接收和發(fā)送的16 Byte FIFO,。
(5)發(fā)送“空”產(chǎn)生可選中斷,接收“滿”產(chǎn)生可選中斷,。
UART IP核體系結(jié)構(gòu)如圖2所示,。
UART IP核內(nèi)部主要包括數(shù)據(jù)發(fā)送模塊、數(shù)據(jù)接收模塊以及Wishbone總線接口模塊,。各模塊的設(shè)計如下,。
2.1 Wishbone總線接口模塊設(shè)計
Wishbone總線接口模塊將UART IP核與微機系統(tǒng)相連。該模塊提供Wishbone Master和Wishbone Slave接口,。
Wishbone總線接口模塊的主要功能如下:
(1)提供UART IP核與其他設(shè)備的接口,,如存儲器或者主機的接口。
(2)包含緩沖描述符(儲存于內(nèi)部RAM),。
(3)包含信號在主機時鐘,、發(fā)送時鐘和接收時鐘之間的同步邏輯。
(4)發(fā)送功能,。讀取發(fā)送緩沖描述符,,讀取數(shù)據(jù)到發(fā)送FIFO并開始發(fā)送,其后將發(fā)送狀態(tài)寫到發(fā)送緩沖描述符,。
(5)接收功能,。讀取接收緩沖描述符,,將獲得的字節(jié)寫入接收FIFO,其后通過Wishbone Muter接口與微機系統(tǒng)進行通信,。最后,,將接收狀態(tài)寫到接收緩沖描述符。
當處理器需要串行發(fā)送數(shù)據(jù)時,,先將數(shù)據(jù)以包的形式存儲于主存儲器中,,然后將存儲的所有包的起始地址,、目的地址,、長度以及發(fā)送控制信息寫入發(fā)送描述符中。
Wishbone接口模塊讀取到一個非空的發(fā)送描述符后即發(fā)送數(shù)據(jù),,發(fā)送的數(shù)據(jù)要通過Wishbone接口邏輯訪問位于總線上的主存儲器,,讀取到的數(shù)據(jù)首先放到發(fā)送FIFO中,其后再通過發(fā)送控制和同步邏輯與數(shù)據(jù)發(fā)送模塊進行握手,,將數(shù)據(jù)從TX_O端口串行發(fā)送出去,。
當接收數(shù)據(jù)時,數(shù)據(jù)由RX_I端口串行地移入接收FIFO中,,每收滿8位數(shù)據(jù)就移入接收保持寄存器,,然后通過Wishbone總線并行傳輸給處理器核。
2.2 數(shù)據(jù)接收模塊設(shè)計
由于外部信號是通過異步串行的形式傳輸,,因此當接收端口檢測到一個由高到低的數(shù)據(jù)就被視為一個幀的起始位,。為了避免接收信號的噪聲而產(chǎn)生的不正確的數(shù)據(jù),檢測到的起始位時鐘至少要低于50%的波特率時鐘,。接收模塊一旦接收到有效的起始位,,就將通過RS232標準的波特率對數(shù)據(jù)位和校驗位進行采樣。
設(shè)計采用接收狀態(tài)機控制整個模塊的接收過程,。接收狀態(tài)機可分為5個狀態(tài),,即IDLE、RX_START,、RX_DATA,、CHECK、RX_STOP,,它們之間的狀態(tài)轉(zhuǎn)移,,如圖3所示。
IDLE狀態(tài):當產(chǎn)生復(fù)位信號或運行至停止狀態(tài)之后,,接收狀態(tài)機將復(fù)位到這種狀態(tài),。處于IDLE狀態(tài)時,它等待外部傳來的信號從高向低轉(zhuǎn)變,,此時視為產(chǎn)生了一個有效的起始位,。一旦有效起始位被檢測到,,有限狀態(tài)機就會切換到下個狀態(tài)。
RX_DATA狀態(tài):當狀態(tài)機跳轉(zhuǎn)到此狀態(tài)時,,采樣每得到一位數(shù)據(jù),,就把接收到數(shù)據(jù)放到準備好的接收移位寄存器中。在設(shè)計中需要一個接收計數(shù)器來進行計數(shù),。當計數(shù)器提示數(shù)據(jù)接收已完成,,則狀態(tài)機會轉(zhuǎn)入下個狀態(tài)。
CHECK狀態(tài):當處于CHECK狀態(tài)時,,通過對實際接收到的數(shù)據(jù)進行判斷得出實際數(shù)據(jù)的奇偶性,,然后再與發(fā)送過來的數(shù)據(jù)的奇偶校驗位進行奇偶校驗。
如果符合,,那么表示接收數(shù)據(jù)有效,,可以傳入處理器;如不符,,則不傳,,直接丟棄數(shù)據(jù)。
RX_STOP狀態(tài):無論停止位長度設(shè)定為1位或者是2位,,有限狀態(tài)機總是等待1位樣本的采樣時間,,然后抽樣停止位。只要一個邏輯采樣停止位被檢測到,,數(shù)據(jù)接收模塊就不會去檢查是否停止位的配置出現(xiàn)錯誤,。此時,有限狀態(tài)機將返回IDLE狀態(tài),。
2.3 數(shù)據(jù)發(fā)送模塊設(shè)計
發(fā)送模塊將從處理器接收到的數(shù)據(jù),,加上起始位,奇偶檢驗位和停止位組成規(guī)定的格式后串行輸出,。首先,,利用緩存器FIFO存放需要發(fā)送的數(shù)據(jù),這樣處理器可以一次往FIFO中寫入多個字節(jié)的數(shù)據(jù),。發(fā)送數(shù)據(jù)時依次從FIFO中每次取出1Byte進行串行輸出,。
設(shè)計采用發(fā)送狀態(tài)機來控制整個模塊的發(fā)送過程。發(fā)送狀態(tài)機由以下5個狀態(tài)組成:IDLE,、TX_START,、TX_DATA、CHECK,、TX_STOP,,它們的轉(zhuǎn)移關(guān)系如圖4所示。
IDLE狀態(tài):在沒有接收到將要發(fā)送的數(shù)據(jù)時,發(fā)送模塊一直處于該狀態(tài),,此刻一直保持發(fā)送模塊的數(shù)據(jù)位為高,,當?shù)玫街鳈C發(fā)出的工作信號時,發(fā)生狀態(tài)跳轉(zhuǎn),,進入下個狀態(tài),。
TX_START狀態(tài):發(fā)送模塊會先發(fā)送一個數(shù)據(jù)“0”,作為起始位,。起始位傳送完畢后,,轉(zhuǎn)入下個狀態(tài)。
TX_DATA狀態(tài):發(fā)送完起始位后,,接著發(fā)送由主機傳來的有效數(shù)據(jù),。首先把數(shù)據(jù)存入模塊內(nèi)的移位寄存器中,利用移位寄存器實現(xiàn)并行輸入到串行輸出的轉(zhuǎn)換,。同時計數(shù)器開始計數(shù),,在發(fā)送完8位數(shù)據(jù)后,計數(shù)器清零,,F(xiàn)SM隨即跳入下個狀態(tài)。
CHECK狀態(tài):當狀態(tài)機處于這個狀態(tài),,最后1位數(shù)據(jù)仍然在傳輸,。傳輸完成時,狀態(tài)機將判斷校驗位,。如果校驗位無誤,,則進入下個狀態(tài)。
TX_STOP狀態(tài):在此狀態(tài)下,,根據(jù)發(fā)送模塊的采樣結(jié)果,,將設(shè)置相關(guān)中斷和狀態(tài)位。發(fā)送完畢后,,狀態(tài)機返回IDLE狀態(tài),。
3 UART IP核的驗證方法
對UART IP核的驗證主要是在Modelsim軟件構(gòu)建的虛擬平臺中進行的,通過編寫Testbench(測試代碼)作為激勵信號,,將得到的值與期望值進行比較,,從而判斷功能是否正確。驗證系統(tǒng)框圖,,如圖5所示,。
本次驗證施加的測試激勵包括兩個部分,一部分是模擬發(fā)送數(shù)據(jù)的過程,,如總線對于模塊內(nèi)部寄存器的讀信號,,UART串口輸出信號和設(shè)備的硬件接口信號等,驗證模塊的正常功能是否實現(xiàn);另一部分是模擬接收數(shù)據(jù)的過程,,如外部設(shè)備對UART發(fā)送的數(shù)據(jù)接收過程,,以及UART 將數(shù)據(jù)轉(zhuǎn)換發(fā)送給微機系統(tǒng)。仿真波形圖,,如圖6所示,。
仿真波形圖模擬的是UART在全雙工的模式下同時接收一個完整的數(shù)據(jù)(51,16進制)和發(fā)送一個完整的數(shù)據(jù)(11,,16進制)的過程,。以接收過程為例:UART首先輸出發(fā)送UART_INT中斷信號,通知處理器準備接收數(shù)據(jù),,處理器響應(yīng)中斷,。UART通過采樣脈沖(Baud)將信號寫入RX_UDR接收寄存器中,同時接收計數(shù)器計數(shù),,計數(shù)到8時自動清零,,中斷信號自動清除,隨后將接收到的8位數(shù)據(jù)通過總線模塊傳入處理器中,。發(fā)送過程為接收的逆過程,。
4 結(jié)束語
IP核重用技術(shù)以及接口標準化問題是IC設(shè)計領(lǐng)域中的研究熱點,其應(yīng)用領(lǐng)域正在不斷拓展,。本文介紹的基于Wishbone總線的UART IP核的設(shè)計方法,,通過驗證表明了各項功能達到預(yù)期要求,為IP核接口的標準化設(shè)計提供了依據(jù),。此外,,該IP核代碼全部采用模塊化的Verilog-HDL語言編寫,便于以后不斷完善,,具有較強的實際效益,。