MMI 5300 — микросхема памяти начала 1970-х годов, хранившая 1024 бита в крошечных плавких перемычках.(примеч.1) В отличие от обычных микросхем RAM, это была PROM — программируемая постоянная память: её можно было запрограммировать один раз, пережигая перемычки, после чего данные сохранялись навсегда.
Исследованная мной микросхема изначально стоила 70 долларов и выпускалась компанией MMI, одним из ведущих производителей PROM того времени.
На сильно увеличенной фотографии ниже показан кремниевый кристалл микросхемы. Лучше всего здесь виден металлический слой поверх кремния; изготовленные из кремния транзисторы и резисторы находятся под ним.
Провода по краям — это 16 соединительных проводников между кремниевым кристаллом и внешними выводами. В левом верхнем углу 1024 бита данных хранятся в массиве 33×33 из диодов и плавких перемычек. (Ниже я объясню, зачем нужны лишние строка и столбец.) Эта микросхема построена на NPN‑транзисторах, в отличие от MOS‑транзисторов, которые используются в большинстве современных чипов.

Чтобы получить фотографию кристалла, я начал с показанных ниже микросхем в 16-выводных керамических корпусах; 5300 и 6300 по сути одинаковы.(примеч.2) Поскольку корпуса были керамическими, вскрыть их оказалось просто: я сбил металлическую крышку зубилом, открыв кремниевый кристалл.

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

Внутри микросхемы
На схеме ниже показаны основные части микросхемы и подписаны её выводы. Чип хранит 1024 бита в виде 256 четырёхбитных слов. Восемь адресных линий A0–A7 выбирают одно из 256 слов, а его биты выводятся через Out1–Out4. Вывод Program используется для записи данных в микросхему путём пережигания плавких перемычек. Через выводы Vcc и земли подаётся питание.

1024 бита данных хранятся в массиве 33×33 из диодов и плавких перемычек. Обратите внимание, что сам массив памяти занимает лишь около четверти площади кристалла; всё остальное приходится на вспомогательные схемы.
Под массивом памяти находится схема декодирования адреса, которая по адресным линиям выбирает один из 32 столбцов массива. Справа DTL‑мультиплексоры (примеч.4) сводят 32 строки выходных сигналов к четырём нужным выходам. Затем выходные драйверы усиливают эти сигналы и передают их на выходные выводы.
Плавкие перемычки
Данные в микросхеме хранились в крошечных плавких перемычках. Целая перемычка соответствовала 1, а перегоревшая — 0. Поэтому с завода микросхема поставлялась полностью заполненной единицами, а пользователь программировал её, пережигая перемычки там, где требовалось записать нулевой бит.
Перемычки были сформированы из крошечных участков нихрома, которые при высоком напряжении нагревались и плавились. (Нихром — сплав никеля и хрома с гораздо большим сопротивлением, чем у обычных металлов, поэтому он хорошо нагревается при прохождении тока. Его широко используют, например, в тостерах.)

На фотографии кристалла выше плавкие перемычки видны как фиолетовые участки между металлическими проводниками. Они очень малы — около 8 мкм в длину. Я ожидал, что при пережигании перемычка испарится целиком, но на деле в ней образуется лишь крошечная трещина шириной примерно 700 нм. (Это примерно длина волны красного света, поэтому под микроскопом такую трещину едва удаётся различить.)
Декодирование адреса
PROM хранит 1024 бита в виде 256 четырёхбитных слов. Однако физически биты расположены в сетке 33×33, поскольку почти квадратный массив памяти эффективнее сильно вытянутого прямоугольного.
При обращении к памяти адресные биты A3–A7 выбирают один из 32 столбцов. Выбранные 32 бита этого столбца поступают на мультиплексоры справа, которые по адресным битам A0–A2 выбирают по одному биту из каждой группы по восемь. Четыре выбранных бита и становятся четырьмя выходами.
Таким образом, адресация состоит из двух этапов — выбора столбца и выбора четырёх выходных битов — и для каждого используется своя схема.
Для выбора столбца используются 32 элемента NAND, реализованные на многоэмиттерных транзисторах.(примеч.3) (N‑ и P‑области кремния этих транзисторов видны как прямоугольные участки, а коричневатый металлический слой сверху соединяет их между собой.)
Каждый NAND получает свою комбинацию адресных битов A3–A7 — в прямом или инверсном виде, — поэтому каждому адресу соответствует свой элемент NAND и, соответственно, свой столбец.
По подключениям эмиттеров хорошо видно двоичный счёт. Линии A7' и A7 чередуются через каждый столбец. A6'/A6 — через каждые два столбца, A5'/A5 — через каждые четыре и так далее.

Массив памяти состоит из диода и плавкой перемычки для каждого бита. (Без диодов все биты оказались бы замкнуты друг с другом.)
Если перемычка цела, низкий уровень на выбранном столбце через диод подтягивает соответствующую строку к низкому уровню, что означает 1. Если перемычка пережжена, строка остаётся на высоком уровне, что означает 0. Именно так, пережигая перемычки, в массив памяти записывают биты. Сами диоды в основном скрыты под металлическим слоем. Линии выбора столбцов проходят вертикально в кремнии под металлизацией; металлические полосы сверху уменьшают сопротивление.

Программирование
Чтобы запрограммировать PROM, пользователь по одной расплавлял нужные перемычки с помощью точно дозированных высоковольтных импульсов. После выбора нужного адреса на вывод программирования подавали 27 В — значительно больше обычного для TTL уровня 5 В. Затем, выдержав точно заданный интервал, на нужный выход на несколько микросекунд подавали 20 В, чтобы пережечь перемычку. (Напряжения и длительность импульсов должны были быть очень точными: перемычка должна была перегореть, не повредив остальные части микросхемы.)
Процедуру повторяли для каждого бита, который требовалось записать как 0. Для автоматического выполнения этих операций использовали программаторы PROM вроде показанного ниже.

В основном для чтения состояния перемычки и её пережигания использовалась одна и та же схема. Отличалась лишь схема выходного вывода: в зависимости от режима программирования она могла либо выдавать бит, либо отводить большой ток, необходимый для пережигания перемычки.(примеч.5)
Транзисторы на пути тока программирования были крупнее обычных, чтобы выдерживать повышенный ток. Например, на изображении ниже транзисторы NPN в мультиплексоре сравниваются с обычным NPN‑транзистором этой микросхемы. Обратите также внимание, что восемь транзисторов мультиплексора имеют общий коллектор — это и есть выход мультиплексора.

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

Для тестирования в микросхему добавили по одной дополнительной строке и столбцу плавких перемычек.(примеч.6) Поэтому массив памяти имел размер 33×33, а не ожидаемые 32×32. Половина тестовых перемычек отсутствовала, и чтение правильного шаблона из нулей и единиц позволяло проверить дешифраторы адреса.
Пережигая тестовые перемычки и считывая результат, можно было проверить и характеристики программирования. Согласно даташиту, выход годных при программировании должен был превышать 95%. По меркам большинства интегральных схем это довольно высокий процент отказов, но с учётом сложностей тестирования такой результат вполне объясним.
Неиспользуемая схемотехника
Одна интересная особенность кристалла 5300 — наличие нескольких транзисторов, которые вообще ни с чем не соединены. На схеме ниже показаны некоторые из таких неиспользуемых транзисторов в выходной схеме. Металлических соединений между ними и остальной частью микросхемы нет, так что на первый взгляд они совершенно бесполезны.

Причина их появления в том, что одну и ту же топологию кристалла можно было использовать для выпуска немного разных PROM‑микросхем, меняя лишь разводку металлического слоя. У PROM 5300 были выходы с открытым коллектором, но выпускалась и трёхстабильная версия — 6301.7 Обе микросхемы использовали один и тот же кремниевый кристалл, а транзисторы соединялись по‑разному за счёт небольших изменений металлического слоя. Поскольку в 5300 не требовались выходные транзисторы для подтяжки выхода к логической единице, их просто оставили неподключёнными — отсюда и неиспользуемая схемотехника на изображении выше.
Заключение
PROM‑микросхемы были важной частью ранних компьютерных систем и часто хранили загрузочный код, однако пик их популярности пришёлся на начало 1980-х годов, после чего их начали вытеснять стираемые программируемые постоянные запоминающие устройства — EPROM. У EPROM была характерная кварцевая крышка‑окно над кристаллом: если облучить микросхему ультрафиолетом, данные стирались и её можно было использовать повторно. В свою очередь, EPROM уступили место электрически стираемой программируемой постоянной памяти — EEPROM, близкой по принципу к флеш‑памяти.
Чтобы оценить, насколько далеко шагнули технологии, достаточно сравнить: в 1971 году PROM 6300 стоила 70 долларов и хранила 128 байт. Сегодня флеш‑накопитель на 128 ГБ можно купить дешевле 20 долларов: объём памяти вырос в миллиард раз, к тому же записывать данные теперь можно многократно.

Примечания и ссылки
1. Подробнее о микросхеме см. главу 2 справочника MMI Bipolar LSI Databook.
2. 6300 была коммерческой версией PROM ёмкостью 1 Кбит, а 5300 представляла собой ту же микросхему, рассчитанную на военный температурный диапазон от −55 °C до +125 °C. 6200/5200 была совместимой ROM‑микросхемой, поэтому систему можно было сначала разработать на базе PROM 6300, а после отладки заменить её масочно‑программируемым ПЗУ. (Масочно‑программируемое ПЗУ обходилось дешевле, но его имело смысл выпускать только большими партиями.)
3. Многоэмиттерные транзисторы могут показаться необычными, но они используются в широко распространённых TTL‑микросхемах серии 7400.
4. Я предполагаю, что в выходном мультиплексоре использовали диодно‑транзисторную логику (DTL), а не TTL, потому что более простая DTL‑схема лучше работала с высоким напряжением программирования. В DTL‑схеме используются очень большие резисторы, смещённые напряжением программирования. Их можно увидеть у правого края кристалла.
5. Путь тока при чтении и программировании битов устроен следующим образом. При чтении бита схема выходного драйвера соединялась с землёй через транзистор мультиплексора, целую плавкую перемычку, соответствующий диод и, наконец, транзистор выбора столбца. При пережигании перемычки импульс программирования отключал схемы выходных драйверов, а транзисторы соединяли выходные выводы непосредственно с мультиплексорами. Затем высоковольтный импульс с выходного вывода проходил по тому же пути, что и раньше: через транзистор мультиплексора, плавкую перемычку, диод, транзистор выбора столбца и далее на землю. Но теперь ток был намного выше, поэтому перемычка перегорала, навсегда переводя бит в состояние 0.
6. Интересный вопрос — как получить доступ к тестовым плавким перемычкам. Контрольных точек на микросхеме нет; судя по схеме, доступ к этим перемычкам получают, подавая нестандартные напряжения на некоторые выводы. Чтобы обратиться к строке тестовых перемычек в верхней части микросхемы, на вывод программирования подают повышенное напряжение. Чтобы читать или программировать столбец тестовых перемычек слева, повышенное напряжение подают на адресный вывод A6. Это позволяет проверить логику выбора строк, выходные драйверы и схему программирования. (Эти действия нигде не документированы и основаны на моём реверс‑инжиниринге.)
7. Трёхстабильные выходы и выходы с открытым коллектором использовали потому, что несколько микросхем памяти часто объединяли, чтобы получить память большего объёма. Возникал вопрос: как объединить их выходы? Один из вариантов — выход с открытым коллектором: по сути, он выдаёт либо 0, либо «ничего», а внешний резистор подтягивает линию к логической единице, если на выходе нет 0. Другой вариант — трёхстабильный выход: он может находиться в состоянии 0, 1 или «ничего», если отключён. Поскольку одновременно активен только один выход, несколько таких выходов можно было соединить вместе.

Если вы хотите перейти от понимания того, как память устроена физически, к тому, как программа работает с адресами и данными в памяти, приходите на бесплатный открытый урок OTUS. Разберём указатели в C и покажем, как через адреса управлять данными в памяти.
24 сентября в 20:00. «Указатели в Си — от адреса к управлению памятью» — Записаться
А весь список открытых уроков августа собрали в дайджесте.

