Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с FFT core
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
maxics
Возникла следующая проблема, над которой ”бьюсь” продолжительное время. Некорректно работает 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;
dm.pogrebnoy
Вы не забыли что у вас битреверсная адресация включена?
VladimirB
Цитата(dm.pogrebnoy @ May 6 2011, 19:44) *
Вы не забыли что у вас битреверсная адресация включена?

как раз наоборот она - не включена, поэтому на выходе выборки спектра идут в бит-реверсном порядке
dm.pogrebnoy
Да, туплю, но суть ясна) Natural order включить нужно, правда ресурсов корка сожрет больше, блокрамов добавится.
SDM_Electronix
Output ordering - Natural Order
gutzzz
По картинкам с корегена непонятно в каком режиме ваша корка должна работать (Streaming or Burst or ...) ?????
maxics
Спасибо! Поставил Natural order. Помогло.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.