реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> To RAM or no to RAM - вот в чём вопрос!
m0use
сообщение Oct 5 2010, 16:14
Сообщение #16


Участник
*

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



Цитата
поделиться алгоритмом обработки изображения


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


--------------------
Усложнять - просто, упрощать - сложно.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 5 2010, 16:56
Сообщение #17


я только учусь...
******

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



Цитата(Koluchiy @ Oct 5 2010, 18:08) *
И резко возрастет объем проекта...

что делать? человек всегда становится перед выбором smile.gif

Цитата(m0use @ Oct 5 2010, 19:14) *
Функция f - простое выражение с двумя умножениями, разностью и делением.

с операцией деления по подробнее... На константу или переменную?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
m0use
сообщение Oct 5 2010, 17:39
Сообщение #18


Участник
*

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



Цитата
На константу или переменную?


На переменную - тоже моя головная боль будущая. Думаю использовать тут Core Generator. Потому что самому писать реализацию деления... когда-нибудь в другой раз smile.gif.

Ребят, скажите, пожалуйста, можно ли одновременно оба канала 2-port RAM использовать для чтения?

Сообщение отредактировал m0use - Oct 5 2010, 17:39


--------------------
Усложнять - просто, упрощать - сложно.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 5 2010, 17:57
Сообщение #19


я только учусь...
******

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



Цитата(m0use @ Oct 5 2010, 20:18) *
На переменную - тоже моя головная боль будущая. Думаю использовать тут Core Generator. Потому что самому писать реализацию деления... когда-нибудь в другой раз smile.gif.

На мой взгляд лучше реализация по предложенному мною 3 варианту. Т.е. через конвейерную обработку на проходе.
Поясню более подробно (мое видение):
Реализовывается задержка на требуемое кол-во строк и пикселей в строке (аналогичную как на рисунке во вложении, из-за этого и предложил уменьшить матрицу smile.gif). Таким образом организовываем окно которое будет "скользить" по изображению. Далее реализовываем конвейерную обработку в темпе считывания изображения (оно ж последовательно поступает на ПЛИС) для значений пикселей в окне - как пример архитектуры реализации конвейера представлен на втором рисунке.
PS На рисунках во вложении для примера представлена архитектура реализации медианного фильтра 3х3 для изображения.
PS PS На втором рисунке горизонтальные линии - делят обработку на такты для конвейера.
PS PS PS Но решение как лучше реализовывать, принимать Вам wink.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
m0use
сообщение Oct 5 2010, 20:02
Сообщение #20


Участник
*

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



Офигеть! Maverick, спасибо, что поведал про такую красивую идею!

А это откуда картинки? Просто первоисточник хотел бы посмотреть! Наверно, хорошая книжка smile.gif. И, может быть Вы в принципе можете что-то посоветовать по теме таких вот стандартных схемотехнических решений? Буду очень благодарен.

А кстати, FIFO в простейшем случае (который здесь как задержка выступает) - это просто нужное количество регистров?


--------------------
Усложнять - просто, упрощать - сложно.
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Oct 5 2010, 20:25
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



Цитата
что делать? человек всегда становится перед выбором


Иногда очень легко стать или перед пределом максимально возможной емкости отдельно взятой микросхемы, или (чаще) отдельно выделенного количества денег...

Шустрые плисины - они того, дорогие очень.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Oct 5 2010, 22:43
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(m0use @ Oct 5 2010, 21:38) *
Теперь думаю умножение реализовать только на аппаратных, соответственно удобно RАМ использовать. Умножил, хорошо. Но теперь нужно сделать сумму по окрестности каждого элемента и теперь RАМ не удобна, так как даёт доступ только к одному элементу за такт

есть еще такой вариант: использовать RAM с шириной шины данных N*(сколько_у_вас_там_бит), соответственно можно распараллелить вычисления
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Oct 6 2010, 04:48
Сообщение #23


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(vadimuzzz @ Oct 6 2010, 02:43) *
есть еще такой вариант: использовать RAM с шириной шины данных N*(сколько_у_вас_там_бит), соответственно можно распараллелить вычисления

чтобы считывать сразу несколько точек?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Oct 6 2010, 05:42
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(rv3dll(lex) @ Oct 6 2010, 11:48) *
чтобы считывать сразу несколько точек?

ну да, блочная память FPGA такие фокусы позволяет. еще многопортовый доступ можно задействовать.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 6 2010, 06:26
Сообщение #25


я только учусь...
******

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



Цитата(m0use @ Oct 5 2010, 23:02) *
Офигеть! Maverick, спасибо, что поведал про такую красивую идею!

Всегда пожалуйста! wink.gif

Цитата
А это откуда картинки? Просто первоисточник хотел бы посмотреть! Наверно, хорошая книжка smile.gif. И, может быть Вы в принципе можете что-то посоветовать по теме таких вот стандартных схемотехнических решений? Буду очень благодарен.

Первоисточник - в личке. Это даже не книжка - магистерская работа студента из Америки кажется. smile.gif
Но довольно не плохая, как по мне...

Цитата
А кстати, FIFO в простейшем случае (который здесь как задержка выступает) - это просто нужное количество регистров?

Да


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Oct 6 2010, 06:51
Сообщение #26


тоже уже Гуру
******

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



Цитата(Maverick @ Oct 6 2010, 09:26) *
Первоисточник - в личке.

а может всё-таки огласите весь список? хотя бы название.
спб


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Oct 6 2010, 07:21
Сообщение #27


я только учусь...
******

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



Цитата(CaPpuCcino @ Oct 6 2010, 09:51) *
а может всё-таки огласите весь список? хотя бы название.
спб

Не проблема... smile.gif
Первоисточник (где-то на форуме уже выкладывал)

Размер архива 814.79 килобайт

Там как пример рассмотрена реализация медианного фильтра и в конце приведено описание на VHDL.

PS Как по мне там красиво и подробно расписана эта идея и приведен пример реализации.


Цитата(m0use @ Oct 5 2010, 23:02) *

Подумайте, может можно заменить операцию деления на операцию сдвига (деления на числа степени двойки). Будет проще реализация wink.gif


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
m0use
сообщение Oct 6 2010, 09:23
Сообщение #28


Участник
*

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



Цитата
есть еще такой вариант: использовать RAM с шириной шины данных N*(сколько_у_вас_там_бит), соответственно можно распараллелить вычисления


Я думал так делать, но пока нацелился на конвеерный подход, который Maverick подкинул.

Цитата
еще многопортовый доступ можно задействовать.


Многопортоый? В смысле двухпортовый? Я просто сделал, чтобы за такт два значения читалось. Можно больше? Ну, это я больше из интереса спрашиваю smile.gif.

У меня просто произведения элементов матриц между собой и самих на себя требут 3 умножителей. Двухпортовое считывание позволяет 6 умножителей использовать. А подход с размерностью памяти, скажем, в три байта позволит 18 умножений делать за так. Из 20 аппаратных умножителей ещё 2 останутся - там потом ещё надо будет умножения делать. В целом, наверно, тут уже предел будет для этой ПЛИС.

Цитата
Первоисточник - в личке.


Спасибо, тема близка - думаю, мне это сильно поможет. Только вот там VHDL, который я пока не изучал smile.gif.

Длинный P.S.

У меня с этим конвеерным подходом небольшой вопрос появился. Мне нужная сумма 9 элементов на конвеере (условно горизонтальном). Соответственно, чтобы частота не падала - нужен конвеер уже в вертикальном направлении - из 8 "складывателей" smile.gif и промежуточными регистрами. Если это так, то тогда можете подсказать, как оптимально такой вопрос решать. Так как это матрица, то мне не все суммы нужны (граничные эффект - когда окно к краям матрицы подходит). Как мне следующему модулю передать только нужные суммы? Я тут три подхода вижу:

1. Передавать все, а обрабатывать только нужные.
2. Передавать только нужные каким-нибудь сигналом, что на выходе нужная сумма. Но тут такой момент возникает, что от того момента, когда на конвеере будет нужная последовательность до того, как их сумма попадёт на выход пройдёт 4 такта. То есть и сигнал нужно задерживать на столько же тактов. Это регистром сдвига делать?
3. Другой подход. Какой smile.gif ?


--------------------
Усложнять - просто, упрощать - сложно.
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Oct 6 2010, 09:34
Сообщение #29


тоже уже Гуру
******

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



Цитата(m0use @ Oct 6 2010, 12:23) *
Многопортоый? В смысле двухпортовый? Я просто сделал, чтобы за такт два значения читалось. Можно больше? Ну, это я больше из интереса спрашиваю smile.gif.

нет больше пока на одну RAMину нельзя, но можно дублировать контент (параллельная запись в несколько RAM никем не противопоказана)

Цитата(m0use @ Oct 6 2010, 12:23) *
Я думал так делать, но пока нацелился на конвеерный подход, который Maverick подкинул.

а скомбинировать?

Цитата(m0use @ Oct 6 2010, 12:23) *
3. Другой подход. Какой smile.gif ?

сдвиговый регистр вполне хорош, т.к. прост как табуретка и ресурсов по минимуму


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
m0use
сообщение Oct 6 2010, 09:35
Сообщение #30


Участник
*

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



Цитата
Подумайте, может можно заменить операцию деления на операцию сдвига (деления на числа степени двойки). Будет проще реализация wink.gif


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


--------------------
Усложнять - просто, упрощать - сложно.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01562 секунд с 7
ELECTRONIX ©2004-2016