8位寄存器

  • WE : Write Enable 写入使能 (1 bit)
  • OE : Output Enable 输出使能 (1 bit)
  • Din : Data in 数据输入 (8 bit)
  • clock : 时钟
  • Dout : Data out 数据输出 (8 bit)
  • Stored data : 方便调试使用,实际上是没有的 (8 bit)
  • 驱动器 : 相当于一个继电器开关 (8 bit)

4位寄存器

  与8位寄存器完全一致,只需要将Din、Dout、Stored data和驱动器改为4位即可

ALU模块

  下面搭建的是只含加法的ALU模块

  • RegA : 操作数1 (8位)
  • RegB : 操作数2 (8位)
  • OE : Output Enable 输出使能 (1 bit)
  • Dout : Data out 数据输输出 (8 bit)
  • carry : carray (1 bit)
  • ALU Result : 方便调试使用,实际上是没有的 (8 bit)
  • 驱动器 : 相当于一个继电器开关 (8 bit)

CPU总架构

  下图是一个CPU的简易架构图

手动计算

自动计算

  将所有元件的WE和OE引脚全部(共17个引脚)通过隧道连接到一个17位的查找表中,按排列顺序依次点亮某一个引脚,并把点亮引脚的固定操作值存放在查找表中,其中由于每条指令的操作步骤次数不一样,为了保证相同的时钟周期,不足4个步骤的全部使用空操作补齐。而后接入时钟输入设置位10HZ代表时钟输入1s变换10次,统一控制所有元件的时钟频率。

查找表数据
模拟电路

执行过程

取指阶段

  1. 把PC(程序位置计数器)的值放入MAR(内存地址寄存器)
  2. PC的值加1,指向吓一条程序指令
  3. 把MAR地址指向的内存中的数据取出来(4位操作码+4位操作数)放入MBR(内存缓存寄存器)
  4. 把MBR中的数据放入IR(指令寄存器)

  具体实操过程如下(每一步都需要拍一下clock):

  1. 清除全部状态,打开PC的OE,打开MAR的WE
  2. 清除全部状态,打开PC的EN
  3. 清除全部状态,打开MAR的OE,打开内存的OE,打开MBR的WE
  4. 清除全部状态,打开MBR的OE,打开IR的WE

译码和执行

  OPCODE为0000,意味着MOVE_A把内存地址的值放入A寄存器

  1. 清除全部状态,打开IR的OE,打开MAR的WE
  2. 清除全部状态,打开MAR的OE,打开内存的OE,打开MBR的WE
  3. 清除全部状态,打开MBR的OE,打开RegA的WE