Контроллер ПДП

MOS Technology / Commodore / Apple II / NES etc.

Moderator: Lavr

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Контроллер ПДП

Post by Lavr »

При разработке микропроцессорных систем в среде Proteus встречается одна довольно неудобная ситуация:
в работоспособную систему весьма затруднительно загрузить какую-либо программу непосредственно в ОЗУ.
Если в ПЗУ Proteus загружает указанный файл типа .bin или .hex при старте симуляции, то загрузки файла
в ОЗУ разработчики не предусмотрели.

Решить проблему можно по-разному: подключить виртуальную карту памяти (как поступил в своём проекте
коллега PVV), создать ROM-диск и загружать ПО с него, я использовал последовательный интерфейс и
загрузку через витуальный терминал, да хоть магнитофон эмулировать можно, только если в процессе
загрузки работает сам эмулируемый процессор, то вся процедура весьма долгая, поскольку эмуляция самой
микропроцессорной системы - затратна по ресурсам компьютера.

Я сейчас исследую насколько корректно модель микропроцессора 6502 исполняет свою систему команд, и
для этого загружаю в ОЗУ из ПЗУ через процессор код теста размером в 12 Кбайт, и эта процедура отнимает
до 5 минут времени при каждой загрузке. :osad:

Поэтому я решил для ускорения процесса использовать чисто аппаратную загрузку программы в ОЗУ без
участия самогО процесора, то есть, сделать некоторое простое подобие контроллера ПДП (DMA).
Для загрузки в систему с моделью процессора 65С02 следует активизировать вход READYi8080 это -
HOLD), процессор должен перевести шины в высокоимпедансное состояние и остановиться, передав контроль
управления шинами контроллеру ПДП.

Схема у меня получилась следующая:
MEMORY4.gif
Линейка счетчиков подсчитывает входные импульсы и формирует 16 адресных линий. Первый счетчик в линейке
используется для формирования стробов /RD из ПЗУ и /WR в ОЗУ.

После прихода сигнала /RESET низкого уровня от микропроцессорной системы схема делает довольно
длительную задержку, чтобы МПС в любом случае закончила свои процессы и освободила шины.
Схема посылает сигнал захвата шин сразу же.
После этого по шине адреса формируются сигналы необходимого числа адресов (я использовал 16 Кбайт),
после чего уровень лог.1 с адресной линии 14 выключает счетчики и оключает схему ПДП ото всех шин
и снимает сигнал захвата шин.
Я также отключаю через тристабильный буфер сигнал входного такта, после чего схема потребляет весьма
мало ресурсов (порядка 14%) и не мешает эмуляции микропроцесорной системы.

На следующем скриншоте моделируется схема тестирования контроллера ПДП с микросхемами ПЗУ и ОЗУ пока
без микропроцессорной системы.
DMA1.gif
Сравнение идентичных областей памяти показывает, что содержимое ОЗУ идентично содержимому ПЗУ, а весь
процесс переброски 16 КБайт информации занимает меньше минуты.
Схемы находятся в следующем архиве:
DMA.zip
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Контроллер ПДП

Post by Lavr »

Теперь несколько слов как это подключать к действующей микропроцессорной системе:
В меню выбираем пункт создать еще один лист основного проекта и на него импортируем файл MEMORY4.SEC,
который есть в архиве.

Входы сброса и тактовой частоты подсоединяем к микропроцессорной системе - просто переименовываем
их в те же имена контактов.
Шина адреса и данных контроллера должны быть поименованы также как шины МПС.

Сигналы /CS и /WR подключаются к нужной БИС ОЗУ через вентили "ИЛИ" для лог."0", а это - "И" по де Моргану.
DMA0.gif
В принципе в моей схеме сигналы и /RD и /WR уходят в высокоимпедансное состояние, как и аналогичные
сигналы у модели процессора 65С02, но у КР580ВМ80 /RD и /WR не являются тристабильными, поэтому
опробовал вариант через вентили.

Хотел я сразу сделать вариант с привязкой и для модели "Специалиста" (поэтому первый счетчик использован
столь вольготно), мне казалось первоначально, что для "Специалиста" достаточно пропускать такт, отдавая
каждый второй контроллеру регенерации и дисплея.
Но посмотрев схему, выяснил, что привязка в схему "Специалиста" сложнее - он не использует сигнал /WR
для записи в ОЗУ, а использует комбинацию НЕ-DBIN, SYNC и Ф2 - не такие уж и сложности, но у меня нет
рабочей модели "Специалиста" в среде Proteus. Может быть, коллега PVV попробует ПДП к "Специалисту"
прикрутить, если, конечно, оно ему интересно... :wink:

Прилагаю также диаграмму формирования сигналов /RD и /WR:
Loader.gif
Смена адресов происходит с частотой CLK/16, длительности и взаимное расположение сигналов /RD и /WR
подобраны наиболее подходящими для большинства типов ПЗУ и ОЗУ.
You do not have the required permissions to view the files attached to this post.
iLavr