(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运行设计。
各模块间关系如下:
MIPS(顶层)
立即数
分支跳
算术逻
存储器
寄存器
主控制
取指模
ALU控
转指令
扩展模
辑运算
模块
堆模块
模块
块
制模块
控制模
块
器模块
块
程序计数器
译码模块
取指模块
模块
3.3接口定义和接口时序
cpu_clk
Out[3:
0]
MIPS
rst
说明:
该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实现如下图所示:
异或门阵列
位扩展
或门阵列
0
1
ALU_DA[31:
0]ALU_DB[31:
0]
Cin
异或门
Zero
Add_carry
Overflow
Add_Overflow
加减法运算器
Add_Sign
Add_Result
异或门
0
1
0
2
1
O
1Result
SUBctr
OPctr
OVctr
SIGctr
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
001
001
001
001
100
101
001
001
000
000
000
000
001
100
101
011
011
010
011
100
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
100100
0100
100101
0011
101011
0110
101010
0111
000000
1001
000010
1001
000011
1100
001000
0000
4.6.4模块仿真验证
4.7分支跳转指令控制模块设计
4.7.1模块方案设计
运用译码结果的高6位以及ALU的两个输入数据决定分支及分支和跳转指令的控制信号。
4.7.2接口定义
序号
信号名
端口定义
描述
1
ALU_DA
I
算术逻辑单元数据
A
2
ALU_DB
I
算术逻辑单元数据
B
3
op
I
指令操作码
4
func,
I
R指令的功能操作码
5
Jump
O
跳转信号使能端
6
Branch
O
分支信号使能端
4.7.3模块仿真验证
4.8取指模块设计
4.8.1模块方案设计
由程序计数器,取出指令以及译码三个子模块构成总的取指模块。
4.8.2
接口定义
序号
信号名
方向(I/O)
端口说明
1
clk
I
2
rst
I
3
ALU_DA
I
算术逻辑单元数据
A
4
Branch
I
分支信号使能端
5
Jump
I
跳转信号使能端
6
op
O
指令操作码
7
rs
O
8
rt
O
9
rd
O
10
func
O
R指令的功能操作码
11
shamt
O
偏移量
12
imm16
O
立即数
13
ALU_DB
O
算术逻辑单元数据
B
14
Pc_out
O
程序计数器输出
4.8.3电路基本构成如下图所示:
clk
op[5:
0]
rst
Pc_out
instruct
rs[4:
0]
Jump
rt[4:
0]
32
32
rd[4:
0]
Branch
PC
Fetchdecodefunc[5:
0]
ALU_DA
ALU_DB
shamt[4:
0]
Imm16[15:
0]
4.8.4跳转和分支指令执行时PC_out的编码规律
Jump:
Pc_out<=ALU_DA
Branch:
Pc_out<=Pc_out+1+ALU_DB
正常情况下:
Pc_out<=Pc_out+1
4.8.5模块仿真验证
5设计总体连接及仿真验证
5.1设计总体连线
op
PC
rs
rt
ALU_DA
rd
ALU_DB
Fetch
shamt
func
Jump
Branch
Decode
imm16
Pc_out
Flag
ExtMem_dout
Mem
clk
Rdata1[31:
0]
rst
We
Regfile
Raddr1[4:
0]
Raddr2[4:
0]
Waddr[4:
0]
Rdata2[31:
0]
Wdata[31:
0]
1
Imm0
1
0
rst
RegDst
AluSrc
ExtOp
RegWr
Main_cMemWr
MemtoReg
tr
Aluctr
ALU_ctr
ALUctr
ALU_DAzero
overflow
ALU_DC
ALU_DB
5.2在ISE仿真环境下仿真验证设计结果,仿真结果如下图所示:
5.3仿真结果分析
由仿真结果得知该CPU执行的12条指令均正常运行,实验基本成功,但是设
计较为简单,并未涵盖太多复杂指令,需要进一步改善,使其趋于完善。
6、实践课总结和心得体会
西安邮电大学电子工程学院
计算机组成与实践实践课程过程考核表
学生姓名承担任务实验室
实施时间
实施时间
第1周
第2~3周
第4~6周
第7~8周
第9~11周
第12周
第13~14周第14~15周
第16周
指导教师
对学生的评价
指导教师对学生专业知识或社会实践能力等情况的意见
**班级/学号**
微电子实验室所在部门微电子学系
2015年3月6日—2015年6月19日
实践课程:
时间安排、具体内容及成绩考核
具体内容安排考核结果
1、实践课程讲解,任务要求说明,学习和实践内容安排
2、兼容MIPS格式指令系统设计
1、指令存储器设计,寄存器堆设计
1、ALU设计——基本算术、逻辑单元的设计
32位超前进位加法器的设计
32位桶式移位寄存器的设计
1、取指令部件的设计
2、立即数处理单元设计
1、单周期处理器设计——R型指令的数据通路设计
I型指令的数据通路设计
Load/Store指令的数据通路设计
分支指令/转移指令的数据通路设计
综合12条指令的完整数据通路设计
1、ALU控制单元设计,主控制单元的设计
1、单周期处理器总体连接
1、单周期处理器总体仿真验证
课程考核验收
学习态度
□
认真
□
一般
□不认真
学习纪律
□
全勤
□
偶尔缺勤
□
经常缺勤
实践能力
□
很强
□
一般
□
较差
指导教师签字:
年月日
西安邮电大学电子工程学院
计算机组成与实践
实践课程成绩鉴定表
学生姓名
**
班级/学号**
进行时间
2015年3月6日—2015年6月19日
与教学任务计划结合程度(10分)
学习内容
与专业培养结合程度(6分)
(20分)
其它(4分)
接受单位
实践能力(10分)
评价
学习态度(6分)
成绩鉴定
(20分)
学习纪律(4分)
报告内容与实践过程紧密结合(15分)
报告鉴定报告内容与教学计划内容紧密结合(15分)
(60分)
报告质量(主题、结构、观点、逻辑、资料、字数30
分)
指导教师姓名孟李林职称教授成绩
评语
指导教师签字:
年月日