找回密码
 注册
关于网站域名变更的通知
查看: 327|回复: 1
打印 上一主题 下一主题

利用RAM构建平滑窗口滤波方法

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-5-24 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    利用RAM构建平滑窗口滤波方法
    + m) j3 e9 t9 d( p. @' d. h. B9 K/ K6 G

    ; z( q1 @0 K- V/ v7 p
    # A1 K. J2 S9 F3 i" Z# v6 }1 O6 J滑动窗口滤波是一种很好滤波方法。这种方法不影响数据的实效性,每个数据都与前面一段数据相关联,这样瞬间峰值或毛刺对下一个数据影响较小。
    ! u. f0 E, i$ U/ h  Z1 h# G! }% v. f. ^9 H
      在FPGA数据处理中,如果大量数据需要进行滑动滤波,如果定义寄存器来设计上面的算法,务必消耗大量的逻辑资源,影响FPGA中其他逻辑功能的实现。为了节省逻辑资源,考虑使用RAM来进行数据存储和移动,是一种不错的的方法。) f+ o3 m& L! \9 q( s

    2 |0 |7 N) }6 n5 l  利用RAM完成平滑窗口滤波,需要考虑RAM的消耗的时间,在数据处理中,我们通常需要延迟最小,数据越实时越好。RAM 读写过程中,读通常耗时较多,一个读数据操作通常需要4个时钟来完成,而一个写操作仅需要一个时钟完成。为了节省时间,考虑使用流水线方法来处理数据,仅对RAM所有数据操作一次完成数据平滑。6 }: C4 j5 G( D% k2 Z' ?
    7 A+ K# X0 d) t) o5 a
    程序如下:* X9 h" `0 \! A. m8 S* L! d5 L! B

    2 `. [, L2 L) s-----RAM 调用# \: Q2 Q$ ?/ I! d0 }( Q
    Svg_Vol_Ins: lpm_Ram4096_16
    ' ~" D. q7 }* [# h1 R4 s PORT MAP
    0 T0 a/ k  ]; q: N$ b' a (
    5 o0 D! L! E, I  clock=>In_Clkmain,
    . }5 e. h1 R( }! J' I# U! W  j  data=>Svg_Vol_Wr_Data16,
    2 T$ s1 N! l5 H  rdaddress_a=>Svg_Vol_Rd_Addr12,  E' U$ v: {' D* W
      rdaddress_b=>x"000",5 L3 B) k6 P2 G- M/ p2 |
      wraddress=>Svg_Vol_Wr_Addr12,
    ( o  A4 S2 x0 {# }. E  wren=>'1',
    0 _# i& E8 @5 ]# U" V  B/ q7 x  qa=>Svg_Vol_Rd_Data16
    , }3 |2 Y5 e% _  d- S/ n  --qb  : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
    " f+ A8 T  B7 j+ G" \% V );' I% d, R, d- t' S) V
    - [# I: f" Y; x; `
    if (D_Temp=x"01") then  
    * K: s- F1 I: o# R       D_Update<='0'; . b! T' T% Y; K' k( H
           D_Updata<='0';3 w8 x8 v( v* S! p0 l
           if (M_State='1') then                  F& ~- S/ F; p& E: R
             D_Temp<=x"02";
    % V# f  @2 S& V- F5 S-------RAM 地址初始化-------------------------   
    ' @  A8 r) g# E/ S+ Q! X         D_Svg_Vol<=Svg_Vol_Cal(15 downto 0);  W+ D# c  d. c& }  J( W
             Svg_Vol_Rd_Addr12<=x"1fe";
    / \0 l$ ]( c- q% F* Z* m( l         Svg_Vol_Wr_Addr12<=x"200";% m$ ^/ @7 J0 B+ o, @8 w: _; H
             Svg_Vol_Sum<=(others=>'0');# d' N; e0 y$ F0 f2 q: C6 c
           end if;   
    ' a/ \& Q( L/ ?) P! Z) D  belsif (D_Temp=x"02") then
    ! H) U* I) F4 L5 `--------移动数据到RAM 地址从次高位到最高位------
    1 [# H7 v8 P# B# M7 i       Svg_Vol_Rd_Addr12<=Svg_Vol_Rd_Addr12-'1';( m! @# h2 Y! F
           D_Temp<=x"03";                2 F. k" A! C+ f( t4 x7 ~
    elsif (D_Temp=x"03") then
    0 D2 f" @8 i4 s: ^--------移动数据到RAM 地址从次高位到最高位------
    " H0 m8 v: z$ q$ M* i0 F" I       Svg_Vol_Rd_Addr12<=Svg_Vol_Rd_Addr12-'1';
    3 g" v6 }7 Y3 V* E5 ~       D_Temp<=x"04";        1 ?2 D1 M/ W* g! B+ m' O
    elsif (D_Temp=x"04") then   
    + c( [( S# I( ]3 S) P( L: ^: B" w) @-------数据流水线操作----------------------------     
    * f8 o) ^1 Q  O  x% V9 n        Svg_Vol_Rd_Addr12<=Svg_Vol_Rd_Addr12-'1';         3 {$ o: [/ G) ?7 N( f
            Svg_Vol_Wr_Data16<=Svg_Vol_Rd_Data16;
    : `$ Y9 }  F% X  ~        Svg_Vol_Sum<=Svg_Vol_Sum+Svg_Vol_Rd_Data16;+ Y/ l  f: P  N! S
            Svg_Vol_Wr_Addr12<=Svg_Vol_Wr_Addr12-'1';  
    4 b0 L! V6 O* i) L' y6 R! A        if (D_Cnt=x"01fe") then        3 E, w) d: M6 V; d7 d& f: U& s
                D_Temp<=x"07";  
    5 c# Y# _# [9 Z- {" `' V        else
    " t2 x3 o8 G; h            D_Cnt<=D_Cnt+'1';                                    
    ; a3 A+ e. H. S7 u- q       end if;
    ; i2 H* d7 ?6 Kelsif (D_Temp=x"07") then
    6 l/ O* W; W* U# @      Svg_Vol_Wr_Data16<=Svg_Vol_Cal(15 downto 0);/ _6 T5 w  J" Z7 V4 @9 _2 [
          Svg_Vol_Sum<=Svg_Vol_Sum+Svg_Vol_Cal(15 downto 0);
    8 p! w0 o2 X2 z6 Y6 H+ [; }      Svg_Vol_Wr_Addr12<=Svg_Vol_Wr_Addr12-'1';# `' _3 g9 V$ p7 ^4 f! T
          D_Temp<=x"08";, v" c( i$ K4 ?" ?: g
    elsif (D_Temp=x"08") then   
    ! Z' F) @+ P* D7 H+ W, j3 Q      D_Svg_V_M(29 downto 0)<=Svg_Vol_Sum(26 downto 9)*x"6ee";
    7 m; C* u$ i7 m9 u  |3 `* l* m$ F( b      D_Temp<=x"01";
    ) m" `  J( A" ~! [else. p+ ?, g- d$ O+ ]" `( u9 q+ n
          D_Temp<=x"00";
    / E  P' l( O, r1 xend if;
    7 p0 S6 U1 l3 C  g: J: X# V+ R$ o! M" M5 m. x: c

    该用户从未签到

    2#
    发表于 2019-5-24 18:31 | 只看该作者
    有代码就很棒
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-9 15:55 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表