[Logisim 头歌实践教学平台]气泡流水线设计(EX段分支3624版本) MIPS流水CPU设计---HUST(计算机组成原理课程设计)

  点击此处获取源代码(一码通关)cpu24.circ

本代码为原创首发,创作不易,谢谢支持!

下载链接icon-default.png?t=N7T8https://afdian.com/a/fries

实验成品电路图

MIPS流水CPU设计所有实验见该博客:

博客链接

目录

点击此处获取源代码(一码通关).circ

实验成品电路图

实验目的

实验内容

电路框架

电路引脚

调试技巧与常见故障


实验目的

为理想流水线增加冲突处理机制,通过先写后读的方式解决寄存器资源冲突,通过插入气泡方式解决数据相关冲突,通过清空误取指令方式解决分支冲突,最终系统能运行单周期24条指令CPU中的Benchmark程序。

实验内容

实现数据相关检测逻辑。 构建源寄存器使用情况子电路 实现IF,ID段暂停逻辑 利用数据相关信号控制对应部件写使能,低电平有效 实现EX段插入气泡逻辑、利用数据相关信号控制ID/EX接口的同步清零信号

分支相关处理

数据相关处理(气泡法)

电路框架

cpu24.circ 理想流水线子电路

注意:可以整体平移引脚框到电路任何位置,但由于电路封装与引脚位置和顺序有关系,所以框内引脚一律不许增删改,哪怕是移动位置调整顺序,改变引脚朝向,也不要在电路中增加额外的引脚,否则测试系统无法测试 ####电路引脚

信号位宽功能描述
IF.PC32IF阶段PC值
ID.PC32ID阶段PC值
EX.PC32EX阶段PC值
MEM.PC32MEM阶段PC值
WB.PC32WB阶段PC值
RegWrite1寄存器堆写使能控制信号,直接连寄存器堆WE端口
RDin32寄存器堆写入端口的数据,直接连寄存器堆Din端口
MemWrite1存储器写使能控制信号,接MEM段的RAM上的Str端口
MDin32存储器写入端口的数据,接MEM段的RAM上的Din端口
LedData32LED显示输出值,连数码管输入数据LedData标签

待测电路默认封装如下,提交测试前请检查是否一致,如不一致,检查引脚是否修改过,另外可以通过恢复默认封装功能尝试修复。

####电路测试#### 完成设计后,先测试数据相关测试程序,测试完成后再加载 benchmark.hex 程序,测试功能,周期数应该为3623。确认实验完成正确后,可利用文本编辑工具打开 cpu24.circ,将所有文字信息复制粘贴到 educoder 平台的 cpu24.circ 文件中,再点击评测按钮即可进行本关测试。平台会对你设计的电路进行自动测试,为方便测试,请勿修改子电路封装。

测试输出结果说明
#信号功能描述
1CLK时钟计数,表明当前节拍,注意计数为十六进制
2IFPC当前节拍IF段PC的期望值
3IDPC当前节拍ID段PC的期望值
4EXPC当前节拍EX段PC的期望值
5MEMPC当前节拍Mem段PC的期望值
6WBPC当前节拍WB段PC的期望值
7PCerr5位指错字:从左到右分别表示IF、ID、EX、MEM、WB段PC出错的情况,1表示错误,0表示正确
8Werr4位指错字:从左到右分别表示RegW、RDin、MemW、MDin出错的情况,1表示错误,0表示正确
9LEDLED显示输出期望值
10RegW寄存器写使能控制信号的期望值
11RDin寄存器文件写入端口的数据的期望值
12MemW存储器写使能控制信号的期望值
13MDin存储器写入端口的数据的期望值

由于24条指令的测试程序benchmark节拍周期数过多,所以会输出大量信息,educoder平台不支持,所以本测试中使用了精简模式,左侧测试用例部分这里仅仅输出表头,如下图所示

右侧实际输出部分仅仅输出表头和错误节拍对应的各监测引脚的标准值,如下图所示

如果未能通过测试,系统会输出待测CPU出错的节拍编号,以及当前节拍下各监测引脚的期望值以及出错情况,请根据出错字找出错误,将cpu运行到对应节拍下(注意CLK值为十六进制)进行比对,并根据指令的功能进行调试。

调试技巧与常见故障

第0拍就出错了,我机器上运行好好的啊,最有可能就是你封装不对,查看下电路封装,恢复为默认封装即可!

出现以上故障,是因为本地 cs3410.jar 和测试平台中的 cs3410.jar 路径不一样导致的。一般建议本地的 jar 文件和 cpu.circ 文件在同一目录下,如果出现这个问题,可以将本地 cs3410.jar 先移动到 cpu.circ 同目录下后,打开 cpu.circ,logisim 会提示找不到 cs3410.jar,重新指向同目录 cs3410.jar,存盘退出,再重新上传电路文本内容,即可解决这个问题。

也可以直接修改平台代码,搜索 cs3410,如下所示:



  1. <lib desc="jar#6.CPU设计实验/cs3410.jar#edu.cornell.cs3410.Components" name="7">

将上面的绝对路径删除,改成如下形式即可:



  1. <lib desc="jar#cs3410.jar#edu.cornell.cs3410.Components" name="7">

开始你的闯关任务吧,升级打怪中....

### 关于MIPS流水线CPU设计的资料与指导 #### 华中科技大学(HUST)课程材料概述 针对华中科技大学计算机组成原理课程中的MIPS流水线CPU设计部分,该课程被划分为多个阶来逐步深入理解并实现不同类型的流水线结构。具体来说: - **单周期CPU (第1关)**:此部分主要关注基础架构的设计,在这里学生能够熟悉基本指令集及其执行流程[^1]。 - **理想流水线设计 (第2关)**:在此基础上引入了理想的五级流水线模型(IF, ID, EX, MEM, WB),使得每一条指令可以在五个连续的时钟周期内完成其全部操作过程。 - **气泡流水线设计 (EX分支3624版本) (第3关)**:当遇到数据依赖等问题时,为了防止错误的结果传播给后续指令,会在有问题的地方插入一个或多个空闲状态——即所谓的“气泡”,从而确保正确性的同时也影响性能。 - **重定向流水线 (EX分支2298版本)(ID分支2103版本) (第4、5关)**:这些改进措施旨在解决由于条件转移带来的控制冒险问题。通过预测机制提前判断跳转方向,并相应调整取指地址;一旦发现误判,则需回滚至正确的路径继续执行未受影响的部分。 #### 实践平台介绍 对于上述理论的学习和验证工作,推荐使用Logisim实践教学平台作为模拟环境。它不仅提供了直观易懂的操作界面帮助初学者快速上手硬件描述语言(HDL),而且内置丰富的组件库支持复杂电路搭建。特别是面对像MIPS这样的RISC处理器体系结构时,可以利用现成模块简化开发难度,集中精力探索核心概念和技术细节[^2]。 #### 故障排查建议 在实际动手过程中难免会遇到各种挑战,比如未能顺利通过某些特定测试用例的情况。此时应仔细阅读系统反馈的信息,包括但不限于出错的具体节拍位置、预期行为对比现有表现差异等线索。借助这些提示定位潜在缺陷所在之处,并参照官方文档或其他权威资源进一步分析原因,最终找到合理的解决方案。 ```python def debug_cpu(cpu_state, expected_output): """ A simple function to demonstrate how one might compare the current state of a CPU with an expected output. Args: cpu_state (dict): The actual state of the CPU as observed during execution. expected_output (dict): What we expect each part of the CPU's state to be at this point. Returns: list: List of discrepancies between `cpu_state` and `expected_output`. """ issues = [] for key in expected_output.keys(): if cpu_state.get(key) != expected_output[key]: issues.append(f"{key}: Expected {expected_output[key]}, but got {cpu_state.get(key)}") return issues ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值