CPU基本概念
CPU即是中央处理器单元的英文简称,它是计算机的核心部件,计算机进行信息处理可分为以下两个步骤:(1). 将数据和程序输入到计算机的存储器中;
(2). 从第一条指令的地址起开始执行该程序,得到所需结果,结束运行。CPU的作用是协调并控制计算机的各个部件并执行程序的指令序列,使其有条不紊地进行,因此必须必须具有以下基本功能:
1. 取指令-当程序已经在存储器中,首先根据程序入口地址取出一条程序,为此要发指令地址以及控制信号;
2. 分析指令—即指令译码,这是对当前取得的指令进行分析,指出它要求进行什么动作,并产生相应的操作以及及控制指令;
3. 执行指令—根据分析指令产生的操作指令形成相应的控制信号序列,通过运算器,存储器以及输入输出设备的执行,实现每条指令的功能,其中包括对运算结果的处理以及下条指令地址的形成。
- CLK_GEN:时钟发生器-产生一系列时钟信号,为接下来的其它部件产生时钟;
- INS:指令寄存器——用于存放寄存指令,每一个clk的边沿触发,都可以将总线的数据存到INS中;
- ACCUMLATOR:累加器——用于存放当前结果,当LOAD_ACC处于高电平,时钟边沿触发可保存数据总线的数据;
- ALU:算术运算器——对于不同的指令进行运算,如加,异或,跳转,存储等等;
- MACHINE:状态控制器——用于产生一系列控制信号,确保CPU的各个部件有条不紊地进行工作,避免冲突;
- DATACTL:数据控制器——控制累加器的数据输出,主要针对STO(存储命令)的指令运算;
- ADDR:地址多路器——CPU有两个地址,一个是PC(程序计数),另一个是指令地址,该器件用于选择哪一路地址;
- COUNTER:程序计数器——用于提供指令地址,以便读取指令,形成地址的方式一:顺序执行;方式二:指令跳转,如JMP指令;
CPU具体工作过程
上图中带三角符号的输入端口表示边沿触发,其中Counter的INC_PC是下降沿触发,其余都是上升沿触发;当rst信号通过,地址addr变为0,当一个上升沿clk出现,数据总线DATA传输一个指令给INS,因为本次设计的CPU是每次只能存8位data,而每条指令为两个字节,即16位,因此需要存两次,才能完整存储一条指令。每次存完一条指令,PC_ADDR就要自动计数加一,因此MACHINE的INC_PC需要在相应clk下产生边沿触发。当你存储好一个指令的高八位时,下一个时钟你就可以判断指令高八位的前三位,即opcode[2:0],此次设计含有八个指令集,因此需要针对不同指令集进行讨论,在这里,以指令SKZ(如果累加器中的结果为零,就跳过下一条语句,否则继续执行)为例进行分析,判断得出opcode是SKZ的指令而且zero(zero=!accum)为1,为了跳过下一条语句,就要使INC_PC产生边沿上升,如此才可以使PC_ADDR加1,在下一个时刻,就要使INC_PC置零,以便为接下来的INC_PC产生边沿上升做准备,这里一定要注意,每条指令,PC_ADDR需要加1,因此一个周期里,需要判断SKZ两次,在一个周期里的哪个时钟进行判断就要看个人的理解了。其实CPU的工作过程,就是你要合理分配每个部件何时工作,才不会对其他部件造成干扰,而且不会影响工作的持续进行,如果产生干扰,可以想办法插入空操作,或者调整指令的判断周期的位置。