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

    技术2026-04-08  10

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

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

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

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

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

    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设计的大致思路

    1、下载安装编译测试仿真环境

    2、理解目标指令集的20条指令的格式,功能,数据通路

    3、设计总体方案(了解指令处理流程,画单周期CPU结构设计图并理解各个指令的运行情况)

    4、模块详细设计(不分先后,到时会再由底层往顶层开始设计,调试会对每个模块分别调试通过后慢慢组装

    指令存储器,数据存储器模块设计

    PC,PC+4模块

    多路开关例化模块

    CONUNIT模块设计(控制器的例化)

    REGFILE模块设计(寄存器堆的例化)

    ALU模块设计

    整合部件模块设计

    顶层模块设计(此处可能描述也可能不描述,看项目进度,可能不会有拨码开关这些东西)

    仿真模块代码设计)

    5、仿真模拟分析+总结体会(此外如果代码成功,会附上整个工程的文件)(主要是完善前几天落下的进度然后进行仿真)

    6、查漏补缺完善赶进度(六日行的六日就此结束)

    Processed: 0.010, SQL: 9