matlab與FPGA無線通信、FPGA數字信號處理系列(4)—— Vivado DDS 與 FIR IP核設計 FIR 數字濾波器系統

本講使用兩個DDS產生待濾波的信號和 matlab 產生帶濾波信號,結合FIR濾波器搭建一個信號產生及濾波的系統,並編寫 testbench 進行仿真分析,下一講 開始編寫 verilog 代碼設計FIR濾波器,不再調用IP核。

本講很多地方需要藉助上一講 Matlab 與 Vivado 聯合仿真 FIR 濾波器

MATLAB 與 FPGA無線通信、圖像處理、數字信號處理系列 傳送

系統框圖如圖所示:
在這裏插入圖片描述

1. 添加DDS的IP核

(1)新建一個原理圖文件,添加 DDS 的 IP。
在這裏插入圖片描述
(2)DDS配置1
在這裏插入圖片描述
2處:系統時鐘,設爲 32 MHz;

4處:通過控制雜散動態範圍(Spurious Free Dynamic Range,SFDR)的數值,可以調整正弦和餘弦輸出數據的數據位寬,這裏設置爲90,則正餘弦輸出爲15位。

選擇 6 處的 Noise Shaping 爲 None 時,輸出的正弦波數據的位寬爲 90/6 向上取整,即位寬爲 15-bit,此處的 m_axis_data_tdata 符合 AXIS 總線協議,位寬必須是 8 的倍數,所以是 16 位([15:0])。

5處:頻率分辨率,可以調整相位數據的位寬,設置爲1000,32MHz/(1*1000)=32000,以2爲底取對數得到大約爲14.8,向上取整爲15-bit。
在這裏插入圖片描述
(3)DDS配置-2
1/2兩處選擇 Fixed 固定值,表示輸出頻率和初始相位都不變,3處輸出正弦波,總體配置爲頻率和初相都不變的正弦波;
在這裏插入圖片描述
(4)DDS配置-3
配置輸出信號的頻率爲 0.5 MHz,結合前面的配置輸出 0.5 MHz 的固定的正弦波,其他保持默認;
在這裏插入圖片描述
總結如下,可以看到位寬符合前文的計算。
在這裏插入圖片描述

2. 使用IP核搭建濾波系統

(1)按照前文的方式生成兩個 DDS,一個頻率爲 0.5 MHz,一個爲 5 MHz;
(2)按照第二講的方式生成1個FIR低通濾波器;
在這裏插入圖片描述
(3)添加加法器Adder/Subtracter;
1處點開可以更改輸入位寬,此處因爲要將前面DDS輸出的AXIS總線上的數據作爲輸入,是16位位寬(其中只有低15位是有效的DDS數據),所以此處設置加法器輸入16位(與AXIS的數據一致,不然位寬不匹配);
2處可以選擇是加法還是減法;
3處配置輸出位寬16位,輸入的兩個數據都是16位的,但是都只有低15位是有效數據,兩個15位的數據相加,輸出用16位表示可以保證不溢出;
4處配置延時,也是插入的流水線,當爲1時表示插入1級流水線,輸出的和會有1個時鐘的延遲,此處不需要流水線,配置爲0,此時輸入就不會再有時鐘;
此外,在第二頁的Control頁將Clock Enable勾掉,不需要做使能;
在這裏插入圖片描述
(4)調用常數ip核 Constant,配置輸出位寬爲1,輸出數據爲1,整體連接圖如下圖,三個IP時鐘一樣,0.5 MHz 正弦波與 5 MHz 正弦波相加,得到的待濾波信號輸入到 FIR 濾波器的輸入數據端,常數 1 輸給 s_axis_data_tvalid,表示輸入數據恆有效;
在這裏插入圖片描述

3. 例化系統

(1)對原理圖文件按照第二講的方法 Generate Output Products 和 Create HDL Wrapper,並將 design_2_wrapper 設置爲頂層文件(Set as Top);
在這裏插入圖片描述
(2)打開 design_2_wrapper.v,可以看到如下引腳:

output [39:0]M_AXIS_DATA_0_tdata;		//濾波器輸出的濾波後的信號
output M_AXIS_DATA_0_tvalid;			//濾波器輸出信號有效指示信號,爲1時表示輸出的數據有效
output [15:0]M_AXIS_PHASE_0_tdata;		//0.5 MHz的DDS的相位數據
output M_AXIS_PHASE_0_tvalid;			//0.5 MHz的DDS的相位數據有效指示信號
output [15:0]M_AXIS_PHASE_1_tdata;		//5 MHz  的DDS的相位數據
output M_AXIS_PHASE_1_tvalid;			//5 MHz  的DDS的相位數據有效指示信號
input aclk_0;							//輸入時鐘,32MHz		
output m_axis_data_tvalid_0;			//0.5 MHz的DDS正弦波數據有效指示信號
output m_axis_data_tvalid_1;			//5 MHz  的DDS正弦波數據有效指示信號

在這裏插入圖片描述
(3)新建仿真文件testbench
具體步驟參考上一講Matlab 與 Vivado 聯合仿真 FIR 濾波器
在這裏插入圖片描述
(4)編寫testbench,例化 design_2_wrapper 模塊;
具體參考上一講Matlab 與 Vivado 聯合仿真 FIR 濾波器
在這裏插入圖片描述
(5)給定時鐘信號;
     使用 initial 塊和 always 塊設定時鐘爲 32 MHz(大約),具體見 上一講Matlab 與 Vivado 聯合仿真 FIR 濾波器
     此處只有一個輸入是時鐘,不需要再配置其他輸入信號;
此外,需要將新的仿真文件 fir_dds_tb 設爲頂層文件(Set as Top),這樣仿真時才能對新建的文件進行仿真;
在這裏插入圖片描述

4. 仿真分析

(1)點擊仿真,可以看到濾波器輸出一個 0.5 MHz 的正弦波,濾波效果很好;
在這裏插入圖片描述
(2)觀察內部其他信號的波形
     首先,復位整個仿真,輸入tcl 命令 restart

在這裏插入圖片描述
輸入 tcl命令 log_wave -r /*,注意空格,-r前後都有一個空格;
在這裏插入圖片描述
     找到下圖中對應的模塊,比如DDS模塊的正弦波輸出數據目前看不到,沒有相應的引腳引出,找到DDS模塊,對2箭頭所指的信號 m_axis_data_tdata 右鍵,把信號添加到波形窗口 Add to Wave Window,

     添加兩個 DDS 的信號和加法器的輸出信號,如下圖,1處是濾波器的輸出信號,2處是 0.5 MHz 的正弦波輸出信號,3處是 5 MHz 的正弦波信號,4處事加法器輸出的兩個正弦波的疊加信號;
在這裏插入圖片描述
下一講使用verilog 編寫 FIR 串行濾波器,並編寫 testbench 進行仿真分析。

下下一講使用verilog 編寫 FIR 並行濾波器,並編寫 testbench 進行仿真分析。

MATLAB 與 FPGA無線通信、圖像處理、數字信號處理系列 傳送

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章