



本教程将带领你基于已封装的键盘输入寄存器、数码管显示驱动、8位寄存器、三态门、加法器等核心子电路模块,分步构建两个版本的手摇式计算机仿真模型:
- 手动版计算机:完全依赖人工拨动开关生成控制信号,深入理解数据在总线、寄存器、ALU之间的流动时序。
- RS触发器版计算机:引入基本RS触发器替代持续按压的开关,是迈向时序自动化的第一步。
本教程将使用Logisim Evolution 3.9.0和Logisim 2.7.1两个版本进行演示。
2. 准备工作在开始搭建之前,请确保你已经准备好以下子电路:
- 键盘输入寄存器模块:【Logisim】 键盘输入寄存器模块与数码管显示驱动模块封装的详细教程
- 数码管显示驱动模块:【Logisim】 键盘输入寄存器模块与数码管显示驱动模块封装的详细教程
- 8 位寄存器:【Logisim 】带时钟信号的简单 8 位寄存器的详细教程
- 8 位三态门:【Logisim 】三态门的详细教程
- 8 位加法器:【Logisim】半加器、全加器与 8 位加法器的详细教程
完成以上准备工作后,你已经拥有了一个结构清晰、组件就绪的项目框架。接下来,我们将在此基础上分别搭建手动版和RS触发器版的手摇式计算机。
3. 手动版计算机3.1 核心原理
手动版手摇式计算机完全由操作者控制计算节奏。这是最基础的版本,用户通过拨动开关直接控制每一个控制信号。所有控制信号都由人工给定,计算机本身没有任何“自动”能力。
3.2 搭建步骤
- 新建一个电路,命名为 “HandCrank_Manual”。
- 竖直拉出8 根导线,作为系统总线(左边高位,右边低位)。为了方便观察系统总线上的数据,我们可以在每根导线顶端分别连接 1 个“ LED 灯(LED)”。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 拖拽出我们封装好的键盘输入寄存器模块“Keyboard_Register”。它的输入分别连接输入引脚“H15~H0”(高位数据),“L15~L0”(低位数据),“On_C8”(内部三态门使能),“On_Reg”(内部寄存器时钟信号),“On_Reg_C8”(内部寄存器三态门使能)。它的输出分别连接 8 根系统总线。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 拖拽出一个8 位寄存器“Register_8bit”,作为显示寄存器“Display”,用于寄存从系统总线上得到的数据,供数码管持续显示。它的输入分别连接 8 根系统总线。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 拖拽出我们封装好的数码管显示驱动模块“SevenSeg_Display”。它的输入连接显示寄存器“Display”的输出,它的输出连接 2 个7 段数码管,一个数码管负责高位显示,另一个数码管负责低位显示。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 拖拽出一个8 位三态门“Controlled_8bit”,作为进三态门“A_in”,用于控制系统总线的数据进入ALU,它的输入分别连接 8 根系统总线。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 拖拽出一个8 位寄存器“Register_8bit”,作为累加器“ACC”,用于存储当前累加的结果,它的输入连接进三态门“A_in”,我们把进三态门“A_in”和累加器“ACC”中间的这段导线称为“线路1”,方便后续我们理解原理。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 竖直拉出8 根导线,作为片内总线(左边高位,右边低位)。为了方便观察片内总线上的数据,我们可以在每根导线顶端分别连接 1 个“ LED 灯(LED)”。把累加器“ACC”的输出连接到片内总线上。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 拖拽出 2 个8 位寄存器“Register_8bit”,分别作为暂存器1“TMP_1”和暂存器2“TMP_2”,用于暂时存储待计算的 2 个加数,这 2 个暂存器的输入都连接到片内总线上。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 拖拽出一个 8 位加法器“BitAdder_8”,作为加法器“Adder”,用于相加求和。它的输入端“A7~A0”连接暂存器1“TMP_1”的输出,这两个元件之间的导线称为“线路2”。输入端“B7~B0”连接暂存器2“TMP_2”的输出,,这两个元件之间的导线称为“线路3”。加法器“Adder”的多余输入端“Cin”可以置空或“接地”(原版必须“接地”)。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 拖拽出一个8 位三态门“Controlled_8bit”,作为传输结果三态门“A_mid”,用于控制加法器结果进入累加器“ACC”。它的输入连接加法器“Adder”的输出,这两个元件之间的导线称为“线路4”。加法器“Adder”的多余输出端“Cout”可以置空。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 把传输结果三态门“A_mid”的输出连接到“线路1”,用于把计算结果送到累加器“ACC”。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 拖拽出一个8 位三态门“Controlled_8bit”,作为出三态门“A_out”,用于控制计算结果进入系统总线。它的输入连接片内总线,输出连接系统总线。因此,我们可以把这个元件180度旋转,使它的左边为输出端,右边为输入端,方便连接。
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 最终,我们可以得到以下结果:
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
3.3 成果验证
我们可以尝试计算5C + 07 = 63 ,步骤如下:
- 输入并寄存第一个加数:
- 在键盘中输入“5”和“C”(键盘输入寄存器模块 H5=1,L12=1)
- 打开键盘寄存器,给它一个上升沿,把这个数据存入寄存器(键盘输入寄存器模块 On_Reg=1)
- 关闭键盘寄存器(键盘输入寄存器模块 On_Reg=0)
- 输入第二个加数:
- 在键盘中输入“0”和“7”(键盘输入寄存器模块 H5=0,L12=0,H0=1,L7=1)
- 把第二个加数“07”送到暂存器 2:
- 打开键盘三态门,允许当前键盘数据进入系统总线(键盘输入寄存器模块 On_C8=1)
- 打开显示寄存器,给它一个上升沿,把当前系统总线数据寄存并传入数码管(显示寄存器 Clock=1)
- 关闭显示寄存器(显示寄存器 Clock=0)
- 打开数码管显示,此时数码管显示“07”(数码管显示驱动模块 EN=1)
- 打开进三态门,允许数据进入线路1(进三态门 EN=1)
- 打开累加器,给它一个上升沿,把数据寄存到片内总线(累加器 Clock=1)
- 关闭累加器(累加器 Clock=0)
- 打开暂存器2,给它一个上升沿,把数据寄存到线路3(暂存器2 Clock=1)
- 关闭暂存器2(暂存器2 Clock=0)
- 关闭键盘三态门(键盘输入寄存器模块 On_C8=0)
- 把第一个加数“5C”送到暂存器 1:
- 打开键盘寄存器三态门,允许键盘寄存器数据进入系统总线(键盘输入寄存器模块 On_Reg_C8=1)
- 打开显示寄存器,给它一个上升沿,把当前系统总线数据寄存并传入数码管,此时数码管显示“5C”(显示寄存器 Clock=1)
- 关闭显示寄存器(显示寄存器 Clock=0)
- 打开累加器,给它一个上升沿,把数据存到片内总线(累加器 Clock=1)
- 关闭累加器(累加器 Clock=0)
- 打开暂存器1,给它一个上升沿,把数据寄存到线路2(暂存器1 Clock=1)
- 关闭暂存器1(暂存器1 Clock=0)
- 关闭进三态门(进三态门 EN=0)
- 关闭键盘寄存器三态门(键盘输入寄存器模块 On_Reg_C8=0)
- 传送并寄存计算结果:
- 打开传输结果三态门,允许结果数据进入线路1(传输结果三态门 EN=1)
- 打开累加器,给它一个上升沿,把结果寄存到片内总线(累加器 Clock=1)
- 关闭累加器(累加器 Clock=0)
- 关闭传输结果三态门(传输结果三态门 EN=0)
- 显示计算结果:
- 打开出三态门,允许结果数据进入系统总线(出三态门 EN=1)
- 打开显示寄存器,给它一个上升沿,把当前系统总线数据寄存并传入数码管,此时数码管显示“63”(显示寄存器 Clock=1)
- 关闭显示寄存器(显示寄存器 Clock=0)
- 关闭出三态门(出三态门 EN=0)
- 测试结束,关闭数码管显示(数码管显示驱动模块 EN=0)
4.1 核心原理
我们发现,手动拨动开关需要一直保持打开状态,于是引入 RS 触发器:在输入端加入两个输入引脚,一个负责“置 1”,一个负责“置 0”,按两次输入引脚(让引脚从“0”变为“1”,再变回“0”)就能让触发器的信号保持“1”或“0”,代替人工按钮来生成有序的控制时序。
本教程使用的 RS 触发器为基本 RS 触发器,有两种搭建方法:
- 参考此教程自己搭建子电路:【Logisim 】基本 RS ,钟控 D ,主从 RS ,主从 D ,维持阻塞型 D 触发器的详细教程
- 使用“存储器(Memory)”库中的“S-R 触发器(S-R Flip-Flop)”元件,当我们只使用它的“预设(Preset)”端和“清除(Clear)”端时,它的功能就相当于一个基本 RS 触发器。
4.2 搭建步骤
- 新建一个电路,命名为 “HandCrank_RS”。
- 把我们的 手动版计算机“HandCrank_Manual”复制到这个新电路中。
- 由于线路较复杂,我们可以选择使用“隧道”来连接 RS 触发器,方便管理。两个同名的隧道之间可以相互传递信号,不需要再拉导线。
- 从“线路(Wiring)”库中找到“隧道(Tunnel)”,把以下输入引脚删除,替换成隧道:
- 键盘输入寄存器的 “On_C8”替换成隧道“step1”。
- 键盘输入寄存器的 “On_Reg_C8”替换成隧道“step2”。
- 进三态门A_in 的“EN”替换成隧道“step3”。
- 累加器ACC 的“Clock”替换成隧道“step4”。
- 暂存器1TMP_1 的“Clock”替换成隧道“step5”。
- 暂存器2 TMP_2 的“Clock”替换成隧道“step6”。
- 传输结果三态门A_mid 的“EN”替换成“step7”。
- 出三态门A_out 的“EN”替换成隧道“step8”。
- 显示寄存器Display 的“Clock”替换成隧道“step9”。
- 数码管显示驱动的“EN”替换成隧道“step10”。
- 替换后结果如图:
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
- 在空白处放置 10 个基本 RS 触发器,“预设(Preset)”端(输入 S 端,置1)和“清除(Clear)”端(输入 R 端,置0)都各连接一个独立的输入引脚(共20个输入引脚),“当前触发器状态”端(输出 Q 端)分别连接隧道“step1~step10”。
- 连接后结果如图:
- Logisim Evolution:

- Logisim:

- Logisim Evolution:
4.3 成果验证
“预设(Preset)”端使 RS 触发器的输出端(Q)被置1,并持续保持;“清除(Clear)”端使 RS 触发器的输出端被置0,并持续保持。按两次输入引脚(让引脚从“0”变为“1”,再变回“0”)就能让触发器的信号保持“1”或“0”
我们可以尝试计算5C + 07 = 63 ,步骤如下:
- 输入并寄存第一个加数:
- 在键盘中输入“5”和“C”(键盘输入寄存器模块 H5=1,L12=1)
- 打开键盘寄存器,把这个数据存入寄存器(键盘输入寄存器模块 On_Reg=1)
- 关闭键盘寄存器(键盘输入寄存器模块 On_Reg=0)
- 输入第二个加数:
- 在键盘中输入“0”和“7”(键盘输入寄存器模块 H5=0,L12=0,H0=1,L7=1)
- 把第二个加数“07”送到暂存器 2:
- 打开键盘三态门,允许当前键盘数据进入系统总线(step1=1)
- 打开显示寄存器,把当前系统总线数据寄存并传入数码管(step9=1)
- 关闭显示寄存器(step9=0)
- 打开数码管显示,此时数码管显示“07”(step10=1)
- 打开进三态门,允许数据进入线路1(step3=1)
- 打开累加器,把数据寄存到片内总线(step4=1)
- 关闭累加器(step4=0)
- 打开暂存器2,把数据寄存到线路3(step6=1)
- 关闭暂存器2(step6=0)
- 关闭键盘三态门(step1=0)
- 把第一个加数“5C”送到暂存器 1:
- 打开键盘寄存器三态门,允许键盘寄存器数据进入系统总线(step2=1)
- 打开显示寄存器,把当前系统总线数据寄存并传入数码管,此时数码管显示“5C”(step9=1)
- 关闭显示寄存器(step9=0)
- 打开累加器,把数据存到片内总线(step4=1)
- 关闭累加器(step4=0)
- 打开暂存器1,把数据寄存到线路2(step5=1)
- 关闭暂存器1(step5=0)
- 关闭进三态门(step3=0)
- 关闭键盘寄存器三态门(step2=0)
- 传送并寄存计算结果:
- 打开传输结果三态门,允许结果数据进入线路1(step7=1)
- 打开累加器,把结果寄存到片内总线(step4=1)
- 关闭累加器(step4=0)
- 关闭传输结果三态门(step7=0)
- 显示计算结果:
- 打开出三态门,允许结果数据进入系统总线(step8=1)
- 打开显示三态门,把当前系统总线数据寄存并传入数码管,此时数码管显示“63”(step9=1)
- 关闭显示三态门(step9=0)
- 关闭出三态门(step8=0)
- 测试结束,关闭数码管显示(step10=0)
通过手动版和RS触发器版两个手摇式计算机项目的实践,我们不仅巩固了Logisim中子电路封装、层次化设计和模块复用的核心技能,更完成了一次对计算机底层架构的深度探索。
建议保存好本项目文件,作为后续构建更复杂CPU的底层模块库。你可以尝试在现有加法器基础上集成减法、逻辑运算等单元,构建一个功能更完整的ALU。
愿这两个亲手搭建的模型,成为你探索计算机硬件世界的一块坚实基石。