Перейти к содержанию
    

Проблема с FFT core

Возникла следующая проблема, над которой ”бьюсь” продолжительное время. Некорректно работает fft, реализованное на IP-ядре (ISE 10.1, fft 5.0). Для проверки подаю sin определенной частоты с генератора, пропускаю через DDC и затем I и Q ветви подаю на выход и на fft. В SystemView накладываю на сигнал DONE выход fft (с ядра). А также средствами SystemView строю fft используя I и Q ветви после DDC и тоже накладываю на DONE. Результаты следующие: fft сделанное средствами SystemView корректно реагирует на изменение частоты – ”палка” движется в нужном направлении, адекватно отображает изменение частоты. В случае fft на ядре этого не происходит. ”Палка” движется неправильно, иногда появляются боковые лепестки. Прилагаю код и скриншоты настройки ядра.

 

 

 

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

 

entity obrabotka is

port(

 

clk : in std_logic; --5 МГц

data_I : in std_logic_vector(15 downto 0);

data_Q : in std_logic_vector(15 downto 0);

done : out std_logic;

data_out : out std_logic_vector(31 downto 0));

end obrabotka;

 

architecture Behavioral of obrabotka is

 

component fft is -- настройка IP-ядра в приложении

port (

fwd_inv_we : in STD_LOGIC := 'X';

rfd : out STD_LOGIC;

start : in STD_LOGIC := 'X';

fwd_inv : in STD_LOGIC := 'X';

dv : out STD_LOGIC;

done : out STD_LOGIC;

clk : in STD_LOGIC := 'X';

busy : out STD_LOGIC;

edone : out STD_LOGIC;

xn_re : in STD_LOGIC_VECTOR ( 15 downto 0 );

xk_im : out STD_LOGIC_VECTOR ( 26 downto 0 );

xn_index : out STD_LOGIC_VECTOR ( 9 downto 0 );

xk_re : out STD_LOGIC_VECTOR ( 26 downto 0 );

xn_im : in STD_LOGIC_VECTOR ( 15 downto 0 );

xk_index : out STD_LOGIC_VECTOR ( 9 downto 0 )

);

end component;

 

signal I_out,Q_out: std_logic_vector( 26 downto 0 );

signal flag_fft:std_logic:='0';

signal xn_index,xk_index: std_logic_vector( 9 downto 0 );

signal Data_fft_i: std_logic_vector( 15 downto 0 );

signal Data_fft_Q: std_logic_vector( 15 downto 0 );

 

begin

 

data_out<= I_out(26 downto 11)&Q_out(26 downto 11);

 

process(clk)-- процес инициализации работы fft с 3-го бита xn_index

begin

if( rising_edge( clk ) ) then

if xn_index="0000001" then flag_fft<='1';end if;

 

if flag_fft='1' then

Data_fft_i<=data_I;

Data_fft_q<=data_Q;

end if;

end if;

end process;

 

x_fft: fft

port map(

 

fwd_inv_we =>'1',

rfd =>open,

start =>'1',

fwd_inv =>'1',

dv =>open,

done =>done,

clk =>clk,

busy =>open,

edone =>open,

xn_re =>Data_fft_i,

xk_im =>I_out,

xn_index =>xn_index,

xk_re =>Q_out,

xn_im =>Data_fft_q,

xk_index =>xk_index);

 

end Behavioral;

post-53649-1304668298_thumb.jpg

post-53649-1304668305_thumb.jpg

post-53649-1304668311_thumb.jpg

Изменено пользователем maxics

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы не забыли что у вас битреверсная адресация включена?

как раз наоборот она - не включена, поэтому на выходе выборки спектра идут в бит-реверсном порядке

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, туплю, но суть ясна) Natural order включить нужно, правда ресурсов корка сожрет больше, блокрамов добавится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По картинкам с корегена непонятно в каком режиме ваша корка должна работать (Streaming or Burst or ...) ?????

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...