nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 06:39



Reply to topic  [ 2 posts ] 
Контроллер ПДП 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
При разработке микропроцессорных систем в среде Proteus встречается одна довольно неудобная ситуация:
в работоспособную систему весьма затруднительно загрузить какую-либо программу непосредственно в ОЗУ.
Если в ПЗУ Proteus загружает указанный файл типа .bin или .hex при старте симуляции, то загрузки файла
в ОЗУ разработчики не предусмотрели.

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

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

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

Схема у меня получилась следующая:
Attachment:
MEMORY4.gif
MEMORY4.gif [ 19.86 KiB | Viewed 4566 times ]

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

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

На следующем скриншоте моделируется схема тестирования контроллера ПДП с микросхемами ПЗУ и ОЗУ пока
без микропроцессорной системы.
Attachment:
DMA1.gif
DMA1.gif [ 37.36 KiB | Viewed 4566 times ]


Сравнение идентичных областей памяти показывает, что содержимое ОЗУ идентично содержимому ПЗУ, а весь
процесс переброски 16 КБайт информации занимает меньше минуты.
Схемы находятся в следующем архиве:
Attachment:
DMA.zip [182.65 KiB]
Downloaded 408 times

_________________
iLavr


26 Jul 2018 19:31
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Теперь несколько слов как это подключать к действующей микропроцессорной системе:
В меню выбираем пункт создать еще один лист основного проекта и на него импортируем файл MEMORY4.SEC,
который есть в архиве.

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

Сигналы /CS и /WR подключаются к нужной БИС ОЗУ через вентили "ИЛИ" для лог."0", а это - "И" по де Моргану.
Attachment:
DMA0.gif
DMA0.gif [ 31.85 KiB | Viewed 4565 times ]

В принципе в моей схеме сигналы и /RD и /WR уходят в высокоимпедансное состояние, как и аналогичные
сигналы у модели процессора 65С02, но у КР580ВМ80 /RD и /WR не являются тристабильными, поэтому
опробовал вариант через вентили.

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

Прилагаю также диаграмму формирования сигналов /RD и /WR:
Attachment:
Loader.gif
Loader.gif [ 10.72 KiB | Viewed 4565 times ]

Смена адресов происходит с частотой CLK/16, длительности и взаимное расположение сигналов /RD и /WR
подобраны наиболее подходящими для большинства типов ПЗУ и ОЗУ.

_________________
iLavr


26 Jul 2018 19:39
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 2 posts ] 

Who is online

Users browsing this forum: No registered users and 8 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.