新聞中心

EEPW首頁 > 測試測量 > 設計應用 > UART自動驗證平臺

UART自動驗證平臺

作者: 時間:2016-10-18 來源:網絡 收藏

通用異步收發(fā)器(UART)是將數據從一個系統(tǒng)發(fā)送到另一個系統(tǒng)的最簡單方法。UART通常集成在微控制器中,而且很多現代的IC都包含一個也可以同步通信的UART,稱為通用同步/異步收發(fā)器(USART)。

本文引用地址:http://m.butianyuan.cn/article/201610/308945.htm

UART除了在系統(tǒng)中被廣泛使用以外,它還是測試接口是否符合相關標準的必要工具。下面的測試內容通常在待測器件(DUT)的 硬件/IP上執(zhí)行,并且采用不同的波特率、數據、奇偶校驗和停止位寬度。

1. 基本回環(huán)測試

2. 標準UART發(fā)送與接收測試

3. 奇偶校驗和成幀誤差條件

4. 具有LSB/MSB首選項的UART發(fā)送與接收

5. 時序容差測試

除基本回環(huán)測試外,其它幾種情況都需要專門的驗證平臺來檢查DUT是否兼容于標準的UART接口。并沒有現成可用的這種平臺。公司在測試UART設計時通常制作定制的驗證套件,進行手動測試,或者使用市場上的標準接口IC或USB-UART橋接器。但是,這些方法的測試范圍很有限。

本文介紹一種通用的UART自動驗證平臺,可用于自動測試UART接口的所有方面。

一、標準的UART幀

圖1給出一個標準的UART幀,并解釋了其中的所有字段。該幀的定義是在考慮了市場上不同的UART規(guī)范后而制定的。因此可以肯定地說,以下結構覆蓋了所有可能的UART數據幀組合。

圖1:通用UART幀

從圖1中可以看到,起始位(低位,1位長度)不會因UART版本的不同而變化。幀的其它字段長度可根據具體應用而變化。器件可支持每數據包的數據位寬度最低為4位,最高是9位。在特定情況下,當設計需要時數據寬度可采用任意值,以保持其它參數的兼容性,但不一定兼容于標準的UART接口。當需要錯誤校驗時應加入奇偶校驗位,而其它情況下可在數據包中省去該字段。由于這是單個位奇偶校驗,因此在接收器處最多識別單個位錯誤。停止位(高位,直到下個數據包開始)會有不同,取決于接收器接收下個數據包的速度有多快,最快的接收器最低是1位,而最慢的接收器最低是4位。

本文下一頁:UART驗證平臺

二、平臺

穩(wěn)健的UART驗證平臺必須測試通信接口的所有特性。為此,平臺需要能夠自動處理所有可能的UART參數組合。目前UART驗證測試采用手動測試,需要在整個測試過程中使用專用資源,而且由于是手動測試,會消耗大量時間。這時可采用能夠處理重復測試的UART自動驗證平臺實現流程的自動化,以減少測試工作。

我們可以看到標準的現成工具無法支持其中的多種特性,例如4位和9位數據寬度,或2.5位至4.0位停止寬度。因此,需要一種可支持全部甚至更多特性的全新驗證平臺。另一個要求則是實現測試的自動化,這可以減少對DUT執(zhí)行測試時的手動工作。

本文描述的UART自動驗證平臺可支持如下配置:

1. 波特率(bps):50、110、300、600、1200、2400、4800、9600、19200、28800、38400、57600、115200、230400、460800、921600

2. 數據寬度(位):1、2、3、4、5、6、7、8、9、10

3. 奇偶校驗位:無、奇數、偶數

4. 停止位寬度:1.0、1.5、2.0、2.5、3.0、3.5、4.0

5. TX緩沖器:16幀

6. RX緩沖器:16幀

圖2:UART自動驗證平臺

圖2 給出了包含UART自動驗證平臺所有主要模塊的高級系統(tǒng)視圖:

1. 測試控制器:驗證平臺的核心。這是一個用來收集、處理數據,并在系統(tǒng)中其它模塊之間轉發(fā)數據的MCU。它應該具有一個USB接口,從而與主計算機進行通信。

2. 發(fā)送與接收FIFO:需要發(fā)送的數據幀存儲在發(fā)送FIFO中,從DUT接收到的數據幀則存儲在接收FIFO中。MCU從主機收集發(fā)送數據包,將其轉換為數據幀,并載入到發(fā)送FIFO中。接收FIFO負責轉發(fā)從DUT收集的幀,將其轉到測試控制器進行數據包轉換,并轉發(fā)至主機。數據包緩存是提高系統(tǒng)速度的有效方案。

FIFO通常在MCU的SRAM中實現。這種實現方案僅支持16幀的發(fā)送或接收會話。可根據特定要求提高這一數字,但要受限于所用的SRAM。

3. 移位寄存器(并行到串行和串行到并行轉換器):UART可采用移位寄存器來實現。在發(fā)送比特位時,它可作為并行到串行轉換器,在接收時另一個移位寄存器變成串行到并行轉換器。兩個寄存器都以雙倍或多倍波特率頻率計時。

待發(fā)送的數據包已被轉換為幀比特并送入FIFO。幀數據被加載到發(fā)送移位寄存器中,并以正確的波特率發(fā)送到DUT。采用類似的方案從DUT接收數據包。對接收到的幀以雙倍波特率(或更多)進行采樣,一旦整個數據包進入接收移位寄存器中,幀比特位就會被轉移到接收FIFO中。

4. PLL和波特率生成器:PLL模塊使用外部11.0592MHz晶體振蕩器生成供所有其它模塊使用的時鐘頻率。PLL使輸入模塊乘以系數5,以生成55.296MHz的主時鐘頻率。由于所有模塊都采用相同的時鐘源工作,因此不必使用額外的邏輯來同步模塊。

選擇外部振蕩器生成通用UART應用所需的精確波特率??蓪?1.0592MHz時鐘源進行分頻,從而為移位寄存器提供標準的波特率時鐘。波特率生成器作用就在于此。這里采用數字PWM時鐘生成波特率時鐘。通過改變PWM的周期和比較參數可生成占空比為50%的波特時鐘。占空比可變是使用PWM模塊的另一個優(yōu)勢,相比之下時鐘分頻器只能生成固定占空比的時鐘輸出。可變的占空比可用來驗證UART接口的時鐘容差和輸出保真度。

5. 控制寄存器:所有參數和設置都保存在8位寄存器中。測試控制器的SRAM可用來實現該目的。主計算機通過用來訪問FIFO的相同接口讀取和寫入寄存器。為該平臺提供如下寄存器

a.控制:使用該寄存器傳送即時命令。寄存器的MSB可用來通知測試控制器有新的命令進入寄存器。命令執(zhí)行后該位被清空。所支持的命令及相應的值如下所示。

b.狀態(tài):測試控制器使用該寄存器發(fā)布當前測試的結果,包括傳輸時的錯誤條件。

c.波特率:該寄存器控制下次數據傳輸使用的波特率。所支持的波特率及其數值顯示如下。

d.數據寬度:該寄存器控制下次數據傳輸使用的數據寬度。所支持的數值為0x01至0x0A(10個值)。

e.校驗位:使用該寄存器設置校驗位??梢允菬o校驗,奇數校驗或偶數校驗,如下所示。

f.停止寬度:該寄存器規(guī)定每個幀使用的停止寬度。所支持的停止寬度如下所示。

g.過采樣率:發(fā)送和接收幀所需的過采樣數量使用該寄存器進行設定。邏輯復雜程度隨所需的過采樣率增加而增加。最小值是2。

h.TX大?。涸摷拇嫫鞅A鬎IFO中發(fā)送幀的數量。此值既可在發(fā)送FIFO加載數據后手動設置,也可在FIFO加載后自動加載。最大值是16,最小值是1。

i.RX大?。涸摷拇嫫鞅A鬎IFO中接收幀的數量。當接收到一個數據幀時,寄存器中的這個值增加1,當主機從FIFO中讀取一個幀時,該值減去1。最大值是16,最小值是1。

6. DUT控制與狀態(tài)信號:需要將以上參數送到DUT。這個模塊從控制寄存器獲取參數,并推送到DUT。使用并行接口向DUT報告當前設置。此外,平臺具有一個控制信號“START”,用于斷言該信號可初始化DUT。若DUT應用了平臺的設置,并做好測試的準備工作,就會將另一個信號斷言為“READY”。

7. 主計算機:主計算機執(zhí)行測試用的Perl腳本,通過USB端口與平臺進行通信。所有測試案例都實現為Perl腳本,其可生成覆蓋驗證過程的測試序列。此外,主計算機還收集用來檢查測試是否通過的相關數據。該信息連同測試案例都被寫入文件,以便記錄。

8. 待測器件(DUT):測試帶UART接口的目標器件。

從方框圖及其描述中可以看到,平臺使用移位寄存器來實現UART接口。這種方案的優(yōu)勢在于可通過增加移位寄存器的大小來實現擴展性。

三、幀驗證模塊

使用移位寄存器和FIFO實現UART接口其實并不容易,除非有一個用來識別有效幀的邏輯,用于解碼接收到的數據。由下降沿檢測器控制的簡單計數器/定時器能實現此目的。

UART傳輸開始于下降沿,并在固定的時間內保持有效。如果我們已知波特率和UART數據包設置,可利用設定到該時鐘頻率的定時器來計算數據包的有效時長。這樣便可在有效期間內精確地啟動移位寄存器以便計入接收線路上看到的數據或者記出發(fā)送數據。

該邏輯的狀態(tài)機實現方案如圖3所示。有兩個流程:一個流程控制移位寄存器使能輸入,另一個用來保持定時器。

圖3:幀驗證狀態(tài)機

狀態(tài)機可用圖4中的模塊表示。狀態(tài)機工作所需的模塊輸入和輸出也在下面予以解釋。

圖4:幀驗證模塊

a. CLK_IN(輸入):此為主時鐘。該時鐘的頻率遠高于波特時鐘。使用該時鐘采樣和檢測START輸入的下降沿。

b. BAUD_CLK(輸入):波特時鐘頻率乘以過采樣率。此時鐘輸入的最小值是波特頻率的兩倍。

c. START(輸入):該輸入的下降沿代表狀態(tài)機的開始。

d. COUNT(輸入):8位幀寬度,用于初始化倒計時定時器周期。

e. FRAME_VALID(輸出):該輸出信號在START輸入的下降沿變高,當計數器結束時變低。

f. IRQ(輸出): 該輸出的上升沿代表幀結束。當計數器計數結束時,該信號在一個主時鐘周期內保持高電平。當狀態(tài)機返回空閑狀態(tài)時,值復位為 ‘0’。

四、UART驗證模塊

我們已經有了用來檢測幀的開始和長度的邏輯模塊,現在可以開始設計UART驗證模塊。對于接收幀驗證模塊,START輸入就是RX線路本身。由于幀發(fā)送在我們的控制之下,因此進入幀驗證模塊(FVB) 的START輸入來自單位寄存器。圖5給出了完整的UART驗證模塊。

圖5:UART驗證方框圖

由于發(fā)送和接收數據包的寬度相同,因此計數寄存器可由TX和RX幀驗證模塊共享。來自這兩個模塊的幀驗證信號可作為各自部分移位寄存器的使能信號。前面已經介紹過,發(fā)送部分使用并行到串行轉換器,而接收部分使用串行到并行轉換器。這兩個轉換器都能訪問存儲單個幀的32位存儲單元,并具有左移功能。兩個寄存器在初始化過程中都被置為‘1’s。但只有位的“計數”數值有效。

UART驗證模塊隨后連接到輸入、輸出和其它頂層模塊,如圖6所示。這是圖2所示的系統(tǒng)級方框圖的另一個視角。

圖6:UART驗證

UART驗證模塊的波特時鐘采用PWM單元生成。它作為分頻器使用,用來從固定的11.0592MHz輸入時鐘生成所需的時鐘頻率。PWM單元的輸出頻率由所需的波特率和驗證模塊的過采樣率決定。通過改變PWM單元的周期和比較值來生成要求的時鐘頻率。該模塊還可用來生成時鐘抖動和可變的占空比時鐘,用于驗證DUT對波特率變化的容差。驗證平臺的這個功能可模擬所有可能的實際情景。

驗證模塊的中斷請求(IRQ)輸出與兩個軟件中斷服務程序(ISR)有關 – 一個用于發(fā)送,一個用于接收。這兩個ISR可用來處理發(fā)送和接收FIFO。幀發(fā)送結束時,調用發(fā)送ISR將下個幀從FIFO加載到發(fā)送移位寄存器。類似地,當接收數據幀時,接收IRQ從接收移位寄存器獲取內容并將數據推送到接收FIFO中。

圖7給出了接收事件的典型時序圖,圖8給出了發(fā)送事件的時序圖。兩個階段涉及的所有信號也都包含在圖中。這種情況都假設UART數據包包含8位數據,無校驗位,有1.5位停止寬度。同樣,為了簡化,將過采樣率設為2,即波特時鐘是實際波特率頻率的兩倍。寄存器內容中的有效幀數據被標成黃色,原因在于為了填充32位移位寄存器,有些數據在初始化過程中被置為‘1’s。

圖7:接收數據包

圖8:發(fā)送數據包

五、固件

利用固件在微控制器(MCU)中實現簡單的存儲、處理和轉發(fā)架構。其它功能則在硬件中實現,并由MCU進行訪問控制。MCU從主機接收需處理的命令和數據。它將待發(fā)送的幀和從DUT接收的幀存儲在SDRM中實現的FIFO內。用來處理發(fā)送和接收數據包的中斷服務程序(ISR)通過通用IRQ在MCU中實現。圖9的流程圖給出了基本流程。

圖9:基本固件流程

六、軟件

這部分平臺運行在Windows PC上,采用Perl腳本語言。平臺所需的USB接口庫是針對Perl進行重用的標準USB庫。在硬件驅動器層上編寫一個UART驗證庫,以支持與平臺之間的通信。

UART驗證庫支持如下API。

a. Platform_Start():必須在執(zhí)行任何操作前調用;啟動接口。

b. Platform_Stop():必須在退出主腳本之前調用;停止接口,并顯示最后的通信錯誤信息(如果有)。

c. Platform_GetSupportedBaud():返回支持的波特率列表。

d. Platform_ReportError($_):設置錯誤值,用于確定最后的錯誤。

e. Platform_CheckPassFail($_):如果輸入是1,通過;否則失敗。

f. Platform_COMMAND($_):從支持列表中向平臺發(fā)送一個命令。

g. Platform_WriteConfig():將整個數據包從腳本發(fā)送至MCU。發(fā)送配置之前應使用額外的API設置參數。

h. Platform_ReadConfig():顯示來自MCU的當前配置。

i. Platform_CopyConfig():將MCU配置復制到本地腳本緩沖器。并顯示被復制的值。

j. Platform_SetBaudRate($_):在本地緩沖器中設置波特率數值;直到調用Platform_WriteConfig()時,才能將該值發(fā)送到MCU。

k. Platform_SetDataWidth($_):在本地緩沖器設置數據寬度值;直到調用Platform_WriteConfig()時,才能將該值發(fā)送到MCU。

l. Platform_SetParityBit($_):在本地緩沖器中設置校驗位值;直到調用Platform_WriteConfig()時,才能將該值發(fā)送到MCU。

m. Platform_SetStopWidth($_):在本地緩沖器中設置停止寬度值;直到調用Platform_WriteConfig()時,才能將該值發(fā)送到MCU。

n. Platform_SetOverSampleRate($_):在本地緩沖器中設置過采樣值;直到調用Platform_WriteConfig()時,才能將該值發(fā)送到MCU。

o. Platform_SetTXSize($_):設置一次會話中發(fā)送幀的數量;直到調用Platform_WriteConfig()時,才能將該值發(fā)送到MCU。

p. Platform_GetRXSize($_):返回RX緩沖器中幀的數量。

q. Platform_SetRXSize($_):在本地緩沖器中設置從PSoC3 RX緩沖器中讀取的值的數量;直到調用Platform_WriteConfig()時,才能將該值發(fā)送到MCU。

r. Platform_SetTXDataArray(@_):設置一個會話中要發(fā)送的數據幀。這個API會覆蓋利用Platform_SetTXSize($_) API設置的值(如果有);直到調用Platform_WriteConfig()時,才能將該值發(fā)送到MCU。

s. Platform_IsDUTReady():如果DUT空閑,返回1;如果DUT被占用,返回0。

七、硬件實現

實現UART自動驗證平臺所需的大部分邏輯都是通過各種類型的模塊在硬件中實現。為實現該平臺的硬件部分,我們需要如下組件:

1. 32位微控制器(MCU) – 1個

2. 用于倍增頻率的PLL – 1個

3. 用于生成波特頻率的PWM單元– 1個

4. 32位移位寄存器– 2個

5. 用于幀驗證模塊狀態(tài)機的CPLD或FPGA – 1個,具有足夠單元

即使我們使用單個硬件單元實現所有模塊,每個模塊的通信和同步仍需很大量工作。如果我們能夠將所有硬件在單個處理器上實現,該平臺就會簡單得多,例如使用賽普拉斯半導體的可編程片上系統(tǒng)(PSoC),這是微控制器(MCU)、可編程模擬、可編程數字和可編程互聯的完美組合。像PsoC這樣的集成型處理器還包含很多常用的固定功能塊,例如PWM、移位寄存器、Opamp、ADC和DAC。該處理器系列通常包含8位器件(例如PSoC 1和PSoC 3)以及32位處理器(例如PSoC 4、PSoC 5和PSoC 5LP),使開發(fā)人員能夠根據應用選擇所需的處理能力。片上系統(tǒng)器件還支持內部Flash、SRAM和EEPROM,以及復雜的時鐘樹和可編程時鐘生成器。另外,還提供多種通信接口,例如USB 2.0、I2C、UART、SPI、I2S、LIN和CAN。

帶可編程邏輯的SoC支持UART自動驗證平臺的更多內容能夠在硬件(而非軟件)中實現。例如,PsoC具有一個名為通用數字模塊(UDB)的可編程邏輯陣列。PSoC 3/PSoC 5/PSoC 5LP共有24個UDB,每個包含8個宏單元、PLA(可執(zhí)行16個乘積項)、1個數據路徑單元、1個控制單元和1個狀態(tài)單元。這意味著這個系列的PsoC能夠媲美中高端的Altera MAXV 系列CPLD和Xilinx Cool Runner系列。

PsoC器件的編程和調試可通過PSoC Creator 來執(zhí)行,這是一種基于分層原理圖的設計工具,能利用預制組件和原語函數的加載庫來幫助設計人員完成系統(tǒng)級設計方案。這給予了開發(fā)人員足夠的靈活性,使其可以融入模擬和數字材料清單,同時通過簡單的固件升級實現最后一分鐘的設計變更。具有多個通信接口的引導加載器亦能實現簡單直接的現場升級。

實現方案采用PSoC 5LP,該器件具有32位ARM Cortex M3內核、USB 2.0接口、可編程時鐘/PLL、硬件PWM、24單元UDB、32位移位寄存器以及高度可配置的通用IO。圖10給出了PSoC 5LP的簡化方框圖。

圖10:PSoC 5LP器件的簡化方框圖

組件的固件位于PSoC 5LP中,包含兩個部分:一個是針對數字/模擬模塊的原理圖輸入,另一個是在ARM Cortex M3 MCU上運行的膠合邏輯。固件的原理圖輸入如圖11所示,圖中給出了波特率PWM、32位移位寄存器,以及發(fā)送和接收部分的幀驗證模塊。

圖11:PSoC 5LP固件的原理圖輸入

設計采用如下主要組件:

a. Baud_PWM:生成一個是所選波特率兩倍的時鐘。這樣能確保數據的正確采樣。

b. ShiftReg_TX:32位移位寄存器,用以將TX幀移出到DUT。

c. ShiftReg_RX:32位移位寄存器,用以從DUT移入RX幀。

d. UART_Counter_TX:遞減計數器,為TX移位寄存器生成時鐘輸入,整個幀寬度內有效。

e. UART_Counter_RX:與UART_Counter_TX在設計上相同,為RX移位寄存器生成輸入時鐘。

f. Start_TX:控制寄存器,指示來自固件的TX幀的開始。

g. FrameWidth:計數器的輸入,指示預期的幀寬度,考慮雙倍采樣率。

h. tx_irq:上升沿標志TX幀的移出已完成。

i. rx_irq:上升沿標志RX幀的移入已完成。

j. StartTest:用來標志在設置控制線之后,對DUT測試的開始。

k. Ready_IRQ:在來自DUT的上升沿進行觸發(fā),以指明測試狀態(tài)就緒。

l. 其他IO組件:將控制信號發(fā)送到DUT,以便在測試開始前對其進行配置。

UART_Counter_TX和UART_Counter_RX是Verilog語言的定制組件,位于PSoC 5LP的UDB中。它可用來實現之前介紹的幀驗證狀態(tài)機。

圖12:針對PSoC 5LP用Verilog實現的幀驗證組件

這樣就可成功實現針對UART的自動驗證平臺,用以測試不同參數間的接口,例如波特率(高達921600波特)、數據寬度(最大9位)、校驗和停止寬度(最大4位)。該平臺有助于利用單芯片解決方案執(zhí)行UART接口驗證所需的所有測試,從而降低設計復雜性以及出現時序相關問題的幾率。UART自動驗證平臺能減少整個測試期間的手動工作量和對專用資源的要求。



評論


相關推薦

技術專區(qū)

關閉