riscv - 我怎样才能找到一些关于火箭芯片的手册?
问题描述
我正在学习火箭芯片的代码。但是由于关系复杂,我发现它的代码很难阅读。所以我需要一些 maunal 来帮助我。不幸的是,似乎很少有关于它的手册。那么谁能给我提供有助于阅读火箭芯片代码的手册?
解决方案
使用 Rocket-Chip 需要您非常了解以下内容:
外交——Rocket-Chip 如何实现外交框架,该框架用于在电路细化期间协商参数并通过芯片传播它们。看看亨利库克的博士学位。加州大学伯克利分校的论文了解这方面的背景,或者更好的会议演讲。
TileLink——特别是 Rocket-Chip 使用 Chisel 实现 TileLink 规范的方式
Scala 中的函数式编程——Rocket-Chip 代码库广泛使用了 Scala 语言特性,例如案例类、模式匹配、高阶函数、部分函数、匿名函数、特征混合等。因此,您将看到诸如使用 map 函数定义的重要变量、与 case 语句进行模式匹配、使用隐式参数等您无法找到甚至在编写代码时无法确定的内容。
凿子——特别是用于制作电路元件的数据类型和构造函数。凿子是最容易的部分。
我不知道任何类型的手册,但这里有一些东西可以帮助您理解架构:
- 绘制对象层次结构的图片——对象层次结构可以有 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 框架或凿子测试规范来询问有关事物如何构建的离散问题。这将帮助您确定各个变量、对象或配置的属性,但您首先需要具备大量的结构知识,然后才能预期您要测试的每个值应该是什么。这首先需要很多上述内容。
推荐阅读
- python - 将字符串转换为字典
- tcl - 错误:无法重命名为“tmp_read_command”:命令已存在
- python - GitLab runner,推送错误,而同样的事情在控制台上的 git bash 或 python 上工作
- c# - 如何在 C# 中创建“递归”文件夹和子文件夹
- django - Django:无法运行 gunicorn
- c# - 第二类的方法不想在主类中工作
- android - android 的 Messenger IPC 已过时或无法正常工作
- python - psycopg2 连接到 postgresql 数据库 - 错误
- ios - 构建消息错误时的 ARC 弱引用
- python - 基于另一列创建新列