基于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时,将ROM
sheet中的数据加载到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时要要执行的内存指令地址。