微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA设计实例--基于FPGA的FIR滤波器

FPGA设计实例--基于FPGA的FIR滤波器

时间:10-02 整理:3721RD 点击:

方案一:QuartusII中的IP核。但是FIR IP没有破解,放弃。
方案二:用纯硬件描述语言搭建。
基本上分为MAC(乘积累加结构)和DA(分布式结构)。


MAC中具体结构有:
直接型FIR滤波器结构。利用FIR系数对称性特点,先对相应值相加,再做乘积运算,最后累加。该进措施可以是加上流水线结构。
实例:(参考自《EDA技术与Verilog设计》王金明编著)8KHZ采样率,8Bit输入,8Bit输出,11阶低通滤波器,fL=3.4KHZ。利用MATLAB得到滤波器系数,采用SD编码。Tips:SD(signed digit numbers有符号数字量),通过SD编码可以降低非零元素的数量。SD编码数字值域{1,0,-1},-1用1上面加“-”表示。
代码如下:

  1. module Fir02
  2. (
  3.     input clk,
  4.     input [7:0] x,
  5.     output reg [15:0] y
  6. );

  7. reg [7:0] tap0,tap1,tap2,tap3,tap4,tap5,tap6,tap7,tap8,tap9,tap10;
  8. reg [7:0] t0,t1,t2,t3,t4,t5;
  9. reg [15:0] sum;

  10. always @(posedge clk)
  11.     begin
  12.         t0<=tap5;
  13.         t1<=tap4+tap6;
  14.         t2<=tap3+tap7;
  15.         t3<=tap2+tap8;
  16.         t4<=tap1+tap9;
  17.         t5<=tap0+tap10;
  18.          
  19.         sum<=    (t1<<4)
  20.                 +{t1[7],t1[7:1]}
  21.                 +{t1[7],t1[7],t1[7:2]}
  22.                 +{t1[7],t1[7],t1[7],t1[7:3]}
  23.                  
  24.                 -(t2<<3)
  25.                 -(t2<<2)
  26.                 +t2
  27.                 -{t2[7],t2[7],t2[7:2]}
  28.                  
  29.                 +(t3<<2)
  30.                 +t3
  31.                 +{t3[7],t3[7],t3[7:2]}
  32.                 +{t3[7],t3[7],t3[7],t3[7],t3[7:4]}
  33.                 +{t3[7],t3[7],t3[7],t3[7],t3[7],t3[7:5]}
  34.                  
  35.                 -t4
  36.                 -{t4[7],t4[7:1]}
  37.                 -{t4[7],t4[7],t4[7],t4[7:3]}
  38.                  
  39.                 +{t5[7],t5[7:1]}
  40.                 -{t5[7],t5[7],t5[7],t5[7],t5[7],t5[7:5]}
  41.                  
  42.                 +(t0<<7)
  43.                 -((t0<<2)<<2)
  44.                 -(t0<<2)
  45.                 +{t0[7],t0[7:1]}
  46.                 +{t0[7],t0[7],t0[7:2]}
  47.                 +{t0[7],t0[7],t0[7],t0[7],t0[7:4]};
  48.                  
  49.         tap10<=tap9;
  50.         tap9<=tap8;
  51.         tap8<=tap7;
  52.         tap7<=tap6;
  53.         tap6<=tap5;
  54.         tap5<=tap4;
  55.         tap4<=tap3;
  56.         tap3<=tap2;
  57.         tap2<=tap1;
  58.         tap1<=tap0;
  59.         tap0<=x;
  60.          
  61.         y<={sum[15],sum[15],sum[15],sum[15],sum[15],sum[15],sum[15],sum[15:7]};
  62.     end

  63. endmodule

复制代码







很不错

已经下载,存档,慢慢看!谢谢

没太看懂!求解释

学习中~~

慢慢看看……

不错

dddddddddddddddddddddddddd

这个有难度, 分享简单一点的就最好啦!

谢谢分享

感谢小编的无私奉献

不错

谢谢分享!

不错,正找呢!

不错,不过代码虽简单,但是没有讲什么滤波器原理。不过对于通信类专业同学来说,基本上应该是知道的。

l请问你有用全串行DA算法做过FIR,求交流!

不错,可惜我没有学

谢谢

好东西

真心需要

好东东

谢谢大神。

xuexi                        

调试的效果怎么样呢?

学习!

小编无私!

;=这个符号和<=这两个运算符有啥区别?求高手解答
我把那个代码编译了一下,不成功啊,小编求解。

感谢小编的分享

学习学习,小编有做过FPGA自适应滤波器的实现吗,求共享啊

好东西,谢谢分享

这代码怎么全是语法错误,小编出来解释下

好,顺便赚个积分

不错,可惜我没有学

复制下来了,谢谢小编吧

谢谢分享~

正在学习中,不知道什么时候能做个这个出来。

不错不错不错不错

dddddddddddddddddddddddddddddddddddd

代码是不是有问题?里面的lt是什么变量?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top