您现在的位置:首页 >> 通信 >> 内容

基于FPGA的低通滤波器,通过verilog实现并提供testbench测试文件

时间:2023/2/24 18:38:27 点击:

  核心提示:A411,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJWZlpdw

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览



3.算法概述

     FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。

4.部分源码

module xfilter(clk, rst, 

               i_valid_new_pixel,

               i_new_pixel,

               i_valid_lpos, 

               i_valid_cpos, 

               i_valid_rpos, 

               i_rowM,

               o_valid_filt,

               o_filt_pixel,

               o_colN,

               o_rowM

               );

parameter XB = 10;

parameter PB = 8;

 

input clk;

input rst;

input i_valid_new_pixel;

input [(PB + 2) - 1:0] i_new_pixel;

input i_valid_lpos;

input i_valid_cpos;

input i_valid_rpos;

input i_rowM;

 

output o_valid_filt;

output [PB - 1:0] o_filt_pixel;

output o_colN;

output o_rowM;

 

reg [(PB + 4) - 1:0] r_pixel_sum = 0;

reg [PB - 1:0] rr_pixel_sum = 0;

 

reg r_valid_lpos = 0;

reg r_valid_cpos = 0;

reg r_valid_rpos = 0;

 

reg r_valid_filt_pixel = 0;

reg rr_valid_cpos = 0;

 

reg r_valid_pixel_in = 0;

reg rr_valid_pixel_in = 0;

........................................................................

 

always @(posedge clk)

begin

  //read in pixel

  r_valid_lpos <= i_valid_lpos;

  r_valid_cpos <= i_valid_cpos;

  r_valid_rpos <= i_valid_rpos;

  rr_valid_cpos <= r_valid_cpos;

 

  r_colN <= i_valid_rpos;

  rr_colN <= r_colN;

  rrr_colN <= rr_colN;

 

  r_rowM <= i_rowM;

  rr_rowM <= r_rowM;

  rrr_rowM <= rr_rowM;

 

  if (rst)

    begin

      r_valid_pixel_in <= 0;

      rr_valid_pixel_in <= 0;

      r_valid_filt_pixel <= 0;

    end

  else

    begin

      r_valid_pixel_in <= c_valid_pixel_in;

      rr_valid_pixel_in <= r_valid_pixel_in;

      r_valid_filt_pixel <= rr_valid_pixel_in;

    end

 

  r_pixel2 <= c_pixel2;

end

 

wire [PB + 4 - 1: 0] c_pixel_sum = (rr_valid_cpos) ? r_pixel_sum + r_pixel2 + 8: r_pixel_sum + 8;

reg r_valid_new_pixel = 0; //needed to check if new row's data was added

//add filter

always @(posedge clk)

begin

  r_valid_new_pixel <= i_valid_new_pixel;

  if (r_valid_rpos)

  begin

    if (r_valid_new_pixel) //new data added to queue

      r_pixel_sum <= {c_pixel1, 1'd0} + c_pixel2;

    else

      r_pixel_sum <= {c_pixel0, 1'd0} + c_pixel1;

  end

  else

  begin

    r_pixel_sum <= c_pixel0 + {c_pixel1, 1'd0};

  end

 

  rr_pixel_sum <= c_pixel_sum[PB + 4 -1: 4];

end

 

//3 pixel buffer

queue PIXBUF (.clk(clk), 

              .i_valid_pixel(i_valid_new_pixel),

              .i_pixel(i_new_pixel),

              .o_pixel0(c_pixel0),

              .o_pixel1(c_pixel1), 

              .o_pixel2(c_pixel2)

             );

endmodule

 

module queue(clk, i_valid_pixel, i_pixel, o_pixel0, o_pixel1, o_pixel2);

parameter PB = 8;

.....................................................

endmodule

A411

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168