Logisim实践教学平台:单周期MIPS CPU设计与计算机硬件系统设计
点击此处获取源代码(一码通关).circ
下载链接https://afdian.net/a/fries
本代码为原创首发,创作不易,谢谢支持!
实验成品电路图
MIPS流水CPU设计所有实验见该博客:
博客链接
目录
点击此处获取源代码(一码通关).circ
实验成品电路图
实验目的
实验内容
电路框架
电路引脚
调试技巧与常见故障
实验目的
让学生熟悉中断软硬协同的机制,能够设计支持单级中断的单周期 MIPS CPU。
实验内容
为单周期 MIPS 增加单级中断机制,可支持1、2、3共3个按键中断事件,中断优先级1 < 2 < 3,CPU 执行中断服务程序时不能被其他中断请求中断。
电路框架
cpu24.circ 对应子电路名必须修改为“◇单周期 MIPS+ 单级中断”。
为了方便测试中断,这里增加了三个引脚用于输入中断请求信号,请大家更新整个引脚框,包括按键部分。 注意:可以整体平移引脚框到电路任何位置,但由于电路封装与引脚位置和顺序有关系,所以框内引脚一律不许增删改,哪怕是移动位置调整顺序,改变引脚朝向,也不要在电路中增加额外的引脚,否则测试系统无法测试。
电路监控引脚
信号 | 位宽 | 功能描述 |
---|---|---|
IR1 | 1 | 输入测试程序的中断请求 IR1,第 3 条指令时中断寄存器 IR 对应位为 1,第 572 拍还会产生一次 |
IR2 | 1 | 输入测试程序的中断请求 IR2,第 4 条指令时中断寄存器 IR 对应位为1 |
IR3 | 1 | 输入测试程序的中断请求 IR3,第 5 条指令时中断寄存器 IR 对应位为 1 |
PC | 32 | 当前节拍程序寄存器 PC |
IR | 32 | 当前节拍指令字 IR |
RegWrite | 1 | 寄存器写使能控制信号 |
RDin | 32 | 寄存器文件写入端口的数据 |
MemWrite | 1 | 存储器写使能控制信号 |
MDin | 32 | 存储器写入端口的数据 |
LedData | 32 | LED 显示输出值 |
待测电路默认封装如下,提交测试前请检查是否一致,如不一致,检查引脚是否修改过,另外可以通过恢复默认封装功能尝试修复。
电路测试
完成设计后,加载 单级中断测试程序.hex 程序,测试功能。确认实验完成正确后,可利用文本编辑工具打开 cpu24.circ,将所有文字信息复制粘贴到 Educoder 平台的 cpu24.circ 文件中,再点击评测按钮即可进行本关测试。平台会对你设计的电路进行自动测试,为方便测试,请勿修改子电路封装。
测试输出结果说明
# | 信号 | 功能描述 |
---|---|---|
1 | CLKs | 时钟计数,表明当前节拍,注意计数为十六进制 |
2 | PCr | 当前节拍程序寄存器 PC 的实际值 |
3 | PCs | 当前节拍程序寄存器 PC 的期望值 |
4 | IRs | 当前节拍当前指令字 IR 的期望值 |
5 | PCerr | 2 位指错字:左起第一位为 1 表示 PC 出错,第 2 位出错表示 IR 出错 |
6 | Werr | 5 位指错字:从左到右分别表示 LED、RegW、RDin、MemW、MDin 出错的情况,1 表示错误,0 表示正确 |
7 | LED | LED 输出的期望值 |
8 | RegW | 寄存器写使能控制信号的期望值 |
9 | RDin | 寄存器文件写入端口的数据的期望值 |
10 | MemW | 存储器写使能控制信号的期望值 |
11 | MDin | 存储器写入端口的数据的期望值 |
由于测试程序节拍周期数过多,所以会输出大量信息,Educoder平台不支持,所以本测试中使用了精简模式,左侧测试用例部分这里仅仅输出表头,如下图所示
右侧实际输出部分仅仅输出表头和错误节拍对应的各监测引脚的标准值,如下图所示
如果未能通过测试,系统会输出待测 CPU 出错的节拍编号,以及当前节拍下各监测引脚的期望值以及出错情况,请根据出错字找出错误,将 CPU 运行到对应节拍下(注意 CLK 值为十六进制)进行比对,并根据指令的功能进行调试。
调试技巧与常见故障
注意单周期 MIPS 中中断隐指令时间开销应该是零,否则无法通过测试。 本地模拟时可以在时钟计数到1时按下1号按键,这样主程序执行3条指令后会进入1号中断服务程序,大概在188拍左右会执行 eret 指令退出,注意退出后的断点是否正确。注意第572拍会产生中断请求,此时主程序是分支指令,断点并不是 PC+4。
测试程序
v2.0 raw
201d07d0
20100001
00109fc0
00139fc3
00008021
2012000c
24160008
26100001
3210000f
20080008
20090001
00139900
02709825
00132020
20020022
0000000c
01094022
1500fff9
22100001
2018000f
02188024
00108700
20080008
20090001
00139902
02709825
00132021
20020022
0000000c
01094022
1500fff9
00108702
02c9b022
12c00001
08000c07
00004020
01084027
00084400
3508ffff
00082021
20020022
0000000c
08000c01
afa20000
23bd0004
afa40000
23bd0004
afb00000
23bd0004
afb30000
23bd0004
afb40000
23bd0004
afb50000
23bd0004
afb60000
23bd0004
20160001
20140003
20150001
00168020
00108100
02149825
00132020
20020022
0000000c
1600fffa
0295a022
1680fff7
23bdfffc
8fb60000
23bdfffc
8fb50000
23bdfffc
8fb40000
23bdfffc
8fb30000
23bdfffc
8fb00000
23bdfffc
8fa40000
23bdfffc
8fa20000
42000018
afa20000
23bd0004
afa40000
23bd0004
afb00000
23bd0004
afb30000
23bd0004
afb40000
23bd0004
afb50000
23bd0004
afb60000
23bd0004
20160002
20140003
20150001
00168020
00108100
02149825
00132020
20020022
0000000c
1600fffa
0295a022
1680fff7
23bdfffc
8fb60000
23bdfffc
8fb50000
23bdfffc
8fb40000
23bdfffc
8fb30000
23bdfffc
8fb00000
23bdfffc
8fa40000
23bdfffc
8fa20000
42000018
afa20000
23bd0004
afa40000
23bd0004
afb00000
23bd0004
afb30000
23bd0004
afb40000
23bd0004
afb50000
23bd0004
afb60000
23bd0004
20160003
20140003
20150001
00168020
00108100
02149825
00132020
20020022
0000000c
1600fffa
0295a022
1680fff7
23bdfffc
8fb60000
23bdfffc
8fb50000
23bdfffc
8fb40000
23bdfffc
8fb30000
23bdfffc
8fb00000
23bdfffc
8fa40000
23bdfffc
8fa20000
42000018
开始你的闯关任务吧,升级打怪中….
作者:我想明天去码头整点薯条