第一章 32 位单周期RISC处理器设计
要设计一款处理器,首先要选择体系结构,本题选择的是RISC体系结构,因为它适合于流水线设计。然后需要选择一个标准的指令集,本题选择的MIPS指令集并按照常规的五段流水的方式来实现流水线。流水线的实现过程将在第二章介绍。
1.1目标处理器指令集与指令格式
本题目标CPU以能实现部分MIPS指令为目标,具体指令如下表1:
类别 | 指令 | 格式 |
算术运算 | 加(add) | R |
减(sub) | R |
立即数加(addi) | I |
立即数减(subi) | I | movabletype
逻辑运算 | 与(and) | R | emoji是什么意思
或(or) | R |
或非(nor) | R |
s开头的单词立即数与(andi) | I |
立即数或(ori) | I |
立即数或非(nori) | I |
数据传递 | 取字(lw) | I |
存字(sw) | I |
条件分支 | 相等转移(beq) | I |
小于比较(slt) | R |
立即数小于比较(slti) | I |
无条件跳转 | 跳转(jL) | J |
空操作 | 空操作(nop) | |
| | |
表1 目标CPU指令集
1.2 从指令具体行为反推设计方案
CPU要执行一条指令,不外乎需要完成以下几个过程:取指令,指令译码,将译码出的指令放到算术逻辑运算部件ALU上执行运算,根据ALU算得的访存地址进行访存和将访存的结果写回寄存器等。当然,不同的指令类型(R、I、J)可能经过的过程稍有不同,即它们的数据通路有所不同,以下将具体介绍:
1、R格式指令数据通路:
1)从指令寄存器Instr MEM中取出指令,同时PC增值(即加1等待下个CLK到来);
2.)寄存器单元rs1和rs2的内容从寄存器堆Reg File中读出;
3.)ALU根据功能码Opcoder确定操作方式,对从寄存器堆读出的数据进行计算;
4.)ALU运算结果被写入寄存器堆,由rd确定写入的寄存器堆存储单元地址。
图1 R指令数据通路
refer to
2. I 指令(除lw、sw和分支指令)数据通路如图2:
1.)从指令寄存器Instr Mem中取出指令,同时PC增值(即加1等待下个CLK到来);
2.)寄存器单元rs1的内容从寄存器堆Reg File中读出;
3.)ALU将从寄存器堆rs1单元中读出的数据与符号扩展后的指令低16位值相加;
4.)ALU的运算结果被写入寄存器堆,由rt确定写入的寄存器堆存储单元地址。
图2 I 指令(除lw、sw和分支指令)数据通路
3、Lw指令数据通路如图3:
1.)从指令寄存器Instr Mem中取出指令,同时PC增值(即加1等待下个CLK到来);
2.)寄存器单元rs1的内容从寄存器堆Reg File中读出;
3.)ALU将从寄存器堆rs1单元中读出的数据与符号扩展后的指令低16位值相加;
4.)将ALU的运算结果作为数据存贮器的地址读出相应单元的内容;
5)把从数据存储单元取出的数据写入寄存器堆,由rt确定写入的寄存器存储单元地址。
图3 LW指令数据通路
4、Sw指令数据通路如图4:
1.)从指令寄存器Instr Mem中取出指令,同时PC增值(即加1等待下个CLK到来);
六一快乐的英文怎么写2.)寄存器单元rs1和rs2的内容从寄存器堆Reg File中读出;
3.)ALU将从寄存器堆rs1单元读出的数据与符号扩展后的指令低16位值相加;
4.)将ALU 的运算结果作为数据存贮器的写入地址,把从寄存器堆rs2单元中取出的数据写入数据存储器中。
图4 SW指令数据通路
5)分支和跳转指令数据通路如图5:
分支和跳转指令主要控制PC的输入来达到分支或跳转的目的.
分支指令数据通路:
1.)从指令寄存器Instr Mem中取出指令,同时PC增值(即加1等待下个CLK到来);
2.)寄存器单元rs1和rs2的内容从寄存器堆Reg File中读出;同时主控制单元还计算各控制线应被设置的状态,具体状态表如表2所示;
3.)ALU将从寄存器堆读出的两数相减,同时把PC+1的值与符号扩展后的指令低16位值相加,其结果即为分支目标地址;
4.)根据ALU的Zero端口值和branch输出共同决定的PC的值:当Zero端口和branch的输出均为高电平时PC的值取第3步计算所得的分支目标地址,否则取第1步的PC+1值。
跳转指令数据通路:
1.)从指令寄存器Instr Mem从取出指令,同时PC增值(即加1等待下个CLK到来);
2.)主控制单元计算各控制线应被设置的状态,状态表如表2所示.PC+1的值的高6位[31~26]加上指令低26位([25~0])值组成跳转目标地址,根据主控制单元生成的Jump值决定是否跳转,Jump为1则PC的值取跳转目标地址,否则取其它地址。
此外,对于空操作指令,只要把jump、branch、memwrite、memread、regwrite均设为低电平,就可以保证该指令进行空操作,即执行没有任何效果的操作.
在理清各格式指令的数据通路后把它们综合在一起构成即构成目标CPU的总的数据通路,具体如图5.
图5 目标CPU数据通路
1.3 目标处理器的控制
处理器的控制主要为ALU的控制和主控制单元设计两个方面的问题。主控制单元的设计即为图5中Control Unit模块设计。处理器中除了控制ALU操作的opcoder(由主控制单元产生的ALUop和R指令功能码共同产生)和控制条件分支的信号(由主控制单元产生的branch和ALU运算结果Zero的与决定)外,所有控制信号都可直接由主控制单元根据指令的操作码字段来产生。具体对应关系如表2。
格式 | 操作数 | ALUop | RegDst | Jump | Branch | memread | memwrite | memtoreg | ALUsrc | Regwrite |
R | add | 100 | 1 | 0 | 0 rockstone | 0 | 0 | 0 | 0 | 1 |
sub | 100 面朝大海春暖花开赏析 |
and | winch100 |
or | 100 |
slt | 100 |
nor | 100 |
I | addi | 000 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
subi | 010 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
andi | 001 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
ori | 101 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
nori | 011 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
lw | 000 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
sw | 000 | X | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
beq | 010 | X | 西瓜的拼音0 | 1 | 0 | 0 | 0 | 0 | 0 |
bne | 010 | X | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
slti | 110 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
J | study过去式JL | | | 1 | X | 0 | 0 | 0 | X | 0 |
nop | nop | 100 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| | | | | | | | | | |