01概述
本文通過matlab自帶的工具箱生成一個可編程FIR濾波器的硬件HDL代碼,可生成VHDL或者Verilog HDL兩種類型的代碼。
02 具體操作步驟
新建一個matlab的腳本,鍵入下面兩行代碼,這裏是直接調用matlab已經定義好的“dspprogfirhdl”模型,然後在simulink工具中打開該系統模型。
modelname = 'dspprogfirhdl';
open_system(modelname)
運行上面兩行代碼後,會打開simulink並出現下圖:
上圖就是"dspprogfirhdl"模型的結構圖, 圖中Host Behavioral Model 是用來產生可編程FIR濾波器的係數(低通或者高通濾波器係數),Programmable FIR via Registers 是我們要生成的可編程濾波器模塊,FIR Behavioral 是一個行爲級的參考模塊,它用來和可編程濾波器模塊做結果的比對。
雙擊上圖中的 Programmable FIR via Registers 模塊或者運行如下腳本中:
systemname = [modelname '/Programmable FIR via Registers'];
open_system(systemname);
會出現下圖,這是programmable FIR via Registers模塊的內部結構:
上圖中coeffs_registers 是一個FIR 濾波器的係數寄存器,當'write_enable' 信號拉高寫FIR的係數;當 'write_done' 拉高,也就是寫完成時, shadow registers 纔會更新一次FIR的濾波器係數,該模型生成的HDL代碼默認是全並行的結構實現,可根據需要改爲串行流水結構。
開始執行仿真,以及查看仿真波形,執行如下代碼;
sim(modelname);
open_system([modelname '/Scope']);
會生成如下的仿真結果:
上圖中,filter_input是輸入的信號,ref_out和dut output是參考模型和dut的輸出結果,error是二者的結果比對情況。
也可以使用simulink工具中的 Logic Analyzer邏輯分析儀查看波形,點擊本文第一張圖中的wifi符號,如下圖:
最後會在 Logic Analyzer中生成如下的波形圖:
將filter濾波器輸入信號和輸出信號用模擬形式展開,如下圖:
03生成HDL代碼
下面通過兩種方式生成HDL代碼
-
方式一(腳本):
腳本中鍵入如下代碼,生成HDL的dut代碼(默認生成.vhd的代碼):
workingdir = tempname;
makehdl(systemname,'TargetDirectory',workingdir);
matlab命令行窗口中出現如下圖,表示成功FIR濾波器的DUT代碼:
腳本中鍵入如下代碼,生成HDL的tb代碼:
makehdltb(systemname,'TargetDirectory',workingdir);
matlab命令行窗口中出現如下圖,表示成功FIR濾波器的TB代碼:
-
方式二(界面):
在下圖中雙擊箭頭所示部分,會出現configration配置界面(生成.v格式的代碼):
出現下圖,按照如下圖操作1,2,3,然後點擊下方generate。
matlab的命令行出現下圖,表示成功生成FIR濾波器的DUT代碼:
在configuration中選取testbench然後點擊生成testbench即可。
matlab的命令行出現下圖,表示成功生成FIR濾波器的TB代碼:
04
modelsim工具仿真
經過matlab工具生成可編程的FIR濾波器HDL代碼後,在工作目錄中會有如下的文件(包括:仿真用的數據.dat文件,dut和tb文件,run.do腳本):
使用modelsim仿真後的結果如下:
05
總結
參考資料:
https://ww2.mathworks.cn/help/dsp/examples/generate-hdl-code-for-programmable-fir-filter.html
Filter Design HDL Coder™User's Guide
獲取代碼:
關注公衆號回覆:“fir”,即可獲取。
關注“芯設計"