欢迎光临
我们一直在努力

【Logisim】硬布线版和诺依曼体系结构的程序存储版简单运算器(加法)的详细教程

1. 引言

本教程将教你在手摇式计算机的基础上,完成硬布线计算机和冯·诺依曼体系结构的程序存储计算机的搭建:

  • 硬布线计算机: 通过时序电路将固定的控制信号序列固化在硬件逻辑中,使计算机能够自动执行指令,实现从“手动控制”到“硬件自动控制”的跨越。

  • 冯·诺依曼体系结构的程序存储计算机: 将指令以二进制代码预先存储在存储器中,由程序计数器依次取出并执行,真正体现了“存储程序”的核心思想,是现代计算机体系结构的基石。

  • 本教程将使用Logisim Evolution 3.9.0和Logisim 2.7.1两个版本进行演示。

    *注:如果出现连线正确却不知道什么原因报错,保存后重新打开即可。

    2. 准备工作

    在开始搭建之前,请确保你已经准备好以下电路:

  •  RS 触发器版简单运算器(加法):【Logisim】手动版和RS触发器版简单运算器(加法)的详细教程
  • 8 位 4-16 译码器:【Logisim】2-4,3-8与4-16译码器的详细教程
  • 完成以上准备工作后,你已经拥有了一个结构清晰、组件就绪的项目框架。接下来,我们将在此基础上分别搭建硬布线计算机和冯·诺依曼体系结构的程序存储计算机。

    3. 硬布线计算机

    硬布线控制器的核心思想是:将加法运算所需的控制信号序列“固化”在时序电路(如 4-16 译码器)中。时钟信号驱动译码器依次输出 16 个节拍,每个节拍对应一组预定的控制信号,自动完成从取数、运算到输出的全部步骤。

    3.1 核心原理

  • 步骤整理:经过对RS触发器版简单运算器实验步骤的整理,我们可以得到以下 16 个控制节拍:
  • 打开键盘三态门,允许当前键盘数据进入系统总线(step1=1)
  • 打开显示寄存器,把当前系统总线数据传入数码管(step9=1);打开进三态门,允许数据进入线路1(step3=1)
  • 关闭显示寄存器(step9=0);打开数码管显示(step10=1);打开累加器,把数据寄存到片内总线(step4=1),此时数码管显示“07”
  • 关闭累加器(step4=0);打开暂存器2,把数据寄存到线路3(step6=1)
  • 关闭暂存器2(step6=0),关闭键盘三态门(step1=0)
  • 打开键盘寄存器三态门,允许键盘寄存器数据进入系统总线(step2=1)
  • 打开显示寄存器,把当前系统总线数据传入数码管(step9=1),打开累加器,把数据存到片内总线(step4=1),此时数码管显示“5C”
  • 关闭显示寄存器(step9=0),关闭累加器(step4=0)
  • 打开暂存器1,把数据寄存到线路2(step5=1)
  • 关闭暂存器1(step5=0),关闭进三态门(step3=0),关闭键盘寄存器三态门(step2=0)
  • 打开传输结果三态门,允许结果数据进入线路1(step7=1)
  • 打开累加器,结果寄存到片内总线(step4=1)
  • 关闭累加器(step4=0),关闭传输结果三态门(step7=0)
  • 打开出三态门,传输结果到总线(step8=1)
  • 打开显示三态门,把当前系统总线数据传入数码管(step9=1),此时数码管显示“63”
  • 关闭显示三态门(step9=0),关闭出三态门(step8=0),关闭数码管显示(step10=0)
  • 控制思路:将这 16 个节拍固化为 16 个控制信号序列。用 4 位计数器依次产生 0~15 的二进制计数值,通过 4-16 译码器将二进制码转换为 16 个独热输出信号,依次激活对应隧道的 RS 触发器的“置1”端或“置0”端,来达到控制目的。

  • 3.2 搭建步骤

  • 新建一个电路,命名为 “Hardwired_Computer”。
  • 把我们的 RS触发器版计算机“HandCrank_RS”复制到这个新电路中。
  • 在 RS 触发器下方水平拉出 16 根导线,作为控制线。
  • Logisim Evolution:
  • Logisim:
  • 按上述 16 个节拍,把对应 RS 触发器的“置1”输入端和“置0”输入端依次连接 16 根导线(高位在上,低位在下),一个输入端对应多根控制导线需用或门连接。
  • Logisim Evolution:
  • Logisim:
  • 拖拽出一个 4-16 译码器,译码器的输出端分别连接这 16 根导线(高位在上,低位在下)。
  • 从“线路(Wiring)”库拖拽出一个“分线器/分离器(Splitter)”,设置“支路/输出(Fan Out)”和“位宽(Bit Width In)”都为 4,并调整成高位在上,低位在下 。
  • Logisim Evolution:
  • Logisim:
  • 分线器/分离器的 4 支路输出端连接译码器的 4 位输入端。
  • 从“存储器(Memory)”库拖拽出一个“计数器(Counter)”,设置“数据位宽(Data Bits)”为 4。
  • 计数器的“输出(Output)”端连接分线器/分离器的 1 支路输入端。
  • 从“线路(Wiring)”库拖拽出一个“时钟(Clock)”,计数器的“时钟”端输入连接这个时钟按钮。
  • Logisim Evolution:
  • Logisim:
  • 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)
  • 启动时钟模拟:
  • 点击顶部菜单栏“模拟(Simulate)” →“启动时钟模拟(Ticks Enabled)” ,可以看到计数器依次激活信号。
  •  结束时钟模拟:
  • 再次点击顶部菜单栏“模拟(Simulate)” →“启动时钟模拟(Ticks Enabled)” ,可以关闭时钟模拟。
  • 4. 冯·诺依曼体系结构的程序存储计算机

    冯·诺依曼程序存储控制器的核心思想是:将运算所需的全部控制信号以二进制代码的形式预先写入 ROM,每条代码对应一个时钟周期内的控制信号组合,称为“微指令”。多条微指令按顺序执行,共同完成一条机器指令的操作。计算机启动后,程序计数器(PC)从 0 开始依次递增,逐条取出 ROM 中的微指令并执行,自动完成整个计算过程。

    4.1 核心原理

  • 控制思路:观察硬布线计算机的工作过程可以发现,4-16译码器输出的 16 个节拍实际上是“按顺序排列的控制信号序列”。如果我们把这个序列记录下来——即把每个节拍对应的 step1~step10 的组合整理成一条十六进制微指令——就可以将这些微指令预先存入 ROM 中。运行时,计数器依次递增,逐条读取 ROM 中的微指令并执行。这样,控制信号不再来自硬件译码器,而是来自 ROM 中存储的指令,实现了从“硬布线”到“程序存储”的演进。
  • 指令整理:

  • 步骤 step10 step9 step8 step7 step6 step5 step4 step3 step2 step1 指令
    1 0 0 0 0 0 0 0 0 1 001
    2 0 1 0 0 0 0 0 1 0 1 105
    3 1 0 0 0 0 0 1 1 0 1 20d
    4 1 0 0 0 1 0 0 1 0 1 225
    5 1 0 0 0 0 0 0 1 0 0 204
    6 1 0 0 0 0 0 0 1 1 0 206
    7 1 1 0 0 0 0 1 1 1 0 30e
    8 1 0 0 0 0 0 0 1 1 0 206
    9 1 0 0 0 0 1 0 1 1 0 216
    10 1 0 0 0 0 0 0 0 0 0 200
    11 1 0 0 1 0 0 0 0 0 0 240
    12 1 0 0 1 0 0 1 0 0 0 248
    13 1 0 0 0 0 0 0 0 0 0 200
    14 1 0 1 0 0 0 0 0 0 0 280
    15 1 1 1 0 0 0 0 0 0 0 380
    16 0 0 0 0 0 0 0 0 0 0 000

    4.2 搭建步骤

  • 新建一个电路,命名为 “StoredProgram_Computer”。
  • 把我们的硬布线计算机“Hardwired_Computer”复制到这个新电路中。
  • 删除硬布线控制器中的 4-16 译码器,译码器到各控制端的连线和 RS 触发器,仅保留 10 个隧道“step10~step1” 和 1 个计数器及时钟按钮。
  • 从“线路(Wiring)”库拖拽出一个“分线器/分离器(Splitter)”,设置“支路/输出(Fan Out)”和“位宽(Bit Width In)”都为 10。
  • 分线器/分离器的 10 支路输出端依次连接隧道“step1~step10”,注意高位连接高位,低位连接低位(第 9 位连接隧道 step10…第 0 位连接隧道 step1)
  • Logisim Evolution:
  • Logisim:
  • 从“存储器(Memory)”库拖拽出一个“只读存储器(ROM)”,设置“地址位宽(Address Bit Width)”为 4 ,“数据位宽(Data Bit Width)”为 10 。
  • Logisim Evolution:
  • Logisim:
  • 只读存储器(ROM)的“数据(Data)”端连接分线器/分离器 1 支路输入端。
  • 只读存储器(ROM)的“地址(Address)”端连接计数器的“输出(Output)”端。
  • Logisim Evolution:
  • Logisim:
  •  右键只读存储器,点击“编辑内容(Edit Contents…)”,在表格中依次填写我们刚刚整理的 16 条十六进制指令,填写完后选择“关闭窗口(Close Window)”。
  • Logisim Evolution:
  • Logisim:
  • 最终结果如下:
  • Logisim Evolution:
  • Logisim:
  • 4.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)
  • 启动时钟模拟:
  • 点击顶部菜单栏“模拟(Simulate)” →“启动时钟模拟(Ticks Enabled)” ,可以看到计数器依次激活信号。
  •  结束时钟模拟:
  • 再次点击顶部菜单栏“模拟(Simulate)” →“启动时钟模拟(Ticks Enabled)” ,可以关闭时钟模拟。
  • 5. 总结

    通过本教程的实践,你完成了从固定功能的硬布线计算机到具有“存储程序”能力的冯·诺依曼结构计算机的跨越。

    这个简单的模型包含了真实CPU的诸多核心概念:状态机、时钟同步、总线、存储器分层、取指-执行周期。尽管它只能做加法,但其架构思想是通用的。你可以在此基础上继续探索,例如增加更多的指令(减法、移位)、实现条件跳转,甚至引入中断机制,从而让这个Logisim模型变得更加强大和有趣。

    希望这次搭建之旅能帮助你夯实计算机组成原理的基础,并激发你进一步探索计算机系统奥秘的兴趣。

    赞(0)
    未经允许不得转载:171主机测评 » 【Logisim】硬布线版和诺依曼体系结构的程序存储版简单运算器(加法)的详细教程
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址