Apollo机载控制计算机:油尺和多个缝合芯上的内存工程分析

控制计算机 (阿波罗制导计算机,AGC)位于阿波罗太空船上,帮助该船到达月球并降落在其表面。 AGC软件被物理地编入了只读存储器核心核心存储器[core绳索存储器]。 Ken Shirrif和志趣相投的人们正在重建AGC(如下图所示),该AGC的内核上没有足够的内存,而是安装了具有此类内存的模拟器盒。 这些程序盒在程序开发和地面测试期间使用,因此工程师不必不断地闪存。 该模拟器没有文档,因此[我是博客条目的作者/大约。 翻译]进行了工程分析,组装了界面,并使用模拟器在AGC上启动了程序。 但是,在此过程中我们遇到了一些困难。


AGC电脑的主机盖已卸下。 您会看到主板上有一堆电线。 在存储位置,可以看到模拟框。 前景中的接口卡是现代的。

内存在多个缝合线芯上


AGC在多个缝合核心上具有六个存储模块,每个核心仅存储6公斤信息(约12 Kb)。 内存模块有点像视频游戏的ROM盒,它们使软件保持恒定但可擦除的形式。 通过将导线编织穿过磁芯来记录程序。 穿过铁心的导线表示为位1,绕过一根的导线表示为位0。通过将192根导线编织通过或绕过磁芯,可以存储192位,这比磁芯上的可重写内存(每芯存储一位)要高得多。


带有AGC的多针芯上的存储器(第I块)

制作这样的内存是一个艰苦的过程,耗时8周,每个模块的成本为15,000美元。 经验丰富的妇女手动穿过电线,并用一根空心针将电线穿过其中一个接一个地闪烁芯线(如下图所示)。 它们由自动系统辅助,该系统从打孔的磁带读取程序,并在铁芯阵列上方放置一个孔。 织工使针穿过孔,并在必要时引导导线。 之后,将存储器与数百个电阻器和二极管一起安装在模块上,并填充环氧树脂以确保飞行的可靠性。


一个女人闪烁着永久的记忆,将一个程序引入其中

反复缝合铁芯上的存储器模拟器


闪存的存储过程花费了大量时间和金钱,因此在测试和开发过程中需要替代方法。 NASA不用缝合核心,而是使用其模拟器,允许AGC从外部系统下载数据。 我们的AGC用于地面测试,因此它没有缝合的铁心,但有模拟器。 它由连接到用于缝合线芯的连接器的两个盒子组成,每个盒子占用三个内存插槽。 在下面的照片中,可以在AGC的左侧看到它们,并且它们具有圆形的军用连接器,用于连接到外部计算机。


模拟器盒安装在AGC的左侧,而不是实际内存模块。

尽管我们有关于AGC的详细文档,但找不到模拟器的文档。 我必须进行工程分析,并遵循所有方案并意识到包装箱的功能。 对它们的外部研究几乎没有。 每个盒子的一侧都有一个MIL-Spec连接器,用于连接外部系统。 另一方面,有3组96针连接到AGC。 每组触点代替内核上的一个内存模块。



打开盒子显示非标准组装技术。 在轮廓上部分使用了一种方法,该方法在结构上类似于阔叶树 -组件垂直安装 ,并在金属块中带有孔。 在设备的两侧,触点都焊接到电线上。 包装盒中的其他电路使用标准集成电路(TTL 7400)。 但是与现代印刷电路板不同,这些芯片安装在称为“ dipstik”的塑料模块内 -探头 ]并用电线缠绕在一起。



木布局


“软木”布局在AGC中被积极地用于创建模拟电路,并且它也存在于存储器仿真器中(见下图)。 中间的白色圆圈是垂直安装在模块中的电阻器和二极管的端部,其触点焊接在两侧。 组件被紧密包装,就像原木一样,这就是为什么这种布局被称为Cordwood的原因。 脉冲变压器位于大的灰色圆圈下。 模块的另一侧也有相同的导线,它们的橙色,黄色,红色和棕色导线从孔中伸出。 黑线将脐带木电路连接到数字逻辑。 在照片的顶部,您可以看到装有二极管和电阻器的销钉,以及与AGC相连的触点的连接。



电缆线布局的主要目标是在AGC电路和内存模拟器盒之间提供电气隔离。 在现代电路中,光隔离器执行此功能,但是模拟器使用小脉冲变压器代替。 由于每个盒接收设计用于三个不同存储模块的信号,因此许多二极管将三个信号组合为一个。 电阻控制流经脉冲变压器的电流。

了解模拟阔叶电路的结构非常困难。 首先,该组件不可见,因为它们已集成到模块中。 我不得不用万用表来了解它们的位置。 其次,由于联系人在阔叶林布局的两侧都出现了,所以我花了很多时间将盒子翻过来以寻找合适的联系人。 最后,我想不出一种方便的方法来绘制没有产生线状迷宫的阔叶树的布局图。

数字逻辑和量油尺


Dipstik是1968年推出的一种插件,用于促进集成电路的原型设计。 他用双密度包装系统代替了印刷电路板。



想法是在连接器的塑料块中,从底部开始将环绕式触点连接起来以连接电路。 将集成电路安装在插入连接器块的支架上。 顶部的支架带有用于安装其他组件(例如去耦电容器)的铜焊耳。 下图显示了拉出一个支架的量油尺模块。 每个持有人拥有5个IP。 IC触点放置在支架的触点和连接器块的触点之间。 这个想法看起来不错,但最终却不可靠。 Deepstick是一个失败的项目。



下图显示了从量油尺底部借助绕线连接的触点。 对于我来说,追踪它们非常困难,不可能在相同的蓝线海中浏览每个帖子。 我不得不用万用表敲响所有东西。 然后,我能够绘制示意图并考虑其作用。 模拟器中总共使用了约50个IC。



根据组件的标签判断,模拟器盒于1971年组装。 尽管自AGC设计以来仅过去了几年,但仿真器中的技术已经看起来更加先进,这说明了IP从1960年代中期到1970年代初期的快速发展。 AGC是在简单的集成电路的基础上组装而成的,每个集成电路都包含两个NOR门和集成的本机电阻晶体管逻辑(RTL)。 在仿真器框中,已经有更复杂的7400系列芯片,在晶体管晶体管逻辑(TTL)上包含十多个元素。 与AGC中过时的平面IC不同,模拟器盒使用DIP(双列直插式封装)封装的芯片,并且这种情况仍在使用。

工程分析结果


跟踪了所有轮廓后,我意识到了模拟器的工作原理,并绘制了图表 。 实际上,一个框解码要从中访问访问的地址,第二个框将必要的数据发送到AGC(我将其称为“地址框”和“数据框”)。

地址盒接收信号并将其转换为二进制。 任务并不简单,因为信号以高电流脉冲和14 V电压的形式出现,旨在切换内核。 同样,这些脉冲在时间上是分开的,因为有些脉冲将内核切换到一个方向,而另一些脉冲则切换回去。 最后,发送到内核的脉冲不仅包含地址,还包含用于选择6个模块之一和选择模块中12个线程之一的信号。

地址盒使用脉冲转换器,将14 V脉冲转换为TTL信号。 它包含一堆用于将信号转换为二进制地址的AND-OR逻辑(这并不简单,因为每个模块包含6千屈螺菌素,所以这不是2的幂,因此需要进行很多按位操作)。 可用的触发器会阻塞一个地址。 最后,多谐振荡器的RC电路控制时序,基于各种信号确定地址的可用性以及何时将结果发送到AGC。

数据框更简单。 它从外部系统接收16位数据,并将信号发送到AGC放大器,以模拟来自内核的毫伏信号。 这些信号由脉冲转换器产生。 地址盒和数据盒通过AGC底板的导线进行通信。

盒子使用差分信号与外部系统通信,以消除长电缆发出的噪声。 该包装盒包含提供TTL的5 V LM109稳压器。 一个盒子通过外部连接器接收未调节的DC,并通过AGC底板将未调节的DC发送到另一个(对我来说,这很奇怪)。



BeagleBone作为界面


在处理了模拟器的工作之后,有必要创建一个能够将数据从程序传递到模拟器的接口。 我使用了基于Linux的小型单板计算机BeagleBone 。 BeagleBone的优势在于它具有快速的微控制器,可以实时响应AGC的内存请求。


接口是卡在BeagleBone中的板。 两条电缆中的每条电缆都连接到其盒式模拟器。

我设计了一个用于连接到BeagleBone的接口板。 这非常简单: AM26C32差分线性接收器可将仿真器的差分信号转换为BeagleBone的3.3 V逻辑信号,而AM26C31差分线性驱动器则可将信号发送至仿真器。 我在KiCad设计了该板,并从AGC修复的赞助商PCBWay订购了产品。

我编写了一个在BeagleBone微控制器PRU上运行的程序。 从本质上讲,这是一个状态机,它等待来自模拟器盒的地址,等待时序信号,从BeagleBone RAM中读取字,然后将字发送给模拟器​​。 我将程序发布在Github上

模拟器问题


反复缝合的内核上的内存模拟器未按照Apollo机载控制计算机标准进行组装,因此,我不得不花很长时间来调试它们。 许多连接断开,必须重新焊接(我不知道它们是否会不时断开,或者我何时知道工作方案)。 我们还发现一个量油尺短路和IC故障。



所有的问题大多数都与量油尺有关,因为许多接触点缀在量油尺和IP之间。 问题在于,IC的触点以夹层的方式位于量油计座上的触点和插入它们的模块之间。 塑料量油尺向外弯曲,这就是为什么触点定期不起作用的原因。 马克以字母S的形式弯曲IP的腿后,设法使他们至少从侧面接触到双方。 但是几个小时后,IC的软脚向后弯曲,触点再次开始无法正常工作,因此我们没有长期解决此问题的方法。

最有趣的问题是来自AGC 的两个信号之间竞争 ,这些信号本应同时停止。 他们给脉冲转换器线圈的两端供电,这不应该发出信号。 然而,一个信号落后于另一个,导致出现虚假脉冲。 不幸的是,仿真器盒中的数字逻辑是异步的,这种冲动阻止了触发器中地址的错误位,结果是发生了对存储器中错误位置的访问。 结果,我们跟踪了这个问题,并安装了额外的电容器来过滤脉冲。 不幸的是,我们使用了太大的电容器,而在其他情况下,信号则延迟太多,从而导致出现其他错误。 然后,我们放置了较小的电容器,最后设法使用老式的核心内存模拟器在AGC上成功运行了程序。

结论


Apollo机载控制计算机使用多个缝合核心上的内存。 由于在开发过程中不断重新制作这样的内存是不切实际的,因此使用了模拟器。 我对模拟器进行了工程分析,并使用BeagleBone创建了用于其操作的界面。 我们已经通过该界面成功启动了AGC程序。 然而,事实证明该存储器模拟器是有问题且不可靠的。

@CuriousMarc制作了一段视频,详细介绍了我们在内存模拟器中的工作:

Source: https://habr.com/ru/post/zh-CN463439/


All Articles