UART IP的設計與驗證(筆記)


最近再看一款UART IP,記錄一下學習的筆記。

UART是一種異步通訊接口,UART模塊包含了一個軟件可編程的波特率產生器,包含了2個FIFO,TX FIFO的深度可通過參數TFIFO_DEPTH_LOG(1~8)【256bytes】進行配置,FIFO的深度為2^TFIFO_DEPTH_LOG,RX FIFO可通過RFIFO_DEPTH_LOG(1~7)【128bytes】進行配置,FIFO的深度為2^RFIFO_DEPTH_LOG。

UART module還包括了來自不同中斷源的靈活中斷,包含了兩條 hardware flow control lines,一條是input,一條output 。這個UART module也可以用作 lrDA 控制器, 通過配置能夠連接到一個lrDA Transceiver,但是用作UART模式時,lrDA控制器是bypassed。

Features:

1、        支持全雙工操作

2、        支持hardware flow control

3、        Software flow control支持可配置命令和escape

4、        TX FIFO的最大深度可配為128Bytes ,RX FIFO的最大深度可配為256Bytes。

5、        UART的數據長度可配置為5、6、7、8bits.

6、        停止位可配置為1、1.5、2bits

7、        RX 和 TX 的停止位可分別配置

8、        支持奇/偶校驗

9、        支持自動識別檢驗錯誤或者幀錯誤

10、     支持UART 的回環測試模式

11、     支持壞包識別

12、     支持DMA操作

13、     支持可掩碼的多中斷源的信號中斷

14、     FIFO的中斷觸發等級可編程

15、     可基於可變除數產生波特率

16、     可配置用作lrDA控制器

17、     支持32/8bits的操作

18、     支持自動波特率的流識別

 

上圖是UART module 的結構圖,通過兩個分離的RX channel 和TX channel工作,RX/TX FIFO中的數據量以及RX_FIFO_full/TX_FIFO_empty中斷都可以通過相應寄存器的值進行監測,DMA request以及中斷產生可以通過寄存器進行控制。RX_FIFO_full/TX_FIFO_empty中斷可通過配置相應的寄存器控制開啟或者關閉,TX/RX FIFO 可以被DMA訪問,在receiver model,只要receiver FIFO達到了設定的閾值,就會產生一個DMA請求,當數據量少於閾值時,這個請求就會被撤銷;在transmit model,當transmit FIFO幾乎要空的時候,就會自動產生一個DMA請求。【當RX FIFO幾乎要滿的時候(此時已經超過了閾值),就會發receiver 請求給DMA控制器;當TX FIFO幾乎空的時候,就會發transmit請求給DMA控制器。】

Hardware flow control通過RSTN/CSTN來指示狀態,Software flow control通過集成到TX/RX數據流中的命令來指示狀態。Hardware flow control 有兩個模式:1、auto flow control;2、software configured hardware flow control。

Hardware flow control

 

Auto hardware flow control由auto-CTS和auto-RTS控制,auto-RTS在receiver block中產生,如果RX FIFO的數據量少於閾值,RTS is active,發送設備(外部的UART)可能會多發1byte數據,這是因為當它發這筆數據的時候還沒檢測到RSTn;對與auto-CST,在UART發數據之前CSTn信號必須已經產生,在發送下一筆數據之前需要先檢查CSTn信號,當CTSn is active,transmitter 才會發送下一bytes,因為CTS的狀態能夠根據自己transmitter的狀態自動控制而不需要主機給予中斷,因此當auto-CTSn flow control使能的時候,能夠減少主機中斷的產生。

Software flow control

 

軟件流控制流程如上圖,receiver endpoint通過receiver fifo的指針來決定是否停止傳輸,當receiver FIFO指針大於閾值,receiver endpoint就會通過TX口發送XOFF命令給transmit endpoint,讓其停止發送;當receiver FIFO的指針小於閾值時,receiver endpoint 發送XON命令給transmitter,讓其開始發送【可以看出,XOFF/XON是接收方發給發送方的,與數據傳輸的方向相反】。由於software flow control 是通過發送命令來顯示流狀態的,為了避免出現與XCMD(XOFF/XON)相同的數據導致控制出錯,在發送之前或接收之后時數據與命令應該進行區分,因此就需要額外的ESC命令。UART支持兩種escaping模式,1、將XCMD作為正常數據,使用ESC命令和反轉數據來區分與XCMD和ESC相同值的傳輸數據;2、將XCMD作為看作正式數據,但是在XCMD之前先發一個ESC。如下圖所示

 

下面針對features的testplan,只針其中幾個重點feature詳細記錄。

Verification point

Reset and clock

Description:

UART有兩個clock domain:PCLK、clk_uart,他們之間的關系:

PCLK的頻率大於/小於/等於clk_uart 的頻率;clk_uart domain 的復位以及PCLK domain的復位。

Verification:

Random: the two clock frequency and phase can be randomized

Check:     check whether UART can work normally in diff conditions

Full-duplex operation

Description

RX /TX can send and receive data in same time , TX and RX independently send and receive data

       Verification

       Random:  configure 文件

Check:          check send data and receive data is cottect

Hardware flow control

             Check :check the RX FIFO count when hardware flow control happen

                            Check send data and receive data is cottect

 

Software flow control

Different UART data byte lengths

Different UART stop bit number

Support odd/even parity

Auto detect for parity and framing error

         Random: constraint the data to send error data to UART

              Check:   check the frame error detected function and parity error detection can work or not

UART loop-back test mode:

              Description: this model is to transmit data and receive data by itself , its TX will connect its own RX.

              Random: randomize the data format(word length , stop bit number , odd/even parity)

              Check : Check send data and receive data is cottect

Break character detection and generation

              Uart can send break data in TX and detection the break data in RX , configure UART to send break data ,when TX FIFO is real empty and TX is IDLE ,setting this bit to high to forces the TX data output low; configure UART to enable break detect interrupt ,when RX always low this interrupt will be active.

              Random: constraint the RX always low to make a break data SU

              Check: check the break character generation and break detection function whether is correct.

Support DMA operation:

       UART support DMA access UART FIFOs, and support two model :

Model0:when tx_FIFO_empty/rx_FIFO_full is active .UART keep sending DMA REQ until receiving the DMA ACK ;

Model1: when tx_FIFO_empty/rx_FIFO_full is active ,DMA REQ is active else is inactive.

Flexible baud rate generation

Support lrDA mode:

     irDA 發送模塊會修改UART發送的數據讓其符合lrDA的時序,並發送到TXD端口,對於另一邊,接收模塊從RXD端口檢測到lrDA的時許,並將其變成UART的數據流發送到UART的接收模塊。

 

Support 32 bits or 8 bits operation

補充:

什么是UART中的flow control:

一般在串行通訊中,我們會在一些上位機上看到 RTS(Request to send 請求發送,電腦要求調制解調器將數據提交)/CTS(Clear to send 清除發送,調制解調器通知電腦可以發數據過來 )、DTR/DSR和 XON/XOFF的選項,這是對流控制的選項,一般是應用於 RS232接口的,是拿來調制解調器的數據通訊的.

一、流控制的作用

這里講到的 “流”,指的是數據流;在數據通信中,流控制是管理兩個節點之間數據傳輸速率的過程,以防止出現接收端的數據緩沖區已滿,而發送端依然繼續發送數據,所導致數據丟失

二、工作原理

當接收端的數據緩沖區已滿,無法處理數據來時,就發出 “不再接收” 的信號,發送端則停止發送,直到發送端收到 “可以繼續發送” 的信號再發送數據。計算機中常用的兩種流控制分別是硬件流控制(RTS/CTS、DTR/DSR等)和軟件流控制(XON/XOFF)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM