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