实验须知
实验仓库结构¶
Arch-2022Sping-FDU
│── build:仿真测试时才会生成的目录
│── difftest:仿真测试框架
│── ready-to-run:仿真测试文件目录
│ ├── lab1:包含lab1相关的测试文件,需要关注其中的 .S 汇编文件
│ └── ...
│── vivado
│ └── test1
│ └── project:vivado项目工程目录
│── vsrc:需要写的CPU代码所在目录
│ ├── include:头文件目录
│ ├── pipeline
│ ├── regfile:寄存器文件目录,寄存器组模块已给出
│ ├── execute:流水线执行阶段目录,alu模块已给出
│ └── core.sv:五级流水线主体代码
│ ├── ram:内存控制相关目录
│ ├── util:访存接口相关目录
│ ├── add_sources.tcl
│ ├── mycpu_top_nodelay.sv:以下是项目头文件
│ ├── mycpu_top.sv
│ ├── SimTop.sv
│ └── VTop.sv
│── xpm_memory:Xilinx的内存IP
│── Makefile:仿真测试的命令汇总
│── readme.md: 此文件
Tips¶
- 记得用
git pull origin master
和git submodule update
确保已经更新为最新版本 - 请确保
verilator
测试运行在linux环境上 - 有问题可以先浏览一下slack和微信群中的消息记录,可能其他人也遇到过相似的问题
- PC的起始地址为
0x8000_0000
,也就是第一条指令所在的地址 - lab1指令访存和数据访存都会在当前周期就返回(lab1的访存没有延迟)
- 0号寄存器的值恒为零(感兴趣可以看regfile.sv中的实现)
- 指令是32位而数据、数据地址、指令地址都是64位
- 可以利用
$display
进行打印调试,比如always_ff @(posedge clk) begin $display("%x", pc); end
如何提问¶
我们非常愿意帮助大家高效解决问题,同时又希望大家能抓住每一次锻炼自己善用各种资源以及获得意外惊喜的机会。因此我们给出以下几点建议,更完整的部分可以在 提问的智慧 中仔细阅读:
- 请确保在有充足时间的情况下善用搜索引擎、网站资料以及交流平台等资源,看看是否其他人也遇到了类似的问题,并进行解决问题的尝试。
- 首先说明你所使用的平台以及版本,如 WSL / MacOS / Linux等。
- 用尽可能简短但是清晰的语言描述你所遇到的问题,从核心问题出发,补充说明需要的前置背景即可。
- 可以说明自己尝试过的搏斗,可能但是由于各种原因没有尝试的想法等,运用经验解决问题有时需要发挥想象力。
同时,我们非常欢迎同学们一起帮助陷入瓶颈的同学(助教也是过来人),帮助其他人排除障碍绝非浪费时间,而是一种教学相长!
一些题外话¶
- 我们不鼓励内卷,真心希望大家能通过这门课学习到计算机组成与体系结构相关的知识。
- 当然只要是学生就都会关心成绩,所以助教在此向大家声明,只要用心学,成绩一定不会差 :),敷衍了事者自是自食其果。
- 若有任何关于课堂或是课程的想法,都很欢迎联系老师或助教提出,slack / 微信 / 邮箱均可,我们会认真回复。
- 祝同学们这一学期过的充实愉快,学有所成~!