李 戈,夏 威,李 雷
(電子科技大學(xué)電子工程學(xué)院,四川成都 611731)
?
基于FPGA的ADC自檢系統(tǒng)
李 戈,夏 威,李 雷
(電子科技大學(xué)電子工程學(xué)院,四川成都 611731)
在監(jiān)測(cè)接收機(jī)中要實(shí)現(xiàn)快速的ADC(Analog-To-Digital)內(nèi)核處理功能檢測(cè),針對(duì)這個(gè)問(wèn)題,提出了一種基于ADC內(nèi)置自測(cè)(BUILD-IN SELF-TEST)技術(shù)的ADC自檢系統(tǒng)。該系統(tǒng)以現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)為核心,實(shí)現(xiàn)了對(duì)ADC檢測(cè)的控制。經(jīng)過(guò)測(cè)試,系統(tǒng)能夠快速完成對(duì)ADC芯片內(nèi)核處理功能的檢測(cè)。
BIST;ADC;現(xiàn)場(chǎng)可編程門(mén)陣列;SPI;寄存器
隨著通信、計(jì)算機(jī)等技術(shù)的飛速發(fā)展和普及,數(shù)據(jù)采集系統(tǒng)迅速得以應(yīng)用。ADC轉(zhuǎn)換器是采集通道的核心,也是影響數(shù)據(jù)采集系統(tǒng)速率和精度的重要因素。所以對(duì)ADC內(nèi)核性能的測(cè)試[1-3]就顯得尤為重要。目前有很多介紹內(nèi)置自測(cè)系統(tǒng)的著作[4-5],但還沒(méi)有詳細(xì)地論述ADC內(nèi)置自測(cè)功能使用方法的文獻(xiàn)。因此本文以監(jiān)測(cè)接收機(jī)的模數(shù)轉(zhuǎn)換器AD9265為背景,提出了基于ADC芯片內(nèi)置自測(cè)功能的ADC自檢系統(tǒng),此檢測(cè)系統(tǒng)適用于所有具有BIST功能的ADC,比如AD6642、AD9231等。BIST是一項(xiàng)用戶可以調(diào)用的功能,它可以證明ADC芯片的內(nèi)核處理功能符合預(yù)期。
ADC自檢系統(tǒng)FPGA實(shí)現(xiàn)的總體流程如圖1所示。當(dāng)FPGA接收到啟動(dòng)ADC自檢的指令之后會(huì)通過(guò)SPI接口將啟動(dòng)指令發(fā)送給ADC,然后ADC會(huì)把一個(gè)PN序列送至轉(zhuǎn)換器的數(shù)字模塊并將數(shù)字模塊的輸出與累加器相加。累加結(jié)果包含通過(guò)數(shù)字模塊的所有PN序列的和,累加器在BIST周期開(kāi)始時(shí)清零。BIST檢測(cè)之后的結(jié)果會(huì)被放在多輸入狀態(tài)寄存器(MISR)中。
FPGA會(huì)通過(guò)SPI接口讀取這些寄存器中的值并對(duì)ADC進(jìn)行軟復(fù)位。 然后判斷從寄存器中讀取的檢測(cè)結(jié)果是否為默認(rèn)值0x00,若是默認(rèn)值則說(shuō)明ADC已損壞且無(wú)法正常進(jìn)行自檢,若不是默認(rèn)值則說(shuō)明ADC已正常進(jìn)行了自檢并將檢測(cè)的結(jié)果存入了指定寄存器。最后重復(fù)上述過(guò)程并將兩次讀取的值相比較,對(duì)于任何給定的配置累加結(jié)果是確定的,所以?xún)纱螜z測(cè)的值相同的話說(shuō)明ADC芯片內(nèi)核處理功能正常,不相同則說(shuō)明芯片內(nèi)核已有損壞。
圖1 ADC自檢流程圖
BIST測(cè)試結(jié)果以簡(jiǎn)單的“正確/不正確”方式確定器件是否在正常工作,最終的檢測(cè)結(jié)果存儲(chǔ)在ADC內(nèi)部的寄存器中。由于ADC數(shù)字后端的編程選項(xiàng)并不唯一,因此正確響應(yīng)的值也并不唯一。但是當(dāng)ADC的配置確定以后就可以在正常工作的器件上讀取此器件的值,這個(gè)值就是正確的響應(yīng)。
ADC配置的任何改變,比如改變數(shù)據(jù)(偏置或增益等)和改變數(shù)據(jù)格式(偏移二進(jìn)制或二進(jìn)制補(bǔ)碼等),都會(huì)影響最終累加結(jié)果。由于偽隨機(jī)序列是可預(yù)測(cè)的,因此對(duì)于任何給定的配置累加結(jié)果是確定的。這樣就能確定ADC是否在正常工作。
1.1 SPI總線及其時(shí)序
FPGA對(duì)ADC自檢的控制是通過(guò)SPI端口實(shí)現(xiàn)的,SPI端口由3個(gè)引腳組成:串行時(shí)鐘引腳(SCLK)、串行數(shù)據(jù)輸入/輸出引腳(SDIO)和片選引腳(CSB)[6-7]。
串行時(shí)鐘引腳SCLK用來(lái)使串行接口的讀寫(xiě)操作同步。輸入數(shù)據(jù)在SCLK的上升沿有效,輸出數(shù)據(jù)在下降沿有效。串行數(shù)據(jù)輸入/輸出引腳SDIO是雙向端口,既可以輸入也可以輸出。引腳CSB為選通信號(hào),低電平有效。一旦數(shù)據(jù)流開(kāi)始,CSB就不能拉高直到數(shù)據(jù)流結(jié)束。
在使用SPI接口傳輸數(shù)據(jù)時(shí),幀開(kāi)始于CSB拉低之后SCLK的第一個(gè)上升沿。當(dāng)確定了幀的開(kāi)始,傳輸?shù)牡谝浑A段是指令,即傳送數(shù)據(jù)時(shí)的前十六位。指令周期時(shí)序如圖2所示。第一位是讀/寫(xiě)指示位,拉高表示讀指令,拉低表示寫(xiě)指令。W1和W0表示需要寫(xiě)或者讀的字節(jié)數(shù),傳輸?shù)淖止?jié)數(shù)為(W1:W0 + 1)。剩下的十三位指令是傳輸數(shù)據(jù)的首地址,如果發(fā)送的指令不止一個(gè)字節(jié),會(huì)以順序?qū)ぶ返姆绞綇氖椎刂烽_(kāi)始遞增或者遞減。
圖2 指令周期時(shí)序
傳輸?shù)牡诙A段是數(shù)據(jù),數(shù)據(jù)由多個(gè)8位組成,長(zhǎng)度由W1和W2決定。數(shù)據(jù)周期時(shí)序如圖3所示。
圖3 數(shù)據(jù)周期時(shí)序
1.2 寄存器
為了對(duì)ADC進(jìn)行編程,需要定義一個(gè)結(jié)構(gòu)化的寄存器空間。此寄存器可以細(xì)分為許多地址,SPI數(shù)據(jù)線上進(jìn)行數(shù)據(jù)傳輸?shù)闹噶铍A段中的地址即指向這些地址。寄存器分為16個(gè)地址,每個(gè)地址有8位字節(jié),下面對(duì)BIST所用到的寄存器進(jìn)行詳細(xì)介紹。
1.2.1 啟動(dòng)軟件傳輸?shù)募拇嫫?/p>
地址為0x0FF的寄存器用來(lái)啟動(dòng)軟件傳輸。許多寄存器都需要用到主從鎖存器來(lái)進(jìn)行緩沖,緩沖可以增強(qiáng)系統(tǒng)的多器件同步能力,并且當(dāng)其他寄存器寫(xiě)入的值對(duì)某寄存器的寫(xiě)操作有影響時(shí),能夠?qū)Ρ挥绊懙降募拇嫫鬟M(jìn)行緩沖。SPI端口負(fù)責(zé)把信息放入寄存器,但是對(duì)于有緩沖的寄存器必須啟動(dòng)傳輸才能把主寄存器中的信息傳到從寄存器。把該寄存器的第零位設(shè)置為1即可啟動(dòng)軟件傳輸,當(dāng)狀態(tài)機(jī)識(shí)別出這一位被設(shè)置為1時(shí),它會(huì)產(chǎn)生一個(gè)允許數(shù)據(jù)從主寄存器移到從寄存器的內(nèi)部傳送信號(hào)。寄存器的十六進(jìn)制默認(rèn)值為0x00。寄存器格式如表1所示。
表1 啟動(dòng)軟件傳輸?shù)募拇嫫鞲袷?/p>
1.2.2 啟動(dòng)BIST的寄存器
地址為0x00E的寄存器用來(lái)啟動(dòng)內(nèi)置自測(cè)(BIST)功能。把寄存器的第零位設(shè)置為1就可以啟動(dòng)BIST模式,此時(shí)ADC內(nèi)部會(huì)產(chǎn)生一個(gè)偽隨機(jī)序列并把輸出累加在地址為0x024和0x025的寄存器中。把第二位設(shè)置為1,MISR就會(huì)在每次BIST啟動(dòng)之前清零,這樣就可以連續(xù)地進(jìn)行多次測(cè)試,并連續(xù)查看多次測(cè)試的結(jié)果而不是只能查看一次測(cè)試的結(jié)果。寄存器的十六進(jìn)制默認(rèn)值為0x04。寄存器格式如表2所示。
表2 啟動(dòng)內(nèi)置自測(cè)的寄存器格式
1.2.3 存儲(chǔ)自檢結(jié)果的寄存器
地址為0x024和0x025的寄存器用來(lái)存儲(chǔ)自檢的結(jié)果,它們分別為多輸入狀態(tài)寄存器(MISR)的低字節(jié)和高字節(jié)。該寄存器是內(nèi)核MISR的鏡像,與BIST功能一起使用,只能讀取。寄存器的十六進(jìn)制默認(rèn)值為0x00。寄存器格式如表3所示。
表3 存儲(chǔ)自檢結(jié)果的寄存器格式
讀取寄存器時(shí),CSB引腳的電平值需要特別注意。如果傳輸數(shù)據(jù)時(shí)CSB被拉高,數(shù)據(jù)流的處理就會(huì)被終止,當(dāng)CSB再次被拉低時(shí),將開(kāi)始新的指令周期。如果在流處理時(shí)CSB一直為低電平,那么第一個(gè)指令就會(huì)被不斷地執(zhí)行下去。這意味著一旦寫(xiě)(讀)周期被啟動(dòng),就不能再對(duì)器件進(jìn)行讀(寫(xiě))操作。讀寫(xiě)的首地址也會(huì)根據(jù)工作模式遞增或者遞減,不能改變狀態(tài)機(jī)的地址。因此在對(duì)寄存器進(jìn)行寫(xiě)操作之后想要正確地讀取寄存器中存儲(chǔ)的信息,就要將CSB拉高使?fàn)顟B(tài)機(jī)回到初始狀態(tài)之后再進(jìn)行讀操作。
1.2.4 配置串行接口的寄存器
地址為0x000的寄存器用來(lái)配置串行接口。第五位能夠控制軟復(fù)位,默認(rèn)值為0,拉高即可實(shí)現(xiàn)軟復(fù)位,且第五位必須鏡像到第二位。一旦軟復(fù)位完成,該位清零。第六位決定接收或者發(fā)送數(shù)據(jù)的順序,第六位為高則是以MSB優(yōu)先的方式處理數(shù)據(jù),為低則是以LSB優(yōu)先的方式處理數(shù)據(jù)。寄存器的十六進(jìn)制默認(rèn)值為0x18。寄存器格式如表4所示。
表4 控制軟復(fù)位的寄存器格式
1.3 ADC兩種模式的切換
ADC有2種工作模式:引腳模式和SPI模式,通過(guò)控制CSB引腳的電平值可以選擇兩種工作模式。一般情況下,上電時(shí)只要CSB為邏輯高電平,器件便默認(rèn)進(jìn)入引腳控制模式。一旦CSB變?yōu)榈碗娖剑珹DC即切換到SPI模式。再經(jīng)過(guò)9個(gè)時(shí)鐘周期(代表1個(gè)字節(jié)和1個(gè)時(shí)鐘周期)后,ADC內(nèi)部狀態(tài)機(jī)不再檢查CSB引腳的電平值并默認(rèn)ADC已經(jīng)切換至SPI模式。此時(shí)執(zhí)行軟復(fù)位功能無(wú)法使器件回歸到引腳模式,唯一途徑是開(kāi)機(jī)重啟或者利用器件的引腳復(fù)位功能。
利用QuartusII軟件的signaltapII功能對(duì)SDIO端口返回的數(shù)據(jù)進(jìn)行采集,便可驗(yàn)證ADC自檢功能的正確性。因?yàn)槿绻鸄DC內(nèi)核正常工作,則每次啟用內(nèi)置自測(cè)(BIST)功能時(shí),它都會(huì)做出同樣的響應(yīng)。否則,就會(huì)做出不同的響應(yīng)。
圖4是用signaltapII采集的第一次向ADC發(fā)送自檢指令的截圖。從圖4可以看到通過(guò)SPI接口首先對(duì)ADC地址為0x0FF的寄存器發(fā)送了啟動(dòng)軟件傳輸指令,接著又對(duì)地址為0x00E的寄存器發(fā)送了啟動(dòng)BIST的指令。
圖4 向ADC發(fā)送啟動(dòng)自檢指令的截圖
圖5是用signaltapII采集的SPI返回ADC自檢結(jié)果和發(fā)送第二次自檢指令的截圖。從圖5可以看到通過(guò)SPI接口對(duì)ADC地址為0x024和0x025的寄存器發(fā)送了讀寄存器的指令之后,SDIO開(kāi)始返回自檢的結(jié)果,其十六進(jìn)制的值為B501。讀取了寄存器中的值后便向地址為0x000的寄存器發(fā)送了軟復(fù)位的指令。緊接著便開(kāi)始發(fā)送第二次自檢的指令。
圖5 返回自檢結(jié)果并發(fā)送軟復(fù)位指令的截圖
圖6是用signaltapII采集的連續(xù)兩次ADC自檢結(jié)果的截圖。從圖6可以看到兩次自檢的結(jié)果是一樣的,說(shuō)明ADC處于正常工作狀態(tài)。
圖6 兩次自檢結(jié)果對(duì)比的截圖
本文設(shè)計(jì)了一種使用ADC內(nèi)置自檢(BIST)功能的系統(tǒng)。該系統(tǒng)將ADC由引腳模式轉(zhuǎn)換到SPI模式,通過(guò)SPI端口對(duì)ADC的寄存器進(jìn)行讀寫(xiě),從而完成對(duì)ADC芯片內(nèi)核處理功能的檢測(cè)。這種方法簡(jiǎn)便且非常準(zhǔn)確。
[1] AD9265: 16-BIT,125 MSPS/105 MSPS/80 MSPS,1.8V ANALOG-TO-DIGITAL CONVERTER:Analog Devices,Inc,2009.
[2] 徐萍.寬帶數(shù)字接收機(jī)算法研究及FPGA實(shí)現(xiàn):[學(xué)位論文].成都: 電子科技大學(xué),2012.
[3] 王曉.寬帶數(shù)字監(jiān)測(cè)接收機(jī)算法研究及硬件實(shí)現(xiàn):[學(xué)位論文].成都:電子科技大學(xué),2011
[4] 鄒小芳,許劍.便攜式高速數(shù)據(jù)采集處理系統(tǒng).儀表技術(shù)與傳感器,2008(3): 28-29.
[5] 劉家松,劉承璽,鄭暉,等.印制電路板的可測(cè)性設(shè)計(jì)問(wèn)題.儀表技術(shù)與傳感器,1990(3):3.
[6] AN-877 APPLICATION NOTE:Analog Devices,Inc,2007.
Design of FPGA-based ADC Self-test System
LI Ge,XIA Wei,LI Lei
(School of Electronic Engineering,UESTC,Chengdu 611731,China)
In order to realize the rapid detection of ADC (Analog-To-Digital) core processing functions in the monitoring receiver ,this paper designed and realized an ADC self-test system based on ADC’s build-in self-test functions[1-3].The system used FPGA as its core and realized the control of ADC testing. Test results show that the system can quickly complete the detection of ADC core processing functions.
BIST; ADC; FPGA; SPI;register
圖16 電磁干擾濾波前后的波
國(guó)家自然科學(xué)基金(61101173);中央高?;究蒲袠I(yè)務(wù)費(fèi)(ZYGX2010J020)
2013-12-25 收修改稿日期:2014-10-17
TN919
A
1002-1841(2015)02-0051-03
李戈(1988—),碩士研究生,主要研究領(lǐng)域?yàn)槔走_(dá)信號(hào)處理。E-mail:geleon@126.com 夏威(1980—),工學(xué)博士,副教授,主要研究方向:數(shù)字信號(hào)處理,自適應(yīng)信號(hào)處理。E-mail:wx@uestc.edu.cn