2679|3

6892

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

滑动滤波函数FPGA实用程序 [复制链接]

滑动滤波函数FPGA实用程序,对输入数据进行滑动滤波,可以减少干扰信号带来的影响。本实用程序设计上取4096个点进行滑动滤波,采样周期可以自行设定或修改。程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_signed.all;
entity get_filter is
 port
   (
     clk: in std_logic;
     rst: in std_logic;  
     clk1ms: in std_logic;   
     data: in std_logic_vector(15 downto 0);
     filter_result: out std_logic_vector(15 downto 0)
   --  get_filter_state:buffer std_logic_vector(3 downto 0)
   );
end get_filter;
architecture arch_get_filter of get_filter is
component  altsyncram
 generic (
  operation_mode      : string;
  width_a        : natural;
  widthad_a       : natural;
  width_b        : natural;
  widthad_b       : natural;
  width_byteena_a      : natural;
  outdata_reg_b      : string;
  address_reg_b      : string;
  rdcontrol_reg_b      : string;
  read_during_write_mode_mixed_ports  : string;
  init_file       : string
 );
 port
  (
   wren_a   : in   std_logic ;
   clock0   : in   std_logic ;
   clock1   : in   std_logic ;
   address_a  : in   std_logic_vector (widthad_a-1 downto 0);
   address_b  : in   std_logic_vector (widthad_b-1 downto 0);
   rden_b   : in   std_logic ;
   q_b    : out std_logic_vector (width_b-1 downto 0);
   data_a   : in   std_logic_vector (width_a-1 downto 0)
   );
 end component;
 signal sum: std_logic_vector(31 downto 0);
 signal get_filter_wraddr: std_logic_vector(11 downto 0);
 signal get_filter_rdaddr:std_logic_vector(11 downto 0);
 signal get_filter_rd,get_filter_wr: std_logic;
 signal get_filter_wrdata: std_logic_vector(15 downto 0);
 signal get_filter_rddata: std_logic_vector(15 downto 0);
 signal get_filter_state: std_logic_vector(3 downto 0);
      begin
 -------all rx data  buffer---------------------------------------
get_filter_ram : altsyncram
 generic map
 (
  operation_mode       => "dual_port",
  width_a               => 16,
  widthad_a        => 12,
  width_b               => 16,
  widthad_b        => 12,
  width_byteena_a             => 1,
  outdata_reg_b       => "unregistered",
  address_reg_b       => "clock1",
  rdcontrol_reg_b             => "clock1",
  read_during_write_mode_mixed_ports  => "old_data",
  init_file       =>"E:\JstHvfZkSoft\wavesim\get_pf.mif"
 )
 port map (
  wren_a         => get_filter_wr,     
  clock0         => clk,
  clock1         => clk,         
  address_a        => get_filter_wraddr, 
  address_b        => get_filter_rdaddr,    
  rden_b         => get_filter_rd,          
  data_a         => get_filter_wrdata,   
  q_b         => get_filter_rddata           
 );
 process(clk,rst)
 begin
 if (rst='0') then
      get_filter_wraddr<=(others=>'1');
      get_filter_rdaddr<=(others=>'0');
      get_filter_wrdata<=(others=>'0'); 
      get_filter_rd<='0';
      get_filter_wr<='0';  
      get_filter_state<=(others=>'0');
 elsif clk'event and clk='1' then
     if (get_filter_state="0000") then
          sum<=(others=>'0');
          get_filter_rd<='1';
          get_filter_rdaddr<=get_filter_rdaddr+'1';
          get_filter_state<="0001";
     elsif (get_filter_state="0001") then
          get_filter_rdaddr<=get_filter_rdaddr+'1';
          get_filter_state<="0010";  
     elsif (get_filter_state="0010") then
         get_filter_wr<='1';
         get_filter_wraddr<=get_filter_wraddr+'1';
         if (get_filter_rdaddr/=x"fff")then
         get_filter_rdaddr<=get_filter_rdaddr+'1';
         end if;
         get_filter_wrdata<=get_filter_rddata;
         sum<=sum+(get_filter_rddata(15)& get_filter_rddata(15)&get_filter_rddata(15)&get_filter_rddata(15)
         &get_filter_rddata(15)&get_filter_rddata(15)&get_filter_rddata(15)&get_filter_rddata(15)&get_filter_rddata);
     ---    filter_result<=get_filter_rddata;    -----used in test!
         if (get_filter_wraddr=x"ffd") then
               get_filter_state<="0011";
               get_filter_rd<='0';
         end if;
      elsif (get_filter_state="0011") then
         sum<=sum+(data(15)& data(15)&data(15)&data(15)
         &data(15)&data(15)&data(15)&data(15)&data);
     ---    filter_result<=data;                -----used in test!
         get_filter_rdaddr<=(others=>'0');
         get_filter_wraddr<=get_filter_wraddr+'1';
         get_filter_wrdata<=data;   
         get_filter_state<="0100";
        
      elsif (get_filter_state="0100") then
        filter_result<=sum(27 downto 12);
        -- if (clk1ms='1') then
             get_filter_state<="0000";
       --  end if;
      else
            get_filter_state<="0000";
      end if;
      end if;
   end process;
   end arch_get_filter;
此帖出自FPGA/CPLD论坛

最新回复

这个代码让人头疼的很  详情 回复 发表于 2012-5-21 22:25
点赞 关注
 

回复
举报

547

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
一看到代码就头有点疼
此帖出自FPGA/CPLD论坛
个人签名嵌入式培训www.51great.org
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

那你要看啥

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(初级)

4
 
这个代码让人头疼的很
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表