赞
踩
此为中山大学17级计算机组成与设计实验课题。为不影响老师的教学,本文已经删去所有实现代码,完整含代码版本将在本学期结束时发布在我的个人博客https://wu-kan.cn/_posts/2018-11-23-单周期CPU设计/
设计一个单周期CPU,该CPU至少能实现以下指令功能操作,指令与格式如下。
000000 | rs(5位) | rt(5位) | rd(5位) | reserved |
---|
功能:rd←rs + rt;reserved为预留部分,即未用,一般填“0”。
000001 | rs(5位) | rt(5位) | rd(5位) | reserved |
---|
功能:rd←rs - rt。
000010 | rs(5位) | rt(5位) | immediate(16位) |
---|
功能:rt←rs + (sign-extend)immediate;immediate符号扩展再参加“加”运算。
010000 | rs(5位) | rt(5位) | immediate(16位) |
---|
功能:rt←rs & (zero-extend)immediate;immediate做“0”扩展再参加“与”运算。
010001 | rs(5位) | rt(5位) | rd(5位) | reserved |
---|
功能:rd←rs & rt;逻辑与运算。
010010 | rs(5位) | rt(5位) | immediate(16位) |
---|
功能:rt←rs | (zero-extend)immediate;immediate做“0”扩展再参加“或”运算。
010011 | rs(5位) | rt(5位) | rd(5位) | reserved |
---|
功能:rd←rs | rt;逻辑或运算。
011000 | 未用 | rt(5位) | rd(5位) | sa(5位) | reserved |
---|
功能:rd<-rt<<(zero-extend)sa,左移sa位 ,(zero-extend)sa。
011100 | rs(5位) | rt(5位) | immediate(16位) |
---|
功能:if (rs< (sign-extend)immediate) rt =1 else rt=0, 带符号比较,详见ALU运算功能表。
100110 | rs(5位) | rt(5位) | immediate(16位) |
---|
功能:memory[rs+ (sign-extend)immediate]←rt;immediate符号扩展再相加。即将rt寄存器的内容保存到rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。
100111 | rs(5位) | rt(5位) | immediate(16位) |
---|
功能:rt ← memory[rs + (sign-extend)immediate];immediate符号扩展再相加。即读取rs寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后保存到rt寄存器中。
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位的,也就是以上说的“指令之间指令条数”。
110001 | rs(5位) | rt(5位) | immediate(16位) |
---|
功能:if(rs!=rt) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4
特别说明:与beq不同点是,不等时转移,相等时顺序执行。
110010 | rs(5位) | 00000 | immediate(16位) |
---|
功能:if(rs<$zero) pc←pc + 4 + (sign-extend)immediate <<2 else pc ←pc + 4。
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位拼接上。
111111 | 00000000000000000000000000(26位) |
---|
功能:停机;不改变PC的值,PC保持不变。
单周期CPU指的是一条指令的执行在一个时钟周期内完成,然后开始下一条指令的执行,即一条指令用一个时钟周期完成。电平从低到高变化的瞬间称为时钟上升沿,两个相邻时钟上升沿之间的时间间隔称为一个时钟周期。时钟周期一般也称振荡周期(如果晶振的输出没有经过分频就直接作为CPU的工作时钟,则时钟周期就等于振荡周期。若振荡周期经二分频后形成时钟脉冲信号作为CPU的工作时钟,这样,时钟周期就是振荡周期的两倍)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。