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

 
 
 
Reply to this topicStart new topic
> Как лучше сделать доступ к множественной маленькой RAM?, концепция контроллера массива памяти на Spartan 3 или Virtex 5
count_enable
сообщение Oct 5 2013, 16:06
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Дано большое число (25-100) простых вычислительных блоков, у каждого блока есть свое маленькое ОЗУ на 10-100 8битных слов. Число слов одинаково на всех модулях (назвём их ВБ). Каждый ВБ только читает свою память, и есть один глобальный контроллер который читает и пишет эти памяти, адресуя их 16-битно как номерВБ в старшем байте смещение слова в младшем.
Я так понимаю что памяти будут синтезироваться из BRAM. Но смотрю я на схему CLB Spartan 3 и ломаю голову как минимализировать глобальную шину от контроллера до каждой памяти. Сделать локально махонький улавливатель адреса к каждой ОЗУ, который будет пропускать только запросы к своему адресу, или тянуть линии типа CS (chip select) от контроллера к каждой памяти? Запись-чтение будут выборочными и огромный daisy-chain не выбор. Так же возможен переход на Virtex 5, где уже будет несколько сот блоков.
Как сделать это "по-умному"? Скорость чтения-записи контроллером не имеет значения, доступ для ВБ минимальный - один такт.
Go to the top of the page
 
+Quote Post
krux
сообщение Oct 5 2013, 16:25
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Вообще все будет зависеть от модели обмена данными по этой шине - в зависимости от того что вам нужнее: латентность доступа или пропускная способность.

для варианта "один мастер много слейвов" из 25...40 блоков имхо всё равно как вы это будете делать.
Но вот если проект будет разрастаться вширь то для сохранения скорости доступа придётся конвейеризировать+разбивать на подгруппы, и тогда блоки ремаппинга адресов+конвейеризации на подгруппу могут давать лучшие результаты по сходимости времянок.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
count_enable
сообщение Oct 5 2013, 16:33
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Скорость общения с мастером вообще не критична, более критично чтобы эта шина не сожрала большую часть логики под провода. Я так понял вы предлагаете разбивать ИБ на подгруппы, скажем по 32 и для каждой группы делать промежуточный мастер шины? Я тоже думал над таким вариантом. Какие будут преимущества в этом варианте, в плане hw occupation?
Go to the top of the page
 
+Quote Post
анатолий
сообщение Oct 5 2013, 16:37
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 10-12-05
Из: Украина
Пользователь №: 12 052



Цитата(count_enable @ Oct 5 2013, 19:06) *
Дано большое число (25-100) простых вычислительных блоков, Скорость чтения-записи контроллером не имеет значения, доступ для ВБ минимальный - один такт.

Тогда проще каждому блоку дать свой дешифратор адреса. А если очень мучает вопрос ширины шины, то можно организовать интерфейс I2С.
В любом случае - память двухпортовая обеспечит доступ ВБ за 1 такт.
Go to the top of the page
 
+Quote Post
count_enable
сообщение Oct 5 2013, 16:41
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Гм, а можно ли "на пальцах" прикинуть что больше сожрёт: слейв-контроллер в каждом ИБ или обычная 8-битная шина? У меня есть печальный опыт переноса нейросети в Спартан 3, так там начиная с 20 нейронов, соединённых "каждый с каждым" провода занимали больше логики, чем сами нейроны с моделью мембраны и памятью.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Oct 5 2013, 17:42
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(count_enable @ Oct 5 2013, 20:33) *
Скорость общения с мастером вообще не критична, более критично чтобы эта шина не сожрала большую часть логики под провода. ...

А если не критична, то сделайте последовательную шину и в адресной части каждый блок выбирайте одним битом. Это называется частичная дешифрация. Тогда не будет дешифраторов и мультиплексоров...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
krux
сообщение Oct 5 2013, 17:48
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата
Скорость общения с мастером вообще не критична, более критично чтобы эта шина не сожрала большую часть логики под провода

а мне в таком случае вообще видится что-то JTAG-подобное...


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
count_enable
сообщение Oct 5 2013, 18:27
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Цитата(krux @ Oct 5 2013, 20:48) *
а мне в таком случае вообще видится что-то JTAG-подобное...

daisy-chain? Нет, чтение-запись должны быть со свободным доступом к каждому блоку отдельно.

Цитата
то сделайте последовательную шину и в адресной части каждый блок выбирайте одним битом

То есть код 1 из N и у каждого блока регистр на N, и сигнал выбора подключен к одному биту из регистра? А адрес запихивается в регистр последовательно, по клоку от мастера?

Go to the top of the page
 
+Quote Post
iosifk
сообщение Oct 5 2013, 18:37
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(count_enable @ Oct 5 2013, 22:27) *
То есть код 1 из N и у каждого блока регистр на N, и сигнал выбора подключен к одному биту из регистра? А адрес запихивается в регистр последовательно, по клоку от мастера?

Ну а что тут сложного. Длинный сдвиговый регистр (СР). И у каждого блока "триггер адреса"... Произвели сдвиг. Триггеры подключены к битам СР, каждый к своему биту. Если переписалась 1, то блок выбран... Если 0, то не выбран... Минимум связей и дешифраторов. Если запишите несколько 1 в сдвиговый регистр, то можно одновременно писать данные в блоки...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
count_enable
сообщение Oct 5 2013, 18:46
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



То есть один большой СР на все блоки, и к каждому биту по триггеру? А чем это отличается от пучка линий CS, выходящих из мастера?
Go to the top of the page
 
+Quote Post
_pv
сообщение Oct 5 2013, 23:59
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(count_enable @ Oct 6 2013, 00:46) *
То есть один большой СР на все блоки, и к каждому биту по триггеру? А чем это отличается от пучка линий CS, выходящих из мастера?

зачем большой? много маленьких. все сидят на одной spi шине, по которой прилетает 24битное слово, каждый смотрит в старший байт и если находит свой адрес ВБ берет смещение из среднего и данные из младшего, если нет - игнорирует, никаких чипселектов.
правда чем это лучше 24х разрядной шины - не знаю.
но для шины на 100+ потребителей в источник наверное сигнала должен быть не простым, соответственно если это будет всего 2 линии, а не 24 может и есть смысл.
расскажите, кто знает, что внутри FPGA происходит когда для один выход нагружен на слишком много входов, что роутер с этим сделает?
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Oct 6 2013, 09:00
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Если обмен не критичен по времени и число модулей ВБ велико то _pv правильно предлагает - реализация ВБ должна НЕЗАВИСИМА от внешнего CP : Последовательная шина на входе с дешифрацией адреса в ВБ, последовательная шина на выходе с 0 уровнем в неактивном состоянии, выходы объединяются OR. Внутрення память в ВБ выполняется на Distributed RAM.

Для синхронной шины (типа SPI) реализация в ВБ может быть очень простой. Для Spartan3 такой интерфейс без проблем запустить на 100-200 МHz а для Virtex5 и на 250-350. MHz. Ну и в дизайне это удобно так как при изменении структуры или количества блоков ВБ не надо будет трогать CP.

Большое число потребителей (fan_out) на шине решается разпаралеливанием источников (чаще всего триггеров) каждый из которых питает свою часть потребителей. Причем такое разпаралеливанием может выполнятся синтезатором (а иногда и мапером) как в автоматическом режиме так и в ручном - указанием специальных constraint синтеза для требуемых цепей.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
count_enable
сообщение Oct 6 2013, 09:25
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Большое спасибо всем за дельные советы! В который раз убедился что этот форум лучшая площадка профессиональной помощи.

Теперь несколько другой вопрос: допустим что память ВБ это CAM, то есть приходить будет не линейный адрес, а 16-битный ключ А. Если в данном ВБ в памяти есть такой ключ, то память выставляет значение Б внутри ВБ. Множественные совпадения исключены, каждому А отвечает только одно значение Б.
В школе меня учили делать САМ циклом-перебором, т.е. каждый клок последовательно сравнивать входящий ключ с ключами в памяти. А Core Generator умеет синтезировать САМ с чтением в один цикл. Как я понимаю внутри есть по одному компаратору на каждый ключ. Стоит ли использовать Core Generator для создания маленьких САМ или же вручную набросать компараторов?
Go to the top of the page
 
+Quote Post

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

 


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


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