本仓库用于“一生一芯”线上调试的考核。
助教将会每次在你提交的代码仓库中随机注入3个错误:
- 软件、硬件和环境(包括构建脚本和仿真环境等)各1个
- 但不会在仙剑、libc、spike等没有要求学生进行开发的代码中注入错误,也不会在Chisel代码中注入花哨的Scala语法糖
你需要在45分钟内排除这些错误,助教将从你调试的过程中观察你的能力是否达到了“一生一芯”的预期。
注意:
考核期间,助教不会有任何提示,且结束后也不会进行BUG解答,如果出现则视为助教违规。
学员也禁止在考核期间和考核结束之后,以任何形式咨询助教考核相关BUG,如果出现则视为学员违规。
学员需确保自己提交的代码为能够正确运行所有测试程序的代码,申请考核后学员将不能再提交新版代码
- 建议使用git工具检查是否所有更新都已经 commit 并 push 到远程仓库
为了参加考核,你需要进行如下准备工作。
你需要对即将提交的代码进行自我检查,以确认提交的代码达到了“一生一芯”的学习要求。 具体地,你需要确认:
- 你的代码可以在“一生一芯”给出的docker环境中完成考核环境自测
- NEMU中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
- AM中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
- Nanos-lite中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
- Navy-apps中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
- NPC中的代码是你独立编写的,没有参考任何已有代码
- 在NEMU中可成功运行仙剑奇侠传
- 在NPC中可成功运行仙剑奇侠传
- NPC中已经实现了总线、Cache、乘除法器和流水线,并且它们均在仿真过程中正确工作
- 一个不包含Cache的单周期处理器也可以成功运行仙剑奇侠传,但如果你明知道处理器未达到“一生一芯”的学习要求却仍然申请考核,将可能被视为“骗取流片机会”而列入失信名单
如果你提交的代码中包含不属于独立编写的部分,请你自觉删除它们并重新独立完成。 这样做一方面是要求大家遵守学术诚信,另一方面也是帮助你为考核做好充分的准备。
我们提供了一个半自动化的bug注入工具供大家进行调试练习。
欢迎大家完善这个工具(正则表达式编程):工具可以注入的bug越多,大家就可以得到越真实的训练。
注意:上述工具注入的bug类型与在线调试考核的题目类型无直接联系
在上传你的仓库进行考核之前,请进行如下操作:
cd ysyx-workbench
git clone git@github.com:oscpu/ysyx-exam.git
rm -r ysyx-exam/.git
git add ysyx-exam
git commit -m "add exam file"
注意:请遵从指示执行考核脚本,不要在ysyx-workbench中随意执行该脚本, 否则可能会对项目造成非预期的修改。
- 请你将ysyx-workbench上传到一个公开的仓库,仓库增加doc文件夹,上传nemu和npc运行PAL通过的截图以及time.txt, 截图名:ysyx学号-nemu, ysyx学号-npc, time.txt标明nemu和npc分别从开始运行PAL至满足考核正确性要求(见后续小节“正确性判定”)所需时间,精确到分,如果所需时间过长,请自行优化以提升通过考核的机会。
- nemu运行截图要求一半屏幕是libminiSDL部分代码,一半是运行过程;npc截图要求一半屏幕是difftest部分代码,另一半是运行过程。
- 关闭所有的trace和波形
首先请在linux环境下新建user命名为ysyx, 然后clone自己上传的repo并进行环境自测。 请检查如下路径是否存在,考核脚本将会直接从如下路径拷贝相关文件到考核环境中:
$NAVY_HOME/apps/pal/repo/
$NAVY_HOME/apps/bird/repo/
$NAVY_HOME/libs/libc/
$NEMU_HOME/tools/spike-diff/repo/
$NEMU_HOME/../am-kernels/
通过以下操作进行考核环境的自测,避免在考核时遇到环境配置相关的问题而花费额外的时间:
mkdir ~/exam-test
cd ~/exam-test
git clone 上一步上传仓库的URL ysyx-exam
cd ysyx-exam/ysyx-exam
source exam-init.sh # 此操作将会在当前shell中临时更新NEMU_HOME, AM_HOME, NAVY_HOME, NPC_HOME四个环境变量
cd nanos-lite
make ARCH=riscv64-nemu update
make ARCH=riscv64-nemu run
make ARCH=riscv64-npc run
exit # 退出当前shell, 避免继续使用考核环境中的环境变量
请检查上述过程是否能编译并在NEMU和NPC中运行仙剑,若否,请自行排查问题。
请注意,使用绝对路径会导致你的项目无法在助教的环境中正确运行,
请先自行修改,否则助教不会开展后续考核流程。
请对自己的环境负责,如3位及以上助教均无法跑通,学员需听取助教的修改建议, 如不听取, 则需遵守考核冷静期,后续再次申请。
此外,上述过程会使用exam_defconfig
的配置来编译NEMU,
你可以在自测时打开menuconfig查看并按需调整你的配置。
排查问题后,你需要更新上述仓库,然后重新进行自测。
自测成功后,可删除~/exam-test
目录。
为避免助教和学员因软件版本不一致出现bug, 现对考核使用软件版本做出如下约束:
llvm version: 11/12
verilator version: 5.008
学生完成上述流程后,填写正式考核申请表,正式考核需要等待助教安排考核时间。
- 助教将通过
考核环境自测
小节中的操作,检查学生提交的代码是否符合要求- 若不符合要求,则在考核申请表中反馈,要求学生进行整改
- 若学生提交的代码、git log、学习记录三者不一致,助教有权不予安排考核;若三者严重不一致,助教有权向项目组建议将该学生加入失信名单,项目组将仔细评估
- 学员应在提交考核申请之前,做到以下几点
- 若使用虚拟机,请将配置修改为大于等于4G内存+40G磁盘空间
冷静期试用阶段结束, 从2023/3/1开始, 进入正式执行阶段. 随着一生一芯报名人数逐渐增加, 流片的同学人数也逐渐增加, 但助教人数有限, 望大家珍稀每次考核机会, 严格执行考核冷静期安排. 2023年3月1日前的考核结果不再作为后续考核的参考依据.
- 助教安排考核时间时,应注意同一名学生在多次申请考核时,前3次考核的间隔不少于1周,第4次及以上的间隔不少于2周
- 某学生在第t周参加完第1次考核,则他最早可在第t+1周参加第2次考核
- 某学生在第t+1周参加完第2次考核,则他最早可在第t+2周参加第3次考核
- 某学生在第t+2周参加完第3次考核,则他最早可在第t+4周参加第4次考核
- 某学生在第t+4周参加完第4次考核,则他最早可在第t+6周参加第5次考核
- 某学生在第t+5周参加完第5次考核,则他最早可在第t+9周参加第6次考核
- 考核次数>5次,均需在4周后参加考核
- 助教在代码仓库中注入3个错误,涵盖软件、硬件和环境(包括构建脚本和仿真环境等), 但不会在仙剑、libc、spike等学生没有进行直接开发的代码中注入错误, 也不会在Chisel代码中注入花哨的Scala语法糖
- 助教通过
git init
重新创建工程,从而去掉git diff
的记录 - 助教将注入错误的工程通过以下方式进行加密打包,并记录解压秘钥:
base64 /dev/random | head -c 16 #此命令将会生成一个随机字符串作为秘钥 tar cj ysyx-workbench | openssl aes256 -k 秘钥 > exam.tar.bz2
- 助教在考核前1天内将压缩包发送给学生,但不告知其秘钥
- 助教每周安排线上调试考核(每人45分钟),每次考核一名监考人(注入bug的助教与监考人不一致)
- 安排后,助教通知学生参加考核的时间和腾讯会议号码;
- 学生考核开始时,助教需要
- 要求学生共享屏幕(整个桌面)并打开摄像头
- 确认学生身份,必要时可要求学生出示相关证件
- 若上述两点未满足(如学生端无法打开摄像头),助教应取消该次考核
- 助教强调考核纪律,提醒考核时间等;
- 助教将解压秘钥告知学生,学生通过以下命对压缩包进行解压,并进行考核环境的初始化:
mkdir ~/exam-test mv 压缩包路径 ~/exam-test cd ~/exam-test cat exam.tar.bz2 | openssl aes256 -d -k 秘钥 | tar xvjf - cd ysyx-exam/ysyx-workbench source exam-init.sh # 此操作将会在当前shell中临时更新NEMU_HOME, AM_HOME, NAVY_HOME, NPC_HOME四个环境变量
- 学生开始调试,助教录屏并开始计时;
- 在考核过程中,学生严禁使用diff等工具通过对比注入错误前后的项目来观察代码的差异,一经发现将按作弊处理;
- 助教根据录屏对学生的考核过程进行评价,评价内容包括学生对项目细节的理解是否深入,对工具的掌握是否熟悉,调试方法是否清晰科学;
- 学生需要解决3个bug, 并在NEMU和NPC中完成指定操作(见下一小节“正确性判定”)。若在指定时间内完成所有指定操作,视为考核通过;
- 学生运行成功时,助教需要检查环境变量的值是否指向考核环境(即注入错误的项目);
若学生无意在环境变量指向原项目的情况下(如重新打开了终端但未运行
source exam-init.sh
)成功运行, 助教应提醒学生,此次成功运行将不作为考核通过的依据; - 在考核过程中,若学生提前退出腾讯会议(误操作或由网络问题等原因导致),助教应终止该次考核,考核结果视为无效,并重新安排一次新的考核;若学生连续两次考核均出现提前退出腾讯会议的情况,将视为学生参加完一次考核且结果为不通过;
- 考核结束时,学生退出腾讯会议,助教停止录屏。
请依次进行如下操作:
- 注释
navy-apps/apps/pal/repo/src/main.c
的第471和第472行,跳过SOFTSTAR商标动画和群山飞鹤动画 - 手动通过“旧的回忆”选择并读取指定的4号存档
- 进入存档后触发战斗,分别控制我方任意2名角色普通攻击任意敌人
- 看到我方角色第2次攻击敌人时的伤害数字后视为正确
- 助教对考核情况进行综合评价后,在3天内将考核结果告知学生
- 学生通过考核后,助教将该学生添加至后端小组的白名单,学生可开展SoC对接工作
- 若学生未通过考核,可再次申请考核,但前3次考核的间隔不少于1周,第4次及以上的间隔不少于2周
- 参与考核的学员禁止泄露考题和考试细节,否则视为违规,警告一次。
已经参与过考核的同学,如果被人询问考试细节,必须向助教汇报,记询问者行为不端,警告一次。
考核结果的最终解释权归“一生一芯”项目组所有。