Я не знал, разместить ли этот вопрос здесь или в stackoverflow, но, наконец, решил опубликовать его здесь.
Я хочу построить простую систему, которая могла бы работать с базовой периферией (UART, клавиатура, монитор VGA). Я хотел бы использовать MPU вместо MCU в качестве «основного блока», чтобы было больше памяти для обработки данных. Этот «основной» чип будет использовать одну SDRAM для хранения своих данных.
Для выхода VGA я хочу использовать чип Atmel AVR, который будет запрашивать данные из другой памяти, которая будет содержать данные экрана в 8-битном формате RGBS. Вот где я добираюсь до проблем.
Мне не нужно много памяти VGA (менее 512 КБ), поэтому я хочу использовать память SRAM, доступ к которой также прост по сравнению с SDRAM. Разрешение VGA, которое я выбрал, использует пиксельную тактовую частоту 25 МГц, а это означает, что у меня есть всего ~ 40 нс времени для извлечения одного пикселя из SRAM в ЦАП. Это хорошо, так как большинство памяти, которые соответствуют моему вводу поиска (> = 4 Мбит памяти, < 40 нс время доступа), могут это сделать.
Возвращаясь к памяти MPU, я хотел бы задать свой первый вопрос: когда необходимо отправить команду обновления в SDRAM? Должен ли я это делать, или можно получить память, для обновления которой потребуется какая-то внешняя магия?
Теперь я перехожу к проблеме, как получить доступ к этой памяти SRAM VGA из основного чипа, поскольку к ней почти всегда обращается мой контроллер VGA (не говоря уже о том, что мне нужен еще один чип для красивого отображения этой памяти в адресное пространство MPU). Я подумал о том, чтобы зарезервировать некоторые контакты контроллера VGA для запросов MPU на доступ к SRAM, что означало бы, что некоторые видеокадры пришлось бы пропускать, оставляя эту SRAM доступной для MPU без перерывов.
Я застрял здесь. Я мог думать только об этих возможных решениях:
Что ты думаешь об этом? Какие еще способы (хитрости, конструкции?) тут есть, чтобы иметь два блока (основной и блок видеообработки), из которых один управляется другим?
Спасибо.
Одна вещь, которая раньше была общей для графических видеоконтроллеров, — это видеопамять или видеопамять .
VRAM имеет два набора контактов вывода данных и, следовательно, два порта, которые можно использовать одновременно. Доступ к первому порту, порту DRAM, осуществляется хост-компьютером способом, очень похожим на традиционную DRAM. Второй порт, видеопорт, обычно доступен только для чтения и предназначен для обеспечения канала сериализованных данных с высокой пропускной способностью для графического набора микросхем.
Внутри VRAM считывает всю строку DRAM и последовательно перемещает ее в видеосхему. Это оставляет DRAM доступной для использования MPU. VRAM в значительной степени была заменена использованием SDRAM, «хотя она является только однопортовой и требует больших накладных расходов».
Техника, которую я использовал в прошлом, заключается в использовании чередующегося доступа к памяти. Это немного сложно объяснить (дьявол кроется в деталях), но я изложу основы:
В основном MPU обращается к видеопамяти в промежутках между обращениями видеоконтроллера к пикселям. Если это время становится слишком жестким, есть пара вещей, которые вы можете сделать, чтобы значительно сократить время (обычно требуется только 1 из них):
Если вы чередуете доступ к видео, вы можете рассмотреть возможность использования FPGA или CPLD для вашего контроллера видеопамяти.
Другой метод состоит в том, чтобы иметь 2 отдельных видеопамяти и использовать выбор банка. MPU записывает данные в один банк, а другой используется видеоконтроллером для отображения. Когда MPU заканчивает запись, доступ к банку меняется местами (обычно во время синхроимпульса).
пользователь35443
Тут