首页 > 解决方案 > 我怎样才能找到一些关于火箭芯片的手册?

问题描述

我正在学习火箭芯片的代码。但是由于关系复杂,我发现它的代码很难阅读。所以我需要一些 maunal 来帮助我。不幸的是,似乎很少有关于它的手册。那么谁能给我提供有助于阅读火箭芯片代码的手册?

标签: riscvchiselrocket-chip

解决方案


使用 Rocket-Chip 需要您非常了解以下内容:

  1. 外交——Rocket-Chip 如何实现外交框架,该框架用于在电路细化期间协商参数并通过芯片传播它们。看看亨利库克的博士学位。加州大学伯克利分校的论文了解这方面的背景,或者更好的会议演讲

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

  3. Scala 中的函数式编程——Rocket-Chip 代码库广泛使用了 Scala 语言特性,例如案例类、模式匹配、高阶函数、部分函数、匿名函数、特征混合等。因此,您将看到诸如使用 map 函数定义的重要变量、与 case 语句进行模式匹配、使用隐式参数等您无法找到甚至在编写代码时无法确定的内容。

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

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

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

推荐阅读