如何在PYNQ中創(chuàng)建FIR濾波器并與之交互
FPGA設計的關鍵要素之一是數字濾波器的實現,事實上,去年我們研究了如何使用帶有Zmods的eclipse Z7板來實現數字濾波器。
但是,該項目需要使用信號發(fā)生器等形式的外部硬件。我認為創(chuàng)建一個使用PYNQ的示例可能是一個好主意,它使我們能夠使用Python生成任意信號,過濾它并繪制結果波形。
在使用PYNQ的項目中,我們將能夠可視化輸入和輸出波形。
Vivado設計
為了開始這個項目,我們將在Vivado實現一個設計。本設計將FIR編譯器連接到可編程邏輯中的DMA。這將允許我們通過FIR濾波器傳輸大量的樣本。
為此,我們需要以下IP塊
?Zynq ultrascale + MPSOC處理系統
?中斷控制器
?AXI直接存儲器存取
?冷杉編譯器
?智能互聯
?AXI互連
?處理器復位系統
?Concat塊
這些塊需要按如下方式配置
Zynq UltraScale+ MPSoC處理系統-為Avnet ZU板配置,在此IP塊上,我還啟用了saxi HPC連接,以及PL PS IRQ
對于FIR編譯器,我將實現一個簡單的低通濾波器,采樣率為100 Msps,時鐘速率為100MHz。這意味著我們將能夠處理高達50兆赫的信號。
為了設計濾波器,我再次使用TFilter設計低通濾波器,通帶定義為0-25MHz,阻帶定義為30MHz以上。
生成的系數可以復制到FIR編譯器中
由于我們正在使用16位輸入,輸出將增長到33位,然而,為了確保DMA更容易工作,我們將截斷結果為32位。
如果我們愿意,我們可以修改設計,使過濾器系數能夠在飛行中上傳。
由于我們正在使用DMA,我們需要確保FIR編譯器AXI流接口具有正確的信號數量。我們特別需要DMA的TLast信號。
當涉及到DMA時,我們需要配置它以支持最多26位的緩沖區(qū)長度寄存器。同時確保讀通道是16位,寫通道是32位。
完成的解決方案應該如下圖所示(TCL腳本附屬于下面的項目)
圖完成后,我們可以構建獲得硬件切換(HWH)文件和位流的項目。
PYNQ
要開始創(chuàng)建筆記本,我們首先需要獲取ZU板的PYNQ映像(在這里可用),并將ISO映像寫入SD卡。一旦SD卡準備好了,我們就可以啟動主板了。
通過將ZU板連接到以太網,我們可以將該板映射為網絡位置,并將生成的HWH和位文件傳輸到ZU板。
確保使用不同的憑據檢查連接,密碼是xilinx, xilinx。
確保當您上傳比特和HWH時,它們的名稱相同。
筆記本創(chuàng)造
為了開始創(chuàng)建筆記本,我們將完全在python中執(zhí)行過濾。
這將顯示下面的信號
如果我們對這個信號做FFT
我們可以在FFT中看到信號的頻率
為了在硬件上執(zhí)行過濾,我們可以使用下面的代碼,而不是這個信號應該通過過濾器。
我們將使用pynq allocate來定義發(fā)送和接收緩沖區(qū)所需的連續(xù)內存分配。我們將使用上面生成的相同信號
繪制FFT也給出
現在讓我們生成一個應該被過濾掉的信號
如果我們要運行過濾器
運行硬件示例提供
總結
本項目展示了如何使用PYNQ輕松學習FIR濾波器,我們可以使用PYNQ環(huán)境創(chuàng)建簡單的信號處理演示。
本文編譯自hackster.io