什么是多周期CPU设计
多周期CPU设计和单周期CPU的设计相同,都是为了实现一系列的指令功能,以下是小编为大家整理推荐关于多周期CPU设计,希望对您有所帮助。
多周期CPU设计
和单周期CPU的设计相同,都是为了实现一系列的指令功能,但需要指出的是何为多周期(注意与前面写道的单周期的区别,这也是设计的关键之处)
多周期CPU指的是将整个CPU的执行过程分成几个阶段,每个阶段用一个时钟去完成,然后开始下一条指令的执行,而每种指令执行时所用的时钟数不尽相同,这就是所谓的多周期CPU。
理解完多周期与单周期的区别后,开始我们的多周期CPU设计之路(可以随时对应单周期的设计,注意联系与区别)。
需要设计的指令及格式如下:
==>算术运算指令
(1)add rd, rs, rt
000000rs(5位)rt(5位)rd(5位)reserved
功能:rd<-rs + rt
(2)sub rd, rs, rt
000001rs(5位)rt(5位)rd(5位)reserved
完成功能:rd<-rs - rt
(3)addi rt, rs, immediate
000010rs(5位)rt(5位)immediate(16位)
功能:rt<-rs + (sign-extend)immediate
==>逻辑运算指令
(4)or rd, rs, rt
010000rs(5位)rt(5位)rd(5位)reserved
功能:rd<-rs | rt
(5)and rd, rs, rt
010001rs(5位)rt(5位)rd(5位)reserved
功能:rd<-rs & rt
(6)ori rt, rs, immediate
010010rs(5位)rt(5位)immediate
功能:rt<-rs | (zero-extend)immediate
==>移位指令
(7)sll rd, rs,sa
011000rs(5位)未用rd(5位)sareserved
功能:rd<-rs<<(zero-extend)sa,左移sa位 ,(zero-extend)sa
==>传送指令
(8)move rd, rs
100000rs(5位)00000rd(5位)reserved
功能:rd<-rs +
什么是多周期CPU设计
多周期CPU设计和单周期CPU的设计相同,都是为了实现一系列的指令功能,以下是小编为大家整理推荐关于多周期CPU设计,希望对您有所帮助。
多周期CPU设计
和单周期CPU的设计相同,都是为了实现一系列的指令功能,但需要指出的是何为多周期(注意与前面写道的单周期的区别,这也是设计的关键之处)
多周期CPU指的是将整个CPU的执行过程分成几个阶段,每个阶段用一个时钟去完成,然后开始下一条指令的执行,而每种指令执行时所用的时钟数不尽相同,这就是所谓的多周期CPU。
理解完多周期与单周期的区别后,开始我们的多周期CPU设计之路(可以随时对应单周期的设计,注意联系与区别)。
需要设计的指令及格式如下:
==>算术运算指令
(1)add rd, rs, rt
000000rs(5位)rt(5位)rd(5位)reserved
功能:rd<-rs + rt
(2)sub rd, rs, rt
000001rs(5位)rt(5位)rd(5位)reserved
完成功能:rd<-rs - rt
(3)addi rt, rs, immediate
000010rs(5位)rt(5位)immediate(16位)
功能:rt<-rs + (sign-extend)immediate
==>逻辑运算指令
(4)or rd, rs, rt
010000rs(5位)rt(5位)rd(5位)reserved
功能:rd<-rs | rt
(5)and rd, rs, rt
010001rs(5位)rt(5位)rd(5位)reserved
功能:rd<-rs & rt
(6)ori rt, rs, immediate
010010rs(5位)rt(5位)immediate
功能:rt<-rs | (zero-extend)immediate
==>移位指令
(7)sll rd, rs,sa
011000rs(5位)未用rd(5位)sareserved
功能:rd<-rs<<(zero-extend)sa,左移sa位 ,(zero-extend)sa
==>传送指令
(8)move rd, rs
100000rs(5位)00000rd(5位)reserved
功能:rd<-rs +
==>比较指令
(9) slt rd, rs, rt
100111rs(5位)rt(5位)rd(5位)reserved
功能:如果(rs<rt),则rd=1; 否则 rd=0
==>存储器读写指令
(10)sw rt, immediate(rs)
110000rs(5位)rt(5位)immediate(16位)
功能:memory[rs+ (sign-extend)immediate]<-rt
(11)lw rt, immediate(rs)
110001rs(5位)rt(5位)immediate(16位)
功能:rt <- memory[rs + (sign-extend)immediate]
==>分支指令
(12)beq rs,rt, immediate (说明:immediate是从pc+4开始和转移到的指令之间间隔条数)
110100rs(5位)rt(5位)immediate(16位)
功能:if(rs=rt) pc <-pc+ 4 + (sign-extend)immediate <<2
==>跳转指令
(13)j addr
111000addr[27..2]
功能:pc <{pc[31..28],addr[27..2],0,0},转移
(14)jr rs
111001rs(5位)未用未用reserved
功能:pc<-rs,转移
==>调用子程序指令
(15)jal addr
111010addr[27..2]
功能:调用子程序,pc <- {pc[31..28],addr[27..2],0,0};<-pc+4,返回地址设置;子程序返回,需用指令 jr 。
==>停机指令
(16)halt (停机指令)
11111100000000000000000000000000(26位)
不改变pc的值,pc保持不变。