在Zynq SoC內(nèi)部使用XADC可以極大提高系統(tǒng)集成度,而且實(shí)現(xiàn)起來非常簡(jiǎn)單直觀。
賽靈思Zynq?-7000 All Programmable SoC配套提供一個(gè)帶有2個(gè)12位模數(shù)轉(zhuǎn)換器(ADC)的XADC模塊。這兩個(gè)ADC的采樣率可高達(dá)每秒百萬次采樣(1MSPS),具有理想的500kHz有效輸入信號(hào)帶寬(輔助輸入端信號(hào)帶寬為250kHz)。XADC多路復(fù)用17個(gè)輸入信號(hào)并測(cè)量一系列內(nèi)部電壓與溫度。如果您的設(shè)計(jì)無法為外部信號(hào)提供足夠的模擬輸入引腳,那么應(yīng)對(duì)XADC加以配置,以驅(qū)動(dòng)外部模擬多路復(fù)用器并按照要求的順序?qū)λ休斎脒M(jìn)行排序。
XADC能夠?qū)崿F(xiàn)單極或雙極測(cè)量,因此器件的輸入均為差分輸入。17個(gè)差分輸入被劃分為一個(gè)專用對(duì)(稱為VP/VN)和16個(gè)輔助輸入(可以是模擬或數(shù)字I/O,被稱為VAUXP和VAUXN)。有效輸入信號(hào)帶寬視所用的差分輸入類型而定,如果使用專用對(duì),則信號(hào)帶寬為500kHz,如果使用輔助輸入,則信號(hào)帶寬為250kHz。
XADC的混合信號(hào)性能非常好,根據(jù)數(shù)據(jù)手冊(cè)顯示,其具有60dB的最低信噪比(SNR)和70dB的總諧波失真(THD)。根據(jù)器件所處溫度范圍(-55oC至125oC或-40oC至100oC)的不同,XADC的分辨率可以是10位或12位。這樣根據(jù)下面的等式計(jì)算得出的XADC有效位數(shù)是9.67。
ENOB = (SNR–1.76/6.02)
XADC具有16、64和256個(gè)采樣的平均計(jì)算法可供用戶選擇,用以降低輸入端噪聲。用戶還可以為每個(gè)所測(cè)量的內(nèi)部器件參數(shù)設(shè)置最大和最小告警等級(jí)。
XADCXADC適合哪些應(yīng)用?
設(shè)計(jì)人員可將這種ADC用于從簡(jiǎn)單的板載參數(shù)(電壓、電流和溫度)內(nèi)務(wù)處理遙測(cè),到對(duì)觸摸傳感器、馬達(dá)控制或簡(jiǎn)單的無線通信協(xié)議的支持等一系列應(yīng)用。此外,還可以將其用在軍事或其他重要系統(tǒng)中,以檢測(cè)設(shè)備篡改。
XADC的重要優(yōu)勢(shì)之一是用來監(jiān)控一系列系統(tǒng)內(nèi)部參數(shù),驗(yàn)證設(shè)計(jì)方案的良好程度。此外,為了簡(jiǎn)化設(shè)計(jì)初期的驗(yàn)證工作,您可以在基于Zynq-7000 All Programmable SoC的系統(tǒng)中使用XADC來測(cè)量由片上溫度傳感器記錄的溫度以及后續(xù)的其他參數(shù)。
硬件實(shí)現(xiàn)
要想使用XADC,首先需要打開包含Zynq SoC實(shí)現(xiàn)方案的PlanAhead?項(xiàng)目(如果您不知道如何操作,請(qǐng)參考《賽靈思中國通訊》第47期的封面專題文章)。選擇您所創(chuàng)建的處理器子系統(tǒng),并雙擊打開Xilinx Platform Studio (XPS)。您可以在XPS中修改處理系統(tǒng)。
XPS打開后,選擇項(xiàng)目窗口左側(cè)的IP Catalog標(biāo)簽,并選擇模擬菜單下的AXI XADC。這時(shí)會(huì)出現(xiàn)提示,問您是否要向設(shè)計(jì)中添加IP。點(diǎn)擊是,顯示IP配置窗口,如圖1所示。這里沒有太多需要配置的內(nèi)容,除非您想對(duì)復(fù)雜的AXI總線接口進(jìn)行優(yōu)化。
用戶標(biāo)簽是主要的操控區(qū)域。您可以通過該標(biāo)簽為處理器添加中斷,啟用溫度總線。您可以將啟用后的溫度總線連接至儲(chǔ)存器接口生成器(Memory Interface Generator),用以提供影響時(shí)序的溫度信息。在ISim中仿真XADC時(shí)使用的是仿真監(jiān)視文件。
如果您對(duì)XADC的配置比較滿意,就可以關(guān)閉IP配置窗口,同時(shí)XADC將被添加到處理系統(tǒng)中。如果您點(diǎn)擊System Assembly查看器的地址標(biāo)簽,就會(huì)看到分配給XADC的地址范圍,然后通過勾選來鎖定地址范圍。
下一步是設(shè)置連接到XADC的外部端口數(shù)。在默認(rèn)情況下,XADC可支持1個(gè)外部多路復(fù)用器、16個(gè)輔助模擬輸入、8個(gè)告警輸出和1個(gè)轉(zhuǎn)換開始,如圖2所示。
必要時(shí)您可以移除這些端口,只為ADC保留專用的模擬輸入Vp和Vn,以及連接監(jiān)視器的內(nèi)部信道。例如,ZedBoard只能在信道0和8上支持兩個(gè)輔助模擬輸入,同時(shí)提供四個(gè)XADC專用的GPIO。您可以根據(jù)需要將這些GPIO連接到告警輸出或多路復(fù)用器輸出。可在XPS內(nèi)選擇下拉菜單中的“不連接外部端口”選項(xiàng)來斷開外部I/O。
如果您希望使一些輔助輸入仍處于連接狀態(tài)(例如添加兩個(gè)ZedBoard輸入),可在系統(tǒng)內(nèi)部保留VAUXP和VAUXN信道,同時(shí)在RTL設(shè)計(jì)的頂層只連接信道0和信道8。如果希望連接輔助輸入但移除其他外部端口,需要右擊特定的I/O,然后選擇“無連接”選項(xiàng),如圖3所示。
外部連接設(shè)置好后,運(yùn)行設(shè)計(jì)規(guī)則檢查(DRC)。如果DRC未顯示任何錯(cuò)誤,即可退出XPS并返回到PlanAhead中,并在此生成比特流。如果您查看一下綜合結(jié)果,就會(huì)發(fā)現(xiàn)資源列表中已含有XADC。
編寫軟件
硬件設(shè)計(jì)已經(jīng)完成,此時(shí)您需要將硬件再次導(dǎo)入到軟件開發(fā)套件(SDK)中,以便升級(jí)板支持包。在PlanAhead中選擇文件->導(dǎo)出->導(dǎo)出硬件到SDK選項(xiàng)。這時(shí)會(huì)出現(xiàn)提示,警告我們將覆蓋已有的硬件定義。點(diǎn)擊“是”并覆蓋。
如果SDK打開,您會(huì)收到一個(gè)提示介紹硬件規(guī)范文件的變更情況。如果SDK沒有打開,那么會(huì)在下次打開的時(shí)候收到此提示。
點(diǎn)擊SDK提示中的“是”選項(xiàng),硬件定義就會(huì)被更新,同時(shí)您的項(xiàng)目將被重建。假設(shè)設(shè)計(jì)沒有錯(cuò)誤,那么您將開始執(zhí)行代碼修改工作。
打開system.xml或xparameters.h文件,您不僅會(huì)看到設(shè)計(jì)中所有其他外設(shè)的地址范圍,還能看到剛剛添加到XPS內(nèi)的XADC的地址范圍。
打開system.mss文件會(huì)顯示板支持包(BSP)的整體細(xì)節(jié)。這里我們真正感興趣的是外設(shè)驅(qū)動(dòng)程序,此處您可以看到xai_adc_0(或您在XPS中對(duì)XADC的任意命名)。接下來,您會(huì)看到用于打開文檔和實(shí)例的熱鏈接。
為了縮短開發(fā)時(shí)間,賽靈思在報(bào)頭文件中提供了一系列驅(qū)動(dòng)程序,便于我們使用這些器件。您需要在代碼中訪問這些驅(qū)動(dòng)程序。為此需要添加BSP更新過程中所生成的以下報(bào)頭文件。
#include "xadcps.h"
該文件包含對(duì)于XADC寄存器、采樣平均選項(xiàng)、信道順序選項(xiàng)和省電模式等內(nèi)容的定義。另外還包含一系列可在系統(tǒng)中使用的類型定義、宏命令和函數(shù)。
集中在一起
舉一個(gè)簡(jiǎn)單的實(shí)例:我將讀取系統(tǒng)的內(nèi)部溫度和電壓參數(shù),并通過RS232鏈路將它們輸出。
在編寫代碼時(shí)首先要做的是查詢將要進(jìn)行初始化的XADC的配置,這里要用到XAdcPs_Config類型的指針。利用XAdcPs_LookupConfig()函數(shù)調(diào)用以及從更新的xparameters.h文件中獲得的器件ID將配置信息(器件ID和XADC的基地址)存儲(chǔ)在指針內(nèi)。初始化流程的下一步是使用此前獲取并存儲(chǔ)在配置指針中的信息,該步驟需要一個(gè)XAdcPs類型的指針。
Status_ADC = XAdcPs_CfgInitialize (XADCInstPtr,ConfigPtr,ConfigPtr->BaseAddress)
我將配置指針命名為ConfigPtr,將實(shí)例化指針命名為XADCInstPtr。XADC的初始化完成后,按照實(shí)例要求對(duì)其進(jìn)行配置。以下是配置流程:
1. 采用XAdcPs_SelfTest()函數(shù)運(yùn)行自測(cè)試,以確認(rèn)器件沒有問題。
2. 利用XAdcPs_SetSequencerMode()函數(shù)將定序器設(shè)置為單通道,從而停止定序器當(dāng)前操作。
3. 利用XAdcPs_SetAlarmEnables()函數(shù)禁用所有告警。
4. 利用XAdcPs_SetSeqInputMode()函數(shù)重啟定序器并讓其按我所要求的順序排序。
5. 利用XAdcPs_SetSeqChEnables()函數(shù)配置信道,使之能根據(jù)我的要求采樣。
完成以上步驟后就可以使用ADC并從XADC接收數(shù)據(jù)。只需調(diào)用XAdcPs_GetAdcData()函數(shù)即可從XADC讀取采樣。對(duì)于內(nèi)部溫度和電壓參數(shù),然后我使用兩個(gè)提供的宏命令(XAdcPs_原始ToTemperature()和XAdcPs_原始ToVoltage())將原始的XADC數(shù)值轉(zhuǎn)換為實(shí)際的溫度或電壓值。
實(shí)際值和原始數(shù)據(jù)隨后都通過RS232鏈路輸出。圖4給出了僅器件溫度進(jìn)行采樣的初始結(jié)果。
當(dāng)我將采樣范圍擴(kuò)大至內(nèi)部電源軌和溫度時(shí),會(huì)返回如下結(jié)果:
? 原始溫度40696, 實(shí)際溫度39.805603
? 原始VccInt 21677, 實(shí)際VccInt 0.992294
? 原始VccAux 39431, 實(shí)際VccAux 1.805008
? 原始VccBram 21691, 實(shí)際VccBram 0.992935
? 原始VccPInt 21649, 實(shí)際VccPInt 0.991013
? 原始VccPAux 39402, 實(shí)際VccPAux 1.803680
? 原始VccDDR 32014, 實(shí)際VccDDR 1.465485
所有這些參數(shù)都在Zynq SoC運(yùn)行可接受的限值內(nèi),但需要Zynq SoC在實(shí)驗(yàn)室條件下工作。
正如您所看到的,在Zynq SoC中實(shí)現(xiàn)和使用模擬混合信號(hào)非常簡(jiǎn)單直觀。XADC可以提高All Programmable系統(tǒng)的集成度和功能性。
評(píng)論