多周期CPU设计与实现

多周期CPU设计与实现

实验内容:学校资料

设计一个多周期CPU,该CPU至少能实现以下指令功能操作。指令与格式如下:
==> 算术运算指令
1. add rd , rs, rt (说明:以助记符表示,是汇编指令;以代码表示,是机器指令)

000000 rs(5位) rt(5位) rd(5位) reserved

功能:rd←rs + rt。reserved为预留部分,即未用,一般填“0”。
2. addi rt , rs ,immediate

000010 rs(5位) rt(5位) immediate(16位)

功能:rt←rs + (sign-extend)immediate;immediate符号扩展再参加“加”运算。
3. sub rd , rs , rt

000001 rs(5位) rt(5位) rd(5位) reserved

功能:rd←rs - rt
==> 逻辑运算指令
4. ori rt , rs ,immediate

010010 rs(5位) rt(5位) immediate(16位)

功能:rt←rs | (zero-extend)immediate;immediate做“0”扩展再参加“或”运算。
5. and rd , rs , rt

010001 rs(5位) rt(5位) rd(5位) reserved

功能:rd←rs & rt;逻辑与运算。
6. or rd , rs , rt

010000 rs(5位) rt(5位) rd(5位) reserved

功能:rd←rs | rt;逻辑或运算。

==>移位指令
7. sll rd, rt,sa

011000 未用 rt(5位) rd(5位) sa reserved

功能:rd<-rt<<(zero-extend)sa,左移sa位 ,(zero-extend)sa

==>比较指令
8. sltiu rt, rs,immediate 不带符号

100011 rs(5位) rt(5位) immediate(16位)

功能:if (rs <(sign-extend)immediate) rt =1 else rt=0, 具体请看表2 ALU运算功能表,不带符号

==> 存储器读/写指令
9. sw rt ,immediate(rs) 写存储器

110000 rs(5位) rt(5位) immediate(16位)

功能:memory[rs+ (sign-extend)immediate]←rt;immediate符号扩展再相加。即将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。
10. lw rt , immediate(rs) 读存储器

110001 rs(5位) rt(5位) immediate(16位)

功能:rt ← memory[rs + (sign-extend)immediate];immediate符号扩展再相加。
即读取rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后保存到rt寄存器中。

==> 分支指令
11. beq rs,rt,immediate

110100 rs(5位) rt(5位) immediate(16位)

功能:if(rs=rt) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4
特别说明:immediate是从PC+4地址开始和转移到的指令之间指令条数。immediate符号扩展之后左移2位再相加。为什么要左移2位?由于跳转到的指令地址肯定是4的倍数(每条指令占4个字节),最低两位是“00”,因此将immediate放进指令码中的时候,是右移了2位的,也就是以上说的“指令之间指令条数”。
12. bltz rs,immediate

110110 rs(5位) 00000 immediate(16位)

功能:if(rs<0) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4

==>跳转指令
13. j addr

111000 addr[27…2]

功能:pc <-{(pc+4)[31..28],addr[27..2],2{0}},无条件跳转。
说明:由于MIPS32的指令代码长度占4个字节,所以指令地址二进制数最低2位均为0,将指令地址放进指令代码中时,可省掉!这样,除了最高6位操作码外,还有26位可用于存放地址,事实上,可存放28位地址了,剩下最高4位由pc+4最高4位拼接上。
14. jr rs

111001 rs(5位) 未用 未用 reserved

功能:调用子程序,pc <- {(pc+4)[31:28],addr[27:2],2’b00}; 31<pc+4jr 31 < - p c + 4 , 返 回 地 址 设 置 ; 子 程 序 返 回 , 需 用 指 令 j r 31。跳转地址的形成同 j addr 指令。
15. j al addr

111000 addr[27…2]

功能:调用子程序,pc <- {(pc+4)[31:28],addr[27:2],2’b00}; 31<pc+4

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值