|
To RAM or no to RAM - вот в чём вопрос! |
|
|
|
Oct 6 2010, 09:51
|

Участник

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

|
Цитата можно дублировать контент (параллельная запись в несколько RAM никем не противопоказана) Ага - хорошее дополнение. Я немного по-другому делал - разбивал одну RAM на две меньших (без дублирования) - но тут опять же предел в 20 умножителей. Вариантов по его достижению уже немало было рассмотрено. По быстродействию и ресурсам они, наверно, очень близки - надо просто выбрать один  . Цитата а скомбинировать? Пока так и делаю, потому что умножение написано на RAM - а дальше конвеер на сложения пойдёт. Получится освоить этот подход на сложении - попробую и поумножать с его поможью. Просто этот подход очень привлекателен с той точки зрения, что входные данные плывут со своей скоростью, а мы их обрабатываем и не задерживаем их. А с RAM я жду заполнения памяти. Хотя можно, наверно попробовать уже считывать из RAM до того, как она заполнилась... попробовать можно, конецно.
--------------------
Усложнять - просто, упрощать - сложно.
|
|
|
|
|
Oct 6 2010, 13:34
|

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

|
Цитата(m0use @ Oct 6 2010, 12:23)  У меня с этим конвеерным подходом небольшой вопрос появился. Мне нужная сумма 9 элементов на конвеере (условно горизонтальном). Соответственно, чтобы частота не падала - нужен конвеер уже в вертикальном направлении - из 8 "складывателей"  и промежуточными регистрами. Если это так, то тогда можете подсказать, как оптимально такой вопрос решать. Так как это матрица, то мне не все суммы нужны (граничные эффект - когда окно к краям матрицы подходит). Как мне следующему модулю передать только нужные суммы? Я тут три подхода вижу: 1. Передавать все, а обрабатывать только нужные. 2. Передавать только нужные каким-нибудь сигналом, что на выходе нужная сумма. Но тут такой момент возникает, что от того момента, когда на конвеере будет нужная последовательность до того, как их сумма попадёт на выход пройдёт 4 такта. То есть и сигнал нужно задерживать на столько же тактов. Это регистром сдвига делать? 3. Другой подход. Какой  ? поясните, плиз 2 пункт
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Oct 7 2010, 14:48
|

Участник

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

|
Цитата поясните, плиз 2 пункт Неясно выразился, возможно. Например, матрица 4x4. На конвеер она поступает последовательно: ...-13-[12-11-10]-9-[8-7-6]-5-[4-3-2]-1-... Но оконная функция не все комбинации выбирает, а только: *__*__*__4 *__*__*__8 *__*__*__12 13_14_15_16 1__*__*__* 5__*__*__* 9__*__*__* 13_14_15_16 и т.п. То есть сумма 13+12+11+9+8+7+5+4+3, к примеру, нам не нужна. Но на выходе она есть. Поэтому нужна дополнительная информация. Которая должна быть синхронизирована с потоком основных данных.
Сообщение отредактировал m0use - Oct 7 2010, 14:50
--------------------
Усложнять - просто, упрощать - сложно.
|
|
|
|
|
Oct 7 2010, 21:30
|

Участник

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

|
Ребят, всем спасибо за советы и помощь. Я бы хотел теперь поделиться практическими результатами. Написал две реализации модуля, который принимает входное изображение, получает градиентные матрицы и перемножает их элементы. Одна реализация - конвеер с отводами, другая основана на использовании RAM. Входная матрица - 8x6. Речь прежде всего о скорости. И вот какие результаты: конвеер - порядка 220 МГц, RAM - порядка 120 МГц. При этом в первом случае для полного прохода ещё и тактов меньше требуется. Прикладываю RTL-схемы модулей для наглядности. Возможно, что я не оптимально реализовал вариант с RAM. Там больше логики, потому что весь процесс разбивается на этапы и окончание одного запускает другой. Тут, наверно, причина в том, что RAM имеет ограниченное число портов и нельзя считывать данные одновременно с процессом их записи. Поэтому приходится ждать. К чему я. Возникло предположение, что подход с конвеером здесь более эффективен. Получается, где поток данных "проходит" через кристалл, не задерживаясь, RAM не к месту? RAM оправдана там, где данные "задерживаются" для многократного вторичного использования? Или как  ?
Эскизы прикрепленных изображений
--------------------
Усложнять - просто, упрощать - сложно.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|