Кратко о принципе работы
Контроллер расположен в FPGA, SDRAM - снаружи, чипы SDRAM разбиты на два отдельных модуля - AB и CD. В первый промежуток времени (field1,2) - пишем в AB и одновременно читаем из CD. Во второй промежуток времени (field3,4) - пишем в CD и одновременно читаем из AB. И так повторяется, пока поступает MR.
Общие детали.
Использую я этот вариант контроллера для задержки видео. Длительность
задержки определяется частотой следования MR, в этом примере я его формирую
из VB(Vertical Blanc). Задержка может быть произвольной (в рамках объёма
SDRAM), необходимо учитывать, что во время MR = 1 выходной сигнал неопределён,
поэтому он(MR) должен приходиться на блэнковый интервал. Минимальная длительность
MR = 2 такта.
Простая коммутация входа(IN) и выхода(OUT) контроллера даёт "замораживание"
картинки. Проще говоря, в момент команды "замораживание" выход подается
на вход и система "гоняет" одни и те же два поля по кругу.
Эта версия контроллера не обеспечивает произвольного доступа к ячейкам
памяти. Каждый такт CLK записывает 32 бита в SDRAM и выталкивает 32 из
SDRAM.
Немного об элементной базе.
Я использую HY57V651620B (4 Banks x 1M x 16Bit Synchronous DRAM, 7ns,
400 mil 54pin
TSOP II), хотя проверял и другие типы чипов - работало.
На один контроллер у меня стоят 4 вышеупомянутых чипа SDRAM, шины управления
запараллелены попарно. Если нет нужды в 32 битных IN, OUT, то чипы B и
D можно не ставить.
Два слова об исходном коде контроллера.
Он не оптимален, и не только потому, что "руки не доходят", а, скорее,
вследствие того, что зтот вариант кода оказался ОЧЕНЬ удобным для модификаций.
Основа контроллера - FSM - не самое удачное решение с точки зрения
быстродействия (40MHz) и занимаемий площади на кристалле (600LC). Однако,
если Вы захототе переделать, доработать, "разобрать на части", просто понять
как он работает, этот вариант - наилучший.
Качайте его тут -распакуйте zip , файл с расширением gdf - top level. Всё это для Max+II
Никакой ответственности ни за что вообще не несу.
Виталий.