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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

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

    # t4 y7 k" v5 Z' A/ o: \* }9 ?8 b4 W7 r3 P% g  @

    2 f' S; a: |( l1 N) u3 P% Y8 i8 G滑动窗口滤波是一种很好滤波方法。这种方法不影响数据的实效性,每个数据都与前面一段数据相关联,这样瞬间峰值或毛刺对下一个数据影响较小。$ D. B* v- \# B8 s
    . I  ^$ y$ X* L/ ~
      在FPGA数据处理中,如果大量数据需要进行滑动滤波,如果定义寄存器来设计上面的算法,务必消耗大量的逻辑资源,影响FPGA中其他逻辑功能的实现。为了节省逻辑资源,考虑使用RAM来进行数据存储和移动,是一种不错的的方法。6 ~4 I# b, }/ W: T& C: J* I5 K
    + |# {  D8 u2 c: n$ {* g* W
      利用RAM完成平滑窗口滤波,需要考虑RAM的消耗的时间,在数据处理中,我们通常需要延迟最小,数据越实时越好。RAM 读写过程中,读通常耗时较多,一个读数据操作通常需要4个时钟来完成,而一个写操作仅需要一个时钟完成。为了节省时间,考虑使用流水线方法来处理数据,仅对RAM所有数据操作一次完成数据平滑。2 o( Q+ _1 d1 M) e2 W2 c

    $ _1 e: U& F0 l8 J* w程序如下:  U3 a0 {; K7 e3 j6 u# k

    . M1 F; p, x) p6 l-----RAM 调用
    4 `* W7 n6 N, s" u6 S4 hSvg_Vol_Ins: lpm_Ram4096_16 0 S9 L2 s2 ~' G
    PORT MAP. F' Q4 [8 {4 V3 r" t
    (9 X7 q& l( y+ L- p$ z+ Z. q% z
      clock=>In_Clkmain,
    % U8 U6 M. e- t& {/ C  data=>Svg_Vol_Wr_Data16,3 ]" C5 `, ^& O& O/ ]
      rdaddress_a=>Svg_Vol_Rd_Addr12,
    4 V$ `% w# m7 t" H, {4 @0 Q  rdaddress_b=>x"000",% D5 y# F; R$ A/ x1 }
      wraddress=>Svg_Vol_Wr_Addr12,5 p  ]& ^% o, X5 R% A3 W1 C
      wren=>'1',
    . h0 D: o0 I0 e. @: [  qa=>Svg_Vol_Rd_Data16/ y4 l/ E! @" n0 H# W. ^* b$ j
      --qb  : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)  W( I3 I1 I2 K- P
    );
    1 v8 g% q# G, w2 K8 {
    : E" x' ?+ |& d0 ` if (D_Temp=x"01") then  
    9 k. a  |- I9 Q9 \$ {       D_Update<='0';
      R: R. x) E, ]" \       D_Updata<='0';
    7 w% b+ J, q5 {3 h       if (M_State='1') then               
    ; h8 q2 d( k& \( ?: h, v         D_Temp<=x"02";9 u. b# c/ C0 D! ^
    -------RAM 地址初始化-------------------------   7 E, m9 Z! c6 }0 Z1 J  t
             D_Svg_Vol<=Svg_Vol_Cal(15 downto 0);
    7 V" r, _# Y5 M# b- i2 r         Svg_Vol_Rd_Addr12<=x"1fe";( f3 ^( X5 }) E6 C1 Q
             Svg_Vol_Wr_Addr12<=x"200";
      n! H9 [9 }6 ?1 ]) @6 U4 s  Q         Svg_Vol_Sum<=(others=>'0');% B9 x: a% ]$ v& Q
           end if;   
    1 C  K* B! z2 n! H0 [elsif (D_Temp=x"02") then3 e  T6 I# h5 d6 m' b" X  H, T
    --------移动数据到RAM 地址从次高位到最高位------
    0 N9 n5 L" R) O, `2 L& }, F       Svg_Vol_Rd_Addr12<=Svg_Vol_Rd_Addr12-'1';  K6 ?3 M' H' \! C4 j
           D_Temp<=x"03";               
    3 E6 Z( c; j0 Y: @& ~% D7 _* M* Zelsif (D_Temp=x"03") then  z! Z+ g* Z. N: K
    --------移动数据到RAM 地址从次高位到最高位------
    ' G4 @3 X" \3 x0 o5 x2 x       Svg_Vol_Rd_Addr12<=Svg_Vol_Rd_Addr12-'1';
    : v" J/ O/ G& f4 ~# n! V       D_Temp<=x"04";        / d# ~2 Q0 k" e
    elsif (D_Temp=x"04") then   
    9 p- P( B% m* G5 y% k7 m" D- F" n6 e0 b8 |-------数据流水线操作----------------------------     
    : J0 S* Y! g4 B2 ]1 a% F        Svg_Vol_Rd_Addr12<=Svg_Vol_Rd_Addr12-'1';         
    : \+ E' u0 ^# |' c* X6 k0 _6 A        Svg_Vol_Wr_Data16<=Svg_Vol_Rd_Data16;
    + J0 q) M9 {" U, f8 d! i) z/ C        Svg_Vol_Sum<=Svg_Vol_Sum+Svg_Vol_Rd_Data16;
    3 C* ]! v' R# E3 Q7 }8 w# _        Svg_Vol_Wr_Addr12<=Svg_Vol_Wr_Addr12-'1';  " _) f6 F$ {" K9 W0 O9 e$ u
            if (D_Cnt=x"01fe") then        
    ! a. d8 V2 B: q& @" ?: c( B/ t            D_Temp<=x"07";  1 |/ z$ Z% d+ L& \$ [
            else
    : f; z6 U$ `0 }7 t' g            D_Cnt<=D_Cnt+'1';                                    
    / m- r  u; a# f& a       end if;
    " X8 Q6 Z1 J$ a; ]& Nelsif (D_Temp=x"07") then * b, z* x: f# Z# F9 x
          Svg_Vol_Wr_Data16<=Svg_Vol_Cal(15 downto 0);
    : D- o; }9 _8 C$ A! J, P      Svg_Vol_Sum<=Svg_Vol_Sum+Svg_Vol_Cal(15 downto 0);/ u( ]8 S; w+ ?2 N$ I
          Svg_Vol_Wr_Addr12<=Svg_Vol_Wr_Addr12-'1';
    ) k" n+ [# E# q0 S: Z/ @      D_Temp<=x"08";
    0 m  E, E8 ?- T. w9 ~  Oelsif (D_Temp=x"08") then     l2 ^* j) d0 B
          D_Svg_V_M(29 downto 0)<=Svg_Vol_Sum(26 downto 9)*x"6ee";
    1 M1 j6 V, z% G9 @3 G# r      D_Temp<=x"01";
    . _  ^; q+ R; P0 Q7 v% Y% Welse: `3 B3 W( Z, L9 P$ J! R
          D_Temp<=x"00";
    2 q2 j0 T' b% i* Qend if;+ e5 |0 B0 s, ]2 \" C, Q
    ' N" v9 F" O$ T

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-11 20:19 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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