Можно ли подключить DDR2 в двухканальном режиме к FPGA?
Нужно сделать плату, где FPGA пишет в память и пересылает это по 10Gb Ethernet параллельно. Пересылаемый поток данных порядка 6 Гбит/с. Напрашивается мысль о двухканальном режиме - один модуль пишет в память, а модуль работы с Ethernet - читает.
Вопрос: есть ли IP-ядра, которые умеют двухканальный режим? Если нет, реально ли это сделать с помощью двух разных модулей работы с DDR2 (оставим вопрос о количестве пинов).
P.S.Не предлагайте обойтись без памяти, буфер нужен обязательно, и он может быть очень большим (десятки ГБ).
Вполне реально. Специаьный контроллер ддр вам не нужен - можно обойтись стандартныи и к нему приделать приблуду с арбитражем, которая будет поочередно писать/читать. Внутри приблуды сделать внутренний буфер на запись, достаточный для оперативного накопления данных пока читается в другую сторону.
Если уж делать совсем колхозно - два независимых контроллера ддр, которые меняются местами на чтение/запись по мере заполнения памяти.
Не, не. Я имел в виду контроллер в виде ip-ядра внутри FPGA. Без нее тут все равно никак. Можно, конечно, подумать на счет высокопроизводительного процессора и пытаться все по dma гнать, но как-то мне сомнительно.
А что является источником данных, кстати?
Это обычно называется двухпортовая память. Весьма дорогое удовольствие.
Толку что у вас будет два модуля - ведь данные с одного как-то должны попасть в другой!
Другое дело, если вы используя два модуля создадите один массив памяти но записывать и читать из них будете по очереди - пока один модуль выполняет операцию чтения/записи идет обращение к другому... Да, и ведь еще циклы регенерации не надо пропускать.
Как-то ведь делают. Не уверен что дело здесь в прошивке, должна быть какая-то аппаратная часть, ведь два модуля по сути управляются своими схемами удерживающими независимо шину адреса и данных. Возможны какие-то компромиссы, если задача это позволяет. Например, если адрес только инкрементируется, то достаточно просто сигналы RAS и CAS поочереди выдавать на разные модули, а шину рассчитать на двойную пропускную способность.
Чего-то я подумал, и в голову вдруг пришла гениальная мысль. Чтобы ускорить производительность надо просто использовать модули параллельно. Один модуль - считываем/записываем по 32 бита за раз а два модуля позволят писать 64 бита за раз - и т.д. Осталось только реализовать буфер который бы копил 64 бита и записывал в такую память. При считывании - 64 бита считали и отдаем по мере необходимости, затем считываем следующую порцию.