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

Фильтрация на ДСП в реальном времени

При вашей частоте дискретизации в 100 КГц вы стали бы по умножителю на коэффициент ставить? На ваш фильтр хватит одного умножителя, более того даже само умножение последовательно сделать успеете.

Этот вопрос очень правомерен. В принципе можно целиком задачу вычисления фазы переложить на ДСП, он очень даже успеет (насколько я понял, Вы рассчитываете комплексную огибающую через преобразование Гильберта).

 

Синхронно. выставление значений в ФПГА. Выставление прерывания.

EMIF - это интерфейс памяти. Есть прерывание проца (через GPIO входы), есть тактирование EMIF'а - это суть разные вещи. Может быть, xapp753.pdf Вам поможет...

 

Если я правильно понимаю, главное обеспечить синхронность 1 и 5 пунктов. Тогда несинхронность 2-3 пунктов не окажут влияния? Да, и время выполнения п. 2-4 должно быть меньше чем частота поступления новых отсчетов, я прав?

В общем, да. Есть время между захватом отсчётов, а есть время между их обработкой. На точность результата может повлиять только джиттер захвата + потери отсчётов.

 

Вообще говоря, так правильно делать?

Правильнее ИМХО писать блок отсчётов из ФПГА в память , прерывать проц и читать уже из проца этот же кусок памяти. Можно это делать и по 1 отсчёту, проц должен успеть. Только это будет очень некрасиво.

 

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

К вопросу

Что означает когерентность кэша?

При записи данных внешним устройством в область внутренней памяти проца никаких проблем не будет: проц автоматически обновит закэшированные участки. А вот когда запись идёт во внешнюю память - проц об этом не догадывается. И возможна ситуация, когда ФПГА запишет данные, а проц будет читать их не из внешней памяти а из своего внутреннего L2 кэша: естественно они будут неверными. Эта ситуация (несоответствие реальных данных и закэшированных) называется некогерентностью (incoherency) кэша.

 

Архитектура ДСП ориентирована на обработку массивов в памяти, а не потоков по последовательной шине. Т.е. цикл for, если конвеер не рушится, может выполнять параллельно сразу несколько итераций.

 

Надеюсь, я ответил на Ваши вопросы.

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


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

Этот вопрос очень правомерен. В принципе можно целиком задачу вычисления фазы переложить на ДСП, он очень даже успеет (насколько я понял, Вы рассчитываете комплексную огибающую через преобразование Гильберта).

В ФПГА я делаю понижающее преобразование входного сигнала, перемножением на sin/cos с DDS, потом подаю на ДСП и фильтрую двойную частоту. Насчет пробразователя Гильберта, думал, его нужно ставить в ФПГА сразу после входного сигнала, тада можно исключить фильтрацию двойной частоты. Но пока этот метод оставлю на потом.

 

EMIF - это интерфейс памяти. Есть прерывание проца (через GPIO входы), есть тактирование EMIF'а - это суть разные вещи. Может быть, xapp753.pdf Вам поможет...

Это я понимаю. Я уже делал на этом ДСП всякого рода интерфесные вещи ну и простейшую обработку. Все делалось по прерыванию. Просто в реальном времени особо пока ничего не делал и поэтому хочу оценить насколько у меня это получится :)

 

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

К вопросу

При записи данных внешним устройством в область внутренней памяти проца никаких проблем не будет: проц автоматически обновит закэшированные участки. А вот когда запись идёт во внешнюю память - проц об этом не догадывается. И возможна ситуация, когда ФПГА запишет данные, а проц будет читать их не из внешней памяти а из своего внутреннего L2 кэша: естественно они будут неверными. Эта ситуация (несоответствие реальных данных и закэшированных) называется некогерентностью (incoherency) кэша.

Точно, я уже на этот как то раз напоролся. Там помоему тип volatile решает эту проблемму.

 

Архитектура ДСП ориентирована на обработку массивов в памяти, а не потоков по последовательной шине. Т.е. цикл for, если конвеер не рушится, может выполнять параллельно сразу несколько итераций.

Надеюсь, я ответил на Ваши вопросы.

Насчет конвеера, я подумаю, но скорее всего ДСП успеет как говорили выше. Во всяком случае идею я понял, так что спасибо всем.

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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