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

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


Участник
*

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



Привет, ребят.

Стою перед дилемой просто. Нужна обработка матриц - перемножение, сложение элементов. У меня такие мысли.

С первого взгляда, достаточно удобно описывать матрицу как RAM, особенно когда нужно перемножать элементы (на аппаратных умножителях). Но в таком случае за один CLK можно работать только с одним элементом массива (считывать из памяти). Это большое но, потому что хочется максимально распараллелить обработку матрицы. То есть хочется одновременного доступа ко всем элементам - но (и опять же но) комбинаторной логике много, наверно, получается - скорость падает.

Есть ли компромисс? Использовать небольшие блоки памяти? Подскажите, уважаемые коллеги! И вообще верны ли мои рассуждения? smile.gif.


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


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

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



Цитата(m0use @ Oct 5 2010, 11:52) *
Привет, ребят.

Стою перед дилемой просто. Нужна обработка матриц - перемножение, сложение элементов. У меня такие мысли.

С первого взгляда, достаточно удобно описывать матрицу как RAM, особенно когда нужно перемножать элементы (на аппаратных умножителях). Но в таком случае за один CLK можно работать только с одним элементом массива (считывать из памяти). Это большое но, потому что хочется максимально распараллелить обработку матрицы. То есть хочется одновременного доступа ко всем элементам - но (и опять же но) комбинаторной логике много, наверно, получается - скорость падает.

Есть ли компромисс? Использовать небольшие блоки памяти? Подскажите, уважаемые коллеги! И вообще верны ли мои рассуждения? smile.gif.

какого размера матрицы? и элементы в матрице (их разрядность)?


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

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


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

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



ващето память имеет скорость больше чем остальная плис. поэтому можно собрать рядом с памятью переключатель, который будет подставлять несколько каналов за такт работы основного устройства.
Go to the top of the page
 
+Quote Post
D13
сообщение Oct 5 2010, 11:28
Сообщение #4





Группа: Новичок
Сообщений: 5
Регистрация: 5-07-10
Из: Томск
Пользователь №: 58 292



Цитата(rv3dll(lex) @ Oct 5 2010, 17:59) *
ващето память имеет скорость больше чем остальная плис.


в смысле?
Go to the top of the page
 
+Quote Post
m0use
сообщение Oct 5 2010, 11:33
Сообщение #5


Участник
*

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



Цитата
какого размера матрицы? и элементы в матрице (их разрядность)?

Неплохо было бы, чтобы матрица была размером не меньше, чем 64x48. Вообще надо обрабатывать изображение 640x480, но думаю, такой объём не эффективно обрабатывать - буду разбивать на блоки порядка 64x48. Элемент матрицы - байт.

rv3dll(lex), а могли бы Вы пояснить. Для того, чтобы такое провернуть, нужен отдельный CLK или можно преобразовать общий CLK и получить большую частоту?


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


Знающий
****

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



Маленькие блоки RAM - это распределенная RAM.
Если она, конечно, есть.
Go to the top of the page
 
+Quote Post
m0use
сообщение Oct 5 2010, 11:58
Сообщение #7


Участник
*

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



Цитата
Маленькие блоки RAM - это распределенная RAM.


Кстати, об этом тоже хотел узнать. Вот у меня небольшой блок памяти описывается поведенчески. На RTL схеме изображается блок RAM, всё как надо. Так вот этот блок RAM - это распределённая память на LUT или блочная RAM?

Просто, я как понял, именно блочную память эффективно с перемножителями использовать, потому что они в кристалле рядом. И можно ли как-то синтезатору SXT сказать, чтобы он блочную память использовал, а не распределённую даже для небольших блоков?


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


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(m0use @ Oct 5 2010, 06:58) *
Просто, я как понял, именно блочную память эффективно с перемножителями использовать, потому что они в кристалле рядом. И можно ли как-то синтезатору SXT сказать, чтобы он блочную память использовал, а не распределённую даже для небольших блоков?

а ничего что латентность чтения у этих блоков памяти разная ? smile.gif


--------------------
Go to the top of the page
 
+Quote Post
m0use
сообщение Oct 5 2010, 12:16
Сообщение #9


Участник
*

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



Цитата
а ничего что латентность чтения у этих блоков памяти разная ? smile.gif


Разная - это какая? У блочной памяти время отклика больше?

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


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


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

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



вообще про какую плис речь?

для памяти нужен свой быстрый клок.
сама память работать будет на частотах например 500 при том, что остальная схема, если она большая не получится и на 200.

применимо к ксайлинх блочная и распределённая память имеет разные задержки на чтение, точнее может иметь. распределённая может быть асинхронной, а блочная всегда синхронная.
Go to the top of the page
 
+Quote Post
m0use
сообщение Oct 5 2010, 13:08
Сообщение #11


Участник
*

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



А менеждеры клоков умеют получать из одного клока другой, более быстрый? Просто у меня на отладочной плате только и генератор на 50МГц smile.gif. И получается, если клоки разные будут для памяти и для основной логики, то надо будет решать вопрос синхронизации? Enable какой-нибудь делать?

ПЛИС - Spartan3E.


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


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

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



Цитата(m0use @ Oct 5 2010, 14:33) *
Неплохо было бы, чтобы матрица была размером не меньше, чем 64x48. Вообще надо обрабатывать изображение 640x480, но думаю, такой объём не эффективно обрабатывать - буду разбивать на блоки порядка 64x48. Элемент матрицы - байт.

rv3dll(lex), а могли бы Вы пояснить. Для того, чтобы такое провернуть, нужен отдельный CLK или можно преобразовать общий CLK и получить большую частоту?

как по мне лучше распределенная память - на регистрах. Таким образом обеспечивается параллельный доступ ко всем элементам матрицы. Но возможно скорость обработки упадет из-за этого...
Если на RAM блоках тогда нужно придумать FSM, который будет последовательно считывать данные матрицы из RAM блоков и записывать результат обратно в RAM блоки или передавать дальше на обработку... В этом случае наверное нужна двухпортовая память, чтобы "развязать" по скорости поступающих данных на входе и обработанных данных на выходе. Это в том случае если не удастся реализовать обработку входящих данных на проходе (обработка в реалтайме)...
PS Почему бы не взять за основу матрицу 8х6? Как по мне ресурсоемкость меньше и т.д. ...

Цитата(m0use @ Oct 5 2010, 16:08) *
И получается, если клоки разные будут для памяти и для основной логики, то надо будет решать вопрос синхронизации? Enable какой-нибудь делать?

ПЛИС - Spartan3E.

Выход - двухпортовая память или фифо или синхронизаторы на основе двух регистров.

Можно по другому пути пойти (память (во внутреннюю или во во внешнюю пока не важно))
1. изображение 640x480 записывать в память, а потом уже производить его обработку.
2. Изображение поступает например на частоте 5 МГц, а Ваша схема работает на частоте 50 МГц. Тогда можно организовать автомат, который на каждом десятом такте производил запись входных данных ( изображения 640x480) в память, а остальные 9 тактов производил бы обработку данных.
3. Организовать конвейерное обработку "на проходе". Т.е. производить обработку изображения по мере поступления пикселей изображения. Изображение ж на ПЛИС поступает последовательно..., правильно? Таким образом, когда будет конец кадра изображения - обработанные данные при таком подходе также будут готовы (с некоторой задержкой)


--------------------
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, 14:38
Сообщение #13


Участник
*

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



Цитата
Почему бы не взять за основу матрицу 8х6? Как по мне ресурсоемкость меньше и т.д. ...


Матрицу 8x6 использую пока для отладки. Но вообще думаю о больших размерах smile.gif.

Просто изображение большое - 640x480 и блоков по 8x6 получится много - то есть чтобы всю матрицу обработать, нужно много проходов. Конечная цель - получить хорошую скорость обработки именно изображения в целом. Поэтому и хочу "элементарный" блок увеличить.

Почему пришлось использовать RAM. В самом начале (когдя я ещё ничего не понимал о внутренней структуре ПЛИС, и смотрел на него как на штуку, которая может много оперций делать за один такт) я всё сделал на регистрах. И всю обработку сделал параллельной. А так как из порядка 100 умножений кристалл аппаратно может сделать лишь 20 получилось много логики (под 100% ресурсов на матрице 8x6) и мало скорости (5 МГц smile.gif).

Теперь думаю умножение реализовать только на аппаратных, соответственно удобно RАМ использовать. Умножил, хорошо. Но теперь нужно сделать сумму по окрестности каждого элемента и теперь RАМ не удобна, так как даёт доступ только к одному элементу за такт (выше был предложен вариант разных клок доменов, но для меня это круто пока).

Так что буду пробовать. Умножу как RAM, а складывать буду как регистровую память. Посмотрим, насколько макс.такт упадёт. Пока 120МГц. Я бы просто не хотел ниже 100 опускаться. Просто основная операция - умножение по ресурсам. И если их хотя бы больше 10 использовать, но эквивалентная частота будет больше 1ГГц.



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


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

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



Цитата(m0use @ Oct 5 2010, 17:38) *

для конкретности понимания Вас не могли бы поделиться алгоритмом обработки изображения smile.gif, который необходимо реализовать и требованиями к реализации?


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

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


Знающий
****

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



Цитата
как по мне лучше распределенная память - на регистрах. Таким образом обеспечивается параллельный доступ ко всем элементам матрицы. Но возможно скорость обработки упадет из-за этого...


И резко возрастет объем проекта...
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 - 15:56
Рейтинг@Mail.ru


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