项目源地址:https://github.com/eddiewastaken/logisim-discrete-CPU
作者:eddiewastaken
翻译:Maft1E0
个人翻译,仅供学习参考使用,需转载/二次利用请事先询问
引言
TTL(晶体管-晶体管逻辑)芯片于20世纪60年代问世。在此类芯片中,7400系列芯片最受欢迎。这是一个由逻辑门、内存芯片、触发器、计数器以及其他用于早期电子CPU和PC中的集成电路芯片组成的家族。时至今日,在面包板的原型设计(译者注:即使用面包板作为平台进行电子电路设计)和教育教学领域里,7400系列芯片仍是座上常客。
同时,它们也常见于“自制CPU”领域。这些低级的、DIY的CPU通常功能有限,因此一般用于个人教学项目上,比如像是Ben Eater(译者注:https://www.youtube.com/user/eaterbc/)做的这个案例,便很受欢迎。这个项目旨在以教学为目的出发组建一个CPU,通过解析其每个子系统、逻辑单元和TTL芯片的组成结构,以纯离散的形式完成CPU的逻辑实现。
为了防止你理解受阻,有关Logisim Evolution项目的完整内容及相关文件,都可以在我这个项目的GitHub存储库中找到(译者注:https://github.com/eddiewastaken/logisim-discrete-CPU)。
前置知识
本文力图让尽可能多的人和业余爱好者都能理解,但也确实存在一些前置知识,即读者必须具备对以下名词概念的基本了解:
-
真值表
-
原始逻辑门(与门、或门、异或门、非门等)
-
二进制
如果对这些内容都不熟悉,你可以阅读以下链接中的内容入手:
-
https://learnabout-electronics.org/Digital/dig21.php(逻辑门和真值表)
-
https://www.elprocus.com/basic-logic-gates-with-truth-tables/(逻辑门和真值表)
你还需要一台能够运行Logisim Evolution二进制文件的计算机,最好是基于Debian、macOS或Windows的64位系统。
材料和方法
电子电路仿真
为了让设计和构建尽可能方便、高效和有序,因此我们选择了软件仿真做逻辑实现而非用面包板做物理实现。这些软件通常包含一个内置库,囊括了常用的逻辑门、RAM(译者注:随机存取存储器,Random Access Memory,即内存)、ROM(译者注:只读存储器,Read-Only Memory)和计数器芯片、I/O(译者注:输入输出,Input/Output)元件以及晶体管等。这些元件可以被“拖拽”到一个图形编辑窗口中。该窗口用以表示整个电路或子电路。元件之间可以用“导线”连接起来,然后便可以直接在软件内部对整个系统进行仿真和交互。这样就可以快速进行电路的原型设计、编辑、调试和分析,且不存在因使用集成电路芯片和导线组成的物理结构所带来的障碍,如“浮动电压”会导致导线中的二进制1或0的电压表达不正确、元件间的短路或是连接松动等问题。如果有必要,仿真设计原理图也可用作物理实现的“蓝图”,不管在何种程度的抽象下,都使得集成电路芯片、设备和元件可以为人所用。
软件
现在有很多不同的软件套件都可用作数字电子电路的设计、构建和仿真。但没有一种方案可以适应所有项目和情况——每种软件各有其优缺点,以及想要用好它所需的专业水平。有些是基于网络浏览器的应用,比如EasyEDA、AutoDesk Circuits和PartSim等。我们决定使用可离线执行的方案,而非基于网络的解决方案,这样就能充分利用本地的计算能力来驱动(主机)搭建本项目所需的CPU密集型子电路并进行仿真。由于本项目的目标,是为希望能深入了解数字逻辑的读者提供一个教学工具,因此,我们认为使用对学生而言可能有些熟悉的教学软件作为平台是比较合适的。在众多选择中,Logisim Evolution(译者注:https://github.com/reds-heig/logisim-evolution)是当之无愧的领跑者。它是一个独立、开源、维护积极的免费软件,有着丰富的内置组件库,并被世界各地的继续教育和高等教育机构广泛使用。像是VHDL([Very-High-Speed Integrated Circuit] Hardware Description Language,【超高速集成电路】硬件描述语言)等工具,通常用于以编程方式定义和仿真的高级且复杂的系统或子系统。而FPGA(译者注:Field Programmable Gate Array,现场可编程逻辑门阵列)的板刷写功能也是不需要的——理想情况下,该项目不含有任何抽象。而是尽可能从离散的逻辑组件出发,来深入了解子电路和CPU的整体运行原理,仿真和I/O则由软件进行直接的处理。
规划/设计/构建
架构
设计CPU时主要会使用到两种架构,名为“冯·诺依曼架构”和“哈佛架构”。它们的主要区别在于,哈佛架构为指令和数据分配了不同的内存地址,而冯·诺依曼架构则是给指令和数据都分配了相同的内存地址。为数据和指令分配不同内存空间的缺点在于,需要控制两条总线来对它们进行操作的这一控制单元结构设计非常复杂,从而增加了构建系统所需的子电路的数量。但独立的内存空间允许同时获取指令和数据,从而可以大大提高指令的执行速度。然而,由于效率并不是本项目的重点,而且为了子电路的设计也可以尽可能地精简,采用更简单的冯·诺依曼架构是相对合适的。
图1展示了系统子电路和共享总线间的数据流、方向和位宽。总线的高4位分配给操作码(“最左”位),低4位(“最右”位)则分配给立即数/操作数。这些全长的8位字,会按待执行顺序编写并存储在RAM中。