头歌实践教学平台 RISC-V流水CPU设计---HUST

该文介绍了基于Logisim平台设计RISC-V单周期CPU的实验,目标是实现24条指令的控制器。实验要求学生利用已有的运算器和存储系统部件,构建32位处理器,并能运行特定的测试程序。文中提到了测试过程中可能出现的错误和调试技巧,并提供了源码链接。
摘要由CSDN通过智能技术生成

第1关:RISC-V单周期CPU(24条指令)

实验目的

学生掌握控制器设计的基本原理,能利用硬布线控制器的设计原理,在 Logisim 平台中设计实现支持21条指令的RISC-V 单周期 CPU。

实验内容

利用运算器实验,存储系统实验中构建的运算器、寄存器文件、存储系统等部件以及 Logisim 中其它功能部件,构建一个 32 位 RISC-V CPU 单周期处理器。数据通路如下图所示:

 要求支持24条 RISC-V 核心指令,最终设计实现的处理器能运行实验包中的risc-v-benchmark.asm。

电路框架

cpu24-riscv.circ

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

电路监控引脚

信号位宽功能描述
PC32当前节拍程序寄存器PC
IR32当前节拍指令字IR
RegWrite1寄存器写使能控制信号
RDin32寄存器文件写入端口的数据
MemWrite1存储器写使能控制信号
MDin32存储器写入端口的数据
LedData32LED显示输出值

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

电路测试

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

测试输出结果说明

最终输出包括个检测引脚的期望值和实际值,出错时请对比查错。

#信号功能描述
1CLKs时钟计数,表明当前节拍,注意计数为十六进制
2PC当前节拍程序寄存器PC的期望值
3IR当前节拍当前指令字IR的期望值
4PCerr2位指错字:左起第一位为1表示PC出错,第2位出错表示IR出错
5Werr5位指错字:从左到右分别表示LED、RegW、RDin、MemW、MDin出错的情况,1表示错误,0表示正确
6LEDLED输出的期望值
7RegW寄存器写使能控制信号的期望值
8RDin寄存器文件写入端口的数据的期望值
9MemW存储器写使能控制信号的期望值
10MDin存储器写入端口的数据的期望值
11PCr当前节拍程序寄存器PC的实测值
12IRr当前节拍当前指令字IR的实测值
13LEDrLED输出的实测值
14RegWr寄存器写使能控制信号的实测值
15RDinr寄存器文件写入端口的数据的实测值
16MemWr存储器写使能控制信号的实测值
17MDinr存储器写入端口的数据的实测值

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

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

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

调试技巧与常见故障

1、检查待测电路引脚框架是否和前面的图一致,调整引脚会引起待测部件封装接口改变,导致测试无法正常进行。 2、检查待测电路子电路外观也就是封装和前面的图是否一致,引脚位置,引脚顺序、引脚数目等,这个不一样肯定不正常 3、单周期CPU所有寄存器包括寄存器文件时钟触发都是上跳沿,请仔细检查,如果有不同会导致一个节拍两个状态,测试系统会判断出错。 4、是否加载指定测测试程序,如果自己汇编程序要检查mars内存模式是否设置为compact mode。

第0拍就出错了,有可能是引脚和最新版本不一致,另外也有可能封装不对,检查下电路封装,恢复为默认封装即可!

下图就是LED数据不对,实际上没有接这个引脚。

第5拍出错:应该是jal指令,这条指令除了跳转,还要保存返回地址到31号寄存器,出现这个错误多半是没有实现后面的功能。

第7拍出错:应该是寄存器文件时钟触发模式的问题,改成上跳沿就可以解决。

PC出错原因:如果指错字显示PC出错,表示上一个节拍是分支指令,且分支指令跳转不正确。。

出现以上故障,是因为本地 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">

最后附上第一关源码:https://pan.baidu.com/s/1zJV7BSreshdI6IS7c2VMsA?pwd=hibe 
 

祝各位顺利通关!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值