前一段時(shí)間一直在研究通信系統(tǒng),必然就會(huì)和各種濾波器打交道,同樣也遇到了一些問(wèn)題。比如說(shuō)本文的主要內(nèi)容,濾波器的延時(shí)問(wèn)題。
在生成濾波器IP核之前需要產(chǎn)生抽頭系數(shù),這個(gè)抽頭系數(shù)的階數(shù)是自己設(shè)定的,階數(shù)越高代表濾波器乘累加運(yùn)算越多,但是階數(shù)大小的選擇要看是否滿足自己的設(shè)計(jì)要求(例如衰減db是否滿足要求)。同時(shí),生成的濾波器抽頭系數(shù)的值是與自己設(shè)計(jì)濾波器的各種參數(shù)確定的,如數(shù)據(jù)采樣速率,通帶截止頻率、阻帶起始頻率(低通)、濾波器類型等。
這些抽頭系數(shù)可以用MATLAB生成,MATLAB中有一個(gè)FDATool的工具,以圖形化的方式供使用者產(chǎn)生所需的濾波器,然后將系數(shù)導(dǎo)出(以coe格式),這樣我們?cè)贗SE中新建FIR IP核之后就可以直接導(dǎo)入剛剛產(chǎn)生的抽頭系數(shù)表,非常方便。
下面直接開(kāi)始用MATLAB生成抽頭系數(shù)表:
1、利用 matlab 的 FDATool,產(chǎn)生需要的濾波器系數(shù),打開(kāi)【FDATool】
2、濾波器參數(shù)設(shè)置
注意:
Order數(shù)=濾波器階數(shù)-1
盡量設(shè)計(jì)偶數(shù)階濾波器,偶數(shù)階濾波器乘法器利用率高。
3、濾波器系數(shù)量化
一般量化位數(shù)在12-16之間,量化位數(shù)越低乘法器消耗的資源越少,需要設(shè)計(jì)者權(quán)衡資源與精度。對(duì)于FIR Compiler,他使用的是DSP48 slices,經(jīng)測(cè)試14位輸入時(shí)16位量化位數(shù)與16位量化位數(shù)消耗相同資源,應(yīng)選擇16位系數(shù)。(至于為什么消耗相同的資源,是因?yàn)?a href="http://ttokpm.com/soft/data/30-91/" target="_blank">FPGA內(nèi)部的DSP48E1硬核乘法器是25*18的,所以無(wú)論是16位還是14位都會(huì)占用一個(gè)DSP)。
4、導(dǎo)出量化系數(shù)點(diǎn)擊【file -> export】
點(diǎn)擊【Export】,即可把數(shù)據(jù)導(dǎo)入fcf文件,保存后用UltraEdit打開(kāi)即可。
5、如果使用IP core則將16進(jìn)制數(shù)拷貝生成coe文件;
如果使用乘法/加法器則直接將數(shù)據(jù)在代碼中生成parameter。
注意:由于FIR的對(duì)稱性,parameter的數(shù)量為(階數(shù)+1)/2。
FIR Compiler生成:
1. 看圖說(shuō)話,基于s6的FIR,k7與其設(shè)計(jì)方式相同,都是5.0版本
2. (1)左邊的部分是通帶阻帶設(shè)計(jì),如圖通帶0.0-0.5pi,阻帶0.5-1.0pi。(顯然,低通濾波器是以2pi為周期關(guān)于pi對(duì)稱,所以只需要設(shè)計(jì)0到pi的部分)
例如,濾波器參數(shù)80MSPS,通帶0-3.75MHz,阻帶8-40MHz,那么通帶參數(shù)0.0-0.09375pi,阻帶參數(shù)0.2-1.0pi。
(2)改成coe形式,然后找到coe文件,用“show”檢查濾波器系數(shù)。
注意:IP核生成后不能更換coe文件,coe文件數(shù)據(jù)不能更改,拷貝到其他目錄下或者其他電腦內(nèi)都會(huì)導(dǎo)致IP核失效。
解決辦法是刪除IP核重建,并且需要在ipconfig文件夾內(nèi)手動(dòng)刪除文件。
(3)時(shí)鐘頻率與輸入采樣數(shù)據(jù)速率。輸出數(shù)據(jù)速率與輸入采樣數(shù)據(jù)速率相等。時(shí)鐘頻率指的是提供給FIR工作的時(shí)鐘頻率,該參數(shù)影響復(fù)用,也就是影響DSP的復(fù)用。
3、 (1)濾波器系數(shù)設(shè)置,一般都是有符號(hào)數(shù),寬度參見(jiàn)coe文件。
(2)輸入輸出設(shè)置,一般都是有符號(hào)數(shù),輸出數(shù)據(jù)選擇全精度輸出,在FIR模塊外面再用assign代碼截位,這樣截位可控。
4. 一般選擇優(yōu)化目標(biāo)為area,節(jié)約資源。
5. 生成
點(diǎn)擊generate就可以了
濾波器輸出截位設(shè)置與測(cè)試:
濾波器截位調(diào)整的主要目的是使得輸入峰峰值接近最大量程的正弦波時(shí)經(jīng)過(guò)該濾波器能夠產(chǎn)生峰峰值接近最大量程的輸出正弦波,這樣做的目的是濾波器輸出的精度最大化。
好了,上面講了濾波器系數(shù)的產(chǎn)生及ISE中生成FIR IP核的方法,下面講一個(gè)問(wèn)題,就是濾波器延時(shí)的問(wèn)題。
在FPGA工程中調(diào)用FIR IP核,把系數(shù)文件導(dǎo)進(jìn)去,輸入進(jìn)FIR IP核的數(shù)據(jù)速率為2.5k,采樣速率為10k,F(xiàn)IR工作時(shí)鐘為50M。接著用Chipscope抓取數(shù)據(jù)時(shí)發(fā)現(xiàn)第一個(gè)送進(jìn)濾波器的數(shù)據(jù)會(huì)延時(shí)11ms輸出,直接上圖。第一張圖是輸入濾波器數(shù)據(jù),第二張圖是濾波器輸出數(shù)據(jù)
后來(lái)查了一下FIR的datasheet,發(fā)現(xiàn)里面確實(shí)有這個(gè)延時(shí)相關(guān)的信息,數(shù)據(jù)手冊(cè)上說(shuō)這個(gè)延時(shí)其實(shí)可以直接在生成IP核的最后一頁(yè)的Summary中看到。。。。。。
打開(kāi)IP核后確實(shí)有這一項(xiàng),而且數(shù)值也為11ms
在數(shù)據(jù)手冊(cè)中也解釋了這個(gè)時(shí)延是FIR 的initial startup latency (初始化啟動(dòng)時(shí)延)
就是說(shuō)FIR會(huì)有一個(gè)初始化的時(shí)間,初始化完成后才開(kāi)始正常工作,而這個(gè)時(shí)延的大小與濾波器的參數(shù)有關(guān),即濾波器階數(shù)、通道數(shù)、系數(shù)是否對(duì)稱,時(shí)延是這些參數(shù)的一個(gè)函數(shù),但是沒(méi)有給出計(jì)算公式。所以只能理解這個(gè)時(shí)延究竟是什么。。。。。。
這里還有一個(gè)時(shí)延的說(shuō)明,貼個(gè)圖
翻譯:
FIR的時(shí)延周期個(gè)數(shù)是階數(shù)、濾波器類型、通道個(gè)數(shù)及系數(shù)是否對(duì)稱的函數(shù)。時(shí)延周期個(gè)數(shù)指的是從RFD失效(表明一個(gè)DIN引腳數(shù)據(jù)已經(jīng)被采樣到)到RDY引腳有效(表明濾波器輸出一個(gè)有效的數(shù)據(jù))。
當(dāng)輸入數(shù)據(jù)速率與 ip core的工作時(shí)鐘一樣的時(shí)候,RFD信號(hào)引腳在每一個(gè)周期都不會(huì)失效。同樣對(duì)于單數(shù)據(jù)速率濾波器,RDY引腳也一直保持有效(就是說(shuō)當(dāng)工作時(shí)鐘與采樣時(shí)鐘相等時(shí),每一個(gè)時(shí)鐘周期輸出的數(shù)據(jù)都是有效的)。在這種情況下,周期延時(shí)個(gè)數(shù)就表示輸入到FIR的采樣數(shù)據(jù)到這個(gè)數(shù)據(jù)輸出時(shí)需要經(jīng)過(guò)的周期個(gè)數(shù)。
對(duì)于那些將FIR配置成具有多通道抽取或內(nèi)插功能的情況,IP 核就會(huì)包含一些采樣的緩沖器,這些緩沖器會(huì)產(chǎn)生延時(shí),延時(shí)個(gè)數(shù)與緩沖器的大小有關(guān)。此時(shí)延時(shí)周期個(gè)數(shù)表示的是從輸入的最后一個(gè)采樣數(shù)據(jù)的RFD信號(hào)失效(表明輸入數(shù)據(jù)已經(jīng)接收)到RDY信號(hào)的有效(輸出數(shù)據(jù)有效)。
評(píng)論
查看更多