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

Обработка при скорости чтения данных меньшей, чем скорость записи.

Ситуация представлена на картинке.

 

Есть блок с условным названием 1 и множество однотипных блочков 2. Выходы блоков 2 записываются в некий массив (я назвал этот блок MUX) и подаются на входы блоков 2. Полагаю, что правило соответствия элемента массива блоку 2 в контексте вопроса несущественно.

 

Итак, есть блоки, которые рекурсивно что-то вычисляют. Вычисления занимают несколько тактов, поэтому данные от блока 1 на входе блока 2 нельзя обновлять каждый такт. Следовательно, создаётся очередь из данных от блока 1. На самом деле, копятся не выходные данные для блока 1, а то, что поступает ему на вход - поскольку выход блока 1 на самом деле не одна шина с одним и тем же значением для всех блоков 2, а достаточно большой массив, поэтому с точки зрения ресурсов ПЛИС разумнее копить вх. отсчеты с АЦП, которые и поступают на блок 1.

 

 

То есть, получается следующая схема: отсчеты с АЦП -> RAM -> блок 1 -> блок 2. Таким образом, чтение из RAM происходит каждые M тактов, где M = K+L; K - число тактов на обработку данных в блоке 1, L - число тактов на обработку в блоке 2. А вх. отсчеты поступают каждый такт, и поэтому какую бы большую память не взять - рано или поздно запись новых данных догонит чтение и результаты будут некорректными.

 

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

post-92633-1507382084_thumb.jpg

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


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

Да, если блоки 2 параллельно обрабатывают входные данные, увеличивайте число блоков 2. Если нет, вводите блоки 3, параллельно работающие с блоками 2.

Либо миритесь с частичной потерей входных данных

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


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

Да, если блоки 2 параллельно обрабатывают входные данные, увеличивайте число блоков 2. Если нет, вводите блоки 3, параллельно работающие с блоками 2.

Либо миритесь с частичной потерей входных данных

Да, блоки 2 работают параллельно. Увеличить количество блоков 2 не получится - потому что их и так наставлено столько, что они полностью покрывают входные данные. То есть, входные данные для блоков 2 - вектор из 1024 элементов, каждому блоку 2 надо 4 элемента из этого вектора (для всех блоков это уникальный набор из 4х элементов вектора). Соответственно, делаю 256 параллельно работающих блоков 2. Вся проблема именно в рекурсии. А вообще есть какие-нибудь примеры параллелизации и конвейеризации рекурсивных алгоритмов под ПЛИС или DSP процы? Желательно, чтобы и вх. данные при этом не терялись, или терялись по минимум и можно было бы как-то оценить эти потери.

 

Вообще, у меня есть на примете одна идея как это можно сделать, но при таком раскладе получится ~256*200 блоков 2 + ещё некоторый дополнительный расход памяти, и есть сильное подозрение, что это будет из разряда невпихаемого в никакой ПЛИС.

 

Если тут есть опытные пользователи жирных плисин типа Virtex-7, прошу помочь хотя бы на глазок прикинуть "впихаемость" проекта в такого типа ПЛИС.

 

Если все же пытаться реализовать вариант с 256*200 блоков 2...

 

Имеем:

-) 4096 параллельно выполняющихся умножений и вычитаний

-) 4*256*200 параллельных сложений

-) + еще 256 параллельных сложений, но уже в другом блоке

-) 256*200 определений наибольшего из 4х чисел

-) +еще 4 определения наибольшего числа из 256 чисел

 

Есть надежда?

Изменено пользователем sqrt(2)

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


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

Если тут есть опытные пользователи жирных плисин типа Virtex-7, прошу помочь хотя бы на глазок прикинуть "впихаемость" проекта в такого типа ПЛИС.

 

Есть надежда?

..что мешает самому попробовать? чтобы понять влезет или нет - физически плисина не нужна.

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


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

..что мешает самому попробовать? чтобы понять влезет или нет - физически плисина не нужна.

Ну, например, чтобы не тратить впустую несколько часов, а то и десяток часов.

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


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

Какая у вас частота сэмплирования АЦП?

 

Если все же пытаться реализовать вариант с 256*200 блоков 2...

 

Имеем:

-) 4096 параллельно выполняющихся умножений и вычитаний

-) 4*256*200 параллельных сложений

-) + еще 256 параллельных сложений, но уже в другом блоке

-) 256*200 определений наибольшего из 4х чисел

-) +еще 4 определения наибольшего числа из 256 чисел

 

Есть надежда?

Может, невнимательно читал. А что есть элемент и о каких числах идет речь (тип, разрядность)?

 

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


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

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

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

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

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

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

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

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

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

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