有没有可能完全用面包板和基本的电子元件制作一台简单的计算机?例如以这种方式构建科学计算器是否可行?
面包板计算机
我不同意将微控制器放在面包板上相当于在面包板上构建计算机。除了 I/O(如键盘和显示器)外,微控制器本身几乎就是一台完整的计算机。只需将它放在面包板上并连接几根电线是微不足道的,可以在十分钟内完成。
当 OP 询问“是否有可能完全用面包板和基本电子元件制作一台简单的计算机?”时,我认为基本电子元件的意思更像是:
现在这是一个面包板上的计算机(嗯,几个面包板),由基本组件构建。它的描述在这里。它由十几种74LS00系列IC组成。(我不认为我们想一直回到晶体管;最初的PDP-8是一个小冰箱的大小)。
就科学计算器而言,如果您构建了如上图所示的通用计算机,则可以将其编程为科学计算器。仅使用逻辑 IC(没有计算机)构建科学计算器将非常困难;所有像这样的计算器制造商(Ti,HP等)都使用特殊的大型IC。这是一个自制的计算器,使用的是早期的 4 位计算器 IC。
我同意,如果想尽快启动并运行计算机,那么使用微控制器是可行的方法。如果一个人想真正了解一台计算机的内部工作原理,那么用基本的 IC 构建一个是正确的道路。
这不仅是可能的,我实际上已经做到了:见https://www.vttoth.com/CMS/projects/47
以下是其中一个面包板背面的接线图:
当然,这一切都取决于哪些组件符合“基本”要求。就我而言,基本组件是 74... 系列 TTL 芯片,大约有一百个。完全用晶体管来制造计算机……这太让人不知所措了。
另外,我的 4 位计算机确实不够强大,无法用作科学计算器,主要是因为内存的限制(256 个 4 位 nybbles)。然而,扩展地址空间并不是很困难,也许使用分页机制,4096 个半字节(12 位地址)可能已经足够了,65536 个半字节(16 位地址)肯定是。
是的,这是可能的,但你需要的不仅仅是几个面包板来设计一个科学计算器,当然这取决于你认为什么是基本组件:你将晶体管称为基本组件还是触发器,一个 EEPROM 或只是你可以从旧冰箱焊接出来的东西。
这里有一些很好的答案,但我只想指出人们经常不考虑的一件事。纵观计算设备的历史,用树皮和钉子打造计算机的难点不是 CPU,也不是 ALU。主要问题是内存. 因为您需要大量的它才能使整个存储程序概念起作用。你可以用几个触发器和与非门组成一个 CPU;例如,对于具有特定约束的电力电子应用,我曾经设计了一个仅使用 69 个触发器(4 个 16 位寄存器、4 个标志和 1 个状态寄存器位表示 FETCH/EXECUTE)的微处理器。它在硅片中实现,人们编写在其上运行的软件。这很简单,它适合功率晶体管的漏极触点的大小。但是存储任何有用程序所需的内存要大得多。
早期,内存是设计的起点。您可以像在早期的电话交换机中那样使用双稳态继电器。您可以使用真空管或晶体管来制作人字拖;CPU的寄存器通常是这样实现的。但是对于程序和数据存储,使用了纸带、磁带、旋转磁盘或旋转鼓。甚至钢丝上的声波也会不断地被电子设备接收和转发。您能想到的任何东西都可以在合理的时间内以合理的成本保存一些位。阿波罗轨道飞行器和月球着陆器计算机使用缠绕成绳索的线圈核心存储器。所有这些都需要不同的接口设备,并且对 CPU 访问这些类型的存储器所需的条件有巨大的影响。半导体存储器直到 1970 年代才真正出现,最终消除了这种复杂性。但话又说回来,现代动态 RAMS 也不是那么容易。
然后是必须为计算机设计输入输出设备的额外美妙之处。对于某些应用程序来说,几个灯泡就可以了,但是如果您需要文本输入/输出或更复杂的东西,您将再次面临更多困难。打孔卡阅读器、打印机和纸质终端在当时是一项巨大的业务。1978 年的 VT100 文本模式视频终端具有比科学计算器面包板计算机更多的内存和处理能力。
这是可能的,但复杂性和大小取决于您所说的基本电子元件。ALU 和定序器逻辑有点复杂,但可行。记忆很简单,但基本模式必须重复很多次(想想 1000 次)。
除了硬件,您还需要在其上运行的软件。粗略估计,对于中等复杂的 CPU(经典的 16 位指令 8 位数据级别),您的软件工作量将与您的硬件工作量相当。(对于更简单的 CPU,您将需要更多的软件工作。)您将如何将该软件加载到您的机器中?
寻找(和解决)错误将是一项有趣的工作。我建议你开始用 VHDL 编写并在模拟器上运行它,这比一堆芯片和电线更容易调试。
我的两个学生在大约 1 年的时间里创建了一个带有一些基本软件(包括 GCC 后端端口)的 16 位 CPU,从 VHDL 和 C 代码进行仿真开始。ALU 使用 74181 芯片,内存是静态 RAM,他们使用 atMega 连接 PC 和计算机。该计算机部分在无焊面包板上,部分在 PCB(8 个 16 位寄存器)上。(这两个不是普通学生!)