XADC
模擬輸入包括專用模擬輸入VP/VN和16組復(fù)用模擬信號(hào)輸入VAUX(15:0);XADC轉(zhuǎn)換結(jié)果可以通過動(dòng)態(tài)重配
接口(DRP)或者JTAG接口輸出;告警信號(hào)可通過ALM(7:0)輸出,并有專用的溫度告警信號(hào)OT。
XADC還包括幾個(gè)支持測(cè)量
芯片上
電源電壓和模具溫度的片上傳感器。ADC轉(zhuǎn)換數(shù)據(jù)存儲(chǔ)在稱為狀態(tài)
寄存器的專用寄存器中。這些寄存器可以通過
FPGA互連訪問,使用一個(gè)16位同步讀寫
端口,稱為動(dòng)態(tài)重新配置端口(DRP)。ADC轉(zhuǎn)換數(shù)據(jù)也可以通過JTAG TAP訪問,可以在配置之前(預(yù)配置),也可以在配置之后訪問。對(duì)于JTAG TAP,用戶不需要實(shí)例化XADC,因?yàn)樗且粋€(gè)專用接口,使用現(xiàn)有的FPGA JTAG基礎(chǔ)結(jié)構(gòu)。正如后面所討論的,如果XADC沒有在設(shè)計(jì)中實(shí)例化,則設(shè)備以預(yù)定義的模式(稱為默認(rèn)模式)運(yùn)行,該模式監(jiān)視芯片上的溫度和電源電壓。
?
?
具體的參考手冊(cè)如下:
?
ug480:7Series_XADC.pdf
xapp795:driving-xadc.pdf
xapp554:xadc-layout-guidelines.pdf
xapp1203:post-proc-ip-zynq-xadc.pdf
xapp1183:zynq-xadc-axi.pdf
xapp1182:zynq_axi_xadc_mon.pdf
xapp1172:zynq_ps_xadc.pdf
pg019:axi_xadc.pdf
pg091:xadc-wiz.pdf
ug953:vivado-7series-libraries.pdf
ug585:Zynq-7000-TRM.pdf
?
二、XADC的配置方法
本文采用vivado編譯環(huán)境對(duì)XADC進(jìn)行配置。
在對(duì)XA
DC進(jìn)行寄存器配置之前,首先要在vivado中進(jìn)行
硬件電路的搭建,這部分內(nèi)容可以通過建立block塊完成,具體配置方法請(qǐng)參考https://blog.csdn.net/taowei1314520/ar
ticle/det
ails/83656386。本文借助外部VPVN測(cè)量端口,通過搭建惠斯頓電橋進(jìn)行溫度的測(cè)量(具體方法后面會(huì)詳細(xì)介紹到),所以需要在搭建硬件電路時(shí)引出VPVN和配置XDC管腳約束。
?
2.1 配置寄存器
在配置寄存器之前,首先要對(duì)兩種寄存器進(jìn)行解釋說明。
控制寄存器:用于控制和確定
處理器的操作模式以及當(dāng)前執(zhí)行任務(wù)的特性。
狀態(tài)寄存器:用來存放兩類
信息,一類是體現(xiàn)當(dāng)前指令執(zhí)行結(jié)果的各種狀態(tài)信息,另一類是存放控制信息。
1.配置控制寄存器Configuration register 0
通過寫入C_BASEADDR + 0x300(基地址+偏移量)來定位到該寄存器的位置,下圖為該寄存器的bit位對(duì)照?qǐng)D。
?
?
CAVG:這個(gè)比特位用于禁用計(jì)算校驗(yàn)系數(shù)的平均,使能為0,使能為1(平均固定在16個(gè)樣本)。
AVG1、AVG0:這些位用于在單通道和序列模式下設(shè)置所選通道上的樣本平均量。
?
?
MUX:這個(gè)比特位為外部多路復(fù)用,設(shè)置1即啟動(dòng)外部多路復(fù)用功能。(本文所采用的的VP/VN位專用PL端引腳,所以這里不進(jìn)行多路復(fù)用)。
BU:這個(gè)比特位是進(jìn)行單雙極性的選擇,雙極性為1,單極性為0。本文采用的是模擬差分的輸入方式,因?yàn)椴罘州斎肽軌蛴行У亟档透蓴_,實(shí)現(xiàn)數(shù)據(jù)更加穩(wěn)定地傳輸。
?
?
EC:這個(gè)比特位用于為XADC采樣模式,1為event-driven sampling mode,0為continuous sampling mode。
event-driven sampling mode:該工作模式下,采樣瞬間和隨后的轉(zhuǎn)換過程由一個(gè)稱謂轉(zhuǎn)換開關(guān)的觸發(fā)信號(hào)啟動(dòng),當(dāng)需要對(duì)采樣的時(shí)刻進(jìn)行精確控制時(shí),采用該模式。在該模式下,DCLK必須始終存在。
continuous sampling mode:該工作模式下,ADC在當(dāng)前轉(zhuǎn)換周期結(jié)束時(shí)自動(dòng)啟動(dòng)新的轉(zhuǎn)換,adc持續(xù)對(duì)選定的模擬輸入進(jìn)行轉(zhuǎn)換,模數(shù)轉(zhuǎn)換過程由采集階段和轉(zhuǎn)換階段兩部分組成。
ACQ:在使用單通道模式時(shí),該位用于將連續(xù)采樣模式下的外部模擬輸入的可用時(shí)間增加6次ADCCLK周期,如果沒有設(shè)置ACQ位,則在收購的最后階段允許使用4個(gè)ADCCLKs或150個(gè)ns。通過將此位設(shè)置為邏輯1,可以增加獲取時(shí)間。
CH4~CH0:在單通道模式或外部多路復(fù)用模式下工作時(shí),這些位用于選擇ADC輸入通道。
?
?
2. 配置控制寄存器Configuration register 1
通過寫入C_BASEADDR + 0x304(基地址+偏移量)來定位到該寄存器的位置,下圖為該寄存器的bit位對(duì)照?qǐng)D。
?
?
SEQ3~SEQ0:這些比特位用來使能通道序列。
?
Default mode:在這種操作模式下,XADC自動(dòng)監(jiān)控芯片上的傳感器,并將結(jié)果存儲(chǔ)在狀態(tài)寄存器中。這兩種adc都是在這種模式下校準(zhǔn)的,所有傳感器都使用平均16個(gè)樣本。XADC在此模式下獨(dú)立于任何其他控制寄存器設(shè)置操作。
Single Pass Mode:在這種操作模式下,序列操作一次通過序列通道寄存器,然后停止。
Continuous sequence mode:該模式相當(dāng)于single pass mode的自動(dòng)版,在一次操作結(jié)束后又會(huì)自動(dòng)重新開始。
Simultaneous Sampling Mode:在該模式下,測(cè)序器通過8對(duì)輔助模擬輸入通道自動(dòng)進(jìn)行同步采樣和轉(zhuǎn)換,這在需要保留兩個(gè)信號(hào)之間的相位關(guān)系的應(yīng)用程序中非常有用,大部分用于多路復(fù)用情況下。
Auxiliary
analog channels 0 to 7 are assigned to ADC A and are nomina
ted as A channels.
Auxiliary analog channels 8 to 15 are assigned to ADC B and are nominated as B channels
Independent ADC Mode:通常用于報(bào)警模式和監(jiān)測(cè)模式,在這種模式下,警報(bào)輸出使能,并且使用者必須正確地配置報(bào)警閾值。與默認(rèn)的測(cè)序模式一樣,平均值固定在16個(gè)采樣點(diǎn)。
ALM6~ALM0:這些位用于禁用溫度的單個(gè)警報(bào)輸出,1為禁用報(bào)警輸出。
CAL3~CAL0:這些位使校準(zhǔn)系數(shù)應(yīng)用于ADC和片上供應(yīng)傳感器測(cè)量,1為使能校準(zhǔn),0位不使能。
?
?
OT:這個(gè)位用于禁用溫度過高信號(hào)。通過將此位設(shè)置為邏輯1來禁用警報(bào)。
3. 配置控制寄存器Configuration register 2
通過寫入C_BASEADDR + 0x308(基地址+偏移量)來定位到該寄存器的位置,下圖為該寄存器的bit位對(duì)照?qǐng)D。
?
?
CD7~CD0:這些位用于選擇ADC的DRP
時(shí)鐘(DCLK)和低頻率ADC時(shí)鐘(ADCCLK)之間的分頻比。
DRP:動(dòng)態(tài)配置端口,可直接通過PL部分訪問,也可以通過高級(jí)接口單元。
所有XADC計(jì)時(shí)同步到DRP時(shí)鐘(DCLK)。ADCCLK是通過將DCLK在配置寄存器2中分頻得到的。
?
?
PD1、PD0:XADC的中斷位。通過設(shè)置PD1 = PD0 = 1,可以永久關(guān)閉整個(gè)XADC塊。
?
?
4. 配置序列寄存器Sequence Register 0:首先寫入C_BASEADDR + 0x320(基地址+偏移量)來定位到該寄存器的位置,再通過寫bit位來選擇序列通道,本文采用VPVN序列通道,所以給第12位置1(0000_1000_0000_0000),具體對(duì)應(yīng)表如下。
?
?
5. 配置輸出寄存器:通過寫入C_BASEADDR + 0x20C(基地址+偏移量)來定位到該寄存器的位置,在專用模擬輸入通道(Vp/Vn)上A/D轉(zhuǎn)換的12位MSB驗(yàn)證結(jié)果存儲(chǔ)在此寄存器中。
?
?
2.2 結(jié)果換算
定義和一些計(jì)算所應(yīng)用到的數(shù)據(jù)位數(shù)為16位(unsigned short),而我們所用到的只有12位,所以需要將數(shù)據(jù)進(jìn)行右移4位來保證12位MSB驗(yàn)證結(jié)果能夠完整的存儲(chǔ)到寄存器中。
將ADC的外部模擬輸入通道配置為雙極時(shí),它們可以容納真正的差分和雙極模擬信號(hào)類型。雙極模式下ADC的輸出編碼是雙極模式下的補(bǔ)碼,用來表示VP上輸入信號(hào)相對(duì)于VN的符號(hào)。設(shè)計(jì)代碼轉(zhuǎn)換發(fā)生在連續(xù)整數(shù)LSB值,也就是說,一個(gè)LSB、兩個(gè)LSB、三個(gè)LSB等。伏特的LSB大小即1個(gè)數(shù)據(jù)位等于244uV。
?
?
?
2.3 溫度采集
本文采用PT100熱電阻作為外部溫度測(cè)量器件,通過搭建惠斯頓電橋,實(shí)現(xiàn)溫度的采集。
1、將XADC在PL端的VPVN引腳直接接在電橋上,利用Pt100在不同溫度下
電阻值發(fā)生變化的原理,實(shí)現(xiàn)VP/VN電壓差的改變,根據(jù)公式計(jì)算得出溫度值,下圖為惠斯頓電橋。
?
?
計(jì)算公式:
V=VP0?VN0 V = VP0 - VN0V=VP0?VN0
Rpt=(13200+29000V)/(412.5?145V) Rpt = (13200 + 29000V)/(412.5 - 145V)Rpt=(13200+29000V)/(412.5?145V)
2、Pt100 是電阻式溫度傳感器,測(cè)溫的本質(zhì)其實(shí)是測(cè)量傳感器的電阻,通常是將電阻的變化轉(zhuǎn)換成電壓或
電流等模擬信號(hào),再將模擬信號(hào)轉(zhuǎn)換成
數(shù)字信號(hào),再由處理器換算出相應(yīng)溫度。
通過查找表或公式計(jì)算的方法,將電阻值轉(zhuǎn)換為對(duì)應(yīng)的溫度值,以下給出“PT100溫度-電壓”對(duì)照表和各種類型的接線法。
?
?
a.二線制接法:如圖4(a)所示,這種接法不考慮Pt100 電纜的導(dǎo)線電阻,將A/D 采樣端與
電流源的正極輸出端接在一起,這種接法由于沒有考慮測(cè)溫電纜的電阻,因此只能適用于測(cè)溫距離較近的場合。
b.三線制接法:如圖4(b)所示,這種接法增加了用于A/D 采樣的補(bǔ)償線,三線制接法消除了連接導(dǎo)線電阻引起的測(cè)量誤差,這種接法適用于中等測(cè)溫距離的場合。
c.四線制接法:如圖4?所示,這種接法不僅增加了A/D 采樣補(bǔ)償線,還加了一條A/D對(duì)地的補(bǔ)償線,這樣可以近一步的減小測(cè)量誤差,可以用于測(cè)溫距離較遠(yuǎn)的場合。如果只從精度上考慮,采用四線制接法效果最好。
?
?
?
調(diào)試完成后,接下來就是將程序固化到板子中,我大致介紹一下程序固化方法和啟動(dòng)流程。
?
3.1 程序的固化方法
一般在調(diào)試程序的過程中FPGA用的是JTAG模式,不需要片外配置芯片,是直接將我們編寫的程序下載到FPGA的片內(nèi)
RAM中,掉電不保留數(shù)據(jù)。而固化的目的是使板卡掉電不丟失程序,通常在調(diào)試階段需要多次啟動(dòng),每次上電都重新下載程序是一件很麻煩的事情,所以將程序固化進(jìn)去會(huì)方便很多,下面是固化程序的參考流程。
?
https://blog.csdn.net/wmyan/article/details/79292778
?
如果大家覺得步驟很復(fù)雜的話,我用框圖的形式總結(jié)了一下,可能會(huì)清楚點(diǎn)。
?
?
?
3.2 程序的啟動(dòng)流程
ZYNQ7000
SOC芯片可以從FLASH啟動(dòng),也可以從
SD卡里啟動(dòng)。ZYNQ7000 SOC芯片上電后,先運(yùn)行的是
ARM系統(tǒng)(PS端)。然后通過ARM系統(tǒng)軟件部分加載FPGA的比特流文件.bit至FPGA(PL端),啟動(dòng)FPGA邏輯功能。
BOOT
ROM:開發(fā)板上電,Z7000會(huì)先執(zhí)行片內(nèi)BOOT ROM 代碼,BOOT ROM代碼讀取BOOT mode寄存器決定哪一種啟動(dòng)方式(SD card/QSPI flash/JTAG)。
確定好啟動(dòng)方式后,BOOT ROM從相應(yīng)的啟動(dòng)設(shè)備中(SD card/QSPI flash)加載到Fi
rst Stage Bootloader (FSBL)到On Chip Mem
ory(OCM)RAM,并將執(zhí)行權(quán)交給FSBL。
FSBL:(a)初始化
CPU,初始化串口。(b)PS一些
控制器初始化。(c)禁止L1 Data Cache。(d)注冊(cè)ARM中斷向量。(e)通過Boot mode寄存器判斷啟動(dòng)方式。
3.3 程序的測(cè)試
通過
UART串口輸出,借助串口調(diào)試助手可以看到實(shí)時(shí)的溫度數(shù)值,完成測(cè)試。
?
?
?
四、總結(jié)
大致歸納一下XADC用到的基本知識(shí)(僅針對(duì)個(gè)人的學(xué)習(xí)筆記總結(jié))。
?
1、輪詢模式:CPU重復(fù)檢查設(shè)備的狀態(tài)寄存器,直到寄存器的值表明I/O操作已經(jīng)完成。
2、
多路復(fù)用器mux:能夠接收多個(gè)信號(hào),按每個(gè)信號(hào)可恢復(fù)方式合成單個(gè)輸出信號(hào)。
3、XADC也需要參考電壓,參考電壓由芯片內(nèi)部或外部決定。
4、VP/VN在多路復(fù)用通道外(XADC有17個(gè)通道),即PL引腳復(fù)用。
5、XADC模塊的引腳封裝均在BANK0中。
6、用VP/VN能夠有效減小干擾,噪聲相減則抵消。
7、VP-VN的電壓輸出范圍是-0.5V ~ +0.5V,VP與VN相對(duì)于GNDADC電壓必須大于0。
8、模擬信號(hào)通道在管腳配置時(shí)不需要加電壓,數(shù)字信號(hào)通道在管腳配置時(shí)需要加電壓,電壓相當(dāng)于一個(gè)標(biāo)準(zhǔn)(FPGA有1.8V 2.5V 3.3V),例如3.3V控制時(shí),達(dá)到3.3V就相當(dāng)于邏輯1,0V就相當(dāng)于邏輯0。
9、掩碼:是一串二進(jìn)制代碼對(duì)目標(biāo)字段進(jìn)行位與運(yùn)算,屏蔽當(dāng)前的輸入位。
10、狀態(tài)寄存器只能查看工作狀態(tài)(read only),控制寄存器可以配置(read and write)。
11、沒有JTAG一般用Anolog-Input Mode(4Ch and 4Dh)配置。
?
通過實(shí)現(xiàn)利用XADC對(duì)溫度的采集,我學(xué)習(xí)到了如何配置寄存器(直接用地址寫寄存器的方式),學(xué)習(xí)到了什么是固化程序以及如何將程序固化到FPGA板卡中,這同時(shí)用到了vivado和sdk編譯環(huán)境,理解了溫度傳感器的
工作原理,最重要的是能夠系統(tǒng)地對(duì)一項(xiàng)工程進(jìn)行梳理,這對(duì)于學(xué)習(xí)FPGA有很大的幫助,希望以后能夠通過學(xué)習(xí)和寫博客的這種方式慢慢進(jìn)步。
?
評(píng)論
查看更多