|
|
  |
To RAM or no to RAM - вот в чём вопрос! |
|
|
|
Oct 5 2010, 16:14
|

Участник

Группа: Участник
Сообщений: 29
Регистрация: 6-08-10
Пользователь №: 58 790

|
Цитата поделиться алгоритмом обработки изображения Из исходной матрицы I строим градиентные матрицы Ix и Iy. В простейшем случае это просто разность элементов по x и по y. Потом строим 3 матрицы из поэлементных произведений Ix * Ix, Ix * Iy и Iy * Iy. То есть элементы этих матриц равны произведению соответствующих элементов исходных матриц. А потом для каждого элемента полученных матриц строим сумму по окрестности. То есть к значению самого элемента прибавляем значения соседей. Получим матрицы A, B и С. Вот. Но это ещё не всё  . Элементы окончательная матрица H = f( A, B, C ). Функция f - простое выражение с двумя умножениями, разностью и делением. На Cи можно написать 4мя вложенными циклами. Но такой подход в кристалле тучу места займёт.
--------------------
Усложнять - просто, упрощать - сложно.
|
|
|
|
|
Oct 5 2010, 17:39
|

Участник

Группа: Участник
Сообщений: 29
Регистрация: 6-08-10
Пользователь №: 58 790

|
Цитата На константу или переменную? На переменную - тоже моя головная боль будущая. Думаю использовать тут Core Generator. Потому что самому писать реализацию деления... когда-нибудь в другой раз  . Ребят, скажите, пожалуйста, можно ли одновременно оба канала 2-port RAM использовать для чтения?
Сообщение отредактировал m0use - Oct 5 2010, 17:39
--------------------
Усложнять - просто, упрощать - сложно.
|
|
|
|
|
Oct 5 2010, 17:57
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(m0use @ Oct 5 2010, 20:18)  На переменную - тоже моя головная боль будущая. Думаю использовать тут Core Generator. Потому что самому писать реализацию деления... когда-нибудь в другой раз  . На мой взгляд лучше реализация по предложенному мною 3 варианту. Т.е. через конвейерную обработку на проходе. Поясню более подробно (мое видение): Реализовывается задержка на требуемое кол-во строк и пикселей в строке (аналогичную как на рисунке во вложении, из-за этого и предложил уменьшить матрицу  ). Таким образом организовываем окно которое будет "скользить" по изображению. Далее реализовываем конвейерную обработку в темпе считывания изображения (оно ж последовательно поступает на ПЛИС) для значений пикселей в окне - как пример архитектуры реализации конвейера представлен на втором рисунке. PS На рисунках во вложении для примера представлена архитектура реализации медианного фильтра 3х3 для изображения. PS PS На втором рисунке горизонтальные линии - делят обработку на такты для конвейера. PS PS PS Но решение как лучше реализовывать, принимать Вам
Эскизы прикрепленных изображений
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Oct 5 2010, 20:02
|

Участник

Группа: Участник
Сообщений: 29
Регистрация: 6-08-10
Пользователь №: 58 790

|
Офигеть! Maverick, спасибо, что поведал про такую красивую идею! А это откуда картинки? Просто первоисточник хотел бы посмотреть! Наверно, хорошая книжка  . И, может быть Вы в принципе можете что-то посоветовать по теме таких вот стандартных схемотехнических решений? Буду очень благодарен. А кстати, FIFO в простейшем случае (который здесь как задержка выступает) - это просто нужное количество регистров?
--------------------
Усложнять - просто, упрощать - сложно.
|
|
|
|
|
Oct 5 2010, 20:25
|
Знающий
   
Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543

|
Цитата что делать? человек всегда становится перед выбором Иногда очень легко стать или перед пределом максимально возможной емкости отдельно взятой микросхемы, или (чаще) отдельно выделенного количества денег... Шустрые плисины - они того, дорогие очень.
|
|
|
|
|
Oct 6 2010, 06:26
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(m0use @ Oct 5 2010, 23:02)  Офигеть! Maverick, спасибо, что поведал про такую красивую идею! Всегда пожалуйста!  Цитата А это откуда картинки? Просто первоисточник хотел бы посмотреть! Наверно, хорошая книжка  . И, может быть Вы в принципе можете что-то посоветовать по теме таких вот стандартных схемотехнических решений? Буду очень благодарен. Первоисточник - в личке. Это даже не книжка - магистерская работа студента из Америки кажется.  Но довольно не плохая, как по мне... Цитата А кстати, FIFO в простейшем случае (который здесь как задержка выступает) - это просто нужное количество регистров? Да
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Oct 6 2010, 07:21
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(CaPpuCcino @ Oct 6 2010, 09:51)  а может всё-таки огласите весь список? хотя бы название. спб Не проблема... Первоисточник (где-то на форуме уже выкладывал) Размер архива 814.79 килобайт Там как пример рассмотрена реализация медианного фильтра и в конце приведено описание на VHDL. PS Как по мне там красиво и подробно расписана эта идея и приведен пример реализации. Цитата(m0use @ Oct 5 2010, 23:02)  Подумайте, может можно заменить операцию деления на операцию сдвига (деления на числа степени двойки). Будет проще реализация
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Oct 6 2010, 09:23
|

Участник

Группа: Участник
Сообщений: 29
Регистрация: 6-08-10
Пользователь №: 58 790

|
Цитата есть еще такой вариант: использовать RAM с шириной шины данных N*(сколько_у_вас_там_бит), соответственно можно распараллелить вычисления Я думал так делать, но пока нацелился на конвеерный подход, который Maverick подкинул. Цитата еще многопортовый доступ можно задействовать. Многопортоый? В смысле двухпортовый? Я просто сделал, чтобы за такт два значения читалось. Можно больше? Ну, это я больше из интереса спрашиваю  . У меня просто произведения элементов матриц между собой и самих на себя требут 3 умножителей. Двухпортовое считывание позволяет 6 умножителей использовать. А подход с размерностью памяти, скажем, в три байта позволит 18 умножений делать за так. Из 20 аппаратных умножителей ещё 2 останутся - там потом ещё надо будет умножения делать. В целом, наверно, тут уже предел будет для этой ПЛИС. Цитата Первоисточник - в личке. Спасибо, тема близка - думаю, мне это сильно поможет. Только вот там VHDL, который я пока не изучал  . Длинный P.S. У меня с этим конвеерным подходом небольшой вопрос появился. Мне нужная сумма 9 элементов на конвеере (условно горизонтальном). Соответственно, чтобы частота не падала - нужен конвеер уже в вертикальном направлении - из 8 "складывателей"  и промежуточными регистрами. Если это так, то тогда можете подсказать, как оптимально такой вопрос решать. Так как это матрица, то мне не все суммы нужны (граничные эффект - когда окно к краям матрицы подходит). Как мне следующему модулю передать только нужные суммы? Я тут три подхода вижу: 1. Передавать все, а обрабатывать только нужные. 2. Передавать только нужные каким-нибудь сигналом, что на выходе нужная сумма. Но тут такой момент возникает, что от того момента, когда на конвеере будет нужная последовательность до того, как их сумма попадёт на выход пройдёт 4 такта. То есть и сигнал нужно задерживать на столько же тактов. Это регистром сдвига делать? 3. Другой подход. Какой  ?
--------------------
Усложнять - просто, упрощать - сложно.
|
|
|
|
|
Oct 6 2010, 09:34
|

тоже уже Гуру
     
Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973

|
Цитата(m0use @ Oct 6 2010, 12:23)  Многопортоый? В смысле двухпортовый? Я просто сделал, чтобы за такт два значения читалось. Можно больше? Ну, это я больше из интереса спрашиваю  . нет больше пока на одну RAMину нельзя, но можно дублировать контент (параллельная запись в несколько RAM никем не противопоказана) Цитата(m0use @ Oct 6 2010, 12:23)  Я думал так делать, но пока нацелился на конвеерный подход, который Maverick подкинул. а скомбинировать? Цитата(m0use @ Oct 6 2010, 12:23)  3. Другой подход. Какой  ? сдвиговый регистр вполне хорош, т.к. прост как табуретка и ресурсов по минимуму
--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
|
|
|
|
|
Oct 6 2010, 09:35
|

Участник

Группа: Участник
Сообщений: 29
Регистрация: 6-08-10
Пользователь №: 58 790

|
Цитата Подумайте, может можно заменить операцию деления на операцию сдвига (деления на числа степени двойки). Будет проще реализация wink.gif Надо подумать. Как-то очевидное решение не приходит. Если с = 2^n + r, то a = b / с = b / ( 2^n + r ) = b >> n / ( 1 + r >> n ). А дальше ряд Тейлора и ещё про дробную часть не забывать?.. Надо почитать про алгоритмы деления быстрые будет, но я бы пока на IP остановился.
--------------------
Усложнять - просто, упрощать - сложно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|