CPU设计六日行——第二日(菜鸟福音)

第二步:确定目标指令集 (了解本次CPU设计需要实现的目标指令集的20条指令的格式,功能与数据通路)

一、20条目标指令大致了解:

1、本实验所需要实现的20条MIPS指令:(指令功能也就是意义这一列已给出)

CPU设计六日行——第二日(菜鸟福音)

2、MIPS指令集的指令格式(根据格式内容可判断上表20条指令分别属于哪一种类型的指令)

其指令格式只有3种(右边是老师给的指导书内容,左边稍微详细一丢丢,图下面给出一些解释帮助理解)

CPU设计六日行——第二日(菜鸟福音)CPU设计六日行——第二日(菜鸟福音)

R(register)类型的指令从寄存器堆中读取两个源操作数,计算结果写回寄存器堆。

I(immediate)类型的指令使用一个16位的立即数作为源操作数。

J(jump)类型的指令使用一个26位立即数作为跳转的目标地址。

op(opcode)是指令操作码

rs(register source)是源操作数的寄存器号

rd(register destination)是目的寄存器号

rt(register target)即可作为源寄存器号,也可作为目的寄存器号,由具体的指令决定。

func(function)可被认为是扩展的操作码。

sa(shift amount)由移位指令使用,定义移位位数。

immediate是16位立即数,使用之前由指令进行0扩展或符号扩展。

26位target由jump指令使用,用于产生跳转的目标地址。

3、20条指令分类介绍(根据操作的不同进行分类加深理解)

3.1计算类指令

该类指令用于执行算术操作,乘除,逻辑操作和对寄存器进行移位操作。这类指令有寄存器类型和立即数类型两种,前者使用两个源寄存器的值作为源操作数,立即数类型使用一个寄存器和立即数作为源操作数。根据操作的不同,分为4种:

(1)ALU立即数指令(这20条中有addi,andi,ori,xori)

(2)3操作数指令(这20条中有第一到五条)

(3)移位指令(这20条中有sll,srl,sra)

(4)乘除指令(20条中暂时没有)

3.2 Load/Store指令

都为立即数类型,用来在存储器和通用寄存器之间的储存和装载数据。整个指令集只有该类指令访问内存。其他指令都是在寄存器之间运行,所以指令的执行速度较高。其指令总共有14条(lb,lbu,lh,lhu,ll,lw,lwl,lwr,sb,sc,sh,sw,swl,swr)。本次实现lw与sw。注:以“l”开头为加载指令,以“s”开头为存储指令。指令用于从存储器中读取数据或者将数据保存在存储器中。

lw:(lw rt,offset(rs))用于从一个指定的地址加载一个word类型的值到一个寄存器rt中

sw:(sw rt offset(rs))用于将源寄存器中的值存入指定的地址。

3.3 跳转/分支指令(jump&branch):用来改变程序流。

jump指令:格式就是jr,j,jal这几种

branch指令:CPU设计六日行——第二日(菜鸟福音)

还有(寄存器传送指令,专用指令,协处理器指令,系统控制协处理器指令这几种。本处不做说明。感兴趣的可以去网上搜索学习)

第三步:确定自己本次实验的CPU设计的大致思路