System Generator從入門到放棄(二)-Digital Filter文章目錄
??System Generator是Xilinx公司進(jìn)行數(shù)字信號(hào)處理開發(fā)的一種設(shè)計(jì)工具,它通過將Xilinx開發(fā)的一些模塊嵌入到Simulink的庫中,可以在Simulink中進(jìn)行定點(diǎn)仿真,可以設(shè)置定點(diǎn)信號(hào)的類型,這樣就可以比較定點(diǎn)仿真與浮點(diǎn)仿真的區(qū)別。并且可以生成HDL文件,或者網(wǎng)表,可以在ISE中進(jìn)行調(diào)用?;蛘咧苯由杀忍亓飨螺d文件。能夠加快DSP系統(tǒng)的開發(fā)進(jìn)度。 一、Digital Filter1、簡介??數(shù)字濾波器的功能是對輸入離散信號(hào)的數(shù)字代碼進(jìn)行運(yùn)算處理,以達(dá)到改變信號(hào)頻譜的目的。 2、產(chǎn)生正弦信號(hào)2.1 本部分設(shè)計(jì)使用到的blockXilinx block
其它block
??在庫中在庫中找到Sine Wave、add、scope,分別添加帶哦model中,如下:
??雙擊Add,“List of signs”設(shè)置加法器的輸入端口,“++”表示兩個(gè)輸入相加(“±”則表示A-B)。 ??雙擊打開示波器窗口,在View->Configuration Properties:Scope中(或者如下圖方式進(jìn)行設(shè)置),將Number of input ports設(shè)置為3(觀察3路信號(hào));點(diǎn)擊Layout,選擇3*1排列方式(每路信號(hào)分開顯示): ??第一個(gè)為1Mhz信號(hào),第三個(gè)為9MHz信號(hào),中間為兩路信號(hào)疊加。接下來設(shè)計(jì)一個(gè)LPF濾除掉9MHz頻率分量。 3、數(shù)字濾波器的設(shè)計(jì)3.1 本部分設(shè)計(jì)使用到的blockXilinx block
其它block
3.2 數(shù)字濾波器設(shè)計(jì)??我們知道,Simulink中的仿真模型為連續(xù)時(shí)間系統(tǒng),數(shù)據(jù)格式多種多樣;而FPGA中為離散時(shí)間系統(tǒng),數(shù)據(jù)必須用一定的位數(shù)進(jìn)行量化。兩者之間必須要進(jìn)行從連續(xù)到離散的轉(zhuǎn)換、數(shù)據(jù)格式的轉(zhuǎn)換,否則無法進(jìn)行正確的FPGA設(shè)計(jì)。Xilinx Blockset中提供了相應(yīng)的解決方案。 ??添加一個(gè)Gateway In和一個(gè)Gateway Out模塊到model中,再添加一個(gè)Digital FIR Filter模塊。按照加法器輸出->Gateway In->Digital FIR Filter->Gateway Out的順序依次連接。 ??添加如下block到model并按圖中方式進(jìn)行連線。 ??雙擊打開Gateway In模塊的屬性窗口: ??Gateway In的設(shè)置會(huì)自動(dòng)傳遞到Gateway In和Gateway Out之間的整個(gè)系統(tǒng)中,因此不需要再設(shè)置其它模塊的采樣率與數(shù)據(jù)格式。 Digital FIR Filter設(shè)置 頻率參數(shù)
Magnitude Specifications
??兩種方式,其中第一種方式,在其他模塊沒有FDATOOL工具時(shí),需要使用第二種方式。 第二種方式 3.3 FPGA系統(tǒng)配置??以上僅僅是完成了數(shù)字濾波器的設(shè)計(jì),但是仍然沒有建立起模型與FPGA之間的實(shí)質(zhì)聯(lián)系。添加System Generator模塊到model中,這個(gè)block便是配置與FPGA相關(guān)的系統(tǒng)參數(shù)。這個(gè)block的配置會(huì)應(yīng)用到Gateway In和Gateway Out之間的所有模塊中。雙擊打開,切換到Clock標(biāo)簽:
3.3 開始仿真??使用Simulink完成FPGA中的DSP系統(tǒng)設(shè)計(jì),最大的好處就是仿真極其方便(包括后面文章會(huì)用到的ModelSim協(xié)同仿真、硬件協(xié)同仿真等特性)。 ??添加一個(gè)Scope觀察Gateway Out輸出的波形(濾波后波形),再添加兩個(gè)Spectrum Analyzer觀察濾波前后的信號(hào)頻譜。Spectrum Analyzer這個(gè)block必須輸入離散的數(shù)據(jù),因此在加法器輸出后需要經(jīng)過一個(gè)零階保持器Zero-Order Hold,轉(zhuǎn)換為離散數(shù)據(jù)后再輸入到Spectrum Analyzer中。零階保持器的采樣率設(shè)置為1/20e6(20Mhz)。 ??注意,雖然Gateway In轉(zhuǎn)換后的數(shù)據(jù)也是離散的,但是Spectrum Analyzer不能接入到這里,否則會(huì)出現(xiàn)錯(cuò)誤。Gateway In和Gateway Out之間只能連接其它Xilinx Blockset中的模塊。 ??將仿真時(shí)間設(shè)置為0.0005(Spectrum Analyzer必須有足夠多的采樣數(shù)據(jù)才能計(jì)算出頻譜),輸出信號(hào)的波形如下所示,經(jīng)過濾波后僅剩下1MHz的單頻分量,且數(shù)據(jù)為離散值。 ??FIR濾波器前后的頻譜: ??可以看到經(jīng)過濾波后,9Mhz的頻率分量有大約100dB的衰減(頻譜呈對稱性),設(shè)計(jì)符合預(yù)期。 3.3 將設(shè)計(jì)導(dǎo)出到FPGA??仿真驗(yàn)證功能正確后,需要將設(shè)計(jì)導(dǎo)出到FPGA中,這個(gè)步驟仍然要借助System Generator這個(gè)block。雙擊打開,切換到Compilation標(biāo)簽下,這里可以設(shè)置使用的開發(fā)板(Board,只能選擇Xilinx官方開發(fā)板)、FPGA芯片(Part),也可以設(shè)置導(dǎo)出設(shè)計(jì)的硬件描述語言(Verilog或VHDL)。點(diǎn)擊“Generate”,System Generator會(huì)將Gateway In和Gateway Out之間的模塊導(dǎo)出到FPGA中。運(yùn)行結(jié)束后,根據(jù)前面的設(shè)置,彈出了資源分析報(bào)告: 3.3 打開Vivado示例工程??在ip_catalog文件夾下打開Vivado工程,其中頂層文件如下: //Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. ??sysgen_filter_bd是調(diào)用System Generator導(dǎo)出的IP核的子模塊。16Bits輸入數(shù)據(jù)經(jīng)過濾波后得到36Bits的輸出結(jié)果。運(yùn)行RTL ANALYSIS,打開RTL視圖,找到最底層: ??理論上經(jīng)過Simulink中的仿真,已經(jīng)可以確定設(shè)計(jì)的正確性。但這是使用System Generator完成的第一個(gè)實(shí)驗(yàn),本文仍然在Vivado中進(jìn)行一次仿真,增強(qiáng)使用者對System Generator設(shè)計(jì)的信心。使用MATLAB產(chǎn)生一個(gè)1MHz+9Mhz的正弦疊加信號(hào),導(dǎo)入到TXT文件中。編寫testbench讀取txt文件,對信號(hào)進(jìn)行濾波。Vivado中的仿真結(jié)果如下圖所示:
4、FDATool block的使用??前文中我們在Digital FIR Filter block的配置界面直接調(diào)用FDATool工具完成FIR濾波器的設(shè)計(jì)。但是有一些濾波器block,如2n-tap MAC FIR Filter,并沒有提供這樣一個(gè)接口。Xilinx Blockset中單獨(dú)提供了一個(gè)FDATool block,可以提供更廣泛的使用。 ??添加FDATool block到model中,配置完成后點(diǎn)擊“Design Filter”。其它模塊調(diào)用這個(gè)FDATool設(shè)計(jì)的濾波器可以借助兩個(gè)函數(shù):
??對于FIR濾波器而言,分母為1,只提取分子即可。如下圖所示: ??所有濾波器block的系數(shù)都可以用這種方式設(shè)置。 5、生成說明文檔與testbench5.1 生成說明文檔??本文在上一篇設(shè)計(jì)的數(shù)字濾波器模型基礎(chǔ)上進(jìn)行修改。打開System Generator這個(gè)block,在Compilation標(biāo)簽下: ??選中“Create interface document”,在點(diǎn)擊Generate導(dǎo)出設(shè)計(jì)后,在netlist/sysgen文件夾下會(huì)生成一個(gè)HTM文件。用瀏覽器打開如下: 5.2 生成testbench??在System Generator block的Compilation標(biāo)簽下選中“Create testbench”,如第一幅圖所示。在點(diǎn)擊Generate導(dǎo)出設(shè)計(jì)時(shí),軟件會(huì)根據(jù)選擇的硬件描述語言生成對應(yīng)的testbench(在netlist/sysgen文件夾下): ●“Verilog“對應(yīng)”name_tb.v“文件 ??直接運(yùn)行仿真,Vivado中仿真結(jié)果如下所示: ??仿真結(jié)果與上一部分完全一致。這是因?yàn)镾ystem Generator工具在生成testbench文件時(shí)將simulink環(huán)境中接入到Gateway In block的數(shù)據(jù)存儲(chǔ)到dat文件中,在testbench中調(diào)用。而我們自己編寫testbench時(shí)需要設(shè)計(jì)M文件產(chǎn)生信號(hào),再用HDL語言設(shè)計(jì)仿真過程??梢奡ystem Generator的便利與強(qiáng)大。 6、資源分析與時(shí)序分析6.1 查看分析結(jié)果??這部分繼續(xù)在上面設(shè)計(jì)的數(shù)字濾波器模型基礎(chǔ)上運(yùn)行分析。System Generator集成了時(shí)序分析和資源分析功能,以確保在simulink中設(shè)計(jì)的DSP系統(tǒng)導(dǎo)出到FPGA環(huán)境中能夠正確運(yùn)行。其本質(zhì)上仍然是在后臺(tái)調(diào)用Vivado進(jìn)行分析,System Generator只是讀取了分析結(jié)果并顯示出來。 ??設(shè)計(jì)完成并且Simulink運(yùn)行完畢后,打開System Generator這個(gè)block,切換到Clock標(biāo)簽下: Perform analysis中可以設(shè)置
Analyzer type中可以設(shè)置
??注意在Perform analysis設(shè)置好,并且導(dǎo)出設(shè)計(jì)到FPGA后,可以切換Analyzer type,并且點(diǎn)擊右邊的“Launch”查看兩種報(bào)告。但修改設(shè)計(jì)和修改Perform analysis參數(shù)后必須重新運(yùn)行才能生成最新的報(bào)告。 ??綜合后和實(shí)現(xiàn)后的資源分析和時(shí)序分析分別如下。時(shí)序報(bào)告中可以看到每一條時(shí)鐘路徑的情況(本設(shè)計(jì)中只有一條);資源報(bào)告中可以看到每一個(gè)模塊的資源消耗(本設(shè)計(jì)只有一個(gè)模塊)??梢钥吹骄C合后與實(shí)現(xiàn)后的資源消耗情況、時(shí)序情況有些差異: 6.2 時(shí)序分析??System Generator集成的靜態(tài)時(shí)序分析功能提供了如下特性:
??如下圖:
??在System Generator block的Compilation標(biāo)簽下可以設(shè)置“Synthesis strategy”和“Implementation strategy”。列表中有幾種Vivado提供的策略,也可以在Vivado中添加好用戶自定義的策略,在System Generator中調(diào)用。 6.3 資源分析??System Generator集成的資源分析功能提供了如下特性:
6.4 資時(shí)序/資源分析失敗的說明??絕大多數(shù)情況下,時(shí)序分析和資源分析都能得到正確的結(jié)果,但有時(shí)在Generate生成結(jié)束后,會(huì)提示一個(gè)Error,無法獲取結(jié)果數(shù)據(jù)。 ??失敗的原因一般都是如下情況:在同一目錄下有多個(gè)slx文件,但是所有的slx文件設(shè)置的輸出目錄都相同(比如都是默認(rèn)的./netlist)。在導(dǎo)出第一個(gè)slx文件時(shí)是可以正確運(yùn)行時(shí)序/資源分析的;但在導(dǎo)出第二個(gè)slx文件的設(shè)計(jì)時(shí),就會(huì)報(bào)錯(cuò)。原因便是不同的模型向同一目錄下導(dǎo)出設(shè)計(jì)。在設(shè)置路徑時(shí)要注意。 |
|