如何用XADC和PYNQ進(jìn)行信號處理
為MicroZed 7010/20和IO載波卡創(chuàng)建PYNQ映像。用XADC進(jìn)行信號處理。
我們都熟悉RFSoC和與ZYNQ MPSoC結(jié)合的高速ADC和DAC。但是,您可能不知道所有賽靈思七系列及以上都有XADC / Sysmon ADC,這是監(jiān)測內(nèi)部電壓軌和模具溫度的電纜。
XADC / Sysmon還能夠監(jiān)控外部模擬信號,與Zynq 7000相比,它能夠以高達(dá)1 MSPS的速度采樣,這使得它對于簡單的信號處理應(yīng)用非常有趣。
我還看到一些應(yīng)用程序使用PYNQ從XADC捕獲數(shù)據(jù),因此在本項(xiàng)目中,我們將創(chuàng)建一個簡單的XADC作用域應(yīng)用程序。
Pynq
為了開始,我們需要一個PYNQ映像,因?yàn)镸icroZed沒有官方的PYNQ映像(7010或20),首先要做的是創(chuàng)建一個PYNQ映像。因?yàn)檫@樣的事情是一個獨(dú)立的項(xiàng)目,我們已經(jīng)做過很多次了,我將參考你以前的項(xiàng)目(Zybo, Snickerdoodle和Cora),并在這里提供圖像。
Vivado
首先,我們需要開發(fā)一個覆蓋層,它使用AXI流接口和DMA將XADC連接到處理器系統(tǒng)。這使我們能夠從Vp/Vn專用模擬輸入中捕獲連續(xù)的數(shù)據(jù)流。
?我們需要做的第一件事是創(chuàng)建一個新項(xiàng)目
?定義項(xiàng)目的名稱和位置
?選擇RTL項(xiàng)目并稍后定義源
?選擇MicroZed板的選擇。
?創(chuàng)建新項(xiàng)目。
?隨著新項(xiàng)目的創(chuàng)建,創(chuàng)建一個新的框圖。
?在新的模塊設(shè)計(jì)中加入了處理器系統(tǒng)
?運(yùn)行塊自動化配置MicroZed板的處理器。
?配置好處理器后,添加XADC塊。
?定制XADC模塊,使其在連續(xù)模式下運(yùn)行,單通道并啟用AXI流。為了實(shí)現(xiàn)1000 ksps的采樣率,我們需要將DClk設(shè)置為104 MHz,因?yàn)閄ADC內(nèi)部采用4個時鐘周期進(jìn)行采集,26個時鐘周期進(jìn)行轉(zhuǎn)換。
?禁用所有告警,單擊“確定”
?添加時鐘向?qū)?,因?yàn)閆ynq fabric時鐘無法生成所需的104 MHz時鐘。
?將時鐘向?qū)У念l率設(shè)置為104mhz,并將active low設(shè)置為Reset。
?配置了時鐘向?qū)Ш?,我們需要重新定制處理系統(tǒng),以提供一個主AXI接口,以便使用AXI lite在PL中配置IP。還應(yīng)該實(shí)現(xiàn)從AXI端口,以使高帶寬XADC數(shù)據(jù)能夠傳輸?shù)絇S DDR內(nèi)存進(jìn)行分析。
?XADC輸出AXI流不包括TLast信號,該信號需要與DMA傳輸一起使用。因此,應(yīng)該將AXI流子集轉(zhuǎn)換器添加到框圖中。在主接口上啟用TLast輸出,并允許系統(tǒng)每128個事務(wù)生成一次TLast信號。
?運(yùn)行連接自動化來實(shí)現(xiàn)AXI Lite網(wǎng)絡(luò),并將AXI子集轉(zhuǎn)換器的AXI流輸出連接到Zynq PS上的AXI MM輸入。
?Vivado將自動實(shí)現(xiàn)AXI DMA基礎(chǔ)架構(gòu)。
?如果要更改AXI DMA中的緩沖區(qū)大小,請更改DMA設(shè)置中的緩沖區(qū)長度寄存器的設(shè)置。
?完成的框圖如下所示。
?一旦完成,我們就可以構(gòu)建比特流并導(dǎo)出XSA文件,以便在Vitis中使用。
?保持文件名和導(dǎo)出位置不變
?導(dǎo)出硬件。
Vitis
在創(chuàng)建PYNQ平臺之前,我喜歡確保設(shè)計(jì)具有預(yù)期的功能。在本例中,我們可以使用Vitis和裸機(jī)方法來測試XADC和DMA配置。
?創(chuàng)建一個新的VITIS應(yīng)用程序項(xiàng)目
?導(dǎo)入先前從Vivado導(dǎo)出的XSA
?創(chuàng)建一個新的應(yīng)用程序項(xiàng)目
?創(chuàng)建一個新域
?選擇Hello World模板
一旦完成,我們將看到創(chuàng)建了一個新項(xiàng)目,打開hello_world.C文件并將內(nèi)容替換為下面的內(nèi)容
運(yùn)行這段代碼將顯示XADC的內(nèi)容被傳輸?shù)紻DR內(nèi)存中,這可以在調(diào)試系統(tǒng)時觀察到。
現(xiàn)在我們很高興平臺可以工作了,下一步是創(chuàng)建PYNQ應(yīng)用程序。
PYNQ
將MicroZed PYNQ映像寫入SD卡后,我們可以引導(dǎo)連接到IOCC的MicroZed。一旦PYNQ啟動,我們可以在PYNQ板中映射到計(jì)算機(jī)目錄并創(chuàng)建一個新的Overlay。為此,我們需要
?由Vivado生成的位文件
?Viviado生成的HWH文件
?__init__.py初始化腳本
?Xadc_scope.py類定義
py腳本需要手工編寫
__init__ . py
xadc_scope.py
有了創(chuàng)建的覆蓋層,我們可以創(chuàng)建一個簡單的筆記本來捕獲XADC信號。
記住,DMA以字節(jié)為單位工作,XADC每個樣本輸出2字節(jié)。
運(yùn)行下面的代碼將顯示捕獲到的正弦波的輸出
有了這個正弦波,我們可以輸入轉(zhuǎn)換因子,如果我們愿意的話,從原始值到電壓。
PYNQ下的XADC控制
使用Vp/Vn輸入,我們不需要對XADC的配置進(jìn)行任何更改,但是,如果我們想要更改XADC的配置。我們可以使用標(biāo)準(zhǔn)的AXI接口來讀寫用UG480定義的寄存器
結(jié)論
這個項(xiàng)目很好地展示了我們?nèi)绾问褂肞YNQ, XADC使用像MicroZed這樣的板。MicroZed和SoM概念是快速開發(fā)硬件應(yīng)用程序的一個很好的平臺。該板的PYNQ映像將提供更快加速設(shè)計(jì)的能力。
本文編譯自hackster.io