手把手教你在LV FPGA中優(yōu)雅地使用Xilinx FIR 濾波器IP core
對于NI很多專注于數(shù)據(jù)采集領(lǐng)域的客戶來說,對采集到的信號在前端加入濾波功能是非常常見的需求。但是,可能由于他們對NI產(chǎn)品不夠了解,不知道這部分功能完全可以由FPGA來完成,從而讓NI錯失應(yīng)有的訂單和機會。例如,客戶原本的系統(tǒng)構(gòu)建是在傳感器與NI cDAQ之間再外加濾波電路。明了這個需求以后,我們完全可以向客戶推薦具有FPGA終端的cRIO,這樣的解決方案即簡化了客戶的系統(tǒng)構(gòu)建方案,同時幫NI增加了銷售額,兩全其美!那么問題就來了,我們要如何在LV FPGA中實現(xiàn)一個靠譜的濾波器功能呢?
第一步:創(chuàng)建項目
創(chuàng)建任何一個具有FPGA終端的設(shè)備和LV 項目。本文中利用cRIO 9036為例。注:本文中所有內(nèi)容均可以利用仿真模式實現(xiàn),包括FPGA中的濾波器算法,讀者可以在沒有硬件資源的情況下模擬本文中的操作。實際體會IP CORE的使用。
第二步:生成濾波器系數(shù)文件“.coe”
在LabVIEW范例查找器中搜索:coe。并將:Export FIR Coefficients to Xilinx COE File.vi添加至項目的“我的電腦”終端下方,以待后續(xù)使用。(Coe是指coefficient,也就是系數(shù)。在Xilinx FIR濾波器中分為很多階數(shù),每一階都對應(yīng)一個系數(shù)。所以這個文件是用來存放濾波器系數(shù)的。)
這個vi的作用是用于后續(xù)生成Xilinx IP Core的配置過程中所需要用到的一個系數(shù)文件,其中的系數(shù)定義了濾波器的通帶,阻帶和采樣率等信息。
打開這個vi,可以看到前面板上需要配置相關(guān)的使用信息,紅圈圈出的兩個部分是vi正常運行的必須文件,剛開始使用的時候,讀者只需要在操作系統(tǒng)中創(chuàng)建兩個空白的文件就可以了。
切換到程序框圖,并雙擊打開紅圈處的Express VI,它的作用是幫助用戶快速設(shè)計濾波器。
Express VI配置界面:
在這個界面里,需要對濾波器的采樣率,通帶信息,阻帶信息等進行配置。本文以一個通帶為500kHz~1MHz,阻帶為0~250kHz,1.25MHz以上的濾波器為例。紅圈中顯示配置相關(guān)信息,綠圈中為生成濾波器的階數(shù)也是系數(shù)個數(shù)。右邊兩幅圖是所配置濾波器的頻域響應(yīng)圖和零點極點分布圖。完成配置后,運行該vi,會生成一個coe文件,可用記事本打開,看到里面有生成的濾波器系數(shù)。以待后續(xù)使用。
第三步:在LV FPGA中配置及使用Xilinx FIR濾波器IP Core
創(chuàng)建如圖所示的兩個FIFO,用于將濾波前的數(shù)據(jù)傳給FPGA,將濾波后的數(shù)據(jù)傳回給上位機。
下圖中所示為本項目中的FPGA程序,紅圈處為本文的主角:Xilinx FIR IP Core??梢钥吹?,圖中所示為7.2版本,因為此硬件中使用的是Xilinx K7系列FPGA,若為V5系列FPGA,程序中為5.0版本。配置和使用大同小異,本文不再贅述。綠圈處是SCTL的循環(huán)時鐘源,推薦配置為與濾波器采樣頻率一致,簡化后續(xù)使用。
圖中FIFO與IP CORE的數(shù)據(jù)傳輸由“四線握手”實現(xiàn)有效數(shù)據(jù)的順利傳輸,可參閱相關(guān)文檔。
在下圖所示位置可以找到Xilinx FIR IP Core
放到程序框圖上后,雙擊對其進行配置。
點擊Configure Xilinx IP,會打開Xilinx Vivado Customize IP環(huán)境。對濾波器進行配置
1)在Filter Options中,選擇在第二步中生成的coe文件,vivado會自動加載文件內(nèi)部信息。紅圈處顯示檢測到的系數(shù)個數(shù),左側(cè)Frequency Response窗口中顯示濾波器的頻率響應(yīng)。
2)在Channel Specification中,為濾波器配置采樣率和時鐘頻率,都配值為之前預設(shè)的值10MHz。(筆者自己嘗試過200MHz的采樣率和時鐘,這個IP也是可以工作的)
3)在Implementation頁面中,coefficient options不需要用戶修改,其系數(shù)信息直接從coe文件中讀取得出。下方紅圈住是輸入數(shù)據(jù)的設(shè)置及輸出數(shù)據(jù)的精度設(shè)置,也就是說你希望給濾波器提供什么數(shù)據(jù)類型,希望濾波器返回什么數(shù)據(jù)精度的結(jié)果。這里指的是Xilinx IP端的配置,后續(xù)還會講到LabVIEW FPGA與Xilinx IP的接口配置,二者必須匹配,否則結(jié)果有錯誤。
在此,我們將輸入數(shù)據(jù)配置為帶符號的16位整形(I16),輸出配置為截取小數(shù)部分后的整數(shù)結(jié)果(17位整數(shù),0位小數(shù))。
4)最后,在Summary 頁面會顯示你之前所做的所有配置,可以稍作記錄,以備后續(xù)使用。
點擊OK,Vivado需要一些時間來配置IP CORE。并且在項目所在的文件夾下方生成專用于存放此次生成的Xilinx IP CORE相關(guān)文件的文件夾。若后續(xù)需要移植代碼至別處,必須將這個文件夾內(nèi)的所有內(nèi)容一同移植,否則LabVIEW FPGA中的節(jié)點將無法執(zhí)行。
至此,Xilinx Vivado方面的配置完成,點擊下一步,對LabVIEW FPGA接口進行配置。
在Page 2中為節(jié)點配置時鐘信號,選擇如下圖中所示的aclk,這個時鐘資源來自于剛才配置的Xilinx IP CORE。
下一步,再下一步,可以看到如下界面:
此處是配置Xilinx IP CORE與LabVIEW FPGA接口的頁面,一定要與之前的設(shè)置配置為相同情況,否則你很難找到這個錯誤發(fā)生的地方,筆者是前車之鑒。
那么輸入數(shù)據(jù)配置為I16,輸出數(shù)據(jù)由于已經(jīng)是17位整數(shù),在LabVIEW中自動匹配為24位FXP。注意此處一定要記得之前配置的小數(shù)精度,比如0位小數(shù)的話,此處整數(shù)字長還是24位。如果小數(shù)位2位的話,此處整數(shù)字長應(yīng)為22位。正確配置如下:
點擊完成,IP節(jié)點配置完成。
最終程序如圖,注意雙向FIFO的數(shù)據(jù)類型需要配置為匹配濾波器數(shù)據(jù)類型,以免發(fā)生數(shù)據(jù)強制轉(zhuǎn)換,帶來錯誤的隱患。
第四步:測試濾波器性能
如下圖所示,設(shè)計上位機程序,驗證濾波器性能。
提供給FPGA一段多頻率疊加的原始信號(采樣率設(shè)置為10MHz),運行程序以后,返回的數(shù)據(jù)如下圖所示:
可見,經(jīng)過濾波器之后,原始數(shù)據(jù)僅有500kHz的頻率成分被留下來,顯示在右邊的圖中。
讀者可以根據(jù)不同濾波器的配置來更改輸入信號的頻率成分,驗證濾波器的性能。