Недокомпьютер КК0.0
Уголок радиоконструктора |
Лениво елозя мышом по столу, задумывается ли кто-нибудь сейчас, как такое тяжёлое умственно-мускульное усилие превращается во всякие там лайки-шмайки и просмотры сериалов, бесконечных, как Природа по дедушке Ленину? Большинство, конечно, знает, что мыш подключен к этому вот ящику, стоящему под столом, на который очень удобно бывает ставить чашку с чаем и блюдце с печеньем. Более продвинутые слышали о памяти, видяхе и винтах, и самые умные знают, что не о метизах речь.
Ископаемые технофилы и доморощенные байтокопатели могут вспомнить о регистрах, шинах, АЛУ и системе команд, о логических элементах и алгоритмах. Самые замшелые слышали слово МИКРОКОД.
Далее движение вглубь веков и человеческого познания начинает пробуксовывать. Что это за микрокод такой, как его готовить и подавать к столу? Нет, конечно, что-то можно найти в этих самых интернетах, но именно «что-то», подробности обычно не предусмотрены.
Странная штука человеческое любопытство. Ну какая мне там разница, что внутри этого серого ящика шевелит мозгами? Работает – и ладно, главное – не процесс, а результат. Или и процесс тоже? Точно, в некоторых делах главное – процесс, а результат так и вовсе нежелателен. Ну, вы поняли, о чём я.
А любопытно провести ненаучную аналогию между эволюцией компьютеров и эволюцией живых существ. Что такое собственно «компьютер»? И что такое «живое существо»? Каковы необходимые и достаточные признаки, чтобы отнести «нечто» в соответствующую категорию? Вот человек – он живое существо? «Ну да!» – ответит каждый, а некоторые ещё и пальцем у виска покрутят, как бы намекая. А кошка? Червяк? Вирус? Ну разумеется, живые. Что же у них общего? Они размножаются, обмениваются веществом с внешней средой и реагируют на внешние воздействия. Поразительно похоже на компьютеры. Они тоже размножаются (их уже больше на планете, чем людей), обмениваются информацией с внешней средой и реагируют на внешние воздействия.
С вершиной иерархии понятно. Я, царь зверей и венец Природы, согласно этой антинаучной аналогии – «Тяньхэ-2». А что там с другой стороны? Кто претендует на нишу археев? Ежели по-русски, то насколько простым может быть устройство, имеющее право называться компьютером?
Если рассуждать отвлечённо, наличие у организма (компьютера) генома (программы) не обязательно. Только вот иные способы их организации мне не известны. Поэтому простейший компьютер, как мне представляется, должен работать по программе, выдавать какие-то выходные сигналы и принимать какие-то входные, причём работа такого «организма» и его выходные сигналы должны зависеть от входных. Это уже довольно сложное устройство (по сравнению с пустым местом :-). Можно предположить существование и менее сложного устройства, эдакой «не-жизни», когда по программе могут выдаваться некоторые выходные сигналы, но входные сигналы не воспринимаются. Что там у нас в биологии претендовало на «преджизнь»? Как человек, максимально далёкий от этой науки, я вспоминаю коацерватные капли. Итак, детище Франкенштейна получает своё имя.
Если есть программа, значит, должно быть место, где она хранится – какое-то ПЗУ. Если есть программа, значит, у неё есть отдельные шаги, которые должны каким-то образом сменять друг друга. Я слышал краем уха о существовании процессоров без тактирования, но не представляю себе, как это может работать. Поэтому следующий «о́рган» нашего «организма» – тактовый генератор. Если есть программа, у которой есть отдельные команды, значит, эти команды должны как-то отличаться друг от друга, например, имея разные адреса в ПЗУ. В простейшем случае для этого может использоваться счётчик команд. А в самом простейшем, примитивнейшем – уже существующее ПЗУ, в котором отдельные линии могут указывать на адрес следующей команды. Если ПЗУ имеет на выходе текущую команду, в которой некоторые линии использованы для адресации следующей команды, то нужен какой-нибудь регистр для того, чтобы этот адрес сохранить, а выдать его уже в следующем такте. Далее. Выходные линии также могут «расти» из ПЗУ. У нас же минимализм?
Итак, что же мы имеем? Пусть в начальный момент времени на выходе регистра будут все нули. Это нетрудно сделать с помощью цепи сброса, срабатывающей в момент включения питания. На ПЗУ подаётся адрес первой (вернее, нулевой) команды. «Выходы» во внешний мир нас пока не интересуют. На шине «Адрес следующей команды» должен присутствовать… правильно, адрес следующей команды :-). С приходом следующего такта этот адрес перепишется на выходы регистра, в ПЗУ выберется следующая ячейка, которая должна в себе содержать адрес ещё более следующей команды. Таким образом реализуется последовательный перебор команд из ПЗУ. В любой момент адрес следующей команды может указать на нулевую ячейку, зациклив выполнение программы. Если же нужен останов, достаточно, чтобы адрес следующей команды совпал с адресом текущей.
Если правильно выбрать тактовую частоту, то с помощью выходных сигналов можно управлять каким-нибудь устройством в реальном масштабе времени. Какая-либо обратная связь от управляемого устройства к управляющему механизму в данном случае не предусмотрена.
Если порыться в справочниках и в собственных запасах, то можно легко обнаружить, что с ПЗУ небольшого объёма всё плохо. Потому как всегда нужны были объёмы поболее. Разрядность шины адреса ПЗУ определяет, какое число шагов программы можно реализовать. Разрядность шины данных должна быть больше, чем шины адреса, потому что адресные линии через регистр должны быть подключены к шине данных, а ещё ведь нужны и шины управления. В нашем крайне примитивном случае шагов программы может быть совсем немного, один-два десятка. Поэтому практически единственным кандидатом на роль ПЗУ в соответствии с приведенными критериями может быть лишь К155РЕ3. Электричества она «кушает» довольно много, до 160 мА на корпус, поэтому нет смысла применять другие микросхемы из экономичных, но недостаточно функционально развитых серий КМОП, можно ограничиться и тривиальной К155.
Возможный вариант схемы приведен на рисунке слева. Тактовый генератор выполнен на триггере Шмитта К155ТЛ2. Таким выбором можно убить двух зайцев: собственно генератор требует лишь одного элемента, и вдобавок цепь сброса будет формировать крутой фронт из медленно возрастающего напряжения на конденсаторе C2. Регистр выполнен на 4-разрядной К155ТМ8. ПЗУ – К155РЕ3. Её выходы с открытым коллектором должны быть подтянуты к шине питания (резисторы R9…R12, R5…R8, светодиоды HL4…HL7).
Кстати, о светодиодах. Я предпочитаю их не экономить и ставить на все важные цепи. Таким образом можно сохранить себе массу времени при отладке, почти не пользуясь ни логическим пробником, ни осциллографом, ни тестером. Светодиод HL3 своим свечением сигнализирует, что питание присутствует, мигающий HL1 показывает наличие тактовых импульсов, HL2 загорается при нажатии кнопки «Сброс» и кратковременно при включении питания, HL4…HL7 показывают состояние выходных линий нашего устройства (светятся, когда на выходе 0). В моём случае после первого включения устройства тут же была «вычислена» дефектная кнопка сброса S1. Если стоит задача сделать устройство максимально экономным, все аноды светодиодов можно присоединить к плюсу питания через перемычку, которую после отладки нужно убрать (очень удобны перемычки с материнских плат компьютеров).
Вместо 4-разрядного регистра К155ТМ8 может быть применён 6-разрядный регистр К155ТМ9, тогда все 32 ячейки ПЗУ могут быть использованы под одну программу (один разряд регистра останется незадействованным; 5-разрядные регистры мне не известны). Но число выходов при этом уменьшится до трёх. В нашем случае 4-разрядный регистр позволяет использовать половину ПЗУ под программу в 16 ячеек. С помощью перемычки на старшей адресной линии ПЗУ можно вручную выбрать одну из двух записанных в ПЗУ програм, из младшей или из старшей половины адресного пространства.
«Зверушка» была реализована во плоти на кусочке макетной платы. Под все микросхемы, не только под ПЗУ, использованы панельки. Монтаж выполнен тонким проводом МГТФ. С внешним миром плата общается через два разъёма – питания (XP2) и выходов (XP1). На всякий случай (к примеру, для питания оптронной развязки) питание подаётся и в разъём выходов.
«Не красна изба углами, а красна изба пирогами». Академический интерес – это хорошо, но лучше, когда он сочетается с практическим. О практическом применении «зверушки» (заодно с примерами программирования) можно почитать по ссылке.