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

Головоломка с FFT от Альтеры

Коллеги,по алгоритму быстрой свёртки нужно реализовать фильтр КИХ. Написал , симулирую - не работает. В результате потерянного полдня пришёл к такому результату. Если в качестве эксперимента соединить последовательно блоки FFT - IFFT то такая связка работает нормально,на выходе вижу входной сигнал. Но если в разрыв между этими блоками поставить задержку хотя бы на 1 такт - всё валится. Задерживаю группу из 5 сигналов - valid,sop,eop,data_re,data_im. Это как такое может быть? Какая IFFT разница в какой момент будет начинаться блок входных данных?

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


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

У Вас пакетный обмен (судя по sop, eop)?

Границы пакета не нарушаются?

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


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

У Вас пакетный обмен (судя по sop, eop)?

Границы пакета не нарушаются?

У меня потоковый FFT, пакеты идут один за одним. При нарушении формата пакета на выходе в момент source_eop формируется код ошибки source_error отличный от нуля. Его нет. Причём , если создать отдельный проект только с IFFT то ему до лампочки время прихода пакета ,нормально отрабатывает любую дельта функцию. А вот когда в проекте пара FFT-IFFT то начинаются глюки. Похоже это больше вопрос к симулятору а не к корке.

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


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

Обратная связь учтена? Там вроде лейтенси отличное от нуля стоять должно!

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


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

Обратная связь учтена? Там вроде лейтенси отличное от нуля стоять должно!

Какая обратная связь? Не понял вопроса.

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


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

А последовательность дельт?

В смысле суперпозицию нескольких дельт? Специально не смотрел но думаю что если с одной справляется то и с несколькими тоже справится.

 

Поставил рядом 2 IFFT, на один подаю сигналы с FFT, на другой те же сигналы задержанные на такт. Первый работает, второй нет. Пробовал менять длительность ресета,корка чувствительна к нему - мимо. Создал совсем новый проект - те же яйца.Вроде и симулятор нормально работает. Бред.

 

Вот примерно так это выглядит. Верхний сигнал с обычного IFFT, нижний с "задержанного" на такт.

post-18832-1476104921_thumb.png

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


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

А вот такая картинка получилась в Модельсиме! За много лет это у меня первая подлянка от Active-HDL. Всем спасибо за участие!

post-18832-1476108570_thumb.png

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


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

Переходите в квестасим!

Ага, только Квестасим - это, де-факто, урезанный Моделлсим. Причём, если Моделлсим понимает все команды из do-файлов для Квестасима, то обратной совместимости нет. А ещё Моделлсим на халяву идёт как с веб-версией Квартуса, так и с лицензионными. А на Квестасим мне отдельную лицензию надо. Единственный плюс Квестасима - он работает по-стабильней Моделлсима (падает не так часто).

 

В смысле суперпозицию нескольких дельт? Специально не смотрел но думаю что если с одной справляется то и с несколькими тоже справится.

 

Поставил рядом 2 IFFT, на один подаю сигналы с FFT, на другой те же сигналы задержанные на такт. Первый работает, второй нет. Пробовал менять длительность ресета,корка чувствительна к нему - мимо. Создал совсем новый проект - те же яйца.Вроде и симулятор нормально работает. Бред.

 

Вот примерно так это выглядит. Верхний сигнал с обычного IFFT, нижний с "задержанного" на такт.

А не факт, что у вас не правильно. Во-первых, какой уровень моделирования в Моделлсиме задан? Регистровых передач, или физический? А, во-вторых, если у вас поточный режим, то в нём, по-крайней мере у Ксайлинковской БПФ-корки (а у Альтеровской, то же самое, на самом деле), вообще ничего и не будет формироваться по части управляющих сигналов. Первый раз шмякнут - и тишина, ибо смысл-то от них какой? А раз так, то если вы вставляете задержку хотя бы на один такт, то у вас сдвигается спектр. Если частота синусоиды не была исходно кратна частоте дискретизации (а судя по картинкам, так оно и есть), то сдвиг спектра с добавлением слева или справа нуля равноценен переносу частоты на один отсчёт + свёртку (во временной области) с функцией sinc(t). А, коль скоро, у вас эта ситуация повторяется многократно, вот вы и получаете вместо чистенького тона псевдослучайный хаос. Кстати, не забудьте ещё, что при добавлении даже одного нуля (т.е. ваш сдвиг), сигнал, в отличии от исходного, после ОБПФ уже не будет действительным. Так что, прав я, или нет, проверить очень просто - посмотрите мнимый выход ОБПФ.

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


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

вообще ничего и не будет формироваться по части управляющих сигналов. Первый раз шмякнут - и тишина, ибо смысл-то от них какой? А раз так, то если вы вставляете задержку хотя бы на один такт, то у вас сдвигается спектр.

Управляющие сигналы не будут формироваться? :wacko: Извините,уважаемый,но это чушь. Sop и Eop однозначно определяют начало и конец кадра БПФ и если их задержать вместе с данными (хоть на 100 тактов,неважно) никакой сдвижки спектра не будет. Не знаю что вы там увидели на картинках, но частота входного синуса точно попадает в центр одного из бинов.

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


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

Управляющие сигналы не будут формироваться? :wacko: Извините,уважаемый,но это чушь. Sop и Eop однозначно определяют начало и конец кадра БПФ и если их задержать вместе с данными (хоть на 100 тактов,неважно) никакой сдвижки спектра не будет.

Я так понял, что речь идет о том, что задежки по данным и управляющим сигналам будут разные.

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


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

Я так понял, что речь идет о том, что задежки по данным и управляющим сигналам будут разные.

С какого перепуга?

     if (RISING_EDGE(iclk_2x)) then
         reg(0) <= fft1_val&fft1_sop&fft1_eop&fft1_re&fft1_im;
         reg(19 downto 1) <= reg(18 downto 0);
     end if;

И сигналы на второй IFFT я подаю с reg(0).

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


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

И сигналы на второй IFFT я подаю с reg(0).

Вы не поняли - я описал теоретическую ситуацию, что такое возможно - разработчик, допустим, задержал данные дополнительно на один такт из-за того, что у него временные ограничения не сошлись, а управляющие сигналы забыл. Или моделирование идет на модели после синтеза - управляющие сигналы выставились, а данные развалились (ну не выполнились временные ограничения). К Вам это, понятное дело, отношения не имеет.

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


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

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

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

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

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

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

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

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

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

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