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