本文是該系列的第2篇,上一篇介紹了System Generator的基本知識以及軟件的安裝。本文將以一個簡單的數字濾波器的設計為主題,介紹Sysgem Generator的完整設計流程,同時詳細介紹使用到的各個block。 本設計使用到的block 2.其它block: 這里給出了設計中用到的所有block在庫中的路徑,后文不再提及(同一block會包含在多個庫中,為了尋找方便這里只列出一個路徑)。 System Generator設計流程 1.生成正弦信號
雙擊Sine Wave,可以設置正弦波的幅度、電平偏置、頻率、初相、采樣時間等信息。這里只需要將頻率分別設置為1MHz(2*pi*1e6)和9MHz(2*pi*9e6)。兩路信號的疊加需要使用加法器,添加一個Add到model中:
“List of signs”設置加法器的輸入端口,“++”表示兩個輸入相加(“+-”則表示A-B)。 為了確保模塊輸出信號正確,添加一個Scope觀察信號波形。雙擊打開示波器窗口,在View->Configuration Properties:Scope中,將Number of input ports設置為3(觀察3路信號);點擊Layout,選擇3*1排列方式(每路信號分開顯示):
此時模型的連接圖如下所示:
將Simulink仿真時間設置為0.00001(時間太長會導致仿真很慢),點擊運行,Simulink窗口的右小角可以觀察到運行狀態(tài)。運行結束后打開Scope:
第一個為1Mhz信號,第三個為9MHz信號,中間為兩路信號疊加。接下來設計一個LPF濾除掉9MHz頻率分量。 2.數字濾波器設計 添加一個Gateway In和一個Gateway Out模塊到model中,再添加一個Digital FIR Filter模塊。按照加法器輸出->Gateway In->Digital FIR Filter->Gateway Out的順序依次連接。雙擊打開Gateway In模塊的屬性窗口:
這個模塊可以Simulink到FPGA之間的數據轉換。將Sample period設置為“1/20e6”(20MHz采樣率),完成連續(xù)時間到離散時間的轉換;設置Out Type完成數據格式的轉換。這里保持為默認的二進制帶符號數補碼、定點數的設置。Quantization中可以設置量化方式為Truncate(截斷)或者round(四舍五入)。 Gateway In的設置會自動傳遞到Gateway In和Gateway Out之間的整個系統(tǒng)中,因此不需要再設置其它模塊的采樣率與數據格式。 雙擊Digital FIR Filter:
FIR濾波器的系數可以使用fir1等MATLAB函數設計,也可以使用FDATOOL工具設計。選中“Use FDA Tool as coefficient source”,點擊“FDA Tool”按鈕,會彈出FDATOOL窗口,設置采樣率為20Mhz,通帶截止頻率1.5MHz,阻帶截止頻率8.5Mhz,通帶衰減0.01dB,阻帶衰減100dB,點擊“Design”設計后退出。 3.FPGA系統(tǒng)配置
FPGA clock period設置為50ns,Simulink system period設置為1/20e6(都是20Mhz)。Perfor analysis設置為Post Sythesis,Analyzer type設置為Resource,在系統(tǒng)綜合后會進行資源使用情況的分析。 4.系統(tǒng)仿真 添加一個Scope觀察Gateway Out輸出的波形(濾波后波形),再添加兩個Spectrum Analyzer觀察濾波前后的信號頻譜。Spectrum Analyzer這個block必須輸入離散的數據,因此在加法器輸出后需要經過一個零階保持器Zero-Order Hold,轉換為離散數據后再輸入到Spectrum Analyzer中。零階保持器的采樣率設置為1/20e6(20Mhz)。 系統(tǒng)的整體連接框圖如下:
注意,雖然Gateway In轉換后的數據也是離散的,但是Spectrum Analyzer不能接入到這里,否則會出現錯誤。Gateway In和Gateway Out之間只能連接其它Xilinx Blockset中的模塊。 將仿真時間設置為0.0005(Spectrum Analyzer必須有足夠多的采樣數據才能計算出頻譜),輸出信號的波形如下所示:
經過濾波后僅剩下1MHz的單頻分量,且數據為離散值。信號濾波前后的頻譜對比如下圖所示:
可以看到經過濾波后,9Mhz的頻率分量有大約100dB的衰減(頻譜呈對稱性),設計符合預期。 5.將設計導出到FPGA
這里可以設置使用的開發(fā)板(Board,只能選擇Xilinx官方開發(fā)板)、FPGA芯片(Part),也可以設置導出設計的硬件描述語言(Verilog或VHDL)。點擊“Generate”,System Generator會將Gateway In和Gateway Out之間的模塊導出到FPGA中。運行結束后,根據前面的設置,彈出了資源分析報告:
在slx同文件夾下,生成netlist文件夾。其中sysgen子文件夾包含了導出的Verilog或VHDL設計文件;ip子文件夾是設計導出的IP核形式;ip_catalog子文件夾包含一個調用該IP核的Vivado的示例工程。 打開Vivado示例工程 module sysgen_filter_bd_wrapper wire clk; sysgen_filter_bd sysgen_filter_bd_i sysgen_filter_bd是調用System Generator導出的IP核的子模塊。16Bits輸入數據經過濾波后得到36Bits的輸出結果。運行RTL ANALYSIS,打開RTL視圖,找到最底層:
可以看到其本質上仍然是調用了FIR Compiler IP核來實現數字濾波,只不過我們是在Simulink中完成的設計。在其它工程中可以像示例工程一樣調用這個System Generator導出的IP核,來完成特定的DSP系統(tǒng)功能。 理論上經過Simulink中的仿真,已經可以確定設計的正確性。但這是使用System Generator完成的第一個實驗,本文仍然在Vivado中進行一次仿真,增強使用者對System Generator設計的信心。使用MATLAB產生一個1MHz+9Mhz的正弦疊加信號,導入到TXT文件中。編寫testbench讀取txt文件,對信號進行濾波。Vivado中的仿真結果如下圖所示:
可以看到經過濾波后,只剩下1Mhz的單頻信號,與Simulink中的仿真結果完全一致。 1. 更強大、更方便的仿真環(huán)境; 在后面的文章中將記錄更多、更復雜的DSP系統(tǒng)設計。 FDATool block的使用 添加FDATool block到model中,配置完成后點擊“Design Filter”。其它模塊調用這個FDATool設計的濾波器可以借助兩個函數: 對于FIR濾波器而言,分母為1,只提取分子即可。如下圖所示:
所有濾波器block的系數都可以用這種方式設置。 文章來源:FPGADesigner的博客 |
|