指令集与CPU架构
本文是前述博客基于proteus的一个微程序CPU的姐妹篇,硬布线CPU的指令集完全兼容微程序CPU的指令集,分为以下五大类共38条机器指令,指令OP码如下表1所示:
1)系统指令:NOP、HLT、IRET;
2)寄存器及I/O操作指令:MOV、SET、IN、OUT/OUTA;
3)存储器及堆栈操作指令:LAD/POP、STO/PUSH;
4)跳转系列指令:JMP、JMPR、Jx(JC/JZ/JS)、JxR(JCR/JZR/JSR);
5)算术逻辑运算指令:SHT (RLC/ LLC/ RRC/ LRC)、SOP (INC/DEC/NOT/THR)、ADD/ADDI、SUB/SUBI、AND/ANDI、OR/ORI、XOR/XORI;
表1. 硬布线CPU指令集
硬布线CPU电路图如下图1所示,红线的左侧是与微程序CPU完全兼容的数据通路,包括了:程序/数据存储器ROM/RAM及其地址寄存器AR;指令寄存器IR;通用寄存器R0~R3;算术逻辑运算器ALU及其附属缓存器DA(兼作移位功能)和DB;外设I/O接口;中断向量地址IVA;程序计数器(PC)、运算结果标志位寄存器(PSW)及其断点寄存器(BP_PC、BP_PSW)。而图1红线右侧则是与微程序控制器功能对应的硬布线控制器(包括基于两级状态机的时序发生器电路)以及中断电路。
图1. 硬布线CPU电路图
硬布线控制器
硬布线CPU的控制器属于多周期硬布线控制器,采用两级状态机架构,如下图2所示:一级状态机MCLOCK由六个状态{M1, M2, M3, M4, M5, M6}组成,其中M1-M2是取指状态,M3-M6是执行状态。每一次状态M循环对应一个指令周期,其状态数目不固定,由该指令决定。状态机在每条指令最后的执行状态Mx结束后,自动跳转到下一条指令的取指状态M1。每一个状态M本身是一个二级状态机,与微程序CPU的微指令状态机完全相同:包括两个状态{T1,T