从零开始制作一台计算机 - 概述
// =======================
// 以下内容是《从零开始制作一台计算机-概述》的第一个版本,无论从排版上、文章结构上、以及文章
// 内容上都还需继续改进。
// =======================
前言
在开始介绍之前我们给出“从零开始”和“计算机”在本系列中的上下文或者说定义。
从零开始:“零”主要是指使用门的集成电路,比如当我们想使用非门不是使用二极管或者三极管搭建一个非门,而是直接购买使用类似74LS08这种已经封装好的包含4个非门的集成电路。这个“零”还包括一些直接购买使用的电阻、电容、导线、开关、面包板等等。
计算机:符和经典的现代计算机定义,包括输入、存储、控制、运算、输出5大模块。
计算机配置介绍
时钟频率:由一个滑动变阻器调节的555定时器,频率范围在1Hz~20Hz之间。
内存:16x8 bit。
CPU:8位,支持加法和减法两种运算。
输入:一个4P和一个8P拨码开关。
控制器:TODO。
显示器:TODO。
计算机结构介绍
下面是对此计算机的一个抽象描述。
我们可以把每一个方块理解为一个函数,每根线是函数的配置参数类型,宽箭头表示函数数据参数类型和返回值。CON方块是指挥者负责协调调用这些函数的模块。
计算机使用方法介绍
使用计算机解决现实世界的问题一般分为四步。
对我们要解决的问题进行建模。
将建模结果转化为计算机可理解的语言并输入到计算机。
在计算机上运行第二步输入的语言得到建模运行结果。
分析建模运行结果,返回第一步。
接下来我们以如何计算“28+14并将结果输出”这个问题为例,来详细介绍此计算机的编程使用方法。
建模:
把28(00011100)和14(00001110)转换为二进制。
内存分配:计算两数之和需要两步(指令)将这两个数送到CPU进行运算,因为还要将结果输出所以还需要一步(指令)输出。此外还要存储数据28和14,指令和数据一共要占用5个地址的存储。我们从内存地址开始(0000)处递增储存步骤(指令),从内存地址结尾处(1111)递减存储数据。
输入:
书写建模过程。
说明:最左边表示的是内存地址。
前三个内存地址对应的8位数据中,前四位表示操作符后四位可以是操作数或者是引用数据的地址。
操作符是传递给控制器使用的,控制器根据不同的操作符执行具体对应的操作,具体操作如何编码完全由我们自己定义,这个在后边的执行演示过程中会清楚的展现。
将第一步的程序输入到计算机中。
输入第0000行(第0行)代码。黄灯表示的是内存地址(灯灭表示0,灯亮表示1)0000,通过左上的红色拨码开关输入。图片中央的红灯表示的是黄灯内存地址对应的数据也就是我写入的机器代码。
输入第0001行(第1行)代码。
输入第0010行(第2行)代码。
输入第1110行(第14行)数据。
输入第1111行(第15行)数据。
程序输入视频演示:
视频中的配音是我儿子的(目前上二年级),一开始我在录的过程中他表示要参与。于是我就写了逐字稿,他负责读我负责配合演示操作。
运行:
程序运行视频演示:
有若干口误,严重的口误是在9分31秒处,28和14之和(0010 1010)是42不是52。
在这个执行过程中,可以帮助大家理解很多计算机方面的基础概念比如:上升沿(电压由低变高)、下降沿(电压由高变低)、时钟周期(clock period/cycle)、机器周期(machine cycle)、取指周期(fetch cycle)、执行周期(execute cycle)、指令周期(instruction cycle)、T state(计算机执行的最小单位)。
他们之间的关系如图所示。计算机的最小协调单位是一个时钟周期(clock period/cycle),若干个时钟周期被划分为一个机器周期(machine cycle),一个机器周期又被划分为 fetch cycle 和 execute cycle,还有指令周期(instruction cycle)。一个指令周期由大于等于一个的机器周期组成。
关于这个计算机的基本构成和演示就介绍到这里。因为这个计算机的架构是符合我们现代经典的计算机定义,理论上是可以拓展下去直到我们装上操作系统。
发一张片花做个纪念:
彩蛋:
此计算机的制作过程主要参考资料是下面这本书以及XXX。大家可以以此书为线索找出这个XXX。
有感于我还没有出生这本书就出版了。这本书出版于1977年,现在读起来依然特别带劲。再感于我在孔夫子旧书网上花了162元买到了这本书。
版权声明: 本文为 InfoQ 作者【小兵】的原创文章。
原文链接:【http://xie.infoq.cn/article/b7caf9793e04283c1a0f6c0e6】。文章转载请联系作者。
评论 (2 条评论)