我怎样才能找到一些关于火箭芯片的手册?

How can I find some manuals about rocket-chip?

我正在学习rocket-chip的代码。但由于关系复杂,我觉得很难阅读它的代码。所以我需要一些 maunal 来帮助我。不幸的是,关于它的手册似乎很少。那么谁能给我提供一些有利于阅读rocket-chip代码的手册呢?

我建议您看看 chisel3。 Rocket-Chip RISCV核心就是写在这里面的。我在下面添加了几个 link 来帮助您入门: Chisel_Homepage,Chisel_Github,Chisel_Tutorial.

还有一个 RISCV mini,它是为了学习目的而组合在一起的三阶段 riscv。在下面可用,但不确定它的最新情况。

当您对 FPGA 感到满意时,可能还值得看一下 FPGA 上的一些示例项目,Microsemi 是 Microchip 的一家公司,它有一系列 RISC-V 内核和与之配套的生态系统。我也会 link 下面的 MiV 生态系统。3_Stage_RISCV_mini,MIV_ECOSYSTEM。 希望这可以帮助, 夏兰

使用 Rocket-Chip 需要您真正了解以下内容:

  1. Diplomacy -- Rocket-Chip 如何实现用于在电路细化期间协商参数并通过芯片传播它们的 Diplomacy 框架。看看 Henry Cook 的 Ph.D。 U.C 的论文。伯克利了解这方面的背景,或者更好的会议讨论 for instance.

  2. TileLink -- 特别是 Rocket-Chip 使用 Chisel 实现 TileLink 规范的方式

  3. Scala 中的函数式编程 -- Rocket-Chip 代码库广泛使用了 Scala 语言特性,例如 case classes 、模式匹配、higher-order 函数、部分函数、匿名函数、特征 mix-ins 等。所以你会看到一些东西,比如用映射函数定义的重要变量,pattern-matched 到 case 语句,使用隐式参数,你无法找到,甚至在 code-writing 时间无法确定。

  4. Chisel -- 特别是用于制作电路元件的数据类型和构造函数。凿子是最简单的部分。

我不知道任何类型的手册,但这里有一些内容可以帮助您理解架构:

  • 绘制 object 层次结构的图片 -- object 层次结构可以有 10 到 12 层深,并且有超过一千个相关 classes 和 objects 了解(就在 Rocket-Chip 的 src/main/scala 文件夹中,grep -rn "class" | wc -l returns 1126,grep -rn "object" | wc -l returns 533,和 grep -rn "trait" | wc -l returns 196)。几乎没有任何评论,因此您需要查看每个 class、object 和 trait 是如何使用的。按住 Ctrl 并单击以跟随 superclass(显示 extends RocketSubsystemModuleImp 的位置),并绘制出 class 层次结构。这将帮助您建立 big-picture 行为来源意识。
  • 使用 IntelliJ 的结构面板——这可以帮助您牢记最相关的 object、class 及其变量,在至少对于您打开的给定文件。
  • 查找用法 -- 再次在 IntelliJ 中,Ctrl+悬停在 class 上以查看悬停 window 表示 "show uses for BlahBlahBlah" .按住 Ctrl 并单击它,然后浏览到使用它的不同地方。
  • 使用 grep 和查找 -- 如果您遇到不熟悉的模式或构造,请在整个代码库中搜索该模式以查看其使用方式。
  • 打破它,然后修复它 -- 如果您使用的是 IntelliJ,请删除导入语句后的 ._,并将其替换为确切的 class正在导入的 es。要找到那些 classes,您可以注释掉整行,然后查看中断的地方(如下面有红色波浪线的地方)。然后替换该行,然后按住 Ctrl 键并单击断开的 class 或构造函数,以跟随每个行到它在代码中实现的位置。阅读源代码以确定参数及其工作原理。
// import freechips.rocketchip.tilelink._ 
// change to:
import freechips.rocketchip.tilelink.{TLToAXI4, TLToAHB}
  • Debug -- 我会说调试,所以你可以看到 objects 在运行时是如何结合在一起的,但我不知道如何由于电路通过 Makefile、脚本和 sbt 进行了详细说明,而不仅仅是通过 sbt,因此获得该信息。
  • 编写测试 -- 使用 scalatest 框架或 chisel 测试规范来询问有关如何构建事物的离散问题。这将帮助您确定单个变量、object 或配置的属性,但您首先需要具备大量的结构知识,然后期望您要针对 [=28= 测试的每个值]应该是。这首先需要很多上述内容。