LA 挑战赛:龙芯杯团体赛总结
时间线
以下时间线根据仓库 commit 来写:
- 4 月 1 号,开始建立仓库并搭建开发环境
- 5 月中旬,完成了绝大部分指令,接入 chiplab
- 6 月初,开始做 cache
- 6 月中旬,成功通过 rtthread 等测试程序
- 7 月 1 号,经过不断地 debug,终于在 chiplab 仿真环境中启动 linux
- 7 月 24 号,成功在fpga 下板启动 linux
- 7 月 27 号,重构微架构,但失败
- 7 月 30 号,重构微架构,成功下板启动 linux
- 8 月 5 号,加上分支预测器,初赛提交代码
- 8 月 18 号,完善最后的代码,
- 8 月 20 号,提交决赛包
投入总时长大约 600 h
CPU 的缺陷
- cache 访问需要 2 个周期,浪费一个周期,IPC 上限为 0.5
- 关键路径延迟太高,频率只能达到 40M
- cache 用 LUTRAM 实现,延迟高
- tlb 也是单周期访问,延迟高
- 分支预测惩罚高,没有时间优化
- 指令缓存没优化,有大量冗余信号
- reg 用的太多,没考虑优化
- MEM 设置太复杂,增加延迟
- load_use 太浪费时钟周期,相关解决办法待改进
分数
性能分只有 0.6 左右(30M 的 Openla500 为 1),提升潜力巨大。
评价
一个带分支预测的双 cache CPU 核,能启动 linux_kernel,拿到了国三奖,感觉提升潜力巨大。
展望
如果有时间,明年再次参加一次龙芯杯,这次的目标是 100M + 多发射乱序 + 优化的分支预测器 + L2cache,希望能达到这个目标。
LA 挑战赛:龙芯杯团体赛总结
http://blog.luliang.online/2025/08/26/LA挑战赛12/