Перейти к содержанию
    

ring buffer ddr4

Привет всем! У меня появилась задача сделать ринг буффер на ддр. Циклично писать по очереди все адреса ddr4. Я уже реализовывал подобную задачу для одной микросхемы - выбирал нэтив интерфейс и писал стейт машину, но в этот раз задача - объединить 2 микросхемы в одну область адресного пространства. Возник вопрос как это сделать корректнее - никогда не использовал DMA, на сколько целесообразно его использовать и чем он поможет? или объединить через акси интерконнект? основная проблема в том, что приходится ставить два MIG контроллера у которых свой клоковый домен. Мне бы хотелось  писать свою стейт машину на одном клоковом домене и управлять данными и адресами чере какой-то переходник. Велосипеды делать желания нет.

Соответственно вопрос - как решать такую задачу корректнее и быстрее И изменится ли пропускная способность при использовании доп. ядер? Необходимо циклично писать в обе ддр на максимально допустимой пропускной способности.

Может быть есть какие-то примеры - я пока не нашел?

Пока я вижу только подключение обоих мигов через интерконнект к моей стейт машине(мастеру). Но является ли это решение оптимальным? Работа с акси стримом все таки по проще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

1 hour ago, Lutovid said:

.. Возник вопрос как это сделать корректнее - никогда не использовал DMA, на сколько целесообразно его использовать и чем он поможет? или объединить через акси интерконнект?

Задачу надо решать поэтапно. Для начала - DMA никоим образом не относится к объединению шин. Затем надо уточнить как вам надо объединять вглубь или вширь? Ну а потом выбираете как вам проще  будет это сделать -

1  воткнуть 2 MIG в AXI4 interconnect - плюшки: универсальная шина, встроенный  СDC для master/slave портов,  Для реализации чтения/записи можно использовать готовые блоки (AXI_DataMover, AXI_DMA, ...)

2  Сделать свой CDC на fifo для каждого MIG, а потом уже объединять на своей fsm. плюшки: все свое, родное! Ни на что не похожее :)

 

Имхо - первый вариант предпочтителен 

Удачи! Rob.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 minutes ago, RobFPGA said:

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

Задачу надо решать поэтапно. Для начала - DMA никоим образом не относится к объединению шин. Затем надо уточнить как вам надо объединять вглубь или вширь? Ну а потом выбираете как вам проще  будет это сделать -

1  воткнуть 2 MIG в AXI4 interconnect - плюшки: универсальная шина, встроенный  СDC для master/slave портов,  Для реализации чтения/записи можно использовать готовые блоки (AXI_DataMover, AXI_DMA, ...)

2  Сделать свой CDC на fifo для каждого MIG, а потом уже объединять на своей fsm. плюшки: все свое, родное! Ни на что не похожее :)

 

Имхо - первый вариант предпочтителен 

Удачи! Rob.

 

Спасибо за ответ!

Объединить нужно вглубь, свой CDC делать времени к сожалению нет. Так что я сразу рассчитывал на первый вариант впросы правда остались - пропускная способность изменится ли? как я бы мог использовать приведенные вами готовые блоки? я не имел опыта работы с ними(кроме интерконнекта - про который я и думал - идея была использовать только его и миги, а мастером свою стэйт машину)

 

Хотя вопрос наверно глупый, так как я скупо описал задачу, но суть пока только в том, что бы циклично писать, источник данных - акси стрим, единственное решение, которое я сейчас ищу - это упрощение интерфейса общения - в стандартном мэмори мэпд интерфейсе слишком много ног и всякой интерфейсной логики + сохранение пропускной способности

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

контроллер записывает в дуалклоковые две фифошки данные для каждой памяти.

А потом с выплеванными данными работает некий модуль, работающий с каждым MIG контроллером.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, Darky777 said:

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

контроллер записывает в дуалклоковые две фифошки данные для каждой памяти.

А потом с выплеванными данными работает некий модуль, работающий с каждым MIG контроллером.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Пропускная будет зависеть от конфигурации объединения адресного пространства Так как например можно  распределять адреса между  MIG  малыми блоками (interlive)  начиная от размера burst на шине. Тогда при потоковой записи/чтении пропускная может быть ~2 раза больше чем отдельный MIG. Естественно для этого intercinnect core должен быть как минимум в 2 раза шире чем MIG, ну или работать на >=2x кратной частоте. Ну а также и того как вы настроите interconnect (размеры burst, буферизация, число запросов на чтение/запись в конвеере).

FSM Вам в любом случае придется делать.  Почитайте описание на AXI_DataMover, и AXI_DMA. Первый легко цепляется к FSM, ну а второй (кстати сделан как раз на базе AXI_DataMover и FSM) более заточен на управление CPU. 

 

Удачи! Rob.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, RobFPGA said:

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

 

Пропускная будет зависеть от конфигурации объединения адресного пространства Так как на пример можно  распределять адреса между  MIG  малыми блоками (interlive)  начиная от размера burst на шине. Тогда при потоковой записи/чтении пропускная может быть ~2 раза больше чем отдельный MIG. Естественно для этого intercinnect core должен быть как минимум в 2 раза шире чем MIG, ну или работать на >=2x кратной частоте. Ну а также и того как вы настроите interconnect (размеры burst, буферизация, число запросов на чтение/запись в конвеере).

FSM Вам в любом случае придется делать.  Почитайте описание на AXI_DataMover, и AXI_DMA. Первый легко цепляется к FSM, ну а второй (кстати сделан как раз на базе AXI_DataMover и FSM) более заточен на управление CPU. 

 

Удачи! Rob.

 

Спасибо! CPU мне не нужен, почитаю про AXI_DataMover

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...