Продолжение
В этой части я расскажу о чёрной коробочке в моей конструкции под названием ПЛИС.
В данном случае она является неким подобием микросхемы ULA. По сути - это просто набор программируемой логики, которую мы можем сконфигурировать как нам угодно и получить практически любую нужную нам цифровую схему. Ещё один плюс ПЛИС - это мультиплексирование её ножек, то есть любую ножку (кроме служебных) можно назначить на любой сигнал, причём как входной, так и выходной. Это очень сильно облегчает разводку печатной платы, подводи сигналы к любой ноге, а потом программно назначай его - просто шикарно!
От теории - к практике. В моей конструкции конфигурация ПЛИС-ины написана на языке Verilog, достаточно простой язык описания цифровых схем, если вы хоть немного понимаете в цифровой электронике.
Проект условно поделён на три блока или модуля:
Главный модуль включает в себя все входные и выходные сигналы,соединения и цепи модулей нижнего уровня. В его состав также входит арбитр шины данных и адреса, счётчик сигнала мерцания курсора, модули видеопамяти (о них расскажу позже), PLL и счётчик-делитель тактовой частоты.
Видеомодуль включает в себя набор счётчиков адреса выборки байт пикселов и атрибутов из видеопамяти (аналогичные хардверным счётчикам спектрума на рассыпухе), две пары регистров для данных пикселов и атрибутов, сдвиговый регистр и мультиплексор адреса пикселов и атрибутов. Единственное отличие счётчиков адресов в том, что в них пропущено по одному биту для увеличения разрешения области видео, т.е. реализован скандаблер.
Модуль VGA состоит из пары счётчиков (горизонтальный и вертикальный) и мультиплексора, которые формируют все сигналы VGA, а также border и INT. Также в этом модуле идёт смешивание цветов PAPER и INC.
Теперь отступление по поводу ОЗУ. Изначально при разработке самого первого варианта платы я совершил важную ошибку, я не разграничил шину данных ОЗУ и процессора, наивно полагая, что при высоком уровне тактового сигнала процессора его шина уходит в высокоимпендансное состояние. Поэтому, естественно, при попытке прочитать видеоданные, я получал смесь из ОЗУ и шины процессора. Это удалось частично исправить благодаря периферии всё той же ПЛИС, синтезировав немножко ОЗУ из её встроенных ячеек памяти. Но, так как изначально у меня была плисина Циклон 2, её встроенных ячеек хватало только на 8 килобайт (точнее, где-то на 12). Чего хватило для реализации 48К машины, но не хватало для 128К, так как там две страницы видео. Поэтому началась череда переделок платы. Я пытался буфферизовать шины данных ОЗУ и ПЛИС с помощью буфферов 74F245, но их скорости не хватало, лучшее, что у меня получилось - красные полосы теста при загрузке 48 бейсика. В следующей версии платы я сделал ОЗУ и видео-ОЗУ на раздельных микросхемах памяти, основное на медленной SRAM с временем доступа 55ns и ёмкостью 512Kb и маленькой SRAM на 16Kb и временем доступа 10ns, которую я выпаял из старинной материнки. Но, увы, видимо маленькая память из донорской мамки оказалась рабочая на половину, потому что нижние четыре строки каждого знакоместа выводились правильно, а в верхних - была смесь из мусора и нижнего полуряда. Другой такой памяти я не нашёл, поэтому решил поставить другую плисину с большим количеством ячеек встроенной памяти (EP4CE6E22). Плату оставил старую, так как она имеет модульную конструкцию, а плату для ПЛИС пришлось делать самодельную, дабы не переделывать всю конструкцию (это видно на фотках из прошлого поста). Таким образом основное ОЗУ жёстко подключено к шинам процессора, за исключением старших адресных линий (А[18-14]) и сигналов управления. А видео ОЗУ синтезировано внутри ПЛИС. Получается, что видеостраницы записываются параллельно в основное ОЗУ и видео ОЗУ, а читаются раздельно.
Напоследок выкладываю проект, написанный в среде Quartus 12 (я не жадный):
https://yadi.sk/d/IPxLFR9c5A53_w
В будущем хочу переделать плату, сделать окончательный вариант со встроенным PS/2 модулем и, если поместится, музыкальным сопроцессором. Пока они реализованы на отдельной плате. Также хочу плисину просто впаять на плату вместо съёмного модуля. Пока это только планы.
В следующих частях расскажу о своём PS/2 модуле.
Комментарии
Трекбэков
Всего трекбэков 0
Ссылка трекбэка: