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