MIPS处理器设计说明要点.docx
《MIPS处理器设计说明要点.docx》由会员分享,可在线阅读,更多相关《MIPS处理器设计说明要点.docx(20页珍藏版)》请在冰豆网上搜索。
MIPS处理器设计说明要点
西安邮电大学
实践课程报告书
课程名称:
计算机组成与实践
院(系)名称
:
电子工程学院
专业班级
:
**
学号/姓名
:
**
实习时间
:
2015年3月6日至2015年6月19日
1课程主要目的
本课程是在上学期《计算机组成与设计》课程学习的基础上,通过实践课的方式,依照集成电路设计流程,完成一个简单独立硬件功能电路模块的设计,从而到达对《计算机组成与设计》课程的深入理解和提高电路设计的实践能力,从理论和实验的结合中巩固计算机基本知识,熟练掌握电路设计的基本流程和原理,同时,加深对MIPS系统的组成部件及其电路结构,原理和功能的理解,掌握利用硬件描述语言和EDA工具进行MIPS设计的一般方法。
2课程的主要内容和任务
MIPS是典型的32位定长指令字RISC处理器,要求深入理解MIPS处理器的内部结构及工作原理。
采用verilogHDL设计一个兼容MIPS指令格式,具有10条以上指令功能的单周期CPU硬件电路,该32位MIPS设计内容主要包括系统中的基本组成部件(存储器,指令寄存器,寄存器堆,算术逻辑运算器,程序计数器,多路选择器,符号扩展等)的设计,仿真及硬件下载的方法和过程。
设计过程中使用ISE仿真工具完成设计电路的仿真验证。
3总体设计方案
3.1指令及其功能表:
(1)R型指令:
指令
指令格式
功能
op
rs
rt
rd
shame
func
add
000000
sj1
Sj2
jg
xx
100000
Jg=sj1+sj2
addu
000000
100001
Jg=sj1+sj2
sub
000000
100010
Jg=sj1-sj2
subu
000000
Sj1
Sj2
jg
xx
100011
Jg=sj1-sj2
or
000000
Sj1
Sj2
jg
xx
000010
Jg=sj1|sj2
and
000000
Sj1
xx
jg
xx
000011
Jg=sj1&sj2
sla
000000
Sj1
xx
jg
移位数
000100
Jglr
000000
sr
000000
(2)I型指令:
指令
指令格式
功能
op
rs
rt
Immediate
addi
001000
sj1
Sj2
Imm
Sj2=sj1+imm
addiu
001001
sj1
Sj2
Imm
Sj2=sj1+imm
andi
001100
sj1
Sj2
Imm
Sj2=sj1&imm
ori
001101
Sj1
Sj2
Imm
Jg=sj1|sj2
Lw
100011
base
rt
offset
offsetMemory[base+imm]
sw
101011
base
rt
offset
Memory[base+imm]offset
slti
001010
Sj1
Sj2
imm
sj1=Sj2sltu
001011
sj1
Sj2
imm
Sj1=sj2(3)J型指令:
指令
指令格式
功能
op
rs
rt
offset
Beq
000100
sj1
Sj2
offset
Ifsj1=sj2thenbranch
Bnq
000101
sj1
Sj2
offset
Ifsj1≠sj2thenbranch
3.2总体结构设计:
该MIPS主要由8个模块组成,各个子模块分别设计其特定的功能,最终利用一个总的模块进行子模块间连接,使得整个CPU能连贯执行指令,在仿真结果中观察设计结果,最终进行硬件下载,验证设计。
其中各个模块简单功能如下:
(1)存储器模块:
具备基本的读写功能,用于存放数据和指令。
(2)寄存器堆模块:
由32个32位的寄存器组成,提供较大的存储空间,用于存放暂存数据和指令。
(3)算术逻辑运算器模块:
执行加减法等算术运算,与非或等逻辑运算,以及比较移位传送等操作的功能部件,是该CPU的设计核心部分,存在不同的运算处理功能,是体现实验设计结果正确性的模块。
(4)立即数扩展模块:
执行I型指令时需要立即数扩展,该模块用于MIPS符号扩展,将16位数据扩展为32位数据。
(5)主控制模块:
用于控制各个模块之间的分工运行,产生不同数据通路的控制信号,保证指令顺序执行不发生紊乱。
(6)ALU控制模块:
用于生成ALU执行各种功能的控制信号,使ALU内部运行不发生紊乱。
。
(7)分支跳转指令控制模块:
用于生成分支和跳转指令的控制信号。
(8)取指模块:
进行指令的取出及译码,同时包括程序计数器PC运行设计。
各模块间关系如下:
3.3接口定义和接口时序
说明:
该CPU由cpu_clk和进行总的控制,并且输出程序计数器低4位进行简易流水灯显示,CPU运行的结果包括逻辑运算等在仿真界面中进行分析和设计验证。
cpu_clk上升沿有效
rst位低电平时复位有效
4子模块详细设计
4.1存储器模块设计
4.1.1模块方案设计
指令存储器用于存放CPU运算的程序指令和数据等,采用单端口存储器设计,设计最大为64个存储单元,每个存储单元数据宽度为32bit。
4.1.2接口定义
序号
接口信号名称
方向(I/O)
说明
1
clk
I
存储器工作时钟,频率为50Mhz
2
rst
I
存储器片选信号,低有效
3
ExtMem_Adr[5:
0]
I
存储器地址线
4
ExtMem_WR
I
存储器读写信号,1为写反之读
5
ExtMem_Din[31:
0]
I
存储器输入数据线
6
ExtMem32[31:
0]
O
存储器输出数据线
4.1.3模块仿真验证
4.2寄存器堆模块设计
4.2.1模块方案设计
该MIPS指令格式中的寄存器号是5bits,指令可以访问32个32位的寄存器。
这32个32位的寄存器构成一个寄存器堆。
4.2.2接口定义
序号
接口信号名称
方向
说明
1
clk
I
处理器工作时钟
2
rst
I
复位信号
3
Raddr1[4:
0]
I
读寄存器堆时的第1个寄存器下标
4
Raddr2[4:
0]
I
读寄存器堆时的第2个寄存器下标
5
Waddr[4:
0]
I
写寄存器堆时的寄存器下标
6
We
I
寄存器堆写使能
7
Wdata[31:
0]
I
待写入寄存器堆的数据
8
Rdata1[31:
0]
O
读寄存器堆时第1个寄存器的输出
9
Rdata2[31:
0]
O
读寄存器堆时第2个寄存器的输出
4.2.3模块仿真验证
4.3算术逻辑运算器模块设计
4.3.1模块方案设计
运用alu_clt控制运算器的各种运算,包括无符号数的加法运算,有符号数的加法运算,或逻辑运算,与逻辑运算,无符号数的减法运算,无符号小于置1运算,逻辑左移,逻辑右移,算术右移等。
4.3.2接口定义
序号
接口信号名称
方向(I/O)
说明
1
ALU_DA[31:
0]
I
参与运算的第一个输入数据
2
ALU_DB[31:
0]
I
参与运算的第二个输入数据
3
alu_clt[3:
0]
I
运算功能编码
4
alu_shift[4:
0]
I
偏移量
5
ALU_Zero
O
零标志位
6
Alu_Overflow
O
溢出标志位
7
ALU_Dout[31:
0]
O
运算结果输出位
4.3.3关键控制信号的产生
SUBctr=alu_clt[2];
ANDctr=alu_clt[0];
OVctr=!
alu_clt[1]&alu_clt[0];
SIGctr=alu_clt[0];
OPctr[1]=alu_clt[2]&alu_clt[1]|alu_clt[3];
OPctr[0]=alu_clt[1];
4.3.4具体ALU实现如下图所示:
4.3.5模块仿真验证
4.4立即数扩展模块设计
4.4.1模块方案设计
设计一个32位MIPS符号扩展单元SE,用于将16位的数据转换为32位数据。
4.4.2接口定义
序号
信号名
端口说明
描述
1
Imm16[15:
0]
I
来自指令寄存器的16位立即数
2
AluSrc
I
立即数扩展信号的使能端
3
bus[31:
0]
I
4
ExtImm32[31:
0]
O
符号扩展后的32位立即数
4.4.3模块仿真验证
4.5主控制模块设计
4.5.1模块方案设计
以指令译码结果中的6位操作码及相关信号产生整个数据通路中的各个控制信号。
4.5.2接口定义
序号
接口信号名称
方向(I/O)
说明
1
op
I
操作码
2
RegDst
O
目的寄存器选择
3
AluSrc
O
ALU输入信号选择
4
ExtOp
O
立即数扩展的使能信号
5
RegWr
O
寄存器写使能
6
MemWr,
O
存储器写使能
7
MemtoReg
O
寄存器的装载信号选择
4.5.3各控制信号的编码规则如下表所示:
op
000
000
001
000
001
001
001
100
001
101
100
011
101
011
001
010
001
011
000
100
000
101
RegDst
0
1
1
1
1
1
0
1
1
0
0
RegWr
1
1
1
1
1
1
0
1
1
0
0
ExtOp
0
1
0
0
0
1
1
1
0
1
1
AluSrc
0
1
1
1
1
1
1
1
1
0
0
MemWr
0
0
0
0
0
0
1
0
0
0
0
MemtoReg
0
0
0
0
0
1
0
0
0
0
0
4.5.4模块仿真验证
4.6ALU控制模块设计
4.6.1模块方案设计
通过译码结果中的高6位以及相关信号编码出数据通路中各个控制信号。
4.6.2接口定义
序号
端口名称
输入输出
端口说明
1
rst
I
复位信号(高电平1有效)
2
cpu_clk
I
时钟(上升沿有效)
3
func[5:
0]
I
功能区分
4
op
I
操作码
5
Alu_ctrl[3:
0]
O
Alu功能信号
4.6.3执行R型指令func对应的Alu_ctrl编码如下表所示:
func
Alu_ctrl
100000
0001
100001
0000
100010
0101
100011
0100
10