Xilinx FIR IP核的的使用及延時問題

前一段時間一直在研究通信系統,必然就會和各種濾波器打交道,同樣也遇到了一些問題。比如說本文的主要內容,濾波器的延時問題。

在生成濾波器IP核之前需要產生抽頭係數,這個抽頭係數的階數是自己設定的,階數越高代表濾波器乘累加運算越多,但是階數大小的選擇要看是否滿足自己的設計要求(例如衰減db是否滿足要求)。同時,生成的濾波器抽頭係數的值是與自己設計濾波器的各種參數確定的,如數據採樣速率,通帶截止頻率、阻帶起始頻率(低通)、濾波器類型等。

這些抽頭係數可以用MATLAB生成,MATLAB中有一個FDATool的工具,以圖形化的方式供使用者產生所需的濾波器,然後將係數導出(以coe格式),這樣我們在ISE中新建FIR IP核之後就可以直接導入剛剛產生的抽頭係數表,非常方便。

下面直接開始用MATLAB生成抽頭係數表:

1、利用 matlab 的 FDATool,產生需要的濾波器係數,打開【FDATool】



2、濾波器參數設置


注意: 

Order數=濾波器階數-1

儘量設計偶數階濾波器,偶數階濾波器乘法器利用率高。


3、濾波器係數量化


一般量化位數在12-16之間,量化位數越低乘法器消耗的資源越少,需要設計者權衡資源與精度。對於FIR Compiler,他使用的是DSP48 slices,經測試14位輸入時16位量化位數與16位量化位數消耗相同資源,應選擇16位係數。(至於爲什麼消耗相同的資源,是因爲FPGA內部的DSP48E1硬核乘法器是25*18的,所以無論是16位還是14位都會佔用一個DSP)。


4、導出量化係數點擊【file -> export】


點擊【Export】,即可把數據導入fcf文件,保存後用UltraEdit打開即可。



5、如果使用IP core則將16進制數拷貝生成coe文件;


如果使用乘法/加法器則直接將數據在代碼中生成parameter。

注意:由於FIR的對稱性,parameter的數量爲(階數+1)/2。



FIR Compiler生成:

1. 看圖說話,基於s6FIRk7與其設計方式相同都是5.0版本




2. 1左邊的部分是通帶阻帶設計如圖通帶0.0-0.5pi,阻帶0.5-1.0pi(顯然,低通濾波器是2pi爲週期關於pi對稱,所以只需要設計0pi的部分

例如,濾波器參數80MSPS,通帶0-3.75MHz阻帶8-40MHz,那麼通帶參數0.0-0.09375pi,阻帶參數0.2-1.0pi

2改成coe形式,然後找到coe文件,用“show”檢查濾波器係數

注意:IP核生成後不能更coe文件coe文件數據不能更改,拷貝到其他目錄下或者其他電腦內都會導致IP核失效。

解決辦法是刪除IP重建,並且需要在ipconfig文件夾內手動刪除文件。

3時鐘頻率與輸入採樣數據速率。輸出數據速率與輸入採樣數據速率相等。時鐘頻率指的是提供給FIR工作的時鐘頻率,該參數影響複用,也就是影響DSP的複用。





3、 1濾波器係數設置,一般都是有符號數,寬度參見coe文件

2輸入輸出設置,一般都是有符號數,輸出數據選擇全精度輸出,在FIR模塊外面再用assign代碼截位,這樣截位可控



4. 一般選擇優化目標爲area,節約資源。



5. 生成

 點擊generate就可以了

濾波器輸出截位設置與測試:

 濾波器截位調整的主要目的是使得輸入峯峯值接近最大量程的正弦波時經過該濾波器能夠產生峯峯值接近最大量程的輸出正弦波,這樣做的目的是濾波器輸出的精度最大化。








好了,上面講了濾波器係數的產生及ISE中生成FIR IP核的方法,下面講一個問題,就是濾波器延時的問題。

在FPGA工程中調用FIR IP核,把係數文件導進去,輸入進FIR  IP核的數據速率爲2.5k,採樣速率爲10k,FIR工作時鐘爲50M。接着用Chipscope抓取數據時發現第一個送進濾波器的數據會延時11ms輸出,直接上圖。第一張圖是輸入濾波器數據,第二張圖是濾波器輸出數據





後來查了一下FIR的datasheet,發現裏面確實有這個延時相關的信息,數據手冊上說這個延時其實可以直接在生成IP核的最後一頁的Summary中看到。。。。。。

打開IP核後確實有這一項,而且數值也爲11ms



在數據手冊中也解釋了這個時延是FIR 的initial startup latency (初始化啓動時延)



就是說FIR會有一個初始化的時間,初始化完成後纔開始正常工作,而這個時延的大小與濾波器的參數有關,即濾波器階數、通道數、係數是否對稱,時延是這些參數的一個函數,但是沒有給出計算公式。所以只能理解這個時延究竟是什麼。。。。。。

這裏還有一個時延的說明,貼個圖




翻譯:

FIR的時延週期個數是階數、濾波器類型、通道個數及係數是否對稱的函數。時延週期個數指的是從RFD失效(表明一個DIN引腳數據已經被採樣到)到RDY引腳有效(表明濾波器輸出一個有效的數據)。

當輸入數據速率與 ip core的工作時鐘一樣的時候,RFD信號引腳在每一個週期都不會失效。同樣對於單數據速率濾波器,RDY引腳也一直保持有效(就是說當工作時鐘與採樣時鐘相等時,每一個時鐘週期輸出的數據都是有效的)。在這種情況下,週期延時個數就表示輸入到FIR的採樣數據到這個數據輸出時需要經過的週期個數。

對於那些將FIR配置成具有多通道抽取或內插功能的情況,IP 核就會包含一些採樣的緩衝器,這些緩衝器會產生延時,延時個數與緩衝器的大小有關。此時延時週期個數表示的是從輸入的最後一個採樣數據的RFD信號失效(表明輸入數據已經接收)到RDY信號的有效(輸出數據有效)。


先寫這麼多吧,以後如果遇到問題再補充。

發佈了34 篇原創文章 · 獲贊 92 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章