Forum: FPGA, VHDL & Co. Xilinx iFFT liefert ein FFT Ergebnis


von Sandy (Gast)


Lesenswert?

Liebe Kollegen!

Ich versuche mich an einer IFFT (Xilinx IP Core).
Bei der Simulation lege ich einen Impuls beim Index 0 an. Das Ergebnis 
der inversen FFT sollte ein Sinus sein.
Im Simulator bekomme ich den konstanten Wert von 128. Für mich sieht das 
so aus als würde ich nur eine FFT machen und nicht die inverse.
Ich kann verstellen was ich will es kommt immer ein konstanter Wert 
heraus!?

HELP

DANKE
Sandy
1
-- TestBench Template 
2
3
  LIBRARY ieee;
4
  USE ieee.std_logic_1164.ALL;
5
  USE ieee.numeric_std.ALL;
6
  use std.textio.all;
7
  use ieee.std_logic_textio.all;
8
9
  ENTITY testbench IS
10
  END testbench;
11
12
  ARCHITECTURE behavior OF testbench IS 
13
14
  -- Component Declaration
15
          COMPONENT FFT_1
16
  PORT (
17
    clk : IN STD_LOGIC;
18
    start : IN STD_LOGIC;
19
    xn_re : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
20
    xn_im : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
21
    fwd_inv : IN STD_LOGIC;
22
    fwd_inv_we : IN STD_LOGIC;
23
    scale_sch : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
24
    scale_sch_we : IN STD_LOGIC;
25
    rfd : OUT STD_LOGIC;
26
    xn_index : OUT STD_LOGIC_VECTOR(9 DOWNTO 0);
27
    busy : OUT STD_LOGIC;
28
    edone : OUT STD_LOGIC;
29
    done : OUT STD_LOGIC;
30
    dv : OUT STD_LOGIC;
31
    xk_index : OUT STD_LOGIC_VECTOR(9 DOWNTO 0);
32
    xk_re : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
33
    xk_im : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
34
  );
35
END COMPONENT;
36
37
signal s_clk :  STD_LOGIC := '1';
38
signal s_xn_re :  STD_LOGIC_VECTOR(15 DOWNTO 0) := (others => '0');
39
signal s_xn_index :  STD_LOGIC_VECTOR(9 DOWNTO 0) := (others => '0');
40
signal s_xk_re :  STD_LOGIC_VECTOR(15 DOWNTO 0) := (others => '0');
41
signal s_xk_im :  STD_LOGIC_VECTOR(15 DOWNTO 0) := (others => '0');
42
 
43
FILE test_out_data: TEXT open WRITE_MODE is "E:\Doblinger\FFT\output_iFFT_tb.txt";
44
 
45
46
  BEGIN
47
48
s_clk <= not s_clk after 10 ns;
49
50
  -- Component Instantiation
51
uut : FFT_1
52
  PORT MAP (
53
    clk => s_clk,
54
    start => '1',
55
    xn_re => s_xn_re,
56
    xn_im => "0000000000000000",
57
   fwd_inv => '0',
58
    fwd_inv_we => '1',
59
    scale_sch => "000001010",
60
    scale_sch_we => '1',
61
    rfd => open,
62
    xn_index => s_xn_index,
63
    busy => open,
64
    edone => open,
65
    done => open,
66
    dv => open,
67
    xk_index => open,
68
    xk_re => s_xk_re,
69
    xk_im => s_xk_im
70
  );
71
72
     tb : PROCESS
73
     variable L1              : LINE;
74
    BEGIN
75
    --if s_clk 'event and s_clk = '1' then
76
      wait for 2 ns;
77
      write(L1, s_xk_re);
78
      writeline(test_out_data, L1);
79
      if s_xn_index = "0000000000" then
80
        s_xn_re <= "0010000000000000";
81
      else
82
        s_xn_re <= "0000000000000000";
83
      end if;
84
    --end if;
85
     END PROCESS tb;
86
    --End Test Bench 
87
88
  END;

von Sandy (Gast)


Lesenswert?

Ich bin sooooo dummm, der Impuls muss auf 1 sein und nicht auf 0 sonst 
habe ich einen konstanten Ausgang.

von Jan K. (jan_k)


Lesenswert?

Naja der Impuls muss an der Frequenz sein, die der Sinus später haben 
soll. Du hast also einen Sinus oder eher einen Cosinus mit Frequenz 0 
erzeugt ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.