保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

基于FPGA的四阶IIR数字滤波器


算速度。需要注意的是,MAX+plusⅡ的LPM库中乘法运算为无符号数的阵列乘法,所以使用时需要先将两个补码乘数转换为无符号数相乘后,再将乘积转换为补码乘积输出。每个二阶节完成一次运算共需要6个时钟周期,而且需采用各自独立的MAC实现两级流水线结构,即每个数据经过两个二阶节输出只需要6个时钟周期。
  
  2.1系统原理框图
  
  系统原理框图如图2所示,模拟信号经过TLC5510转换为00H~FFH的二进制数后,送入四阶IIR低通滤波器,处理后输出10位二进制数送AD7520得到双极性的模拟电压输出。
  
  图3四阶IIR滤波器的顶层原理图
  
  2.2顶层IIR模块
  
  顶层IIR模块如图3所示。主要由一个时序控制模块IIRC、两个IIR二阶节模块(IIR1和IIR2)构成。IIR模块设计为10位二进制补码输入,最高位ad9为补码符号位,次高位ad8用于防止运算时的溢出。可见该IIR模块实际可以输入9位二进制补码数,但TLC5510的输出数据为8位,输入到IIR模块时,将ad9和ad8引脚均接地,即输入为正极性电压。
  
  clr输入端为异步清零端,高电平有效。当输入时钟clk为12MHz时,IIR模块产生一个频率为2MHz的clk_ad输出时钟提供给TLC5510。输出数据dout为10位二进制补码。IIR1和IIR2模块构成级联结构。
  
  2.3IIR1和IIR2模块
  
  IIR1、IIR2模块主要由两个模块构成,一个是数据移位模块,在CLK_R时钟作用下将差分方程的各x、y值延迟一个时钟;另一个模块是补码乘加单元,用VHDL语言编写,两个乘数先取补后再进行阵列乘法,在CLK_B时钟控制下完成一次乘加运算,乘积取补后输出,共需要6个时钟。
  
  差分方程的各系数如表2所示,采用10位定点纯小数补码表示。
  
  表2二阶差分方程的系数
  
  系数a0a1a2b0b1IIR101CH3E6H01CH194H35BHIIR203FH393H03FH1C6H31CH
  另外?熏模块中的五个系数定义为常数,以节省硬件资源,并且采用0舍1入法进行数据处理,尽量提高数据运算精度。VHDL程序如下:
  
  entitysmultadd1is
  
  port(clk_regbt,clk_reg:instd_logic:
  
  x0,x1,x2,y0,y1:instd_logic_vector(9downto0);
  
  yout:outstd_logic_vector(9downto0));
  
  endsmultadd1;
  
  architecturebehavofsmultadd1is
  
  signaltan,tbn,tp2n:std_logic;
  
  signalcnt:std_logic_vector(2downto0);
  
  signalta,tb,taa,tbb:std_logic_vector(8downto0);
  
  signaltmpa,tmpb:std_logic_vector(9downto0);
  
  signaltp:std_logic_vector(18downto0);
  
  signaltpp:std_logic_vector,22downto0);
  
  signalytmp,p:std_logic_vector(23downto0);
  
  constanta0:std_logic_vector(9downto0:=“0000011100”
  
  (其余常数说明略)
  
  begin
  
  tp2n<=tanxortbn;--求补后送阵列乘法器
  
  taa<=notta+‘1’when(tan=‘1’)elseta;
  
  tbb<=nottb+‘1’when(tbn=‘1’)elsetb;
  
  tpp<=‘1’&‘1’&‘1’&‘1’&nottp+‘1’when(tp2n=‘1’)elsetp;
  
  tmpa<=a0whencnt=0else
  
  a1whencnt=1else
  
  a2whencnt=2else
  
 

《基于FPGA的四阶IIR数字滤波器(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/166451.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。