当前位置:   article > 正文

计算机组成与设计实验二:单周期CPU设计_实验二:单周期cpu设计

实验二:单周期cpu设计

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

实验目的

  1. 掌握单周期CPU数据通路图的构成、原理及其设计方法;
  2. 掌握单周期CPU的实现方法,代码实现方法;
  3. 认识和掌握指令与CPU的关系;
  4. 掌握测试单周期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符号扩展再参加“加”运算。

逻辑运算指令

andi rt rs immediate

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

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

and rd rs rt

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

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

ori rt rs immediate

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

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

or rd rs rt

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

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

移位指令

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

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

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

存储器读/写指令

sw rt immediate(rs)

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

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

lw rt immediate(rs)

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

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

分支指令

beq rs rt immediate

110000 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

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

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

bltz rs immediate

110010 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位拼接上。

停机指令

halt

111111 00000000000000000000000000(26位)

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

实验原理

单周期CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期完成。电平从低到高变化的瞬间称为时钟上升沿,两个相邻时钟上升沿之间的时间间隔称为一个时钟周期。时钟周期一般也称振荡周期(如果晶振的输出没有经过分频就直接作为CPU的工作时钟,则时钟周期就等于振荡周期。若振荡周期经二分频后形成时钟脉冲信号作为CPU的工作时钟,这样,时钟周期就是振荡周期的两倍)。

CPU在处理指令的几个步骤

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/177600
推荐阅读
相关标签
  

闽ICP备14008679号