CPU设计实践教程6-Minisys-1单周期CPU控制器的设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令操作码 ori
addiu
lw
sw
beq jump
RegDst
0
0
0
000000 R-format
1
RegDST = R-format
wire R_format;
assign R_format = (Opcode==6'b000000)? 1'b1:1'b0; assign RegDST = R_format; //说明目标是rd,否则是rt
output Sftmd; output[1:0] ALUOp;
// 他I-类型指令 // 为1表明是移位指令 // 是R-类型或I_format=1时位1为1, beq、bne指令则 // 位0为1
2021/9/5 P.22
单周期控制器设计
RegDST的控制电路
op 001101 001001 100011 101011 000100 000010
output nBranch; // 为1表明是Bne指令
output Jmp;
// 为1表明是J指令
output Sftmd; // 为1表明是移位指令
2021/9/5 P.25
单周期控制器设计
练习2
请给出下列控制信号电路的Verilog描述
assign Sw = ????? assign ALUSrc = ????? assign Branch = ????? assign nBranch = ????? assign Jmp = ?????
2021/9/5 P.10
创建一个项目
在打开的Default Port对话框中选择的FPGA器件为 xc7a100tfgg484-1,如图所示,点击Next。
2021/9/5 P.11
创建一个项目
在New Project Summary对话框点击Finish
2021/9/5 P.12
创建一个项目
assign MemWrite = ????? assign MemtoReg = ????? assign Sftmd = ?????
2021/9/5 P.26
单周期控制器设计
ALU的控制电路 • ALU采用分级控制的方法(减轻控制器负担),在
控制器中,只发出ALUop信号
指令操作码 LW SW BEQ,BNE R-format
output Jrn;
// 为1表明当前指令是jr
output output output output
RegDST; ALUSrc; MemtoReg; RegWrite;
// 为1表明目的寄存器是rd,否则目的寄存器是rt // 为1表明第二个操作数是立即数(beq,bne除外) // 为1表明需要从存储器读数据到寄存器 // 为1表明该指令需要写寄存器
2021/9/5 P.23
单周期控制器设计
RegWrite的控制电路
op 001xxx 000000 100011 101011 000011 000010 000000
指令操作码 I-format jr
lw
sw
jal
j
R-format
RegWrite
1
0
1
x
1
x
1
练习1: 完善上面的表,最终RegWrite = ?
func
op rs rt immediate
J-format op address
op func
jal
控制 单元
MemtoReg MemWrite
ALUop/Sftmd/I_format Alusrc jmp | jal jrn nBranch Branch
4 +
Regdst PC+4
address
wire I_format, Lw, Jal, Jrn;
assign I_format = ???? assign Lw = ???? assign Jal = ???? assign Jrn = ???? assign RegWrite = ?????
2021/9/5 P.24
单周期控制器设计
练习2
请给出下列控制信号电路的Verilog描述
output ALUSrc; // 为1表明第二个操作数是立即数(beq,bne除外)
output MemtoReg; // 为1表明需要从存储器读数据到寄存器
output MemWrite; // 为1表明该指令需要写存储器
output Branch; // 为1表明是Beq指令
2021/9/5 P.15
导入仿真文件
2021/9/5 P.16
导入仿真文件
此时会看到仿真文件和 它实例化模块的设计文 件均被调入到项目中如 图6-30所示。注意控制 器的仿真文件有两个, Control32_sim适用于 只设计了CPU的控制单 元的仿真, ControlIO32_sim是扩 展了接口后的控制单元 仿真文件。
ALU的控制电路 • 第二级控制在执行单元模块中介绍
2021/9/5 P.28
控制单元仿真
需要将control32_sim文件设置为顶层文件。
2021/9/5 P.29
控制单元仿真
2021/9/5 P.30
Minisys-1单周期CPU 控制器的设计
2021/9/5 P.1
主要内容
数据通路的回顾 创建一个项目
导入初始设计文件 导入约束文件 导入仿真文件 添加程序下载单元
单周期CPU控制器设计
2021/9/5 P.2
MIPS instruction format
R-format op rs rt rd I-format
2021/9/5 P.5
创建一个项目
按照下图选择,点击Next
2021/9/5 P.6
导入初始设计文件
在Add Source对话框选择AddFiles..., 在之后弹出的对话框 中选择\Classfiles\minisys\目录,并将其中所有的.v文件选中 (如图),点击OK。
2021/9/5 P.7
创建一个项目
在Add Source对话框中勾选Copy the sources into Project,然 后选择Next。
2021/9/5 P.8
创建一个项目
在选择IP核的对话框中按一次Next(此处不选IP核)。 在Add Constraints)的对话框中选择AddFiles..., 在之后弹
2021/9/5 P.20
单周期控制器设计
设计方法
考察每条指令在数据通路中的执行过程和涉及到 的控制信号的取值;
根据列出的指令和控制信号之间的关系,写出每 个控制信号的逻辑表达式。
2021/9/5 P.21
module 单周期控制器设计
control32(Opcode,Jrn,Function_opcode,RegDST,ALUSrc,MemtoReg,RegWrite
ALUop 00 00 01 10
I-format
10
assign ALUOp = {(R_format || I_format),(Branch || nBranch)}; // 是R-format或需要立即数作32位扩展的指令1位为1,beq、 bne指令则0位为1
2021/9/5 P.27
单周期控制器设计
出的对话框中选择D:\Classfiles\minisys\xdc\目录,并将 minisys.xdc文件选中,点击OK。
2021/9/5 P.9
创建一个项目
再次回到Add Constraints对话框,在Add Constraints对话框 中勾选Copy the sources into Project,如图3-20所示,然后选 择Next。
1
WE Address
Mem
data
1
数据RAM
0
Write
Data
创建一个项目
打开Vivado,执行File → New Project
2021/9/5 P.4
创建一个项目
在打开的New Project对话框中点击Next,之后按照下图设置 ,项目名称为minisys,路径可以自己定,注意不要出现中文 字符。然后点击Next
2021/9/5 P.17
添加程序下载单元
程序下载单元使用UART来实现在PC上对Minisys CPU的在 线编程,该模块以网表IP核的形式提供在资源包中,无需 大家设计,只需要添加到工程中即可。
2021/9/5 P.18
添加程序下载单元
2021/9/5 P.19
添加程序下载单元
Component Name是uart_bmpg_0
output MemWrite; // 为1表明该指令需要写存储器
output output output output
Branch; nBranch; Jmp; Jal;
// 为1表明是Beq指令 // 为1表明是Bne指令 // 为1表明是J指令 // 为1表明是Jal指令
output I_format; // 为1表明该指令是除beq,bne,LW,SW之外的其
创建的新项目因为初始文 件不完善,所以有很多错 误,接下来我们来完善它 们。
2021/9/5 P.13
导入仿真文件
右键点击图中的 Simulation Sources,在弹 出的菜单中选择Add Sources…菜单,打开图 所示的Add Sources对话 框。确保选中的是Add or create simulation sources ,并点击Next。
Regwrite 左移2位
程序ROM
P
读地址
Cቤተ መጻሕፍቲ ባይዱ
指令 [31-0]
Clock
31
10
rs
WE
readR1
rt
0 rd 1
readD1
readR2
0
readD2
1 writeR 寄
writeD
存 器
Clock
immediate 符号扩展
左移2位
A Zero
0
Alu B result
1
ALU
1 0
0
+1
0
2021/9/5 P.14
导入仿真文件
在 Add or create simulation sources对话 框选择Add Files..., 在 之后弹出的对话框中选 择 C:\sysclassfiles\orgniza tiontrain\minisys\sim\ 目录,并将其中所有的 .v文件选中(如图6-28 所示),点击OK。
, MemWrite,Branch,nBranch,Jmp,Jal,I_format,Sftmd,ALUOp);
input[5:0] Opcode ;
// 来自取指单元instruction[31..26]
input[5:0] Function_opcode; // 来自取指单元r-类型 instructions[5..0]