基于excel的16位CPU

基于excel的16位CPU

简介

使用excel实现的简单16位cpu模拟,可用于用于学习cpu原理,基于原上游库修改,重新设计了所有模块,并设计了基于sheet的汇编指令编辑/编译表格。

地址:GitHub - Jzice/excelCPU at new

组成

包含:

  • cpu:在excel sheet中实现的cpu,包含了程序计数器(PC)取指单元(Fetch Unit)控制单元(Control Unit)MUX1/2(多路复用器)算逻单元(ALU)寄存器组(Registers)内存管理单元(MMU0)组成。

  • RAM:基于excel sheet的64KB(128x512x8b=64KB)内存。

  • Screen: 基于excel sheet的(128x96)点阵显示器,每个像素点可显示16种色彩。

  • 指令集:用于excel cpu的指令集,总共包含了27条excel cpu汇编指令。

  • ROM:用于存放编译后的二进制excel asm,并可加载到RAM中进行执行。

  • excel汇编代码编译表格:基于excel 表格实现的asm语句编辑、编译sheet。

Excel相关设置

  • excel需开启迭代计算,并将计算次数设置为1,以支持

CPU

开关

为了控制cpu的执行,在CPUsheet上方设置了几个单元格,用于设置cpu的运行状态和参数,如图所示

主要包括:

  • 电源开关(POWER): 取值0/1, 用于指定是否通电。1是CPU才会执行,0时停止运行;

  • 时钟(CLOCK): 交替输出时钟脉冲0/1,用于驱动CPU运行,当POWER为1时,按F9可交替产生0/1;

  • 时钟计数(TICK):记录一次加电后总共执行了多少个时钟周期(COLCK由1->0->1);

  • 重置按钮(RESET): 1时,将内存(RAM)中的所有数值清零, 0时无作用;

  • 加载ROM(LOAD_ROM): 1时,将ROMsheet中的数据加载到RAM中;0时无作用;

  • PC启动值(BOOT_PC): 加电后,PC的初始值;

  • 字长(WORD_SIZE): CPU中的字长,16。

程序计数器(PC)

程序计数器(PC)用于产生CPU下一条要访问的指令在内存中的地址。

下一个指令地址的产生主要有2种:

  • 顺序指令,下一条指令地址为上一条指令地址按上一条指令类型的长度+2或+4

  • 跳转指令,下一条指令地址为指令跳转的立即数(在MUX1的OPERAND2中)

PC的输入主要由CU的几个状态输出和MUX1的OPERAND2,同时在其内部的LAST_PC中缓存了上个时钟周期的NEXT_PC输出;

PC的输出为NEXT_PC,存储了CPU在下一个时钟周期的1时要要执行的内存指令地址。

取值单元

指令集

控制单元

ROM

Excel 汇编代码

参考