Всем здравия !
Тут делаю простенький видеоадаптер. Сделал контроллер монитора. Проверил его, сделав модули, организующие текстовый и графический режим. Хочу сделать 640х480х16 бит, но уперся в нехватку памяти. На моей плате Terasic DE0-Nano стоит чип Циклон 4, а именно EP4CE22F17C6N. Его памяти хватит только для 640х480х1 бит. Также у меня стоит 32MB SDRAM(не могу сейчас точную модель сказать, но нечто похожее используется в вашем проекте с фреймбуфером. У меня 4096 рядов по 512 16бит слов).
Написал инициализацию для памяти на Верилоге. Сделал в виде конечного автомата, отсимулировал - всё как в даташите.
А дальше уперся в массу проблем.
1) Как можно синхронизировать работу контроллера монитора и памяти ? Допустим, у меня будет контроллер монитора работать на частоте 25 МГц (моники допускают такое отклонение от эталонных 25.175 МГц и работают нормально), а контроллер памяти - 100 МГц. Тогда CAS Latency = 2... То есть мы посылаем команду на чтение, а имеем данные на шине только через 2 такта...
2) Мы имеем ряды по 512 16-битных слов. То есть, если мы имеем 640 пикселей в строке, то это уже 2 ряда надо тратить на строку... Промеж пикселей не будет успевать переключать ряды, даже несмотря на то, что память в четыре раза быстрее дисплея тактуется.
3) Еще не разобрался с регенерацией ячеек... Вот мы имеем ряд, да ? Сделали ACT, прочитали/записали данные - регенерировать этот ряд не надо... Если в цикле читать/писать данные, например, в 10 рядов - то их рефрешить не надо, да ?
Тогда, если прикинуть, то выходит из п.2, что ряды, соответствующие первым строкам, будут успевать портиться... Может, я что-то не так прикинул, так как у меня нет точного представления о процессе регенерации.
4) Чтение/запись... Как тут разрулить всё ? Пока "бежит луч" - читать, а в blank-ах писать ?
Может, наведете на мысли, как это все разрешить ?
Может, там буфера какие-нибудь использовать(FIFO ?)...
Или подкинете ссылку на готовый контроллер SDR SDRAM с адекватным интерфейсом ? Всё, что не находил в интернете, всё или замороченное, или заточенное под что-то другое. Хотелось бы просто иметь шину адреса(без всяких там рядов и столбцов), шину данных, и сигнал чтение/запись. А автомат пускай решает, делать ли ему PRE/ACT/REFRESH, писать, читать, обновлять...
Спасибо за любую помощь !