1、基于FPGA的FIR数字滤波器设计1、 FPGA技术简介现场可编程门阵列FPGA是80年代末开始使用的大规模可编程数字IC器件,它充分利用EDA技术进行器件的开发与应用。用户借助于计算机不仅能自行设计自己的专用集成电路芯片,还可在计算机上进行功能仿真和时序仿真,及时发现问题,调整电路,改进设计方案。这样,设计者不必动手搭接电路、调试验证,只需短时间内在计算机上操作即可设计出与实际系统相差无几的理想电路。而且,FPGA器件采用标准化结构,体积小、集成度高、功耗低、速度快,可无限次反复编程,因此成为科研产品开发及其小型化的首选器件,其应用极为广泛。3.1 FPGA工作原理FPGA采用了逻辑单元阵列
2、LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输入输出模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPLD器件)相比,FPGA具有不同的结构。FPGA利用小型查找表(161RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互
3、相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。3.2 FIR滤波器特点1)采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。2)FPGA可做其它全定制或半定制ASIC电路的中试样片。3)FPGA内部有丰富的触发器和I/O引脚。4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。5) FPGA采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼
4、容。同时,FPGA还存在以下五大优势。1)性能:利用硬件并行的优势,FPGA打破了顺序执行的模式,在每个时钟周期内完成更多的处理任务,超越了数字信号处理器(DSP)的运算能力。 著名的分析与基准测试公司BDTI,发布基准表明在某些应用方面,FPGA每美元的处理能力是DSP解决方案的多倍。2在硬件层面控制输入和输出(I/ O)为满足应用需求提供了更快速的响应时间和专业化的功能。2)上市时间:尽管上市的限制条件越来越多,FPGA技术仍提供了灵活性和快速原型的能力。 用户可以测试一个想法或概念,并在硬件中完成验证,而无需经过自定制ASIC设计漫长的制造过程。3由此用户就可在数小时内完成逐步的修改并进
5、行FPGA设计迭代,省去了几周的时间。 商用现成(COTS)硬件可提供连接至用户可编程FPGA芯片的不同类型的I/O。 高层次的软件工具的日益普及降低了学习曲线与抽象层,并经常提供有用的IP核(预置功能)来实现高级控制与信号处理。3)成本:自定制ASIC设计的非经常性工程(NRE)费用远远超过基于FPGA的硬件解决方案所产生的费用。 ASIC设计初期的巨大投资表明了原始设备制造商每年需要运输数千种芯片,但更多的最终用户需要的是自定义硬件功能,从而实现数十至数百种系统的开发。 可编程芯片的特性意味着用户可以节省制造成本以及漫长的交货组装时间。 系统的需求时时都会发生改变,但改变FPGA设计所产生
6、的成本相对ASCI的巨额费用来说是微不足道的。4)稳定性:软件工具提供了编程环境,FPGA电路是真正的编程“硬”执行过程。 基于处理器的系统往往包含了多个抽象层,可在多个进程之间计划任务、共享资源。 驱动层控制着硬件资源,而操作系统管理内存和处理器的带宽。 对于任何给定的处理器内核,一次只能执行一个指令,且基于处理器的系统时刻面临着严格限时的任务相互取占的风险。 而FPGA不使用操作系统,拥有真正的并行执行和专注于每一项任务的确定性硬件,可减少稳定性方面出现问题的可能。5)长期维护:正如上文所提到的, FPGA芯片是现场可升级的,无需重新设计ASIC所涉及的时间与费用投入。 举例来说,数字通信
7、协议包含了可随时间改变的规范,而基于ASIC的接口可能会造成维护和向前兼容方面的困难。 可重新配置的FPGA芯片能够适应未来需要作出的修改。 随着产品或系统成熟起来,用户无需花费时间重新设计硬件或修改电路板布局就能增强功能。可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。2、 FIR数字滤波器实验结果之前的simulink仿真与matlab程序仿真仅仅是证明了算法是正确的,接下来我们需要把这个算法用Verilog HDL语言写出来,用modelsim仿真程序,用Signaltap II看输出波形。该部分的verilog HDL代码如下:module FIR ( input
8、 clk_1M, input reset_n, input 7:0 datain, /ADC的采样数据,无符号 output 7:0 dataout /滤波后给DAC的数据);parameter signed COEF0 = 12d3;parameter signed COEF1 = -12d2;parameter signed COEF2 = -12d11;parameter signed COEF3 = 12d23;parameter signed COEF4 = 12d17;parameter signed COEF5 = -12d100;parameter signed COEF6 =
9、 12d61;parameter signed COEF7 = 12d520;parameter signed COEF8 = 12d520;parameter signed COEF9 = 12d61;parameter signed COEF10 = -12d100;parameter signed COEF11 = 12d17;parameter signed COEF12 = 12d23;parameter signed COEF13 = -12d11;parameter signed COEF14 = -12d2;parameter signed COEF15 = 12d3; reg
10、 signed 8:0 shift_buf0;/第一级延时寄存器reg signed 8:0 shift_buf1;/第二级延时寄存器reg signed 8:0 shift_buf2;/第三级延时寄存器reg signed 8:0 shift_buf3;/第四级延时寄存器reg signed 8:0 shift_buf4;/第五级延时寄存器reg signed 8:0 shift_buf5;/第六级延时寄存器reg signed 8:0 shift_buf6;/第七级延时寄存器reg signed 8:0 shift_buf7;/第八级延时寄存器reg signed 8:0 shift_bu
11、f8;/第九级延时寄存器reg signed 8:0 shift_buf9;/第十级延时寄存器reg signed 8:0 shift_buf10;/第十一级延时寄存器reg signed 8:0 shift_buf11;/第十二级延时寄存器reg signed 8:0 shift_buf12;/第十三级延时寄存器reg signed 8:0 shift_buf13;/第十四级延时寄存器reg signed 8:0 shift_buf14;/第十五级延时寄存器reg signed 8:0 shift_buf15;/第十六级延时寄存器reg signed 9:0 add_0_15; reg si
12、gned 9:0 add_1_14; reg signed 9:0 add_2_13; reg signed 9:0 add_3_12; reg signed 9:0 add_4_11; reg signed 9:0 add_5_10; reg signed 9:0 add_6_9; reg signed 9:0 add_7_8; reg signed 21:0 mul1;reg signed 21:0 mul2;reg signed 21:0 mul3;reg signed 21:0 mul4;reg signed 21:0 mul5;reg signed 21:0 mul6;reg sig
13、ned 21:0 mul7;reg signed 21:0 mul8;reg signed 29:0 add;always (posedge clk_1M or negedge reset_n)begin if (!reset_n) begin shift_buf0 = 9d0; shift_buf1 = 9d0; shift_buf2 = 9d0; shift_buf3 = 9d0; shift_buf4 = 9d0; shift_buf5 = 9d0; shift_buf6 = 9d0; shift_buf7 = 9d0; shift_buf8 = 9d0; shift_buf9 = 9d
14、0; shift_buf10= 9d0; shift_buf11= 9d0; shift_buf12= 9d0; shift_buf13= 9d0; shift_buf14= 9d0; shift_buf15= 9d0; end else begin shift_buf0 = 1b0,datain; shift_buf1 = shift_buf0; shift_buf2 = shift_buf1; shift_buf3 = shift_buf2; shift_buf4 = shift_buf3; shift_buf5 = shift_buf4; shift_buf6 = shift_buf5;
15、 shift_buf7 = shift_buf6; shift_buf8 = shift_buf7; shift_buf9 = shift_buf8; shift_buf10= shift_buf9; shift_buf11 = shift_buf10; shift_buf12 = shift_buf11; shift_buf13 = shift_buf12; shift_buf14 = shift_buf13; shift_buf15 = shift_buf14; endendalways (posedge clk_1M or negedge reset_n)begin if (!reset
16、_n) begin add_0_15 = 10d0; add_1_14 = 10d0; add_2_13 = 10d0; add_3_12 = 10d0; add_4_11 = 10d0; add_5_10 = 10d0; add_6_9 = 10d0; add_7_8 = 10d0; end else begin add_0_15 = shift_buf0 + shift_buf15; add_1_14 = shift_buf1 + shift_buf14; add_2_13 = shift_buf2 + shift_buf13; add_3_12 = shift_buf3 + shift_
17、buf12; add_4_11 = shift_buf4 + shift_buf11; add_5_10 = shift_buf5 + shift_buf10; add_6_9 = shift_buf6 + shift_buf9; add_7_8 = shift_buf7 + shift_buf8; endendalways (posedge clk_1M or negedge reset_n)begin if (!reset_n) begin mul1 = 22d0; mul2 = 22d0; mul3 = 22d0; mul4 = 22d0; mul5 = 22d0; mul6 = 22d
18、0; mul7 = 22d0; mul8 = 22d0; end else begin mul1 = COEF0 * add_0_15; mul2 = COEF1 * add_1_14; mul3 = COEF2 * add_2_13; mul4 = COEF3 * add_3_12; mul5 = COEF4 * add_4_11; mul6 = COEF5 * add_5_10; mul7 = COEF6 * add_6_9; mul8 = COEF7 * add_7_8; endend always (posedge clk_1M or negedge reset_n)begin if
19、(!reset_n) add = 30d0; else add =0) ? add10 :0;endmodule同时,通过modelsim来仿真最终的结果,Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调试提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。Modelsim软件中用来编写代码的工具是Testbench, Tes
20、tbench本身可以看做一个模块或者设备,和你用户编写的模块进行通信。通过Testbench模块向待测模块输出信号作为激励,同时接收从待测模块输出的信号来查看结果。依照上述的Verilog代码,编写Testbench,基本代码如下:timescale 1ns/1psmodule FIR_TB;reg clk_1M;reg reset_n;reg 7:0 datain;reg 7:0 memery8191:0;wire 7:0 dataout;integer j;FIR u1( .clk_1M(clk_1M), .reset_n(reset_n), .datain(datain), .datao
21、ut(dataout);initialbegin reset_n=0; clk_1M=0; #100 reset_n=1;end always #50 clk_1M=clk_1M;initialbegin $readmemh(original.dat,memery); for(j=0;j8192;j=j+1) begin datain=memeryj; (posedge clk_1M); if (j = 8191) j=0; end end endmodule最终仿真出来的波形如下:图2.11 仿真结果最终的仿真结果与前面matlab的结果一样,这也就验证了整体方案的成熟度。3、 总结与展望本
22、系统介绍了基于FPGA的FIR数字滤波器的基本原理以及实现,明确好所需要设计的FIR数字滤波器滤波器后,首先对其进行性能需求分析,明确FIR数字滤波器系统应该达到的各种性能指标,其次,拟定多种滤波器类型,对这些方案采用Matlab进行仿真,在这个过程中我们有许多的窗函数选择和设计方法选择,进行综合分析和比较,选择出最佳的滤波器类型作为本设计方案,然后依据其性能指标编写Matlab程序,确定二阶节系数。或者直接进行Verilog语言的编写。最终结果显示,整体系统已经正常运行。4、 参考文献1Ryszard Bis,Dorota Dobrowolska. Diameter increment of
23、 silver fir ( Abies alba Mill.) in the Iecka ForestJ. Forest Research Papers,2012,73(3).2Maciej Pach. The influence of admixture and co-dominant species on the height and DBH of silver fir ( Abies alba Mill.) and on the growing stock of fir stands in the Carpathian Forest-Natural RegionJ. Forest Res
24、earch Papers,2010,71(3).3Szabolcs Hajdu,Sndor Tihamr Brassai,Iuliu Szekely. FPGA based angular stabilization of a quadcopterJ. MACRo 2015,2017,2(1).4仲玲利,周晓波. 基于FPGA的SDRAM控制器设计开发J. 电路与系统,2014,03(01).5张春龙,李德超,张玉环. 基于BP神经网络的高阶FIR多阻带滤波器优化设计J. 电力与能源进展,2014,02(01).6石兰洁,高诗简,黄曦,原豪杰,周铁戈. 基于FPGA的Logistic方程混沌信
25、号加密实现J. 电路与系统,2013,02(03).7付国新,侍昌江. 基于FPGA数据采集与共享的两种记录方式并存的电力系统录波器研制J. 输配电工程与技术,2012,01(02).8任小强,陈金鹰,吴蓉,李文彬. 基于FPGA和WiFi技术的电子鞭炮系统设计J. 软件工程与应用,2014,03(04).9李俊. FIR数字滤波器的设计与实现J. 建模与仿真,2013,02(04).10Ying-Shieh Kung,Nguyen Vu Quynh,Nguyen Trung Hieu,Chung-Chun Huang,Liang-Chiao Huang. Simulink/Modelsim
26、Co-Simulation and FPGA Realization of Speed Control IC for PMSM DriveJ. Procedia Engineering,2011,23.11Das,Li,Nayak,Assaf,Petriu,Biswas. Circuit Architecture Test Verification Based on Hardware Software Co-design with ModelSimJ. IETE Journal of Research,2013,59(2).12Sunil Das,Jun-Feng Li,Amiya Nayak
27、,Mansour Assaf,Emil Petriu,Satyendra Biswas. Circuit Architecture Test Verification Based on Hardware Software Co-design with ModelSimJ. IETE Journal of Research,2013,59(2).13赵庆亮. 基于DSP的自动平衡控制理论与方法研究D.北京化工大学,2012.14孙科林. 基于多核DSP的实时图像处理平台研究D.电子科技大学,2012.15张方正. 高速光通信中数字信号处理(DSP)与波形产生技术研究D.北京邮电大学,2013.1
28、6李振涛. 高性能DSP关键电路及EDA技术研究D.国防科学技术大学,2007.17董秀洁,杨艳,周游.FPGA/CPLD选型与设计优化J.化工自动化及仪表,2009,36(03):60-63.18屈星,唐宁,严舒,杨白.基于FPGA的IIR数字滤波器的设计与仿真J.计算机仿真,2009,26(08):304-307+348.19耶晓东.基于Matlab的IIR数字滤波器设计及DSP实现J.电子设计工程,2011,19(09):175-177.20周耀辉,王芸波,朱维新,张玉仲,武焕舟.IIR数字滤波器设计J.电力自动化设备,2010,30(09):129-131.21王春玲,吴顺伟.FPGA/CPLD选型及与其他技术的融合J.现代电子技术,2007(16):30-33+40.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1