基于Wishbone總線的UART IP核設(shè)計(jì)
設(shè)計(jì)采用接收狀態(tài)機(jī)控制整個(gè)模塊的接收過(guò)程。接收狀態(tài)機(jī)可分為5個(gè)狀態(tài),即IDLE、RX_START、RX_DATA、CHECK、RX_STOP,它們之間的狀態(tài)轉(zhuǎn)移,如圖3所示。本文引用地址:http://www.ex-cimer.com/article/156564.htm
IDLE狀態(tài):當(dāng)產(chǎn)生復(fù)位信號(hào)或運(yùn)行至停止?fàn)顟B(tài)之后,接收狀態(tài)機(jī)將復(fù)位到這種狀態(tài)。處于IDLE狀態(tài)時(shí),它等待外部傳來(lái)的信號(hào)從高向低轉(zhuǎn)變,此時(shí)視為產(chǎn)生了一個(gè)有效的起始位。一旦有效起始位被檢測(cè)到,有限狀態(tài)機(jī)就會(huì)切換到下個(gè)狀態(tài)。
RX_DATA狀態(tài):當(dāng)狀態(tài)機(jī)跳轉(zhuǎn)到此狀態(tài)時(shí),采樣每得到一位數(shù)據(jù),就把接收到數(shù)據(jù)放到準(zhǔn)備好的接收移位寄存器中。在設(shè)計(jì)中需要一個(gè)接收計(jì)數(shù)器來(lái)進(jìn)行計(jì)數(shù)。當(dāng)計(jì)數(shù)器提示數(shù)據(jù)接收已完成,則狀態(tài)機(jī)會(huì)轉(zhuǎn)入下個(gè)狀態(tài)。
CHECK狀態(tài):當(dāng)處于CHECK狀態(tài)時(shí),通過(guò)對(duì)實(shí)際接收到的數(shù)據(jù)進(jìn)行判斷得出實(shí)際數(shù)據(jù)的奇偶性,然后再與發(fā)送過(guò)來(lái)的數(shù)據(jù)的奇偶校驗(yàn)位進(jìn)行奇偶校驗(yàn)。
如果符合,那么表示接收數(shù)據(jù)有效,可以傳入處理器;如不符,則不傳,直接丟棄數(shù)據(jù)。
RX_STOP狀態(tài):無(wú)論停止位長(zhǎng)度設(shè)定為1位或者是2位,有限狀態(tài)機(jī)總是等待1位樣本的采樣時(shí)間,然后抽樣停止位。只要一個(gè)邏輯采樣停止位被檢測(cè)到,數(shù)據(jù)接收模塊就不會(huì)去檢查是否停止位的配置出現(xiàn)錯(cuò)誤。此時(shí),有限狀態(tài)機(jī)將返回IDLE狀態(tài)。
2.3 數(shù)據(jù)發(fā)送模塊設(shè)計(jì)
發(fā)送模塊將從處理器接收到的數(shù)據(jù),加上起始位,奇偶檢驗(yàn)位和停止位組成規(guī)定的格式后串行輸出。首先,利用緩存器FIFO存放需要發(fā)送的數(shù)據(jù),這樣處理器可以一次往FIFO中寫入多個(gè)字節(jié)的數(shù)據(jù)。發(fā)送數(shù)據(jù)時(shí)依次從FIFO中每次取出1Byte進(jìn)行串行輸出。
設(shè)計(jì)采用發(fā)送狀態(tài)機(jī)來(lái)控制整個(gè)模塊的發(fā)送過(guò)程。發(fā)送狀態(tài)機(jī)由以下5個(gè)狀態(tài)組成:IDLE、TX_START、TX_DATA、CHECK、TX_STOP,它們的轉(zhuǎn)移關(guān)系如圖4所示。
IDLE狀態(tài):在沒有接收到將要發(fā)送的數(shù)據(jù)時(shí),發(fā)送模塊一直處于該狀態(tài),此刻一直保持發(fā)送模塊的數(shù)據(jù)位為高,當(dāng)?shù)玫街鳈C(jī)發(fā)出的工作信號(hào)時(shí),發(fā)生狀態(tài)跳轉(zhuǎn),進(jìn)入下個(gè)狀態(tài)。
TX_START狀態(tài):發(fā)送模塊會(huì)先發(fā)送一個(gè)數(shù)據(jù)“0”,作為起始位。起始位傳送完畢后,轉(zhuǎn)入下個(gè)狀態(tài)。
TX_DATA狀態(tài):發(fā)送完起始位后,接著發(fā)送由主機(jī)傳來(lái)的有效數(shù)據(jù)。首先把數(shù)據(jù)存入模塊內(nèi)的移位寄存器中,利用移位寄存器實(shí)現(xiàn)并行輸入到串行輸出的轉(zhuǎn)換。同時(shí)計(jì)數(shù)器開始計(jì)數(shù),在發(fā)送完8位數(shù)據(jù)后,計(jì)數(shù)器清零,F(xiàn)SM隨即跳入下個(gè)狀態(tài)。
評(píng)論