在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: snowyd

谁会?

[复制链接]
发表于 2004-6-21 14:21:07 | 显示全部楼层

谁会?

--rms.vhd和sqrt.vhd用于产生fft的rms幅值
--这是rms.vhd
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity RMS is
       generic  (
                data_width   : integer := 16
                );
        port    (
                reset            : in  std_logic;                                 -- power on reset
                clk              : in  std_logic;                                 -- Input clock
                load             : in  std_logic;                                 -- New Sample Read (Active High Sampling Clock)
                input_data_real  : in  std_logic_vector(Data_width-1 downto 0);   -- Input Data Real
                input_data_imag  : in  std_logic_vector(Data_width-1 downto 0);   -- Input Data Imag
                rms_result       : out std_logic_vector(Data_width-1 downto 0)    -- RMS result
    );
end RMS;
architecture RMS_Architecture of RMS is

component sqrt_calc
      generic(
             data_width          : integer := 16                                   -- Size of Data (bits)
             );
      port   (
             data_in             : in unsigned(data_width+data_width-1 downto 0);  -- Input Data
             data_out            : out unsigned(data_width-1 downto 0)             -- Output Data
             );
end component;

component Multiplier
generic(
             multiplier_width    : integer := 16;
             data_width          : integer := 16);
        port (
             load                : in std_logic;
             mult1_data          : in std_logic_vector(data_width-1 downto 0);
             mult2_data          : in std_logic_vector(multiplier_width-1 downto 0);
             product             : out std_logic_vector(multiplier_width+data_width-2 downto (multiplier_width-1))
       );   
end component;

signal last_load                 : std_logic;                                                -- Used to detect rising edge of load signal
signal Mult_R_R_Out              : std_logic_vector((data_width-1) downto 0);                -- The square of the Real values
signal Mult_I_I_Out              : std_logic_vector((data_width-1) downto 0);                -- The square of the Imag values
signal squares_added_signed      : signed(data_width+data_width-1 downto 0);                 -- The square values added together
signal squares_added_unsigned    : unsigned(data_width+data_width-1 downto 0);               -- Needs to be unsigned for square root calculation
signal sqrt_result               : unsigned(data_width-1 downto 0);                          -- Result of square root calculation

begin

rms_calc: process(reset, clk)
begin
if reset = '0' then
   squares_added_signed <= (others => '0');
   rms_result <= (others => '0');
   last_load <= '0';
elsif Rising_Edge(clk) then
   if (load = '1' and last_load = '0') then         --  begin on load rising edge
       squares_added_signed <= resize((signed(Mult_R_R_Out) + signed(Mult_I_I_Out)), (data_width+data_width));
       rms_result <= std_logic_vector(sqrt_result);
   end if;
   last_load <= load;
end if;
end process rms_calc;

squares_added_unsigned <= unsigned(squares_added_signed);

R_R_Mult: Multiplier
generic map (
                  multiplier_width => data_width,
                  data_width       => data_width
                  )
         port map (
                  load             => load,
                  mult1_data       => input_data_real,
                  mult2_data       => input_data_real,
                  product          => Mult_R_R_Out
                  );

I_I_Mult: Multiplier
      generic map (
                  multiplier_width => data_width,
                  data_width       => data_width
                  )
        port map  (
                  load             => load,
                  mult1_data       => input_data_imag,
                  mult2_data       => input_data_imag,
                  product          => Mult_I_I_Out
                  );

Square_Root : sqrt_calc
      generic map (
                  data_width       => data_width
                  )
         port map (
                  data_in          => squares_added_unsigned,
                  data_out         => sqrt_result
                  );

end RMS_Architecture;
发表于 2004-6-21 14:25:55 | 显示全部楼层

谁会?

--这是sqrt.vhd
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity sqrt_calc is
      generic(
             data_width     : integer := 16                                         -- Size of Data (bits)
             );
      port   (
             data_in        : in unsigned(data_width+data_width-1 downto 0);        -- Input Data
             data_out       : out unsigned(data_width-1 downto 0)                   -- Output Data
             );
end sqrt_calc;

architecture sqrt_calc_architecture of sqrt_calc is
-------------------------------------------------------------
function SquareRoot (Arg: unsigned) return unsigned is
    constant AMSB: integer:= Arg'length-1;
    constant RMSB: integer:= (Arg'length/2) - 1;
    variable Root: unsigned(RMSB downto 0);
    variable Test: unsigned(RMSB+1 downto 0);
    variable Rest: unsigned(AMSB+1 downto 0);
begin
    Root := (others => '0');
    Rest := '0' & Arg;
    for i in RMSB downto 0 loop
       Test := Root(RMSB-1 downto 0 ) & "01";  
       if Test(RMSB-i+1 downto 0) >
          Rest(AMSB+1 downto 2*i) then
           Root := Root(RMSB-1 downto 0) & '0';
       else
           Root := Root(RMSB-1 downto 0) & '1';
           Rest(AMSB downto i*2) := Rest(AMSB downto i*2) -
                                    Test(RMSB-i+1 downto 0);
       end if;
      end loop;  
    return Root;
end;

begin
  data_out <= SquareRoot(data_in);
end;
发表于 2004-6-21 14:35:30 | 显示全部楼层

谁会?

--fft_input_binary.dat
0000000000000000 0011111111111111
1100000000000001 0000000000000000
0000000000000000 1100000000000001
0011111111111111 0000000000000000
0000000000000000 0011111111111111
1100000000000001 0000000000000000
0000000000000000 1100000000000001
0011111111111111 0000000000000000
0000000000000000 0011111111111111
1100000000000001 0000000000000000
0000000000000000 1100000000000001
0011111111111111 0000000000000000
0000000000000000 0011111111111111
1100000000000001 0000000000000000
0000000000000000 1100000000000001
0011111111111111 0000000000000000
0000000000000000 0011111111111111
1100000000000001 0000000000000000
0000000000000000 1100000000000001
0011111111111111 0000000000000000
0000000000000000 0011111111111111
1100000000000001 0000000000000000
0000000000000000 1100000000000001
0011111111111111 0000000000000000
发表于 2004-6-21 14:38:04 | 显示全部楼层

谁会?

--fft_input_binary.dat所对应的浮点值
-0.0000000116             0.5000000000
-0.5000000000             -0.0000000232
0.0000000348             -0.5000000000
0.5000000000             0.0000000464
-0.0000000580             0.5000000000
-0.5000000000             -0.0000000696
0.0000000812             -0.5000000000
0.5000000000             0.0000000928
-0.0000001044             0.5000000000
-0.5000000000             -0.0000001160
0.0000001276             -0.5000000000
0.5000000000             0.0000001392
-0.0000001508             0.5000000000
-0.5000000000             -0.0000001624
0.0000001740             -0.5000000000
0.5000000000             0.0000001856
-0.0000001972             0.5000000000
-0.5000000000             -0.0000002088
0.0000002204             -0.5000000000
0.5000000000             0.0000002321
-0.0000002437             0.5000000000
-0.5000000000             -0.0000002553
0.0000002669             -0.5000000000
0.5000000000             0.0000002785
发表于 2004-6-21 14:48:06 | 显示全部楼层

谁会?

在我QUARTUAS编译中这一行(约420) ram_length => 8);出现5、6个语法提示错误!
还有其他的老是提出少“;”的错误,但改了也没有用!!!
编译时出错可以看一下在线帮助,很有用的。
 楼主| 发表于 2004-6-22 00:22:46 | 显示全部楼层

谁会?

还有上面的代码中有一个“面容”
那里的值是多少?
发表于 2004-6-22 09:44:17 | 显示全部楼层

谁会?

那个面容本来是"8)",不知道为什么显示成了面容。
 楼主| 发表于 2004-6-23 19:20:09 | 显示全部楼层

谁会?

程序还差点调通,时间上来不赢了!
发表于 2006-8-27 23:33:34 | 显示全部楼层
许多DSP的书上描述过
头像被屏蔽
发表于 2006-8-28 09:26:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-8 14:07 , Processed in 0.028184 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表