基于SOPC的異步串行通信IP核設計
3. 3 UART協(xié)議邏輯模塊設計
本文設計的UART協(xié)議邏輯模塊主要包括波特率產生模塊,發(fā)送模塊,接收模塊,寄存器組等幾個部分,其結構如圖4所示。寄存器組說明如表2,其他幾個模塊的設計如圖4所示。
3. 3.1波特率模塊
波特率模塊根據PLB總線提供的時鐘產生需要的發(fā)送時鐘和接收時鐘。由于UABT在發(fā)送數據時只需要按照發(fā)送波特率將數據串行地發(fā)出就可以了,因此發(fā)送時鐘就等于發(fā)送波特率。而當UART在接收數據時,需要對串行數據進行采樣以判斷接收數據。由于接收方和發(fā)送方的時鐘不可能完全同步,所以需要對每一位接收數據持續(xù)電平的時間進行分段。分段越多,接收出現誤判的概率就越低,但系統(tǒng)開銷也越大。在實際的設計中通常采用發(fā)送時鐘的16倍作為接收時鐘。波特率模塊的分頻功能由兩個16位計數器實現,它將PLB總線時鐘按配置寄存器的設定進行分頻,產生發(fā)送時鐘和接收時鐘。
3.3.2發(fā)送模塊
發(fā)送模塊主要包括發(fā)送FIFO和發(fā)送單元兩部分,如圖5(a)所示。發(fā)送FIFO數據位寬度為8bit,深度為16字節(jié)。發(fā)送FIFO緩存MicroBlaze處理器需要發(fā)送的數據。當FIFO空間滿時,發(fā)送模塊將狀態(tài)寄存器中“發(fā)送FIFO滿”標志位置1,MicroBlaze處理器通過查詢該位以判斷UART IP核是否可以接收下一個發(fā)送數據。
發(fā)送單元的設計用有限狀態(tài)機的方法實現,其狀態(tài)轉換圖如圖5(b)所示。系統(tǒng)在復位后,發(fā)送單元處于空閑狀態(tài)。當FIFO有發(fā)送數據時(Empty管腳為低),發(fā)送單元發(fā)出讀FIFO操作,并進入數據準備狀態(tài)。當數據從FIFO中讀出,發(fā)送單元首先發(fā)送起始位,進入發(fā)送狀態(tài)。在發(fā)送狀態(tài)下,發(fā)送單元依次串行發(fā)送8比特數據,并計算當前的奇偶校驗碼。在數據發(fā)送結束后,若配置寄存器中奇偶校驗位為1,則發(fā)送奇偶校驗位。最后發(fā)送單元發(fā)送停止位,回到空閑狀態(tài),完成次數據發(fā)送。
3.3.3接收模塊
接收模塊由接收FIFO和接收單元兩部分組成,如圖6(a)所示。接收FIFO數據位寬度為8bit,深度16字節(jié),它負責緩存接收單元收到的數據,并在收到數據后將狀態(tài)寄存器中“接收數據有效”標志位置1.MicroBlaze處理器通過查詢該位來判斷是否有數據到達。
接收單元的設計同樣采用了有限狀態(tài)機的方法,其狀態(tài)轉換圖如圖6(b)所示。系統(tǒng)在復位后接收單元處于就緒狀態(tài)。當接收單元在接收管腳連續(xù)檢測到8個低電平時認為起始位有效,進入接收狀態(tài)。在接收狀態(tài)下,接收單元每16個接收時鐘采集一次接收數據。8個接收數據都采集完成后,接收單元根據配置寄存器中“奇偶校驗位”是否為1決定是否進行奇偶校驗。若奇偶校驗通過,接收單元將接收到的數據寫入接收FIFO.若奇偶校驗未通過接收FIFO滿,接收單元丟棄收到的數據,并在狀態(tài)寄存器中置“奇偶校驗出錯”位或“接收FIFO滿”位為1.
評論