Хабрахабр

[Перевод] Бортовой управляющий компьютер «Аполлона»: дипстик и инженерный анализ памяти на многократно прошитых сердечниках

Расположенный на борту космического корабля «Аполлон» управляющий компьютер (Apollo Guidance Computer, AGC) помог кораблю попасть на Луну и сесть на её поверхность. ПО AGC было физически вплетено в постоянное запоминающее устройство на многократно прошитыхсердечниках [core rope memory]. Кен Ширриф с единомышленниками восстанавливают AGC (на фото ниже), которому не хватает памяти на сердечниках, вместо которой установлены коробочки-симуляторы такой памяти. Эти коробочки использовались во время разработки программ и наземного тестирования, чтобы инженерам не приходилось постоянно прошивать память. У симулятора отсутствует документация, поэтому я [автор записи в блоге / прим. перев.] провел его инженерный анализ, собрал интерфейс, и мы при помощи симулятора запускали на нашем AGC программы. Однако в процессе мы столкнулись с некоторыми сложностями.

Видно системную плату с кучей проводов.
Компьютер AGC со снятой крышкой. Интерфейсные платы на переднем плане современные.
В местах для памяти видны коробочки-симуляторы.

Память на многократно прошитых сердечниках

В AGC находилось шесть модулей памяти на многократно прошитых сердечниках, каждый из которых хранил всего 6 килослов информации (порядка 12 Кб). Модули памяти немного напоминали ROM-картриджи для видеоигры, и хранили ПО в постоянном, но стираемом виде. Программы были записаны путём вплетания проводов, проходивших через магнитные сердечники. Проходящий через сердечник провод обозначал бит 1, а обходивший стороной – бит 0. Вплетя 192 провода через или вокруг сердечника, можно было хранить 192 бита, что давало гораздо большую плотность, чем перезаписываемая память на магнитных сердечниках, хранившая по одному биту на сердечник.


Память на многократно прошитых сердечниках (Блок I) с AGC

Опытные женщины продевали провода вручную, прошивая один за другим сердечники пустотелой иглой, через которую был продет провод (на фото ниже). Изготовление такой памяти было кропотливым процессом, занимавшим 8 недель и стоившим по $15 000 за модуль. Ткачиха продевала иголку через отверстие, проводя провод там, где нужно. Им помогала автоматическая система, считывавшая программу с перфоленты и располагавшая отверстие над массивом сердечников. После этого память монтировалась на модуле вместе с сотнями резисторов и диодов, и заливалась эпоксидкой для надёжности в полёте.


Женщина прошивает постоянную память, внося в неё программу

Симулятор памяти на многократно прошитых сердечниках

Процесс прошивания памяти требовал серьёзного времени и денег, поэтому на время тестирования и разработки требовалась альтернатива. Вместо прошитых сердечников НАСА использовала их симуляторы, позволявшие AGC загружать данные из внешней системы. Наш AGC использовался для наземного тестирования, поэтому у него не было прошитых сердечников, а был их симулятор. Он состоит из двух коробочек, подключаемых в разъёмы для прошитых сердечников, причём каждая коробочка занимает по три слота памяти. Их видно на левой стороне AGC на фото ниже, и у них круглые разъёмы военного типа для подключения к внешнему компьютеру.


Коробки симуляторов устанавливаются в левую часть AGC вместо реальных модулей памяти.

Пришлось применить инженерный анализ, проследив все схемы и поняв, что делают коробки. И хотя у нас есть подробная документация на AGC, я не смог найти документацию на симулятор. С одной стороны каждой коробки есть разъём MIL-Spec для подсоединения к внешней системе. Наружное их изучение мало что даёт. Каждая группа контактов занимает место одного модуля памяти на сердечниках. С другой стороны есть три группы по 96 контактов, подсоединяющихся к AGC.

Частично в контурах использовался метод, конструктивно сходный с кордвудом – компоненты крепились вертикально при помощи отверстий в металлическом блоке. Вскрытие коробок показало нестандартную технику сборки. Другие схемы в коробках использовали стандартные интегральные схемы (TTL 7400). С обеих сторон блока контакты были припаяны к проводам. — щуп] и были смотаны вместе проводами. Но в отличие от современных печатных плат, чипы крепились внутри пластиковых модулей под названием «дипстик» [Dipstik, англ.

Компоновка «кордвуд»

Компоновка «кордвуд» активно использовалась в AGC для создания аналоговых схем, и она же присутствует и в симуляторах памяти (см. фото ниже). Белые круги в центре – это концы резисторов и диодов, закреплённых в модуле вертикально, и с припаянными с обеих сторон контактами. Компоненты плотно упакованы, словно брёвна, из-за чего такая компоновка и называется кордвуд. Импульсные трансформаторы находятся под большими серыми кругами. Такие же есть с другой стороны модуля, и из отверстий выходят их оранжевые, жёлтые, красные и коричневые провода. Чёрные провода соединяют схему кордвуд с цифровой логикой. Вверху на фото видно колышки, на которых смонтированы диоды и резисторы, вместе с соединением с контактами, подключающимися к AGC.

В современных схемах эту функцию выполняют оптоизоляторы, но симуляторы использовали вместо них небольшие импульсные трансформаторы. Главная цель компоновки кордвуд – обеспечивать электрическую изоляцию между схемами AGC и коробками-симуляторами памяти. Резисторы управляют током, проходящим через импульсные трансформаторы. Поскольку каждая коробка получает сигналы, предназначенные для трёх разных модулей памяти, множество диодов объединяют три сигнала в один.

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

Цифровая логика и дипстик

Дипстик [Dipstik] был подключаемым модулем, представленным в 1968 году для облегчения прототипирования интегральных схем. Он заменил печатные платы системой упаковки, дававшей удвоенную плотность.

Интегральные схемы устанавливались на держатель, вставлявшийся в блок коннекторов. Идея состояла в пластиковом блоке коннектора с соединением контактов накруткой снизу для соединения схемы. На фото ниже показаны модули дипстик с одним вынутым держателем. У держателя сверху были ушки для пайки для установки дополнительных компонентов, например, развязывающих конденсаторов. Контакты ИС помещались между контактами держателя и контактами блока коннектора. На каждом держателе помещалось 5 ИС. Дипстик оказался провальным проектом. Эта идея казалась хорошей, однако в итоге была ненадёжной.

Мне было чрезвычайно трудно их отслеживать, невозможно было идти по каждому проводочку в море одинаковых синих проводов. Ниже на фото показаны соединённые при помощи накрутки проводов контакты с нижней части дипстиков. Затем я уже смог нарисовать схематическую диаграмму и думать над тем, что она делает. Мне приходилось прозванивать всё мультиметром. В сумме в симуляторе использовалось порядка 50 ИС.

И хотя тогда прошло лишь несколько лет с момента проектирования AGC, технологии в симуляторах уже выглядят более продвинутыми, что иллюстрирует быстрый прогресс ИС с середины 1960-х до начала 1970-х. Судя по маркировке компонентов, коробки симулятора собирали в 1971-м. В коробках симуляторов есть уже более сложные чипы 7400-й серии, содержащие более десяти элементов на транзисторно-транзисторная логике (ТТЛ). AGC был собран на основе простых интегральных схем, в каждой из которых содержится два вентиля NOR и встроена примитивная резисторно-транзисторная логика (РТЛ). В отличие от устаревших плоских ИС в AGC, коробки симуляторов используют микросхемы в корпусе DIP (dual in-line package), а такие корпуса используются до сих пор.

Результаты инженерного анализа

Отследив все контуры, я понял, как работает симулятор, и нарисовал схемы. По сути, одна коробка декодирует адрес, с которому идёт доступ, а вторая отправляет нужные данные в AGC (назову их «адресной коробкой» и «коробкой данных»).

Задача не простая, поскольку сигналы приходят в виде импульсов тока большой мощности и напряжения 14 В, которые предназначены для переключения сердечников. Адресная коробка получает сигналы и преобразует их в двоичный вид. Наконец, импульсы отправляющиеся к сердечникам, содержат не только адрес, но и сигнал на выбор одного из 6 модулей, и на выбор одной из 12 нитей в модуле. Также эти импульсы разделены во времени, поскольку одни переключают сердечник в одну сторону, а другие – обратно.

Там содержится куча логики AND-OR для преобразования сигналов в двоичные адреса (а это нетривиально, поскольку в каждом модуле содержится по 6 килослов, это не степень двойки, поэтому требуется множество побитовых манипуляций). Адресная коробка использует импульсные преобразователи, превращая импульсы 14 В в ТТЛ-сигналы. Наконец, RC-цепь мультивибратора управляет таймингом, определяя на основании различных сигналов готовность адреса, и то, когда нужно отправлять результат в AGC. Флип-флоп блокирует адрес, когда тот доступен.

Она получает 16 бит данных от внешней системы и отправляет сигналы в усилители AGC, симулируя милливольтные сигналы от сердечника. Коробка с данными устроена проще. Адресная коробка и коробка данных общаются по проводам объединяющей панели AGC. Эти сигналы генерируются импульсными преобразователями.

В коробках содержатся регуляторы на 5 В LM109, питающие ТТЛ. С внешней системой коробки общаются по дифференциальным сигналам, чтобы исключить шум от длинных кабелей. Одна коробка получает нерегулируемый DC через внешний разъём и отправляет нерегулируемый DC в другую через объединяющую панель AGC (что, как по мне, довольно странно).

BeagleBone в качестве интерфейса

Разобравшись с работой симулятора, дальше нужно было создать интерфейс, способный выдавать данные от программы в симулятор. Я использовал BeagleBone, крохотный одноплатный компьютер на базе Linux. Преимущество BeagleBone в том, что на нём стоят быстрые микроконтроллеры, способные в реальном времени реагировать на запросы к памяти от AGC.

Каждый из двух кабелей идёт на свою коробку симулятора.
Интерфейсом служит плата, воткнутая в BeagleBone.

Она довольно простая: дифференциальные линейные приёмники AM26C32, преобразующие дифференциальные сигналы симулятора в логические сигналы 3,3 В для BeagleBone, и дифференциальные линейные драйверы AM26C31 для отправки сигналов в симулятор. Я разработал интерфейсную плату для подключения к BeagleBone. Плату я спроектировал в KiCad и заказал изготовление у PCBWay, спонсора восстановления AGC.

Это, по сути, конечный автомат, ожидающий адреса от симуляторной коробки, ожидающий сигнала тайминга, читающий слово из BeagleBone RAM, и отправляющий слово в симулятор. Я написал программу, работающую на микроконтроллере BeagleBone, PRU. Программу я выложил на Github.

Проблемы с симулятором

Симуляторы памяти на многократно прошитых сердечниках не были собраны по стандартам бортового управляющего компьютера «Аполлона», и в итоге с их отладкой мне пришлось долго провозиться. Многие соединения нарушились, их нужно было пропаивать снова (не знаю, сломались ли они от времени, или когда я разбирался в схеме работы). Также мы обнаружили короткое замыкание в одном дипстике и вышедшую из строя ИС.

Проблема была в том, что контакты ИС располагались на манер сэндвича между контактами на держателе дипстика и блока, куда они вставлялись. Больше всего проблем было с дипстиками, поскольку многие контакты перемежались между дипстиками и ИС. Согнув ножки ИС в виде буквы S, Марк сумел обеспечить им контакт с обеих сторон, по крайней мере, на некоторое время. Пластиковые дипстики выгибаются наружу, из-за чего контакты периодически не работают. Но через несколько часов мягкие ножки ИС выгибались обратно, контакты вновь начинали работать плохо, поэтому долговременного решения этой проблемы у нас не было.

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

Заключение

Бортовой управляющий компьютер «Аполлона» использует память на многократно прошитых сердечниках. Поскольку во время разработки постоянно переделывать такую память было бы непрактично, вместо неё использовались симуляторы. Я провёл инженерный анализ симулятора и создал интерфейс для его работы при помощи BeagleBone. Мы с успехом запустили программы на AGC посредством этого интерфейса. Однако симулятор памяти оказался проблемным и ненадёжным.

@CuriousMarc сделал видео, где подробно показана наша работа с симулятором памяти:

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть