4Byte Instruction SSIC 8bitCPU
EDA软件
Turing Complete
指令设计
四字节为一个指令
- 第一个字节为操作码
- 第二个字节是参与运算的数字的寄存器地址或者立即数
- 第三个字节是参与运算的第二个寄存器地址或者立即数
- 第四个字节是计算结果地址或者进行比较运算后的程序跳转地址, 也就是覆写程序计数器的程序地址
操作码详解
参考图灵完备关卡设计
000e dcba
当a == 1
当前指令的第一个参数作为立即数参与运算, 并且将第一个寄存器控制单元的开关关闭
当b == 1
当前指令的第二个参数作为立即数参与运算, 并且将第二个寄存器控制单元的开关关闭
如上图所示, 绿色线是操作数一总线, 黄色线是操作数二总线
这里的数字比较是无符号整数
当c == 1
当前指令是跳转指令, 具体的判断情况如上图, 第一个输入端是使能端, 剩余情况是比较两个数字的逻辑关系, 操作码由低三位给出, 如果判断条件符合, 将程序计数器的地址切换为指令的第四个字节
黄色框住的是ALU
运算单元结果输出到结果总线的使能信号, 当执行跳转逻辑或者RAM进行读取的时候ALU的运算结果不会输出在结果总线上
当d == 0
并且e == 1
的时候, 进行RAM读取的操作
对于读取的操作, RAM的地址由REG14给出, 观察到该寄存的结果没有连接到结果总线上, 该寄存器是专用寄存器, 用于RAM读操作的地址给出
当d == 1
并且e == 0
的时候, 进行RAM写的操作, 在写的过程中, 将连接到结果总线的寄存器控制单元关闭, 写的过程只能读取寄存器或者IO端口
对于c != 0
也就是非条件跳转指令, 并且不是RAM读取的操作的时候, 操作码的低三位是算数逻辑运算, 如上图, 第一个字节是操作码, 下面两个数字是操作数
寄存器阵列
如上图, 青色线是寄存器的输入, 也就是结果总线, 绿色线是操作数1总线, 黄色线是操作数2总线, 一共15个寄存器, 地址的最后一位留给IO端口
寄存器的读取, 写入操作由寄存器控制单元构成, 上图是实现原理
由4
位控制16
个寄存器, 结果分为两个字节, 上面字节是0 ~ 7
, 下面字节是8 ~ 15
整体介绍
测试用例
汇编代码实现队列的功能, 读入全部的数据, 并且输出, 代码实现如下
RAM_W IO NREG 0
RAM_W IO NREG 1
RAM_W IO NREG 2
RAM_W IO NREG 3
RAM_W IO NREG 4
RAM_W IO NREG 5
RAM_W IO NREG 6
RAM_W IO NREG 7
RAM_W IO NREG 8
RAM_W IO NREG 9
RAM_W IO NREG 10
RAM_W IO NREG 11
RAM_W IO NREG 12
RAM_W IO NREG 13
RAM_W IO NREG 14
RAM_W IO NREG 15
RAM_W IO NREG 16
RAM_W IO NREG 17
RAM_W IO NREG 18
RAM_W IO NREG 19
RAM_W IO NREG 20
RAM_W IO NREG 21
RAM_W IO NREG 22
RAM_W IO NREG 23
RAM_W IO NREG 24
RAM_W IO NREG 25
RAM_W IO NREG 26
RAM_W IO NREG 27
RAM_W IO NREG 28
RAM_W IO NREG 29
RAM_W IO NREG 30
RAM_W IO NREG 31IMM1 31 NREG 1
RAM_R NREG NREG IO
ADD + IMM1 1 0 0
NOP 0 NREG 14
LESS 14 1 132