Lutovid 0 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба Привет всем! У меня появилась задача сделать ринг буффер на ддр. Циклично писать по очереди все адреса ddr4. Я уже реализовывал подобную задачу для одной микросхемы - выбирал нэтив интерфейс и писал стейт машину, но в этот раз задача - объединить 2 микросхемы в одну область адресного пространства. Возник вопрос как это сделать корректнее - никогда не использовал DMA, на сколько целесообразно его использовать и чем он поможет? или объединить через акси интерконнект? основная проблема в том, что приходится ставить два MIG контроллера у которых свой клоковый домен. Мне бы хотелось писать свою стейт машину на одном клоковом домене и управлять данными и адресами чере какой-то переходник. Велосипеды делать желания нет. Соответственно вопрос - как решать такую задачу корректнее и быстрее И изменится ли пропускная способность при использовании доп. ядер? Необходимо циклично писать в обе ддр на максимально допустимой пропускной способности. Может быть есть какие-то примеры - я пока не нашел? Пока я вижу только подключение обоих мигов через интерконнект к моей стейт машине(мастеру). Но является ли это решение оптимальным? Работа с акси стримом все таки по проще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба Приветствую! 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 0 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба 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 делать времени к сожалению нет. Так что я сразу рассчитывал на первый вариант впросы правда остались - пропускная способность изменится ли? как я бы мог использовать приведенные вами готовые блоки? я не имел опыта работы с ними(кроме интерконнекта - про который я и думал - идея была использовать только его и миги, а мастером свою стэйт машину) Хотя вопрос наверно глупый, так как я скупо описал задачу, но суть пока только в том, что бы циклично писать, источник данных - акси стрим, единственное решение, которое я сейчас ищу - это упрощение интерфейса общения - в стандартном мэмори мэпд интерфейсе слишком много ног и всякой интерфейсной логики + сохранение пропускной способности Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darky777 0 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба что лично приходит мне в голову: может быть стейт машина писала бы вам в один кастом модуль,некий ваш контроллер, позволяющий вам относится ко всей памяти как к одной. и стейтмашина и кастомный модуль работают на одном из клоков MIG-контроллеров, или вообще, на третьем. контроллер записывает в дуалклоковые две фифошки данные для каждой памяти. А потом с выплеванными данными работает некий модуль, работающий с каждым MIG контроллером. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 0 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба 18 minutes ago, Darky777 said: что лично приходит мне в голову: может быть стейт машина писала бы вам в один кастом модуль,некий ваш контроллер, позволяющий вам относится ко всей памяти как к одной. и стейтмашина и кастомный модуль работают на одном из клоков MIG-контроллеров, или вообще, на третьем. контроллер записывает в дуалклоковые две фифошки данные для каждой памяти. А потом с выплеванными данными работает некий модуль, работающий с каждым MIG контроллером. Я полагаю для этх задач уже есть готовые решения, поэтому хотелось бы избежать такого метода Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба Приветствую! Пропускная будет зависеть от конфигурации объединения адресного пространства Так как например можно распределять адреса между MIG малыми блоками (interlive) начиная от размера burst на шине. Тогда при потоковой записи/чтении пропускная может быть ~2 раза больше чем отдельный MIG. Естественно для этого intercinnect core должен быть как минимум в 2 раза шире чем MIG, ну или работать на >=2x кратной частоте. Ну а также и того как вы настроите interconnect (размеры burst, буферизация, число запросов на чтение/запись в конвеере). FSM Вам в любом случае придется делать. Почитайте описание на AXI_DataMover, и AXI_DMA. Первый легко цепляется к FSM, ну а второй (кстати сделан как раз на базе AXI_DataMover и FSM) более заточен на управление CPU. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 0 4 октября, 2018 Опубликовано 4 октября, 2018 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться