Risc-V CPU 编写 0x01

首先我们来了解下CPU的架构。

为了直到要设计出什么样的架构,必须先确定CPU的需求。我希望这个CPU能够直接运行 Risc-V 工具链从 C 编译出的可执行程序(elf文件)。那么我们必须支持RV32I的指令集,同时编写一个初始化程序,可以是内置在CPU的一段bootloader。我决定让我的CPU支持官方的riscv-tests(https://github.com/riscv/riscv-tests)。因此我会将它添加到我的github上面的submodule里面。同样,riscv-gnu-toolchain 和 verilator 也会添加到submodule里面。至于能不能下载编译成功,还要看github的访问速度了。

好的,现在我们明确了CPU所要支持的测试。接下来确定下 CPU 需要额外支持的功能。

我希望能够让CPU具有一条总线,来连接类似于 RAM,ROM,GPIO,SPI,UART等等的外设。首先写的是一个单周期的版本(非流水线)。

关于一些更复杂的东西可以参考:

Risc-V CPU 编写 0x00

这又是一个新的系列,具体内容是写出一个(多个)risc-v 指令集的 CPU 。具体技术选择使用 chisel 来编写,仿真优先使用 varilator ,最后板级调试优先使用 openocd 。具体流程为先写一个简单的单周期 CPU (支持有限的指令),而后重新编写一个5级流水线、能够移植linux,并且能够板级调试,最好能够实现双发射,并且能够运行 Risc-V 官方的测试程序的一个完整的 CPU ,如果还有时间可能尝试实现用户态与内核态的切换。

首先,毫无疑问应该准备好 chisel 的相关知识。它是基于 scala 语言扩展而来,能够编译出完全可综合的代码。因此首先应该学会 scala 和 chisel。链接如下,较为详细。

之后就应该配置相应的工具链了。由于是开发同时写博客,不能提前预知需要的工具,故这一节可能随时更新。

推荐使用 linux 系统, windows 不提供任何帮助与支持。(最好是 arch 哈哈哈)。

首先安装 java,我用的是 jdk15,其次要安装 scala,确保 scalac 和 scala 命令好用。之后安装chisel,sbt,firrtl,verilator,我用的都是软件源里最新的版本,直接跟着滚就行,喜欢用最新的版本。

之后要测试工具链。具体过程就省略了,随便查查都有的。

这一项目的地址是:

单周期:https://github.com/dupeiran001/SC_RiscV