Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Altera MAX II мультиплексирование памяти, подскажите как реализовать?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
zksystem
Доброго всем времени суток.
Подскажите пожалуйста как реализовать следующее:

Имеется микроконтроллер с внешней шиной памяти, CPLD Altera MAXII в которой реализован видеоконтроллер. Для реализации видеопамяти тут казалось бы проще поставить двухпортовую память, на один порт контроллер, а на второй CPLD и не париться, но цена на них уж очень кусается. Таким образом было решено использовать два банка памяти (в два чипа). Банки подключаются специальным сигналом, когда первый банк подключен к микроконтроллеру, то второй банк подключен к видеоконтроллеру для вывода информации, при переключении банки меняются наоборот.
В таком случае необходим двунаправленный мультиплексор, реализация которого у меня что-то не выходит... Смотрел в сторону двунаправленных шин, но там используются триггеры с тактированием загрузки...
По другому эту задачу никак не реализовать?
zverek
Цитата(zksystem @ Jul 13 2009, 00:38) *
Доброго всем времени суток.
Подскажите пожалуйста как реализовать следующее:

Имеется микроконтроллер с внешней шиной памяти, CPLD Altera MAXII в которой реализован видеоконтроллер. Для реализации видеопамяти тут казалось бы проще поставить двухпортовую память, на один порт контроллер, а на второй CPLD и не париться, но цена на них уж очень кусается. Таким образом было решено использовать два банка памяти (в два чипа). Банки подключаются специальным сигналом, когда первый банк подключен к микроконтроллеру, то второй банк подключен к видеоконтроллеру для вывода информации, при переключении банки меняются наоборот.
В таком случае необходим двунаправленный мультиплексор, реализация которого у меня что-то не выходит... Смотрел в сторону двунаправленных шин, но там используются триггеры с тактированием загрузки...
По другому эту задачу никак не реализовать?


Озадачен очень похожей проблемой причем тоже на MAXII. То что Вы делаете называется RAMDAC. Оно состоит из DAC'a прикрученного к CPLD и памяти, прикрученной тоже к CPLD. Кстати, хотел посоветоваться пор двух портовую память (какие они бывают и сколько стоят?), можно в личку? Я так понял, что от железа здесь мало что зависит и все делать придется программно, точнее на Verilog'е/VHDL'е. На сайте Vesa.org есть список режимов и тайминги. Нужно всего лишь выделить память под буфер кадра и... А дальше начинаются траблы. Или менять эти буферы (Double Buffering/Triple Buffering) или двухпортовая память... Кстати, что очень любопытно, даже в современных видеокартах (встроенных) никаких VRAM'ов нет и мультиплексоров тоже нет, все делается при помощи драйвера/прошивки, поэтому картинка на экране вроде стабильная, а пропускная способность и без того, под завязку загруженной DDR2/DDR3, падает в разы.

Кстати, где вообще можно купить VRAM, которая будет работать с MAXII?
des00
Цитата(zksystem @ Jul 12 2009, 14:38) *
Таким образом было решено использовать два банка памяти (в два чипа). Банки подключаются специальным сигналом, когда первый банк подключен к микроконтроллеру, то второй банк подключен к видеоконтроллеру для вывода информации, при переключении банки меняются наоборот.
В таком случае необходим двунаправленный мультиплексор, реализация которого у меня что-то не выходит... Смотрел в сторону двунаправленных шин, но там используются триггеры с тактированием загрузки...
По другому эту задачу никак не реализовать?


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

Цитата(zverek @ Jul 12 2009, 16:20) *
Кстати, что очень любопытно, даже в современных видеокартах (встроенных) никаких VRAM'ов нет и мультиплексоров тоже нет, все делается при помощи драйвера/прошивки, поэтому картинка на экране вроде стабильная, а пропускная способность и без того, под завязку загруженной DDR2/DDR3, падает в разы.


забыли про системную шину и ее арбитра ? вот он и есть ваш "мультиплексор" smile.gif
DmitryR
Цитата(zksystem @ Jul 13 2009, 00:38) *
Для реализации видеопамяти тут казалось бы проще поставить двухпортовую память, на один порт контроллер, а на второй CPLD и не париться, но цена на них уж очень кусается.

Иногда бывает и проще, и чуть ли не дешевле вместо CPLD+SRAM поставить FPGA+DRAM. В частности и потому что стандартный контроллер DRAM все вопросы мультиплексирования возьмет на себя, ему знай только запросы в FIFO засовывай.
EvgenyNik
С одним чипом памяти, разделённым на 2 виртуальных банка и CPLD тоже можно и не особо сложно, есть только одно "но": частота загрузки слов в "видеопамять" со стороны МК должна быть ниже частоты чтения для отображения. Тогда записываемое от МК слово успешно буферизируется и записывается в ОЗУ между чтениями для отображения. Частота чтений для отображения фиксированная (например, 25МГц для VGA 640х480 - 60Гц) и вклиниться вполне можно.
artem79
Цитата(zksystem @ Jul 13 2009, 00:38) *
Доброго всем времени суток.
Подскажите пожалуйста как реализовать следующее:

Имеется микроконтроллер с внешней шиной памяти, CPLD Altera MAXII в которой реализован видеоконтроллер. Для реализации видеопамяти тут казалось бы проще поставить двухпортовую память, на один порт контроллер, а на второй CPLD и не париться, но цена на них уж очень кусается. Таким образом было решено использовать два банка памяти (в два чипа). Банки подключаются специальным сигналом, когда первый банк подключен к микроконтроллеру, то второй банк подключен к видеоконтроллеру для вывода информации, при переключении банки меняются наоборот.
В таком случае необходим двунаправленный мультиплексор, реализация которого у меня что-то не выходит... Смотрел в сторону двунаправленных шин, но там используются триггеры с тактированием загрузки...
По другому эту задачу никак не реализовать?



Решал практически точно такуюже задачу. В полне успешно. Все работало. Прием сигнала от камеры запись в ОЗУ и выход на TV. Реализация двухбанковая. первый банк пишется второй читается. все это через Cyclone.
Было сделано два управляющих блока первый управлял АЦП, ФП приемником и записью в память, второй выводом на TV. Какой банк для чего используется определял блок "арбитр". Ну а с преключением памяти все довольно просто - используем буфера с третьим состоянием и двунапрявленные. Посути шинный формирователь пришлось делать самому.
zksystem
Цитата(des00 @ Jul 13 2009, 07:11) *
если у вас физически два банка памяти то тупо муксите ноги памяти между контроллером и цплд. как я понимаю проц только пишет, а цплд только читает. проблем никаких. если же банк один а в нем реализованы виртуальные страницы то вам нужен не мултиплексор, а арбитр доступа к памяти. Вот это уже сложнее и может иметь много реализаций, все зависит от требований.

Про видеоконтроллер я в топике не указывал, у меня видеоконтроллер управляет табло из светодиодов. Кстати, видеопамять в моем случае должна быть полноценная (Read/write)... в чем и загвоздка. Двухпортовая память на 4кб стоит дороже обычной статики 512кб... так что даже не хочу рассматривать.
zksystem
Цитата(artem79 @ Jul 13 2009, 13:22) *
Решал практически точно такуюже задачу. В полне успешно. Все работало. Прием сигнала от камеры запись в ОЗУ и выход на TV. Реализация двухбанковая. первый банк пишется второй читается. все это через Cyclone.
Было сделано два управляющих блока первый управлял АЦП, ФП приемником и записью в память, второй выводом на TV. Какой банк для чего используется определял блок "арбитр". Ну а с преключением памяти все довольно просто - используем буфера с третьим состоянием и двунапрявленные. Посути шинный формирователь пришлось делать самому.

ОЗУ использовали тоже статику?
VladimirB
Цитата(zverek @ Jul 13 2009, 02:20) *
Кстати, хотел посоветоваться пор двух портовую память (какие они бывают и сколько стоят?)...

Где-то полгода назад тоже искал двухпортовую SRAM правда для другой задачи и вот какие результаты:
Такую память делают только два производителя Cypress и IDT. По отношению объём/стоимость продукция IDT дешевле.
Остановились на следующей микросхеме:
IDT70V3599S166
HIGH-SPEED 3.3V 128K x 36 Dual Port Syncronous SRAM, 166MHz, корпус TQFP208 или BGA
стоит порядка $130.
artem79
Цитата(zksystem @ Jul 13 2009, 15:31) *
ОЗУ использовали тоже статику?


Да со временем доступа не более 15 нс.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.