27 Сен., 2021, 23:43

Думаю, не ошибусь, если промолчу...


Тактовик для ВМ80

Автор Slabovik, 13 Дек., 2020, 20:12

« предыдущая - следующая »

Slabovik

Если мысль засела - это надолго. Даже, если эта мысль древняя, как отмёрзшее удобрение, произведённое мамонтом.
Время от времени хочется сделать собственный компьютер, пусть даже какой, но чтобы вот всё было придумано самостоятельно. Прекрасно понимая абсолютную тщетность этого движения, тем не менее, из головы оно не уходит.

Для саостоятельной разработки нынче доступны лишь реальные древности, типа i8085 да Z80 - их вполне можно приобрести, чтобы качественно помучить. i8085 умеет работать на 5 (а может даже и на шести) мегагерцах, Z80 имеет варианты вплоть до 20 МГц. Ну, 20 МГц для проработки на рассыпной мелкой логике - это очень круто, а вот 6-10 МГц вполне достижимо. Ну, а как пример апофигеоза на эту тему, я уже давал где-то ссылочку на интересный в этом плане проект Gigatron. Есть и множество других.

Для того, чтобы ваять на i8080/8085/Z80 надо разобраться в принципе их тактирования и того, что они делают в каждом такте. Соответственно, нужен какой-то адекватный тактовый генератор. Как вариант - готовый i8024, он же КР580ГФ24. Формирует ужасные 12-вольтовые сигналы тактирования F1 и F2 для i8080. Однако частота опорного осциллятора у него в 9 раз выше, чем частота тактирования. А 9 - число неудобное.
Вот как выглядит его структурная схема

i8024-внутренняя-структурная-схема.png

а это то, что должно получаться на его выходах

i8024-выход.jpg

Собрал макетик, запустил, смотрим

i8024-осциллограммы.jpg

Конечно, меня интересует частота побольше, чем исходные 2 МГц для i8080. Ввообще, КР580ВМ80А, которые можно легко купить сейчас за копейки (а я и купил десяток по... 19 руб, потому и тема голову мучает :) ) "гонятся" до трёх мегагерц тактовой, а может и ещё чуть выше (3.17 вроде у интела более поздний вариант процессора). Пруф - вполне работоспособный компьютер "Вектор-06ц" с тактовой три мегагерца - самый быстрый из отечественных "игрушечных" компьютеров прошедшего времени.

Поэтому хочется мне "изобрести" тактовый генератор, чтобы коэффициент деления был кратен 8 - это нужно для "укладки" байтной структуры в один такт процессора с целью синхронизировать вывод видео, чтобы коэффициенты отношения времён F1/F2 и их пропорции были примерно такие же. Ну и была возможность получить другие синхронные сигналы, необходимые для управления диспетчеру шины (потому что без этого процессор сам будет в одиночку "сидеть" на шине, а это расточительно).

Интереснейшая фишка i8080 - возможность вывести стек в отдельное, своё собственное, стековой пространство оперативной памяти, из-за чего общий объём оперативки у него может быть не 64, а 128 кБ (64 кБ оперативки, где работают программы, и 64 кБ памяти под стек). Но вот сигналы управления шиной - отстой. Посему в базовом комплекте их расшифровкой занимается отдельная микросхема типа i8228 (КР580ВК28, ну или КР580ВК38). Для неё предназначается сигнал-защёлка STSTB. В принципе, ВК28 тоже несложно меняется на несколько микросхем более мелкой логики.

Что у меня в итоге получилось с тактовым генератором.

Тактовик---уж-что-получилось.png

Счётчик (не совсем, лучше уж 'делитель') на ТМ2. ТМ2 хороша тем, что имеет как прямые, так и инверсные выходы, что удобно. Одна ЛА4 (изначально были полторы ЛА1, но формирование Pix21 на ЛЕ1 позволило заменить ЛА1 на ЛА4). ~F1 и ~F2 - инверсные сигналы TTL уровня для дальнейшей их подачи к преобразователю уровней ICL7667, она же К170АП3. Интересно, что микросхема применима как в неторопливых логических схемах ввиду малой задержки (порядка 20 нс), так и позиционируется как драйвер  затворов полевых транзисторов. Чудно :)

Осциллограммки
Osc-PIX-Pi48-T1-T2.jpg

Osc-PIX-2-Pi22-4.jpg

Osc-PIX-2-4-T2.jpg

Osc-PIX-Pi21-Pi22-T1.jpg

Osc-PIX-R1-S1-R2.jpg

Osc-PIX-R1-S1-T1.jpg

Osc-no2-no4-8-SR.jpg

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

Однако хорошо видно, что каждый "вентиль" даёт задержку. Серия 155 (у  меня к155ЛА4) даёт порядка 10 нс задержки, серия HC - в районе 5-8. Например, на самой верхней осциллограмме на сигнале Pi48 есть "зуб". Он как раз вызван задержкой переключения нижнего делителя относительно верхнего, а ЛЕ1 снимает сигнал и с того и с другого. Нижний чуть задержался в переключении - на выходе верхнего сигнал уже сменился. Получите "тычок" :) Кстати, очень неприятная штука, если на них не обращать внимания. Но здесь этот тычок не пролезает дальше ЛЕ1 - учтено ;-)

Кстати, будете проектировать подобную логику - не брейгайре рисованием графиков. Оно легко, со всеми задержками. Вот примерно так

Тактовик---проектирование-графиками.png

По графику видна исходная причина тычка на Pix48 - ещё задолго до первого включения макета :)
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

Slabovik

В нашеi повседневности всегда найдётся место для лажи :)
В общем, подсоединил я ICL7667 и снял осциллограммы

OSC-ICL-T1-F1-F2.jpg

OSC-ICL-T2-F1-F2.jpg

Синенькая - это сигнал на входе ICL, две нижние - выходы ICL.
Импульсы даёт исправные, фронты хорошие, визуально они лучше, чем у ГФ24. Однако... ложка дёгтя оказалась в задержке на включение. По документам задержка должна быть не более 30 нан (вроде). По осциллограммам имеем все 50. А вот на выключение задержка порядка 12-15 нан, что меньше, чем указано в документации.

Вывод: в это место не годятся. Как драйверы затворов наверное хороши.
Наверное, надо ещё попробовать логику с открытым коллектором: 155ЛА7/ЛА8/ЛА9 и даже ЛА18. Кстати, по поводу ЛА18 - рекомендую. Микросхема имеет два логических элемента и облагает просто офигительной "тяговитостью" своих выходов. Влёгкую управляет напрямую какими-нибудь реле и т.п.

К большому сожалению, в сериях, исполненных по КМОП-технологии, у микросхем с открытыми драйнами (коллекторами по-КМОПовски), зашита засада

CMOS-Open-Drain-Logic.png

Диодик видите? Вот то-то и оно :~( Он перечёркивает возможность использовать OpenDrain как способ согласования уровней для разных питающих напряжений. У TTL серий диодика нет.

ps. Да, вот ещё картинка из документации Intel по построению простой системы на i8080.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

Slabovik

Вот ещё один вариант замены http://rw6hrm.qrz.ru/8080.htm
Сразу скажу, что мне он не нравится, но тем не менее, пусть будет.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

Slabovik

Я правильно понимаю, что i8086, подобно i8080, Z80, НЕ умеет обращаться к памяти каждый такт? Как минимум, цикл M1 у него нейтральный и его можно вообще не выставлять на шину -> в этот такт шина свободна. Во-2, я сходу не нашёл растактовку по циклам, однако выполнение минимальной инструкции регистр-регистр у него занимает аналогичные 4 такта. T1 - M1, T2 - addr for Fetch, T3 - Data for Fetch, T4 - relax :)
Чтение современной ОЗУ (даже динамической) без проблем в один T укладывается, следовательно, можно выставить флаг диспетчеру памяти на чтение и во время T2 её прочитать, защёлкнув в регистр для "подачи" на ШД проца в течение T3, и не занимая ШДП и ШАП (п=памяти) T3 T4 и следущий M1 этой операцией.

Не совсем понятно, что делать с записью т.к. выдача на ШД проца происходит несколько в другой момент времени. Можно ли защёлкнуть в регистр и записать в  память в следущем такте. Что-то мне подсказывает, что вполне можно и даже так всё-равно "пустые" такты останутся между любым обращением проца к ОЗУ.

зы: соотношение периодов в такте - серьёзное неудобство. Только сейчас стал понимать, почему в знакогенератор символьного дисплея от IBM девять! точек по горизонтали, а графические режимы я даже и не помню, чтобы синхронизировали с процом. Всю жись вайтстейты по шине вставляли, из-за чего вывод графики даже на 386 был делом весьма унылым.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.