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

交流有效值FPGA实用程序(很实用)

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    交流有效值FPGA实用程序(很实用)

    & M" t! F; w0 z" g% G0 z% o5 l  [3 D; V, B! }
    clk: 系统时钟;rst:复位信号: x1 H. k$ h* Q
    clk1us: 对交流信号采样的时钟;8 G% n  y  o/ I
    pulse: 交流信号过零方波5 d2 o6 v6 d  R5 l+ i4 l$ }
    data: 正弦输入数据
    & G) B" \  j  v/ g4 L- L$ _rms_div:在一个周期按采样间隔取样数据所求的和
    ! u# s& V9 x! ]0 ~  O7 D: qrms_by:在一个周期按采样间隔累加数据和值8 v4 S! s# H0 x; {5 k) H# o3 j

    * J6 l' f! @! G- n" F交流信号的RMS=(rms_div/rms_by)x1.1
    ' b- d9 W8 a( V+ @* s8 B$ i: a% }/ G: i6 K7 n4 L" H# O
    library ieee;: b2 v3 N. i2 D! y- \% ~7 \, x- y
    use ieee.std_logic_1164.all; * q# f3 ~/ `" R
    use ieee.std_logic_arith.all;
    % G" o$ J- Z# H4 iuse ieee.std_logic_signed.all;& B  a: I+ j, s8 h; q9 ]( [+ m
    entity get_rms is4 e' t1 u# M* `1 y, M
    port9 C4 e2 d3 i8 I3 p. j- |
       ($ {' E' H) o* _" |1 E; ~0 c
         clk:    in std_logic;, z0 i" d% g0 f9 m7 v2 e
         rst:    in std_logic;
    & {! s. q2 K5 u' r. U     clk1us: in std_logic;  
    & w1 c1 j- @( k' O: l7 {    -- fre    :in std_logic;   1 J' ?& J$ D. V! e' n0 f* m
         pulse : in std_logic;3 K/ y! `' j# o/ d
         data:   in std_logic_vector(15 downto 0);
    , M4 E" Z  [: U. h. d8 e     rms_div:    out std_logic_vector(31 downto 0);/ I6 k# I* J, y- r  c/ J
         rms_by :     out std_logic_vector(15 downto 0)
    2 h+ {8 n' t& g/ \5 o8 A    );, K6 E& x" M2 r1 O( [
    end get_rms;
    $ V' T2 x  d4 V& X0 harchitecture arch_get_rms of get_rms is- }0 i5 ?7 e8 f* w, ?6 h5 k
    ---------computer low fre-5HZ, max vol 16384V-------------
    5 y& w) Z/ }+ K2 J" E8 hsignal pulse_reg : std_logic;
    - {9 I  O% N, B  G  B/ _signal get_rms_state:std_logic_vector(2 downto 0);" p  d2 S+ @% r4 A' z. e/ L
    signal rms_sum:std_logic_vector(31 downto 0);    ' o. A. F3 O& @# \
    signal rms_cnt: std_logic_vector(15 downto 0);- Z! m4 w# I7 a1 {0 b
    signal cnt:std_logic_vector(4 downto 0);
    & P! E" F* G5 a% j2 b
    1 }0 l! n* F. ?; n. O  b$ [$ A4 Y. Lbegin
    ) \9 D* x- I! i0 m. |2 [# Q5 cprocess(clk,rst)2 P4 [" J" x2 D3 ]
    begin
    3 p/ V" N8 ^( y- hif (rst='0') then- }1 H; G3 l: l: F2 ]& Z7 R' o
      pulse_reg<='0';
    $ @% p% o+ G( V7 w$ h9 R2 K% J' b  get_rms_state<="000";" T( m  S) k0 B# A4 B
      rms_cnt<=(others=>'0');) P) V! [& o. ^! ~% I. }" d
      rms_sum<=(others=>'0');
    0 @- y% W9 T6 ^( J2 O9 G1 `  rms_div<=(others=>'0');" ]# \1 b! e% n$ q# e. E3 _
      rms_by<=(others=>'1');
    8 {, z. g. m# p& P& u6 Delsif clk'event and clk='1' then6 h; ^4 \1 M; t; F! V( O1 ~, ~
       pulse_reg<=pulse;
    , B3 U) D. b( ]- A- Q+ }6 k4 |  if (get_rms_state="000") then
      d2 R. U# v4 Q" r      if (pulse_reg='0') and (pulse='1') then
    ) {. [. g) L1 F! _. y/ C, M            get_rms_state<="001";
    / o! y& q) R, n; o      else
    % D& Y* {7 T# W' I3 z1 |           get_rms_state<="010";7 J8 l# Y* b- y' u4 W) q+ S
          end if;+ l8 ^! A  ]3 a: M
      elsif (get_rms_state="010") then
    % P! U  T4 Z2 U2 T7 N; c( J     if (data(15)='0') then
    ' s$ t8 }- U+ c. \6 T9 F         rms_sum<=rms_sum+(data(15)&data(15)&data(15)&data(15)&data(15)&data(15)&data(15)&data(15)&data);; Q2 e! N7 s7 e: ]8 A/ P4 i
         elsif (data(15)='1') then
    . @8 ?6 o6 L: v0 ?+ F" Y        rms_sum<=rms_sum+(x"0000"-(data(15)&data(15)&data(15)&data(15)&data(15)&data(15)&data(15)&data(15)&data));. b0 L6 k0 `8 F5 W
         end if;  K+ s9 ~/ U3 C3 ~0 i) {# P+ x
         rms_cnt<=rms_cnt+x"0001";& O: X) c. ?  @1 _2 K8 P5 e2 W8 `+ u1 q- M
         get_rms_state<="011";- a. w; Z* H, E) U
    elsif (get_rms_state="011") then
    7 @! J# L, M2 H4 M4 b- c5 I   ------200% m$ q5 u- E9 j9 c* ~
         if (cnt="11111") then     ----32 us  ------
    ) V8 J2 h  \6 q1 P" U  W! x          cnt<="00000";
    * |9 F  Z& M& J. U0 l! ~          get_rms_state<="000";, @+ {8 A- B3 H/ U) n& ?$ ~; {0 H
         elsif (clk1us='1') then/ r) {! p! p$ _
             cnt<=cnt+"00001";
    6 G8 m4 P! j6 g- Y7 S) P. K# K     end if;
    4 {) \) o. J6 l elsif (get_rms_state="001") then
    ( |% h) I/ [* r- J2 A        rms_div<=rms_sum;
    0 Z& |; h% C9 z5 Z- q) B* X        rms_by<=rms_cnt;
    : \% [% f' t0 f7 Z        get_rms_state<="100";
    7 q8 J" Z4 G# R) T+ a elsif (get_rms_state="100") then
    4 n0 s8 {1 s4 E9 k% F2 u4 F        rms_sum<=(others=>'0');
    3 I/ M7 F6 X  o0 {        rms_cnt<=(others=>'0');6 Y! @2 s% C. s2 @  K" `
            get_rms_state<="000";
    4 l0 h$ g  w) x: s( B else
    + j" h$ k9 D$ i" \% {( `8 ^        pulse_reg<='0';6 x! J1 X' B7 F& b. T& X- a
            get_rms_state<="000";
    ! P/ h, q5 N  Q/ V! J, ]        rms_cnt<=(others=>'1');7 r% G9 @$ G* F, f0 U  A3 q! ^
            rms_sum<=(others=>'0'); & B& h( s0 ?4 G4 p5 F
            rms_div<=(others=>'0');1 Y  ^$ U4 I/ }5 M
            rms_by<=(others=>'1');# i7 V5 n) R9 M5 [5 d
    end if;
    + Z% x& A8 Q$ ~7 v2 A2 b end if ;6 {8 E3 g  p9 x
    end process;
    ; T( n. A2 p8 r end arch_get_rms;% C* _+ E7 E- t( H  B* }1 A! j
    $ K6 j6 y# s; ^

    该用户从未签到

    2#
    发表于 2019-5-21 17:46 | 只看该作者
    有时间就去试试
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-9 20:03 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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