Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обработка при скорости чтения данных меньшей, чем скорость записи.
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
sqrt(2)
Ситуация представлена на картинке.

Есть блок с условным названием 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 назад. Проблема в том, что не знаю даже по каким словам гуглить. Прошу подсказки.
SSerge
Параллелизм и конвееризация.
V_G
Да, если блоки 2 параллельно обрабатывают входные данные, увеличивайте число блоков 2. Если нет, вводите блоки 3, параллельно работающие с блоками 2.
Либо миритесь с частичной потерей входных данных
sqrt(2)
Цитата(V_G @ Oct 8 2017, 05:08) *
Да, если блоки 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 чисел

Есть надежда?
Lmx2315
Цитата(sqrt(2) @ Oct 8 2017, 23:32) *
Если тут есть опытные пользователи жирных плисин типа Virtex-7, прошу помочь хотя бы на глазок прикинуть "впихаемость" проекта в такого типа ПЛИС.

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

..что мешает самому попробовать? чтобы понять влезет или нет - физически плисина не нужна.
sqrt(2)
Цитата(Lmx2315 @ Oct 8 2017, 23:44) *
..что мешает самому попробовать? чтобы понять влезет или нет - физически плисина не нужна.

Ну, например, чтобы не тратить впустую несколько часов, а то и десяток часов.
x736C
Какая у вас частота сэмплирования АЦП?

Цитата(sqrt(2) @ Oct 8 2017, 23:32) *
Если все же пытаться реализовать вариант с 256*200 блоков 2...

Имеем:
-) 4096 параллельно выполняющихся умножений и вычитаний
-) 4*256*200 параллельных сложений
-) + еще 256 параллельных сложений, но уже в другом блоке
-) 256*200 определений наибольшего из 4х чисел
-) +еще 4 определения наибольшего числа из 256 чисел

Есть надежда?
Может, невнимательно читал. А что есть элемент и о каких числах идет речь (тип, разрядность)?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.