【文章內(nèi)容簡介】
濾波器的系數(shù)具有對稱性,分布式算法( DA算法)提出可將乘法去處轉(zhuǎn)換為移位相加,從而節(jié)約硬件資源,下面看乘積和公式: ? ? ? ? ? ?1 ( 3 2 )0Nny n h n x n? ??? ? 假設(shè) FIR系數(shù) h[n]已知。有符號的 x[n]可以用 B位的二進制補碼表示為: ? ? ? ? ? ?211 ( 3 3 )0( 2 ) 2BBbBbbx n x n x n?????? ? ? ? ?? 其中,最高位為符號位。將公式( 3)代入公式( 2),可得:()yn =[ 00( 0 ) ( 0 ) (1) (1)h x h x? ? ? 00.. . ( ) ( 1)] 2h n x n? ? ? ?+[ 1(0) (0)hx?h? 111(1 ) (1 ) ... ( 1 ) ( 1 ) ] 2x h n x n? ? ? ? ? ?+ 11[ ( 0) ( 0) (1 ) (1 ) .. .bbh x h x??? ? ? ( 1)hn?? 11 ( 3 4 )( 1)] 2 bbxn ????? 由上 式可知,分布式算法的實質(zhì)就是:將輸入變量的一個數(shù)據(jù)位和所有濾波器抽頭系數(shù) h[0]h[n1]的每一位進行 ? 與 ? 運算并求和,而指數(shù)部分則說明了求和結(jié)果的位權(quán),整數(shù)乘以 2^b就是左移 b位,對此可以通過硬件連線實現(xiàn),不占用邏輯資源。下面依據(jù)分布式算法,設(shè)計濾波器的步驟為: 1 求出濾波器系數(shù)。 2用 VHDL語言設(shè)計邏輯電路。 本文通過 MATLAB的 Fdatool軟件實現(xiàn)求得濾波器的系數(shù)。輸入數(shù)據(jù) X(n)為 16位,輸出 Y( n)為 16位的低通濾波器 ,設(shè)計方法為 FIR采用窗口法。濾 波器階數(shù)定為 16,窗口類型 Kaiser,Bete為 , Fs為48KHZ,Fc為 ,運行得到濾波系數(shù)如下: 17 對系數(shù)進行調(diào)整,同時將所有系數(shù)擴大 152 倍進行運算 。 VHDL實現(xiàn): 濾波器的結(jié)構(gòu)圖如下: X 0 [ 0 ] X 0 [ 1 ] X 0 [ 2 ] X 0 [ N 1 ]累 加 器 / 累 減 器移 們 寄 存 器* 2 ^ 1C L RD Q C L K Q ’S E T R O MR O M+ 圖 8 DA算法結(jié)構(gòu)圖 設(shè)計思想:構(gòu)造 16行的移位寄存器,每個移位寄存器能儲存 b(本文 b=16)個比特數(shù)據(jù),四個 4輸入的查找 表,加法器和寄存器。此圖目的是實現(xiàn) 4式,當一個時鐘上跳沿到來之后,移位寄存器向右移一位,同時 16個并行的移位寄存器分別進入查找表進行運算。經(jīng)查找表運算的 4個數(shù)據(jù)同時相加,通過累加器,在時鐘下跳沿到來時存入寄 18 存器并將寄存器里的數(shù)據(jù)乘以 12? 后進入累加器進行運算。直至 16個時鐘之后,所有數(shù)據(jù)運算完畢,經(jīng)過 latch2輸出的最后數(shù)據(jù)則為經(jīng)過濾波的數(shù)據(jù)。這樣可以通過建立查找表來實現(xiàn)上述運算,采用 DA算法的 FIR濾波器在具體實現(xiàn)時.可以采用一個查找表 LUT實現(xiàn)映射f(h(n), ()bxn)。預(yù)先設(shè)定的查找表 LUT接受輸入向量: ()bxn=[ (0)bx ,(1)bx , (2)bx , ?, ( 1)bxn? ],輸出為 f(h(n), ()bxn)。各個映射值都由相應(yīng)的二次冪加權(quán)并累加。利用相應(yīng)的移位加法 器就能夠有效地實現(xiàn)累加。在 K次 (K為采樣數(shù)據(jù)寬度。本文假設(shè)為 16位 )查詢循環(huán)后就完成了對內(nèi)積 y的計算。所以查找表的設(shè)計對濾波器的實現(xiàn)十分重要。假設(shè)本文設(shè)計的濾波器為 16階,照?分解級聯(lián)?的處理方式。查找表設(shè)計為四個 4輸入的 LUTs。查找表的總深度為 4x 42 =64。若用一個查找表.則深度為 162 =65536.可見前者極大地減小了查找表規(guī)模。下面就介紹此圖主要部分的設(shè)計思想。 移位寄存器的實現(xiàn) 本文一共需要 16個并行的相同的移位寄存器,此處以其中一個為例,寄存器的端口設(shè)定如下: p o r t ( a : i n s t d _ l o g i c _ v e c t o r ( 1 5 d o w n t o 0 ) 。 c l k : i n s t d _ l o g i c 。 c l r : i n s t d _ l o g i c 。 k : i n s t d _ l o g i c 。 r e a d y : i n s t d _ l o g i c 。 o u t p u t : o u t s t d _ l o g i c ) 。 其中 k信號是移位寄存器的讀入信號, ready信號是寄存器的輸出使能信號。移位寄存器的主要功能:當時鐘上跳沿到來后,寄存器整體向右移一位。基于此設(shè)計代碼如下: p r o c e s s ( c l k , c l r , t )b e g i ni f ( c l r = 39。 1 39。 o r t = 1 5 ) t h e no u t p u t = 39。 0 39。 。b = ( o t h e r s = 39。 0 39。 ) 。t = 0 。e l s i f ( c l k 39。 e v e n t a n d c l k = 39。 1 39。 ) t h e ni f ( k = 39。 1 39。 ) t h e nb = a 。e n d i f 。i f ( r e a d y = 39。 1 39。 a n d k = 39。 0 39。 ) t h e no u t p u t = b ( 0 ) 。b ( 1 4 d o w n t o 0 ) = b ( 1 5 d o w n t o 1 ) 。t = t + 1 。e n d i f 。e n d i f 。e n d p r o c e s s 。 其 RTL圖如下 : 19 +A [ 4 . . 0 ]B [ 4 . . 0 ]A D D E RD QP R EE N AC L RDE N AQP R EC L R=A [ 4 . . 0 ]B [ 4 . . 0 ]E Q U A LDE N AQP R EC L RD QP R EE N AC L RSELD A T A AD A T A BO U T 0M U X 2 1SELD A T A AD A T A BO U T 0M U X 2 1A d d 05 39。 h 0 1 b [ 1 4 . . 0 ]b [ 1 5 ]o u t p u t ~r e g 0p ro ce s s _ 0 ~1t [ 4 . . 0 ]b ~[ 2 9 . . 1 5 ]cl kcl rkre a d yo u t p u ta [ 1 5 . . 0 ]p ro ce s s _ 0 ~0Eq u a l 05 39。 h 0 F b ~[ 1 4 . . 0 ] 圖 9 移位寄存器的 RTL圖 查找 表的實現(xiàn) 以其中一個查找為例:S E L [ 3 . . 0 ]D A T A [ 1 5 . . 0 ]O U TM U XS E L [ 3 . . 0 ]D A T A [ 1 5 . . 0 ]O U TM U XS E L [ 3 . . 0 ]D A T A [ 1 5 . . 0 ]O U TM U XS E L [ 3 . . 0 ]D A T A [ 1 5 . . 0 ]O U TM U XM u x 01 6 39。 h 1 2 2 2 M u x 11 6 39。 h 1 2 6 2 t a b l e _ i n [ 3 . . 0 ]t a b l e _ o u t [ 3 . . 0 ]M u x 21 6 39。 h 7 F A 6 M u x 31 6 39。 h E 6 3 C 圖 10 查找表的 RTL圖 設(shè)計的查找表輸入 4位,輸出為采樣值和濾波系數(shù)的乘積。 ROM 中參數(shù)的設(shè)定如表 2所示:對于系數(shù) h0— h3可以做一張類似的查找表 , 20 ROM 中參數(shù)的設(shè)定如表 1示: 查找表輸入 查找表輸出 查找表輸入 查找表輸出 0000 0 1000 h(0) 0001 h(3) 1001 h(0)+h(3) 0010 h(2) 1010 h(0)+h(2) 0011 h(2)+h(3) 1011 h(0)+h(2)+h(3) 0100 h(1) 1100 h(0)+h(1) 0101 h(1)+h(3) 1101 h(0)+h(1)+h(3) 0110 h(1)+h(2) 1110 h(0)+h(1)+h(2) 0111 h(1)+h(2)+h(3) 1111 h(1)+h(2)+h(3)+h(4) 表 1 查找表中參數(shù)設(shè)定 其代碼如下: p r o c e s s ( t a b l e _ i n )b e g i nc a s e t a b l e _ i n i sw h e n 0 0 0 0 = t a b l e _ o u t = 0 。w h e n 0 0 0 1 = t a b l e _ o u t = 2 。w h e n 0 0 1 0 = t a b l e _ o u t = 3 。w h e n 0 0 1 1 = t a b l e _ o u t = 1 。w h e n 0 1 0 0 = t a b l e _ o u t = 1 。w h e n 0 1 0 1 = t a b l e _ o u t = 1 。w h e n 0 1 1 0 = t a b l e _ o u t = 4 。w h e n 0 1 1 1 = t a b l e _ o u t = 2 。w h e n 1 0 0 0 = t a b l e _ o u t = 2 。w h e n 1 0 0 1 = t a b l e _ o u t = 1 。w h e n 1 0 1 0 = t a b l e _ o u t = 3 。w h e n 1 0 1 1 = t a b l e _ o u t = 2 。w h e n 1 1 0 0 = t a b l e _ o u t = 2 。w h e n 1 1 0 1 = t a b l e _ o u t = 3 。w h e n 1 1 1 0 = t a b l e _ o u t = 3 。w h e n 1 1 1 1 = t a b l e _ o u t = 1 。w h e n o t h e r s = t a b l e _ o u t = 0 。e n d c a s e 。 寄存器的實現(xiàn) 本文一共設(shè)計了兩個寄存器, latch1的作用是在低電平到來時存儲累加器輸出的數(shù)據(jù),并輸出,將數(shù)據(jù)反饋回累加器參與運算。latch2的作用是輸出最后濾波得到的數(shù)據(jù)(在圖 5中沒有畫 latch2)。latch1具體工作過程 。當時鐘下跳沿到來時,寄存器儲存從累加器輸出的數(shù)據(jù),并輸出,經(jīng)過 mul(此模塊的作用是將輸入的數(shù)據(jù)減半輸出)反回累加器進行運算。其 RTL結(jié)構(gòu)如下: D QP R EE N AC L Rl a t c h _ o u t [ 5 . . 0 ] ~ re g 0c l kc l rl a t c h _ i n [ 5 . . 0 ] l a t c h _ o u t [ 5 . . 0 ] 21 圖 11 latch 1 RTL圖 其關(guān)鍵代碼如下: p r o c e s s ( c l k , c l r )b e g i ni f ( c l r = 39。 1 39。 ) t h e n l a t c h _ o u t = 0 。e l s i f ( c