- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分布式FIR数字滤波器设计
VLSI结课设计报告
分布式算法FIR滤波器
学院:
班级:
姓名:
学号:
指导老师:
一、设计目的
1.熟悉FPGA设计基本方法
2.掌握用Verilog语言设计一个数字滤波器
二、设计原理与方法
目前FIR滤波器的实现方法有三种:利用单片通用数字滤波器集成电路、DSP器件和可编程逻辑器件实现。单片通用数字滤波器使用方便,但由于字长和阶数的规格较少,不能完全满足实际需要。使用DSP器件实现虽然简单,但由于程序顺序执行,执行速度必然不快。FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好。但长期以来,FPGA一直被用于系统逻辑或时序控制上,很少有信号处理方面的应用,其原因主要是因为在FPGA中缺乏实现乘法运算的有效结构。现在这个问题得到了解决,使FPGA在数字信号处理方面有了长足的发展。
(1)
输入数据x[n]可以采用B+1位补码来表示,即
(2)
因为系数h为已知常数,则内积y可以写成:
(3)
将式(3)中的第二部分展开,重新分别求和,这也是“分布式算法”名称的由来,可以得到:
(4) 这样就可以将式(3)化简为
(5)
计算h[n]xb[n],就是用查找表实现一个映射,然后再将此映射经过相应的二次幂加权,最后即可得到滤波器的输出。
分布式FIR的实现结构
图1给出了分布式FIR滤波器最直接的实现结构,虚线为流水线寄存器。对于小位宽的数据来讲,Da算法不仅速度快,而且所占用的芯片资源也很少。
图1 移位加法DA结构
对于式(4)括号中的每一个乘积项都代表了输入变量的某一位与常量的二进制“与”操作,加号代表了算术和操作,指数因子对括号中的值加权。如果事先构造一个查找表,该表储存了括号中所有可能的组合值,就可以通过所有输入变量相对应的组合向量(xb[N-1], xb[N-2], … ,xb[0])对该表进行寻址。该表结构如表1所示。
表1 构造规则
在LUT实现分布式算法是,由于LUT的规模随着N的增加而呈指数增加,如果滤波器系数N过多,则查表的规模十分庞大。为了减小规模,可以利用部分表计算。由于FIR滤波器是线性滤波器,因此低阶滤波器输出可以相加,由此定义一个高阶滤波器的输出。例如,可以把16输入的查找表分割成4个并行的查找表,如图2所示。依次类推,可以将更大的LUT分割成多个小LUT。如果加上流水线,这一结构的改变并不会降低速度,却可以大大减小设计规模。
图2 简化规模的DA结构
三、FIR滤波器的具体设计方法
本设计是使用Verilog实现一个8阶对称系数的FIR滤波器,其系数分别是41,132,341,510,341,132,41。
该本滤波器的输入为12比特,先把相同系数对应的数据相加,输入到DA滤波器的数据经过符号位的扩展后变成13比特。这样可以看成是一个4阶的FIR滤波器,减小了构造表的复杂度。
设计程序:
module fir1(clk,reset,fir_in,fir_in_reg,fir_out,divfre_count_4b,divfre13_clk);
parameter S0=1d0; //初始状态
parameter S1=1d1; //处理状态
input clk;
input reset;
input[11:0]fir_in;
output[12:0]fir_out;
output[11:0]fir_in_reg;
output[3:0]divfre_count_4b;
output divfre13_clk;
reg[12:0]fir_out;
reg[11:0]fir_in_reg;
reg[12:0]shift_buf[7:0];
reg[12:0]add_buf[3:0];
//reg[12:0]state_shift_buf[4-1:0];
reg[12:0]state_shift_buf0;
reg[12:0]state_shift_buf1;
reg[12:0]state_shift_buf2;
reg[12:0]state_shift_buf3;
wire[3:0]table_4b;
wire[11:0]table_out_12b;
reg[12:0]sum;
reg STATE;
reg[3:0]divfre_count_4b;
reg di
原创力文档


文档评论(0)