IP核概述
Xilinx的FIR IP核屬于收費IP,但是不需要像 Quartus那樣通過修改license文件來破解。如果是個人學習,現在網絡上流傳的license破解文件在破解Vivado的同時也破解了絕大多數可以破解的IP核。只要在IP Catalog界面中FIR Compiler的License狀態為“Included”即可正常使用。
IP核參數設置
和Quartus不一樣,Vivado的FIR Compiler沒有提供設計FIR濾波器和生成濾波器系數的功能,因此需要使用MATLAB等其它工具設計好濾波器再將系數導入到IP核中。MATLAB的FDATOOL工具在設計好濾波器后,可以直接生成IP核需要的coe文件,如下圖所示:
在IP Catalog中打開FIR Compiler,主界面如下:
左邊的Tab可以切換看到FIR的模塊圖(管腳信息)、頻率響應等信息。右邊的Tab是對FIR濾波器進行設計。
IP核支持兩種FIR系數輸入方式,以“Vector”的形式直接寫入;或者以“COE File”的形式導入coe文件。Xilinx的FIR IP核支持多種濾波器結構,可以在“Filter Type”中設置,本文選擇傳統的“Single Rate”結構。該IP核同樣也支持系數重載。
除了單速率(Single Rate,即數據輸出與輸入速率相同)外,FIR Compiler還支持抽取(Decimation)和插值(Interpolation)應用于多速率信號處理系統。此外還支持希爾伯特變換(Hilbert)模式,可以在“Filter Type”中設置。
IP核支持多通道數據輸入,可以在Channel Specification這個Tab中設置輸入數據的通道數。還可以在Hardware Oversampling Specification中設置過采樣模式,即輸入數據的頻率可以高出FIR系統時鐘的頻率。
Implementation這個Tab中可以設置FIR系數的類型、量化方式、量化位寬(此值應該與MATLAB中的設置一致,否則頻率響應是錯的)和結構。本文由于是設計線性相位FIR,濾波器系數是對稱的,因此選擇為“Symmetric”,也可以選擇為“Inferred”,軟件會自動判斷系數的結構。
Detailed Implementation這個Tab中可以設置優化方式、存儲的類型、是否使用DSP單元等與綜合、實現有關的信息。Interface這個Tab中可以設置與IP核接口相關的信息。
IP核接口說明
Vivado的很多IP核采用的是AXI4接口,主要有數據(tdata)、準備好(tready)、有效(tvalid)幾種信號,還有主機(m)和從機(s)之分。另外在Interface這個Tab還可以配置使用更多輔助的AXI4接口信號。
接下來介紹幾個主要的接口:
在設置為多通道、可變系數模式時,還會用到其它的接口。上表中的接口已經足夠完成一次單通道、固定系數的FIR濾波器設計。其它接口在后文的設計中使用到FIR濾波器的其它模式時,再做介紹。
需要注意,同DDS Compiler一樣(https://blog.csdn.net/fpgadesigner/article/details/80512067),AXI4接口的tdata位寬是以字節為單位,即只會是8的倍數,因此需要結合設計的實際位寬做相應處理。
FPGA設計
IP核的接口在Verilog HDL中進行設計時,一定要參考官方文檔中給出的時序圖。在IP核的配置界面點擊“documentation”,可以找到IP核的user guide。也可以在Xilinx官網或DocNav工具中搜索pg149,查閱FIR Compiler的說明。
單通道、固定系數的FIR Compiler接口時序非常簡單,Verilog HDL示例代碼如下所示:
`timescale 1ns / 1ps
module Xilinx_FIRIP_liuqi
(
input clk, //FPGA系統時鐘/數據速率:2kHz
inputsigned [11:0] Xin, //數據輸入頻率為2kHZ
outputm_tvalid, //FIR輸出數據有效信號
outputsigned [24:0] Yout //濾波后的輸出數據
);
wire s_tready;
wire signed [31:0] m_tdata;
fir fir_lowpass_500kHz
(
.aclk (clk),
.s_axis_data_tvalid (1'b1),
.s_axis_data_tready (s_tready),
.s_axis_data_tdata ({{4{Xin[11]}},Xin}),
.m_axis_data_tvalid (m_tvalid),
.m_axis_data_tdata (m_tdata)
);
assign Yout = m_tdata[24:0];
endmodule
程序中認為輸入的采樣數據始終有效,因此將s_axis_data_tvalid永遠置1。由于s_axis_data_tdata為16bit位寬,但輸入信號數據為12bit位寬,因此用拼接運算符{}在高位填充補碼的符號位;由于m_axis_data_tdata為32bit位寬,但輸出信號數據有效位僅有25bit位寬,因此僅需取低25bit作為FIR濾波器輸出。當然不這么操作,直接將信號賦值到實例化接口,結果也是正確的,這樣做只是為了更嚴謹。
仿真與工程下載
使用MATLAB生成一個200khz+800kHz的混合頻率信號,寫入txt文件,。編寫Testbench讀取txt文件對信號濾波,文件操作方法參考“Testbench編寫指南(一)文件的讀寫操作”https://blog.csdn.net/fpgadesigner/article/details/80470972。
在Vivado中進行仿真,對正弦信號的濾波如下圖所示:
新建一個虛擬總線,僅保留一個符號位。明顯看到經過500Hz低通濾波器濾波后,輸入的200+800Hz信號只剩下200Hz的單頻信號。且當FIR濾波器輸出有效時,m_tvalid信號置高。
原文鏈接:https://blog.csdn.net/fpgadesigner/article/details/80621411
-
matlab
+關注
關注
187文章
2988瀏覽量
232589 -
濾波器
+關注
關注
161文章
7963瀏覽量
180195 -
Xilinx
+關注
關注
73文章
2175瀏覽量
123712 -
IP核
+關注
關注
4文章
335瀏覽量
50160 -
Vivado
+關注
關注
19文章
820瀏覽量
67772
原文標題:Vivado FIR IP核實現
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Vivado 使用Simulink設計FIR濾波器
請問如何使用單FIR編譯器v7.2核實現多頻帶帶通濾波器?
并行FIR濾波器Verilog設計
在測控系統中用IP 核實現D/A 轉換
在測控系統中用IP核實現D/A轉換
在測控系統中用IP核實現D/A轉換

基于vivado的fir ip核的重采樣設計與實現

FIR濾波器的FPGA設計與實現

FPGA實現基于Vivado的BRAM IP核的使用
在Vivado中構建自定義AXI4-Stream FIR濾波器IP 3

評論