UART自動(dòng)驗(yàn)證平臺(tái)
通用異步收發(fā)器(UART)是將數(shù)據(jù)從一個(gè)系統(tǒng)發(fā)送到另一個(gè)系統(tǒng)的最簡(jiǎn)單方法。UART通常集成在微控制器中,而且很多現(xiàn)代的IC都包含一個(gè)也可以同步通信的UART,稱為通用同步/異步收發(fā)器(USART)。
本文引用地址:http://www.ex-cimer.com/article/201610/308945.htmUART除了在系統(tǒng)中被廣泛使用以外,它還是測(cè)試接口是否符合相關(guān)標(biāo)準(zhǔn)的必要工具。下面的測(cè)試內(nèi)容通常在待測(cè)器件(DUT)的UART 硬件/IP上執(zhí)行,并且采用不同的波特率、數(shù)據(jù)、奇偶校驗(yàn)和停止位寬度。
1. 基本回環(huán)測(cè)試
2. 標(biāo)準(zhǔn)UART發(fā)送與接收測(cè)試
3. 奇偶校驗(yàn)和成幀誤差條件
4. 具有LSB/MSB首選項(xiàng)的UART發(fā)送與接收
5. 時(shí)序容差測(cè)試
除基本回環(huán)測(cè)試外,其它幾種情況都需要專門的驗(yàn)證平臺(tái)來(lái)檢查DUT是否兼容于標(biāo)準(zhǔn)的UART接口。并沒(méi)有現(xiàn)成可用的這種平臺(tái)。公司在測(cè)試UART設(shè)計(jì)時(shí)通常制作定制的驗(yàn)證套件,進(jìn)行手動(dòng)測(cè)試,或者使用市場(chǎng)上的標(biāo)準(zhǔn)接口IC或USB-UART橋接器。但是,這些方法的測(cè)試范圍很有限。
本文介紹一種通用的UART自動(dòng)驗(yàn)證平臺(tái),可用于自動(dòng)測(cè)試UART接口的所有方面。
一、標(biāo)準(zhǔn)的UART幀
圖1給出一個(gè)標(biāo)準(zhǔn)的UART幀,并解釋了其中的所有字段。該幀的定義是在考慮了市場(chǎng)上不同的UART規(guī)范后而制定的。因此可以肯定地說(shuō),以下結(jié)構(gòu)覆蓋了所有可能的UART數(shù)據(jù)幀組合。
圖1:通用UART幀
從圖1中可以看到,起始位(低位,1位長(zhǎng)度)不會(huì)因UART版本的不同而變化。幀的其它字段長(zhǎng)度可根據(jù)具體應(yīng)用而變化。器件可支持每數(shù)據(jù)包的數(shù)據(jù)位寬度最低為4位,最高是9位。在特定情況下,當(dāng)設(shè)計(jì)需要時(shí)數(shù)據(jù)寬度可采用任意值,以保持其它參數(shù)的兼容性,但不一定兼容于標(biāo)準(zhǔn)的UART接口。當(dāng)需要錯(cuò)誤校驗(yàn)時(shí)應(yīng)加入奇偶校驗(yàn)位,而其它情況下可在數(shù)據(jù)包中省去該字段。由于這是單個(gè)位奇偶校驗(yàn),因此在接收器處最多識(shí)別單個(gè)位錯(cuò)誤。停止位(高位,直到下個(gè)數(shù)據(jù)包開(kāi)始)會(huì)有不同,取決于接收器接收下個(gè)數(shù)據(jù)包的速度有多快,最快的接收器最低是1位,而最慢的接收器最低是4位。
本文下一頁(yè):UART驗(yàn)證平臺(tái)
二、平臺(tái)
穩(wěn)健的UART驗(yàn)證平臺(tái)必須測(cè)試通信接口的所有特性。為此,平臺(tái)需要能夠自動(dòng)處理所有可能的UART參數(shù)組合。目前UART驗(yàn)證測(cè)試采用手動(dòng)測(cè)試,需要在整個(gè)測(cè)試過(guò)程中使用專用資源,而且由于是手動(dòng)測(cè)試,會(huì)消耗大量時(shí)間。這時(shí)可采用能夠處理重復(fù)測(cè)試的UART自動(dòng)驗(yàn)證平臺(tái)實(shí)現(xiàn)流程的自動(dòng)化,以減少測(cè)試工作。
我們可以看到標(biāo)準(zhǔn)的現(xiàn)成工具無(wú)法支持其中的多種特性,例如4位和9位數(shù)據(jù)寬度,或2.5位至4.0位停止寬度。因此,需要一種可支持全部甚至更多特性的全新驗(yàn)證平臺(tái)。另一個(gè)要求則是實(shí)現(xiàn)測(cè)試的自動(dòng)化,這可以減少對(duì)DUT執(zhí)行測(cè)試時(shí)的手動(dòng)工作。
本文描述的UART自動(dòng)驗(yàn)證平臺(tái)可支持如下配置:
1. 波特率(bps):50、110、300、600、1200、2400、4800、9600、19200、28800、38400、57600、115200、230400、460800、921600
2. 數(shù)據(jù)寬度(位):1、2、3、4、5、6、7、8、9、10
3. 奇偶校驗(yàn)位:無(wú)、奇數(shù)、偶數(shù)
4. 停止位寬度:1.0、1.5、2.0、2.5、3.0、3.5、4.0
5. TX緩沖器:16幀
6. RX緩沖器:16幀
圖2:UART自動(dòng)驗(yàn)證平臺(tái)
圖2 給出了包含UART自動(dòng)驗(yàn)證平臺(tái)所有主要模塊的高級(jí)系統(tǒng)視圖:
1. 測(cè)試控制器:驗(yàn)證平臺(tái)的核心。這是一個(gè)用來(lái)收集、處理數(shù)據(jù),并在系統(tǒng)中其它模塊之間轉(zhuǎn)發(fā)數(shù)據(jù)的MCU。它應(yīng)該具有一個(gè)USB接口,從而與主計(jì)算機(jī)進(jìn)行通信。
2. 發(fā)送與接收FIFO:需要發(fā)送的數(shù)據(jù)幀存儲(chǔ)在發(fā)送FIFO中,從DUT接收到的數(shù)據(jù)幀則存儲(chǔ)在接收FIFO中。MCU從主機(jī)收集發(fā)送數(shù)據(jù)包,將其轉(zhuǎn)換為數(shù)據(jù)幀,并載入到發(fā)送FIFO中。接收FIFO負(fù)責(zé)轉(zhuǎn)發(fā)從DUT收集的幀,將其轉(zhuǎn)到測(cè)試控制器進(jìn)行數(shù)據(jù)包轉(zhuǎn)換,并轉(zhuǎn)發(fā)至主機(jī)。數(shù)據(jù)包緩存是提高系統(tǒng)速度的有效方案。
FIFO通常在MCU的SRAM中實(shí)現(xiàn)。這種實(shí)現(xiàn)方案僅支持16幀的發(fā)送或接收會(huì)話??筛鶕?jù)特定要求提高這一數(shù)字,但要受限于所用的SRAM。
3. 移位寄存器(并行到串行和串行到并行轉(zhuǎn)換器):UART可采用移位寄存器來(lái)實(shí)現(xiàn)。在發(fā)送比特位時(shí),它可作為并行到串行轉(zhuǎn)換器,在接收時(shí)另一個(gè)移位寄存器變成串行到并行轉(zhuǎn)換器。兩個(gè)寄存器都以雙倍或多倍波特率頻率計(jì)時(shí)。
待發(fā)送的數(shù)據(jù)包已被轉(zhuǎn)換為幀比特并送入FIFO。幀數(shù)據(jù)被加載到發(fā)送移位寄存器中,并以正確的波特率發(fā)送到DUT。采用類似的方案從DUT接收數(shù)據(jù)包。對(duì)接收到的幀以雙倍波特率(或更多)進(jìn)行采樣,一旦整個(gè)數(shù)據(jù)包進(jìn)入接收移位寄存器中,幀比特位就會(huì)被轉(zhuǎn)移到接收FIFO中。
4. PLL和波特率生成器:PLL模塊使用外部11.0592MHz晶體振蕩器生成供所有其它模塊使用的時(shí)鐘頻率。PLL使輸入模塊乘以系數(shù)5,以生成55.296MHz的主時(shí)鐘頻率。由于所有模塊都采用相同的時(shí)鐘源工作,因此不必使用額外的邏輯來(lái)同步模塊。
選擇外部振蕩器生成通用UART應(yīng)用所需的精確波特率??蓪?duì)11.0592MHz時(shí)鐘源進(jìn)行分頻,從而為移位寄存器提供標(biāo)準(zhǔn)的波特率時(shí)鐘。波特率生成器作用就在于此。這里采用數(shù)字PWM時(shí)鐘生成波特率時(shí)鐘。通過(guò)改變PWM的周期和比較參數(shù)可生成占空比為50%的波特時(shí)鐘。占空比可變是使用PWM模塊的另一個(gè)優(yōu)勢(shì),相比之下時(shí)鐘分頻器只能生成固定占空比的時(shí)鐘輸出??勺兊恼伎毡瓤捎脕?lái)驗(yàn)證UART接口的時(shí)鐘容差和輸出保真度。
5. 控制寄存器:所有參數(shù)和設(shè)置都保存在8位寄存器中。測(cè)試控制器的SRAM可用來(lái)實(shí)現(xiàn)該目的。主計(jì)算機(jī)通過(guò)用來(lái)訪問(wèn)FIFO的相同接口讀取和寫(xiě)入寄存器。為該平臺(tái)提供如下寄存器
a.控制:使用該寄存器傳送即時(shí)命令。寄存器的MSB可用來(lái)通知測(cè)試控制器有新的命令進(jìn)入寄存器。命令執(zhí)行后該位被清空。所支持的命令及相應(yīng)的值如下所示。
b.狀態(tài):測(cè)試控制器使用該寄存器發(fā)布當(dāng)前測(cè)試的結(jié)果,包括傳輸時(shí)的錯(cuò)誤條件。
c.波特率:該寄存器控制下次數(shù)據(jù)傳輸使用的波特率。所支持的波特率及其數(shù)值顯示如下。
d.數(shù)據(jù)寬度:該寄存器控制下次數(shù)據(jù)傳輸使用的數(shù)據(jù)寬度。所支持的數(shù)值為0x01至0x0A(10個(gè)值)。
e.校驗(yàn)位:使用該寄存器設(shè)置校驗(yàn)位??梢允菬o(wú)校驗(yàn),奇數(shù)校驗(yàn)或偶數(shù)校驗(yàn),如下所示。
f.停止寬度:該寄存器規(guī)定每個(gè)幀使用的停止寬度。所支持的停止寬度如下所示。
g.過(guò)采樣率:發(fā)送和接收幀所需的過(guò)采樣數(shù)量使用該寄存器進(jìn)行設(shè)定。邏輯復(fù)雜程度隨所需的過(guò)采樣率增加而增加。最小值是2。
h.TX大?。涸摷拇嫫鞅A鬎IFO中發(fā)送幀的數(shù)量。此值既可在發(fā)送FIFO加載數(shù)據(jù)后手動(dòng)設(shè)置,也可在FIFO加載后自動(dòng)加載。最大值是16,最小值是1。
i.RX大?。涸摷拇嫫鞅A鬎IFO中接收幀的數(shù)量。當(dāng)接收到一個(gè)數(shù)據(jù)幀時(shí),寄存器中的這個(gè)值增加1,當(dāng)主機(jī)從FIFO中讀取一個(gè)幀時(shí),該值減去1。最大值是16,最小值是1。
6. DUT控制與狀態(tài)信號(hào):需要將以上參數(shù)送到DUT。這個(gè)模塊從控制寄存器獲取參數(shù),并推送到DUT。使用并行接口向DUT報(bào)告當(dāng)前設(shè)置。此外,平臺(tái)具有一個(gè)控制信號(hào)“START”,用于斷言該信號(hào)可初始化DUT。若DUT應(yīng)用了平臺(tái)的設(shè)置,并做好測(cè)試的準(zhǔn)備工作,就會(huì)將另一個(gè)信號(hào)斷言為“READY”。
7. 主計(jì)算機(jī):主計(jì)算機(jī)執(zhí)行測(cè)試用的Perl腳本,通過(guò)USB端口與平臺(tái)進(jìn)行通信。所有測(cè)試案例都實(shí)現(xiàn)為Perl腳本,其可生成覆蓋驗(yàn)證過(guò)程的測(cè)試序列。此外,主計(jì)算機(jī)還收集用來(lái)檢查測(cè)試是否通過(guò)的相關(guān)數(shù)據(jù)。該信息連同測(cè)試案例都被寫(xiě)入文件,以便記錄。
8. 待測(cè)器件(DUT):測(cè)試帶UART接口的目標(biāo)器件。
從方框圖及其描述中可以看到,平臺(tái)使用移位寄存器來(lái)實(shí)現(xiàn)UART接口。這種方案的優(yōu)勢(shì)在于可通過(guò)增加移位寄存器的大小來(lái)實(shí)現(xiàn)擴(kuò)展性。
三、幀驗(yàn)證模塊
使用移位寄存器和FIFO實(shí)現(xiàn)UART接口其實(shí)并不容易,除非有一個(gè)用來(lái)識(shí)別有效幀的邏輯,用于解碼接收到的數(shù)據(jù)。由下降沿檢測(cè)器控制的簡(jiǎn)單計(jì)數(shù)器/定時(shí)器能實(shí)現(xiàn)此目的。
UART傳輸開(kāi)始于下降沿,并在固定的時(shí)間內(nèi)保持有效。如果我們已知波特率和UART數(shù)據(jù)包設(shè)置,可利用設(shè)定到該時(shí)鐘頻率的定時(shí)器來(lái)計(jì)算數(shù)據(jù)包的有效時(shí)長(zhǎng)。這樣便可在有效期間內(nèi)精確地啟動(dòng)移位寄存器以便計(jì)入接收線路上看到的數(shù)據(jù)或者記出發(fā)送數(shù)據(jù)。
該邏輯的狀態(tài)機(jī)實(shí)現(xiàn)方案如圖3所示。有兩個(gè)流程:一個(gè)流程控制移位寄存器使能輸入,另一個(gè)用來(lái)保持定時(shí)器。
圖3:幀驗(yàn)證狀態(tài)機(jī)
狀態(tài)機(jī)可用圖4中的模塊表示。狀態(tài)機(jī)工作所需的模塊輸入和輸出也在下面予以解釋。
圖4:幀驗(yàn)證模塊
a. CLK_IN(輸入):此為主時(shí)鐘。該時(shí)鐘的頻率遠(yuǎn)高于波特時(shí)鐘。使用該時(shí)鐘采樣和檢測(cè)START輸入的下降沿。
b. BAUD_CLK(輸入):波特時(shí)鐘頻率乘以過(guò)采樣率。此時(shí)鐘輸入的最小值是波特頻率的兩倍。
c. START(輸入):該輸入的下降沿代表狀態(tài)機(jī)的開(kāi)始。
d. COUNT(輸入):8位幀寬度,用于初始化倒計(jì)時(shí)定時(shí)器周期。
e. FRAME_VALID(輸出):該輸出信號(hào)在START輸入的下降沿變高,當(dāng)計(jì)數(shù)器結(jié)束時(shí)變低。
f. IRQ(輸出): 該輸出的上升沿代表幀結(jié)束。當(dāng)計(jì)數(shù)器計(jì)數(shù)結(jié)束時(shí),該信號(hào)在一個(gè)主時(shí)鐘周期內(nèi)保持高電平。當(dāng)狀態(tài)機(jī)返回空閑狀態(tài)時(shí),值復(fù)位為 ‘0’。
四、UART驗(yàn)證模塊
我們已經(jīng)有了用來(lái)檢測(cè)幀的開(kāi)始和長(zhǎng)度的邏輯模塊,現(xiàn)在可以開(kāi)始設(shè)計(jì)UART驗(yàn)證模塊。對(duì)于接收幀驗(yàn)證模塊,START輸入就是RX線路本身。由于幀發(fā)送在我們的控制之下,因此進(jìn)入幀驗(yàn)證模塊(FVB) 的START輸入來(lái)自單位寄存器。圖5給出了完整的UART驗(yàn)證模塊。
圖5:UART驗(yàn)證方框圖
由于發(fā)送和接收數(shù)據(jù)包的寬度相同,因此計(jì)數(shù)寄存器可由TX和RX幀驗(yàn)證模塊共享。來(lái)自這兩個(gè)模塊的幀驗(yàn)證信號(hào)可作為各自部分移位寄存器的使能信號(hào)。前面已經(jīng)介紹過(guò),發(fā)送部分使用并行到串行轉(zhuǎn)換器,而接收部分使用串行到并行轉(zhuǎn)換器。這兩個(gè)轉(zhuǎn)換器都能訪問(wèn)存儲(chǔ)單個(gè)幀的32位存儲(chǔ)單元,并具有左移功能。兩個(gè)寄存器在初始化過(guò)程中都被置為‘1’s。但只有位的“計(jì)數(shù)”數(shù)值有效。
UART驗(yàn)證模塊隨后連接到輸入、輸出和其它頂層模塊,如圖6所示。這是圖2所示的系統(tǒng)級(jí)方框圖的另一個(gè)視角。
圖6:UART驗(yàn)證
UART驗(yàn)證模塊的波特時(shí)鐘采用PWM單元生成。它作為分頻器使用,用來(lái)從固定的11.0592MHz輸入時(shí)鐘生成所需的時(shí)鐘頻率。PWM單元的輸出頻率由所需的波特率和驗(yàn)證模塊的過(guò)采樣率決定。通過(guò)改變PWM單元的周期和比較值來(lái)生成要求的時(shí)鐘頻率。該模塊還可用來(lái)生成時(shí)鐘抖動(dòng)和可變的占空比時(shí)鐘,用于驗(yàn)證DUT對(duì)波特率變化的容差。驗(yàn)證平臺(tái)的這個(gè)功能可模擬所有可能的實(shí)際情景。
驗(yàn)證模塊的中斷請(qǐng)求(IRQ)輸出與兩個(gè)軟件中斷服務(wù)程序(ISR)有關(guān) – 一個(gè)用于發(fā)送,一個(gè)用于接收。這兩個(gè)ISR可用來(lái)處理發(fā)送和接收FIFO。幀發(fā)送結(jié)束時(shí),調(diào)用發(fā)送ISR將下個(gè)幀從FIFO加載到發(fā)送移位寄存器。類似地,當(dāng)接收數(shù)據(jù)幀時(shí),接收IRQ從接收移位寄存器獲取內(nèi)容并將數(shù)據(jù)推送到接收FIFO中。
圖7給出了接收事件的典型時(shí)序圖,圖8給出了發(fā)送事件的時(shí)序圖。兩個(gè)階段涉及的所有信號(hào)也都包含在圖中。這種情況都假設(shè)UART數(shù)據(jù)包包含8位數(shù)據(jù),無(wú)校驗(yàn)位,有1.5位停止寬度。同樣,為了簡(jiǎn)化,將過(guò)采樣率設(shè)為2,即波特時(shí)鐘是實(shí)際波特率頻率的兩倍。寄存器內(nèi)容中的有效幀數(shù)據(jù)被標(biāo)成黃色,原因在于為了填充32位移位寄存器,有些數(shù)據(jù)在初始化過(guò)程中被置為‘1’s。
圖7:接收數(shù)據(jù)包
圖8:發(fā)送數(shù)據(jù)包
五、固件
利用固件在微控制器(MCU)中實(shí)現(xiàn)簡(jiǎn)單的存儲(chǔ)、處理和轉(zhuǎn)發(fā)架構(gòu)。其它功能則在硬件中實(shí)現(xiàn),并由MCU進(jìn)行訪問(wèn)控制。MCU從主機(jī)接收需處理的命令和數(shù)據(jù)。它將待發(fā)送的幀和從DUT接收的幀存儲(chǔ)在SDRM中實(shí)現(xiàn)的FIFO內(nèi)。用來(lái)處理發(fā)送和接收數(shù)據(jù)包的中斷服務(wù)程序(ISR)通過(guò)通用IRQ在MCU中實(shí)現(xiàn)。圖9的流程圖給出了基本流程。
圖9:基本固件流程
六、軟件
這部分平臺(tái)運(yùn)行在Windows PC上,采用Perl腳本語(yǔ)言。平臺(tái)所需的USB接口庫(kù)是針對(duì)Perl進(jìn)行重用的標(biāo)準(zhǔn)USB庫(kù)。在硬件驅(qū)動(dòng)器層上編寫(xiě)一個(gè)UART驗(yàn)證庫(kù),以支持與平臺(tái)之間的通信。
UART驗(yàn)證庫(kù)支持如下API。
a. Platform_Start():必須在執(zhí)行任何操作前調(diào)用;啟動(dòng)接口。
b. Platform_Stop():必須在退出主腳本之前調(diào)用;停止接口,并顯示最后的通信錯(cuò)誤信息(如果有)。
c. Platform_GetSupportedBaud():返回支持的波特率列表。
d. Platform_ReportError($_):設(shè)置錯(cuò)誤值,用于確定最后的錯(cuò)誤。
e. Platform_CheckPassFail($_):如果輸入是1,通過(guò);否則失敗。
f. Platform_COMMAND($_):從支持列表中向平臺(tái)發(fā)送一個(gè)命令。
g. Platform_WriteConfig():將整個(gè)數(shù)據(jù)包從腳本發(fā)送至MCU。發(fā)送配置之前應(yīng)使用額外的API設(shè)置參數(shù)。
h. Platform_ReadConfig():顯示來(lái)自MCU的當(dāng)前配置。
i. Platform_CopyConfig():將MCU配置復(fù)制到本地腳本緩沖器。并顯示被復(fù)制的值。
j. Platform_SetBaudRate($_):在本地緩沖器中設(shè)置波特率數(shù)值;直到調(diào)用Platform_WriteConfig()時(shí),才能將該值發(fā)送到MCU。
k. Platform_SetDataWidth($_):在本地緩沖器設(shè)置數(shù)據(jù)寬度值;直到調(diào)用Platform_WriteConfig()時(shí),才能將該值發(fā)送到MCU。
l. Platform_SetParityBit($_):在本地緩沖器中設(shè)置校驗(yàn)位值;直到調(diào)用Platform_WriteConfig()時(shí),才能將該值發(fā)送到MCU。
m. Platform_SetStopWidth($_):在本地緩沖器中設(shè)置停止寬度值;直到調(diào)用Platform_WriteConfig()時(shí),才能將該值發(fā)送到MCU。
n. Platform_SetOverSampleRate($_):在本地緩沖器中設(shè)置過(guò)采樣值;直到調(diào)用Platform_WriteConfig()時(shí),才能將該值發(fā)送到MCU。
o. Platform_SetTXSize($_):設(shè)置一次會(huì)話中發(fā)送幀的數(shù)量;直到調(diào)用Platform_WriteConfig()時(shí),才能將該值發(fā)送到MCU。
p. Platform_GetRXSize($_):返回RX緩沖器中幀的數(shù)量。
q. Platform_SetRXSize($_):在本地緩沖器中設(shè)置從PSoC3 RX緩沖器中讀取的值的數(shù)量;直到調(diào)用Platform_WriteConfig()時(shí),才能將該值發(fā)送到MCU。
r. Platform_SetTXDataArray(@_):設(shè)置一個(gè)會(huì)話中要發(fā)送的數(shù)據(jù)幀。這個(gè)API會(huì)覆蓋利用Platform_SetTXSize($_) API設(shè)置的值(如果有);直到調(diào)用Platform_WriteConfig()時(shí),才能將該值發(fā)送到MCU。
s. Platform_IsDUTReady():如果DUT空閑,返回1;如果DUT被占用,返回0。
七、硬件實(shí)現(xiàn)
實(shí)現(xiàn)UART自動(dòng)驗(yàn)證平臺(tái)所需的大部分邏輯都是通過(guò)各種類型的模塊在硬件中實(shí)現(xiàn)。為實(shí)現(xiàn)該平臺(tái)的硬件部分,我們需要如下組件:
1. 32位微控制器(MCU) – 1個(gè)
2. 用于倍增頻率的PLL – 1個(gè)
3. 用于生成波特頻率的PWM單元– 1個(gè)
4. 32位移位寄存器– 2個(gè)
5. 用于幀驗(yàn)證模塊狀態(tài)機(jī)的CPLD或FPGA – 1個(gè),具有足夠單元
即使我們使用單個(gè)硬件單元實(shí)現(xiàn)所有模塊,每個(gè)模塊的通信和同步仍需很大量工作。如果我們能夠?qū)⑺杏布趩蝹€(gè)處理器上實(shí)現(xiàn),該平臺(tái)就會(huì)簡(jiǎn)單得多,例如使用賽普拉斯半導(dǎo)體的可編程片上系統(tǒng)(PSoC),這是微控制器(MCU)、可編程模擬、可編程數(shù)字和可編程互聯(lián)的完美組合。像PsoC這樣的集成型處理器還包含很多常用的固定功能塊,例如PWM、移位寄存器、Opamp、ADC和DAC。該處理器系列通常包含8位器件(例如PSoC 1和PSoC 3)以及32位處理器(例如PSoC 4、PSoC 5和PSoC 5LP),使開(kāi)發(fā)人員能夠根據(jù)應(yīng)用選擇所需的處理能力。片上系統(tǒng)器件還支持內(nèi)部Flash、SRAM和EEPROM,以及復(fù)雜的時(shí)鐘樹(shù)和可編程時(shí)鐘生成器。另外,還提供多種通信接口,例如USB 2.0、I2C、UART、SPI、I2S、LIN和CAN。
帶可編程邏輯的SoC支持UART自動(dòng)驗(yàn)證平臺(tái)的更多內(nèi)容能夠在硬件(而非軟件)中實(shí)現(xiàn)。例如,PsoC具有一個(gè)名為通用數(shù)字模塊(UDB)的可編程邏輯陣列。PSoC 3/PSoC 5/PSoC 5LP共有24個(gè)UDB,每個(gè)包含8個(gè)宏單元、PLA(可執(zhí)行16個(gè)乘積項(xiàng))、1個(gè)數(shù)據(jù)路徑單元、1個(gè)控制單元和1個(gè)狀態(tài)單元。這意味著這個(gè)系列的PsoC能夠媲美中高端的Altera MAXV 系列CPLD和Xilinx Cool Runner系列。
PsoC器件的編程和調(diào)試可通過(guò)PSoC Creator 來(lái)執(zhí)行,這是一種基于分層原理圖的設(shè)計(jì)工具,能利用預(yù)制組件和原語(yǔ)函數(shù)的加載庫(kù)來(lái)幫助設(shè)計(jì)人員完成系統(tǒng)級(jí)設(shè)計(jì)方案。這給予了開(kāi)發(fā)人員足夠的靈活性,使其可以融入模擬和數(shù)字材料清單,同時(shí)通過(guò)簡(jiǎn)單的固件升級(jí)實(shí)現(xiàn)最后一分鐘的設(shè)計(jì)變更。具有多個(gè)通信接口的引導(dǎo)加載器亦能實(shí)現(xiàn)簡(jiǎn)單直接的現(xiàn)場(chǎng)升級(jí)。
實(shí)現(xiàn)方案采用PSoC 5LP,該器件具有32位ARM Cortex M3內(nèi)核、USB 2.0接口、可編程時(shí)鐘/PLL、硬件PWM、24單元UDB、32位移位寄存器以及高度可配置的通用IO。圖10給出了PSoC 5LP的簡(jiǎn)化方框圖。
圖10:PSoC 5LP器件的簡(jiǎn)化方框圖
組件的固件位于PSoC 5LP中,包含兩個(gè)部分:一個(gè)是針對(duì)數(shù)字/模擬模塊的原理圖輸入,另一個(gè)是在ARM Cortex M3 MCU上運(yùn)行的膠合邏輯。固件的原理圖輸入如圖11所示,圖中給出了波特率PWM、32位移位寄存器,以及發(fā)送和接收部分的幀驗(yàn)證模塊。
圖11:PSoC 5LP固件的原理圖輸入
設(shè)計(jì)采用如下主要組件:
a. Baud_PWM:生成一個(gè)是所選波特率兩倍的時(shí)鐘。這樣能確保數(shù)據(jù)的正確采樣。
b. ShiftReg_TX:32位移位寄存器,用以將TX幀移出到DUT。
c. ShiftReg_RX:32位移位寄存器,用以從DUT移入RX幀。
d. UART_Counter_TX:遞減計(jì)數(shù)器,為TX移位寄存器生成時(shí)鐘輸入,整個(gè)幀寬度內(nèi)有效。
e. UART_Counter_RX:與UART_Counter_TX在設(shè)計(jì)上相同,為RX移位寄存器生成輸入時(shí)鐘。
f. Start_TX:控制寄存器,指示來(lái)自固件的TX幀的開(kāi)始。
g. FrameWidth:計(jì)數(shù)器的輸入,指示預(yù)期的幀寬度,考慮雙倍采樣率。
h. tx_irq:上升沿標(biāo)志TX幀的移出已完成。
i. rx_irq:上升沿標(biāo)志RX幀的移入已完成。
j. StartTest:用來(lái)標(biāo)志在設(shè)置控制線之后,對(duì)DUT測(cè)試的開(kāi)始。
k. Ready_IRQ:在來(lái)自DUT的上升沿進(jìn)行觸發(fā),以指明測(cè)試狀態(tài)就緒。
l. 其他IO組件:將控制信號(hào)發(fā)送到DUT,以便在測(cè)試開(kāi)始前對(duì)其進(jìn)行配置。
UART_Counter_TX和UART_Counter_RX是Verilog語(yǔ)言的定制組件,位于PSoC 5LP的UDB中。它可用來(lái)實(shí)現(xiàn)之前介紹的幀驗(yàn)證狀態(tài)機(jī)。
圖12:針對(duì)PSoC 5LP用Verilog實(shí)現(xiàn)的幀驗(yàn)證組件
這樣就可成功實(shí)現(xiàn)針對(duì)UART的自動(dòng)驗(yàn)證平臺(tái),用以測(cè)試不同參數(shù)間的接口,例如波特率(高達(dá)921600波特)、數(shù)據(jù)寬度(最大9位)、校驗(yàn)和停止寬度(最大4位)。該平臺(tái)有助于利用單芯片解決方案執(zhí)行UART接口驗(yàn)證所需的所有測(cè)試,從而降低設(shè)計(jì)復(fù)雜性以及出現(xiàn)時(shí)序相關(guān)問(wèn)題的幾率。UART自動(dòng)驗(yàn)證平臺(tái)能減少整個(gè)測(cè)試期間的手動(dòng)工作量和對(duì)專用資源的要求。
評(píng)論