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

    

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

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

 

Есть блок с условным названием 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 чисел

 

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

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

 

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация