12 лет назад 5 октября 2006 в 12:19 522

 

Часть 2. Восемь бит

Работая над набором микросхем MSC-4 (см. Upgrade #2 (195)), Федерико Фэджин (Federico Faggin) был уверен, что первым микропроцессором будет вовсе не его чип 4004, а микросхема, создававшаяся в рамках проекта, которому руководство дало старт за несколько месяцев до того, как Фэджин появился в компании. Дело было так.

Проект 1201

В 1969 году к руководству компании Intel обратились представители Computer Terminal Corporation (CTC, позднее она была переименована в Datapoint). Компания CTC искала кого-нибудь, кто смог бы изготовить процессор для их нового интеллектуального терминала Datapoint 2200. Строго говоря, архитектура предложенного 8-битного микропроцессора была разработана в недрах CTC, и от Intel требовалось довести ее до ума и выпустить готовый товар.
По мнению Теда Хоффа (Ted Hoff), Intel могла “потянуть” выполнение заказа, и в начале 1970 года работа над процессором началась. Будущему чипу был присвоен код 1201, то есть “микроконтроллер 01”. Работы по проекту 1201 возглавил Хэл Финей (Hal Feeney). Для того чтобы сделать чип максимально плотным, его строили на основе TTL. Применительно к чипам TTL расшифровывается как “транзисторно-транзисторная логика”, то есть, согласно этому принципу, любой логический элемент в TTL-чипе должен функционировать только на транзисторах. Сейчас в этом ничего нового нет, но в 1970 году это была не простая технология.

Работа у Финея шла неплохо и была завершена уже на 85%, когда случилось непредвиденное. Общий экономический спад 1970 года привел к тому, что CTC вдруг охладела к своему проекту. Работы над чипом 1201 были приостановлены. Дабы уладить неприятную ситуацию, компания CTC разрешила Intel использовать архитектуру чипа 1201 как угодно. В обмен Intel обязалась не предъявлять финансовых претензий. Как раз к тому времени Фэджин закончил работы над набором MSC-4, и руководство Intel “бросило” его на чип 1201, благо все равно другой подходящей работы не было. Архитектура чипа 1201 была во многом схожа с архитектурой 4004, так что Фэджин, которому теперь подчинялся Финей, быстро понял, что к чему.

К апрелю 1971 года чип 1201 был готов. Маркетинговый отдел Intel присвоил ему код 8008 – по аналогии с 4004. Таким образом, в систему условных обозначений компании вошла цифра 8. Более того, Intel создала специальный отдел микропроцессорного маркетинга, которому должны были всеми силами помогать Фэджин, Хофф, Финей и Мэйзор (написавший ПО для 4004 и 8008). В результате чип 4004 стал продвигаться на рынке как универсальный микроконтроллер, а чип 8008 – как первый в мире микропроцессор.

Процессор Intel 8008, анонсированный в апреле 1972 года, производился по 10-микронной технологии, имел 3500 транзисторов и работал на частоте 0,2 МГц (а более поздние модели – на частоте 0,5 МГц) от напряжения +5 В. Шина данных 8008 была 8-битной. Максимальный объем памяти, который мог использовать 8008, равнялся 16 кбайт. Микропроцессором можно было управлять с помощью набора из 48 команд. Если чип 4004 был упакован в двухрядный корпус с 16 выводами, то чип 8008 имел 18 контактов. В остальном 8008 был очень похож на 4004.

Микропроцессор “по-взрослому”

Федерико Фэджин потратил немало времени на пропагандистские поездки, в том числе по Европе. Его задача заключалась в том, чтобы убедить инженеров и разработчиков, что микропроцессоры – это не игрушка. Однако чаще всего отношение к чипам 4004 и 8008 было скептическим. Постепенно у Фэджина стал вырисовываться облик нового процессора, более мощного, чем 8008. Фэджин не стал откладывать дело в долгий ящик и сразу же начал “давить” на руководство Intel – он хотел побыстрее начать работу над новым микропроцессором. Однако руководство считало, что сначала надо окупить разработку наборов MSC-4 и MSC-8 (так отдел маркетинга назвал набор микросхем для микропроцессора 8008).

Работы над новым процессором, который получил код 8080, начались в ноябре 1972 года. “У руля” снова встал Федерико Фэджин, который стремился как можно быстрее сделать новый продукт, по всем показателям превосходящий 8008. А вот руководство Intel не разделяло его рвения, полагая, видимо, что лучше не спеша довести чип до совершенства. Тем более что в микропроцессорной индустрии у Intel конкурентов не было. Беда пришла, откуда не ждали…

Компания Galvin Manufacturing Corporation была основана в Чикаго 25 сентября 1928 года братьями Полом и Джозефом Гэлвинами (Paul V. Galvin, Joseph E. Galvin). Кроме братьев в компании (ее активы исчислялись $565) было еще трое служащих. Первым ее продуктом стало устройство, предназначенное для обеспечения подключения радиоприемников к бытовым электросетям. В 1930 году Пол Гэлвин придумал название новой марки радиоприемника для автомобиля. Сегодня этот бренд знаком миллионам жителей Земли.

За основу Гэлвин взял понятное каждому слово motor, к которому приписал суффикс -ola – что-то вроде нашего “тру-ля-ля”. Так появилось название Motorola. Радиоприемник Motorola 5T71 устанавливался в автомобилях самых популярных марок. В 1947 году Galvin Manufacturing Corporation сменила название на Motorola Inc. В 1949 году в городе Феникс Motorola открыла научно-исследовательскую лабораторию по изучению свойств твердого тела. В 1955 году компания начинает массовое производство германиевых транзисторов для автомобильных радиоприемников. В 1969 году земляне слышат первые слова ступившего на поверхность Луны Нила Армстронга (Neil Armstrong), переданные с помощью оборудования Motorola.

В начале 70-х Motorola разрабатывает свою версию 8-битного процессора. Начинается гонка: кто быстрее выбросит на рынок мощный микропроцессор – Intel или Motorola. Процессор Motorola MC6800, модификации которого позднее использовались в таких машинах, как Atari ST, Commodore Amiga и Apple Macintosh, появился в апреле 1974 года. И все-таки Фэджин сумел немного обогнать разработчиков из Motorola. Компания Intel выпустила свой новый продукт в апреле 1974 года, опередив конкурента буквально на пару недель.

Процессор Intel 8080 был изготовлен по 10-микронной технологии, содержал 6000 транзисторов, имел частоту ядра целых 2 МГц, 16-битную адресную шину (у 8008 шина адреса была 14-разрядной) и 8-битную шину данных. В отличие от моделей 4004, 4040 (улучшенная версия 4004) и 8008, 8080 был заключен в стандартный для того времени длинный 40-пиновый корпус. Он был совместим с 8008 по набору команд, разработанных Тедом Хоффом и Стэном Мэйзором. Чип 8080 требовал питания в +5 В, -5 В и +12 В.

Процессор MC6800 был значительно “слабее”: частота всего 1 МГц (то есть в два раза ниже, чем у 8080); что еще хуже, он имел всего 8-битную адресную шину. Поэтому Intel 8080 сразу же стал неоспоримым лидером на рынке. На базе микропроцессора Intel 8080 компания MITS (Micro Instrumentation and Telemetry Systems) создала в 1974 году первый в мире общедоступный персональный компьютер Altair 8800. После чего началось массовое компьютерное безумие и на авансцену истории вышли такие люди, как Билл Гейтс и Стив Джобс. Теперь компания Intel имела все основания для того, чтобы праздновать победу. Однако триумфатор не испытывал большого воодушевления.

Летом 1974 года, спустя несколько месяцев после выхода на рынок чипа 8080, Фэджин решил покинуть Intel и основать собственную компанию. Главная причина его ухода заключалась в том, что руководство Intel, даже начав продажи уже довольно мощного чипа 8080, все еще рассматривало микропроцессорное направление своего бизнеса лишь как хорошее подспорье для продажи чипов памяти. В октябре 1974 года Фэджин и менеджер из Intel Ральф Унгерман (Ralph Ungermann) основали собственную компанию – Zilog. Некоторое время Фэджин раздумывал над тем, какое изделие станет первым продуктом его компании. Образ процессора 8080 стоял перед его глазами, и он воскликнул: “Это будет Супер-80!” (во всяком случае, так он сам вспоминал позднее). В одну из суббот декабря 1974 года Фэджин придумал архитектуру Z80. В апреле 1975 года в Zilog пришел Масатоси Сима (Masatoshi Shima), который участвовал в детализации дизайна Z80.

Микропроцессор Z80

Первый микропроцессор Z80 был выпущен в мае 1976 года (а точнее, на 23-й неделе 1976 года) и производился в течение более чем 20 лет. За этот срок было продано свыше миллиарда штук! Насколько я знаю, ни один другой микропроцессор даже не приблизился к этим показателям.

Конечно, за десятки лет Z80 подвергался модернизации, менялся форм-фактор, появилось немало клонов (даже в СССР он был – микросхема T34VM1). Однако даже последние модели с частотой 20 МГц все равно были 8-битными процессорами с тем же самым набором команд и регистрами, что и первый Z80 образца 1976 года с тактовой частотой 2,5 МГц. Что же способствовало невероятной популярности и феноменальному долголетию этого процессора? Чтобы узнать ответ на этот вопрос, рассмотрим архитектуру Z80.

Поскольку микропроцессор Z80 делал человек, который стал “отцом” процессора Intel 8080, нет ничего удивительного в том, что Z80 является дальнейшим развитием архитектуры 8080. Можно даже пофилософствовать на тему того, не совершила ли Intel ошибку, отказавшись от развития архитектуры 8080 и перейдя на совершенно иную – x86. Во всяком случае, Федерико Фэджин доказал, что из 8-битных регистров можно было выжать еще очень многое.

В Zilog, помимо всего прочего, думали и о том, как придать Z80 большую коммерческую привлекательность. Поэтому было решено, что он должен поддерживать все команды Intel 8080, то есть использовать то же самое программное обеспечение. Для этого, в свою очередь, было необходимо, чтобы Z80 содержал те же регистры, что и 8080.

Пара слов о том, что такое регистр (ибо, возможно, не все имеют об этом правильное представление). Регистр – это ячейка внутри процессора, предназначенная для временного хранения обрабатываемых данных. Именно по разрядности регистров общего назначения определяют разрядность процессора. Например, 32-битный Pentium 4 имеет регистры общего назначения емкостью по 32 бита каждый (точнее, размерность регистров Pentium 4 в несколько раз больше, чем 32 разряда, однако программист может получить доступ только к 32 битам, остальные биты регистра – служебные).

В оперативной памяти числа просто хранятся: их нельзя подвергнуть никаким непосредственным преобразованиям. Чтобы изменить число в ячейке оперативной памяти, необходимо сначала загрузить его в один из регистров процессора, произвести необходимые действия, а затем снова записать в указанную ячейку ОП. Это общий принцип работы всех процессоров. Поэтому регистры общего назначения, имеющиеся в них, часто называют сверхоперативной памятью.

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

К примеру, вам захотелось описать алгоритм умножения числа 7 на число 8. Для того, кто знает свойства двоичных чисел, эта задача не сложная. Достаточно в двоичном представлении числа 7 (00000111) сдвинуть все биты на три позиции влево и дописать справа три нуля. Результирующее двоичное число (00111000) – это и есть десятичное 56 (результат умножения 7 на 8). Почему биты сдвинуты на три позиции? Потому что 8 – это третья степень двойки (2 – основание выбранной системы счисления). Даже в Pentium 4 умножение на степень двойки путем сдвига влево выполняется гораздо быстрее, чем с использованием специальной команды умножения MUL. А в первых процессорах (и Z80 в их числе) специальных команд умножения и деления не было. Умножение – не единственный случай, когда удобно работать с битами числа, но на описание всех прочих сфер применения этого метода просто не хватит места.

Архитектура Z80

Рис. 1
Рис. 1. Принципиальная схема архитектуры процессора Z80. Все узлы обмениваются информацией по внутренней шине данных.

На рис. 1 показана принципиальная схема процессора Z80. Все узлы обмениваются информацией по внутренней шине данных, которую не следует путать с внешней шиной. Регистры общего назначения представляют собой набор из 208 бит, разделенный на восемнадцать 8-битных и четыре 16-битных регистра.

Рис. 2
Рис. 2. Конфигурация процессора Z80. Регистры общего назначения повторяют архитектуру регистров 8080.

Регистры общего назначения Z80 (см. рис. 2) повторяют архитектуру регистров 8080, они носят имена BC, DE, HL, а их дополнения – BC’, DE’, HL’ соответственно. Причем они могут использоваться и как 8-битные, и – комбинированно – как 16-битные (например, BC в паре с BC’). Это весьма удобно, когда необходимо работать с двухбайтовыми числами. Кроме этих регистров имеется так называемый аккумулятор (A) – регистр, в котором должен храниться результат выполнения некоторых команд (например, сложения).

Каждый, кто использовал Ассемблер процессоров x86, знает, что самой распространенной командой этого семейства является MOV – загрузить данные (из регистра в регистр, из памяти в регистр и т. д.). У процессора Intel 8080 и, соответственно, у Z80 такой команды не было. Вместо нее использовалась команда LD, имевшая то же самое назначение.

Кроме того, процессор Z80 отличался от 8080 наличием 16-битных индексных регистров (впрочем, это новшество было использовано в последующих моделях архитектуры x86). У Z80 их было два, и они назывались IX и IY. Индексные регистры служат для упрощения работы с элементами массивов в цикле. Опять же, чтобы не влезать в обсуждение вопроса, с темой статьи не связанного, скажу только, что без индексных регистров достаточно сложно организовать некоторые виды операций обмена данными между регистрами и памятью. Соответственно, наличие индексных регистров в Z80 сразу сделало его очень привлекательным для программистов.

Память процессора Z80

Регистр счетчика команд (PC) процессора Z80 был 16-битным, впрочем, как и все остальные регистры, предназначенные для хранения адресов памяти. Тут следует немного рассказать об адресации памяти.
В процессорах типа Pentium 4 или Athlon адресация памяти, мягко говоря, весьма и весьма непроста (надеюсь, мы еще поговорим об этом). А вот у Intel 8080 и Z80 адресация была понятна даже первокласснику (если бы он решил изучить данный вопрос). Вся оперативная память рассматривалась как массив 8-битовых ячеек, пронумерованных по порядку: 0, 1, 2, 3, 4, 5… и т. д. Предполагается, что память “растет” снизу вверх, то есть ячейки с меньшими номерами находятся “внизу” этого массива, а с большими – “наверху”.

Чтобы прочитать или записать данные – словом, обратиться к какой-то ячейке памяти, достаточно было указать ее порядковый номер. При этом RAM (память с произвольным доступом) и ROM (память только для чтения, ПЗУ) – и в этом еще одно отличие Z80 от процессора 4004 – составляли единый массив ячеек. “Нижние” адреса памяти отводились под процедуры BIOS, зашитые в модуле ROM, а подключаемые модули DRAM увеличивали объем памяти “вверх”.

Поскольку в одном пространстве ОП данные непосредственно соседствуют с программами, процессор обращается к памяти всякий раз, когда ему нужно прочитать очередную команду. Для этого, естественно, процессор должен знать адрес этой команды. Он (адрес) как раз и хранится в регистре счетчика команд. Иначе говоря, в регистре PC процессора Z80 (и Intel 8080) содержался порядковый номер той ячейки памяти, в которой находилась очередная команда.

При создании Intel 8080 разработчики (Фэджин, или Хофф, или кто-то еще – история об этом умалчивает) сочли, что размерность регистра счетчика команд должна составлять 16 бит. Почему для адреса решили выделить 16 бит, если сам процессор был 8-битным? Дело в том, что перед разработчиками стоял вопрос о том, каков должен быть максимально возможный номер самой последней ячейки памяти, то есть какое наложить ограничение на объем памяти “сверху”. Вопрос этот был далеко не праздным, поскольку от ответа на него зависела максимальная емкость оперативной памяти, с которой мог работать процессор. Например, если бы для размерности адреса отвели 4 бита, то можно было бы адресовать 16 ячеек (2 в 4-й степени) максимум. Поскольку был выбран адрес размерностью 16 бит, то всего, таким образом, можно было пронумеровать 65 536 ячеек, или (если поделить это число на 1024) 64 кбайт.

Вот откуда взялась эта максимальная емкость оперативной памяти – 64 кбайт, с которой могли работать процессоры 8080 и Z80. С другой стороны, если бы емкость регистров для хранения адресов памяти была не 16, а, скажем 20 бит, то можно было бы адресовать 1 Мбайт памяти (2 в 20-й степени). Почему же разработчики ограничились 16 битами? Разумеется, в начале 1970-х годов казалось просто невероятным, что микропроцессорам понадобится память большей емкости, чем 64 кбайт (Intel 4004, напомню, мог работать не более чем с 1 кбайт памяти).

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

Поэтому размерность шины адреса в системе на базе 8080 или Z80 должна была равняться размерности адресных регистров. А увеличение разрядности внешней шины неизбежно влечет за собой общий рост стоимости системы. Именно поэтому разработчики ограничились 16-разрядной шиной адреса.

Рис. 3
Рис. 3. Подробная схема базового цикла процессора Z80, выпущенного, страшно сказать, аж в 1976 году, почти 30 лет назад.

Шина данных у 8080 и у Z80 была 8-битной, что соответствовало размерности регистров общего назначения, в которых хранились числа, предназначенные для обработки.

Рабочий цикл процессора Z80

Рис. 4
Рис. 4. Минимальная конфигурация системы на базе процессора Z80: сам Z80, генератор электропитания +5 В, модуль память ROM и т. д.

На рис. 4 показана схема самой элементарной системы на основе процессора Z80. Система в целом довольно простая: сам процессор Z80, генератор электропитания +5 В, модуль память ROM с “прошитыми” процедурами BIOS емкостью 8 кбит, чип Z80-PIO (параллельные каналы ввода / вывода), через который к системе можно подключать периферийные устройства. Наличие модулей RAM совсем не обязательно.

Обмен данными внутри системы производился через 8-битную адресную шину. Адрес из процессора в память посылался по 16-битной адресной шине. Причем с модулем ROM процессор был соединен только десятью адресными линиями, и, как следствие, максимальный объем ROM равнялся 1 кбайт (2 в 10-й степени, то есть 1024 бит).

При чтении ячеек памяти ROM весь байт из ROM целиком передавался на шину данных. А вот работа с RAM осуществлялась по-другому. В архитектуре Z80 еще хорошо видно наследие процессора Intel 4004, который, напомню, имел 4-разрядную шину данных. Видимо, для упрощения разработки эта схема была сохранена и при проектировании Intel 8008, а оттуда перекочевала в Intel 8080 и Z80. Соответственно, байт хранился в двух чипах памяти “разрезанным” на два блока по 4 бита. При чтении / записи линии шины данных D0-D3 несли младшие 4 бита, а линии D4-D7 – старшие 4 бита, что в целом и составляло один байт.

В соответствии с адресом, хранившимся в регистре счетчика команд (PC), из памяти (ROM или RAM – без разницы) выбирался код операции (opcode), чаще всего называемый командой. Команда помещалась в регистр команд INST (см. рис. 1).

Рис. 1
Рис. 1. Принципиальная схема архитектуры процессора Z80. Все узлы обмениваются информацией по внутренней шине данных.

Затем команда декодировалась в специальном устройстве – блоке декодирования / управления (или просто блоке управления – БУ). Он анализировал, какие регистры общего назначения необходимы для выполнения команды и какая ячейка памяти должна быть при этом задействована.

Допустим, БУ опознал команду загрузки данных из ячейки памяти в регистр BC. Он помещает на адресную шину адрес нужной ячейки памяти (этот адрес становится известным после декодирования) и посылает управляющий сигнал “Чтение из памяти”. Сигнал поступает в банк памяти, и на внешнюю шину данных помещается байт из указанной ячейки. Этот байт поступает на вход процессора и далее по внутренней шине данных попадает в указанный регистр. После этого значение регистра PC увеличивается на единицу. Почему на единицу и зачем вообще увеличивать значение этого регистра?

Любая программа – это массив кодов операций. Загрузка программы в память начинается с самой “нижней” свободной ячейки. Например, программа загружена в память, начиная с адреса 2000, тогда вторая команда будет расположена в ячейке с адресом 2001, третья – в ячейке с адресом 2002, и т. д. Следовательно, когда выполнена команда, находящаяся, например, в ячейке с адресом 2011, БУ процессора делает логичное предположение, что следующая команда расположена в ячейке с адресом 2012 и, соответственно, изменяет значение регистра PC на единицу.

Тут, правда, возможны исключения – так называемые команды перехода. В этом случае новое значение регистра PC вычисляется более сложным способом. Но как бы там ни было, сразу после того, как значение регистра PC изменилось, начинается новый цикл: выборка команды – дешифровка – загрузка данных – выполнение. Если очередная команда требует какого-то изменения данных (сложение, вычитание, сравнение, изменение битов и т. п.), они из указанных регистров по внутренней шине поступают в арифметико-логический блок (АЛУ).

АЛУ процессора выполняет указанные операции и помещает результат в какой-то регистр (чаще всего – в регистр-аккумулятор). Кроме того, АЛУ способен изменять значение каких-то битов флагового регистра F. Эти значения затем могут понадобиться каким-то другим командам (например, командам условного перехода). Регистры процессора, АЛУ, блок декодирования / управления и внутренняя шина данных называются ядром процессора. И когда говорят о тактовой частоте процессора, то имеют в виду скорость выполнения операций в его ядре.

Вот, пожалуй, и все на сегодня. Так работал Z80. Общая схема работы ядра процессора принципиально не изменилась до сих пор и применяется даже в самых навороченных чипах, выпущенных в последние годы. Надеюсь, в процессе изучения истории развития архитектуры x86 вы получите хорошее представление о том, как функционируют самые современные процессоры.  UP


Datapoint 2200

Интеллектуальный терминал компании CTC получил название Datapoint 2200. Несмотря на нестыковку с Intel, позднее CTC все-таки встроила в свой интеллектуальный терминал процессор 8008. Поэтому с натяжкой можно сказать, что Datapoint 2200 стал самым первым персональным компьютером на базе процессоров Intel. Что представлял собой этот терминал? Он имел монохромный (зелено-черный) текстовый экран 12 х 80 (12 строк, 80 столбцов). Клавиатура и экран были интегрированы в единый корпус.

В корпус были также вмонтированы два устройства для считывания магнитных кассет. Специально для этого терминала были разработаны два языка программирования – Databus и Datashare. К Datapoint 2200 также можно было подключить внешний дисковод для 8-дюймовых односторонних гибких магнитных дисков. Если в момент выполнения программы происходила ошибка, то интеллектуальный терминал прекращал работу. В этом случае нужно было его выключить, заново вставить кассету и включить.

Федерико Фэджин

Федерико Фэджин находился у руля Zilog Inc. до 1981 года, вплоть до того момента, когда фирма была поглощена компанией Exxon Enterprises. После этого Фэджин оставил Zilog и стал соучредителем компании Cygnet Technologies, которая занималась разработкой интеллектуальных голосовых устройств для компьютеров. В 1986 году Фэджин, развивая этот бизнес, создал компанию Synaptics Inc. для проведения исследований в области нервных сетей и моделирования человеко-машинного интерфейса, базирующегося на сенсорике, аудио- и видеосигналах.

По идее Фэджина, подобный интерфейс должен заставить компьютеры адаптироваться к поведению пользователя, что лучше, чем приспосабливать пользователя к миру компьютеров. В 1988 году Фэджин был награжден Фондом Маркони “за вклад в развитие микропроцессоров”. В том же году президент Италии вручил ему Золотую медаль “За вклад в науку и технику”. В 1996 году Фэджин был принят в Национальный зал славы изобретателей США за участие в создании первого в мире микропроцессора.
 

Дмитрий Румянцев

Никто не прокомментировал материал. Есть мысли?