计算机组成与设计实验三:多周期CPU设计

此为中山大学17级计算机组成与设计实验课题。为不影响老师的教学,本文已经删去所有实现代码,完整含代码版本将在本学期结束时发布在我的个人博客https://wu-kan.cn/_posts/2018-12-23-多周期CPU设计/

实验目的

  1. 认识和掌握多周期数据通路图的构成、原理及其设计方法;
  2. 掌握多周期CPU的实现方法,代码实现方法;
  3. 编写一个编译器,将MIPS汇编程序编译为二进制机器码;
  4. 掌握多周期CPU的测试方法;
  5. 掌握多周期CPU的实现方法。

实验内容

设计一个多周期CPU,该CPU至少能实现以下指令功能操作。需设计的指令与格式如下:

算术运算指令

add rd rs rt

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

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

sub rd rs rt

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

功能:rd←rs - rt

addiu rt rs immediate

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

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

逻辑运算指令

and rd rs rt

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

功能:rd←rs & rt;逻辑与运算。

andi rt rs immediate

010001 rs(5位) rt(5位) immediate(16位)
- - - -

功能:rt←rs & (zero-extend)immediate;immediate做“0”扩展再参加“与”运算。

ori rt rs immediate

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

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

xori rd rs rt

010011 rs(5位) rt(5位) rd(5位) reserved
- - - - -

功能:rt←rs ⊕ \oplus (zero-extend)immediate;immediate做“0”扩展再参加“异或”运算。

移位指令

sll rd rt sa

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

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

比较指令

slti rt rs immediate

100110 rs(5位) rt(5位) immediate(16位)
- - - -

功能:if (rs< (sign-extend)immediate) rt =1 else rt=0, 带符号比较,详见ALU运算功能表。

slt rd rs rt

100111 rs(5位) rt(5位) rd(5位) sa(5位) reserved
- - - - - -

功能:if (rs<rt) rd =1 else rd=0, 具体请看ALU运算功能表,带符号。

存储器读/写指令

sw rt immediate(rs)

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

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

lw rt immediate(rs)

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

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

分支指令

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位的,也就是以上说的“指令之间指令条数”。

bne rs rt immediate

110101 rs(5位) rt(5位) immediate(16位)
- - - -

功能:if(rs!=rt) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4
特别说明:与beq不同点是,不等时转移,相等时顺序执行。

bltz rs immediate

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

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

跳转指令

j addr

111000 addr[27:2]
- -

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

jr rs

111001 rs(5位) 未用 未用 reserved
- - - - -

功能:pc <- rs,跳转。

调用子程序指令

jal addr

111010 addr[27:2]
- -

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

停机指令

halt

111111 00000000000000000000000000(26位)
- -

功能:停机;不改变PC的值,PC保持不变。

实验原理

多周期CPU指的是将整个CPU的执行过程分成几个阶段,每个阶段用一个时钟去完成,然后开始下一条指令的执行,而每种指令执行时所用的时钟数不尽相同,这就是所谓的多周期CPU。

CPU在处理指令的几个步骤

取指令IF
  • 11
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值