问题标签 [rocket-chip]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux-kernel - 在 Rocket Chip 模拟器上启动 Linux 内核
我正在尝试使用DefaultConfig配置在生成的 Rocket Chip 模拟器中启动 Linux 内核。
我正在按照RISCV 工具库 wiki中显示的步骤进行操作,并且我已经能够通过以下方式在 ISA 模拟器上成功构建和启动 Linux内核:
- 编译
riscv64-unknown-linux-gcc
交叉编译器。 - 构建 Linux 内核 4.6(在riscv-linux 存储库中找到 RISC-V 风格)
- 重建
bbl
引导加载程序,将其指向已构建的vmlinux
映像(--with-payload
选项)。
但是,当尝试在由默认配置文件生成的 Rocket Chip 模拟器中运行这个相同bbl
的引导加载程序时,内核不会启动,但进程会继续旋转,就好像它陷入了无限循环一样。没有给出信息性消息或错误,它只消耗 100% 的 CPU,直到被Ctrl-C
击键杀死(在等待相当长的时间之后)。
我相信我生成的 Rocket Chip 模拟器是正确的,因为我能够通过代理内核(pk)甚至裸机运行交叉编译的程序而没有任何问题。此外,所有测试和基准测试均通过(make run-asm-tests
和make run-bmark-tests
)。
我无法找到任何人在芯片仿真器(大多数使用 FPGA)中启动内核的明确文档,此时我怀疑它是否可能。
有没有人能够在模拟器中实现它?我错过了任何步骤吗?任何提示表示赞赏。
riscv - 学习凿子——理解火箭芯片代码的高级示例
RISC-V 的伯克利实现称为 Rocket Chip,它是用一种称为 Chisel 的硬件语言编写的。Chisel 是面向对象的,我们团队的人很难学会有效地修改 Rocket Chip 代码。
我们为 Chisel 创建了这个学习之旅,非常棒。它从基础开始,包括 Scala 的相关部分,并以从 Sodor 和 Rocket Chip 代码中获取的一系列高级示例结束,所有这些都带有动手练习:
http://learningjourney.intensivate.com
我们已向社区开放以供贡献,但似乎应该有其他好地方来解释 Rocket Chip 代码中使用的高级 Chisel 编码实践。有人有链接吗?
fpga - 配置火箭芯片
我想在不使用 ROCC(arm 协处理器)的情况下基于火箭芯片构建自己的 SOC。我检查了这个有用的问题:rocket chip on non zynq FPGA 我查找了一些详细的文档,但我只找到了几张描述配置的幻灯片,没有实际的教程。因此,我对下图有三个问题:
- 我设法为 tinyConfig 生成了整体 verilog,但是否可以只生成 Rocket Chip、HostIO/AXI 转换器和 MemIO/AXIHP 转换器?如果是的话怎么办?
- 火箭芯片生成器可以添加调试接口吗?
- 我在哪里可以更改特定 FPGA 供应商的 RAM 在 Rocket chaip 中使用的 RAM?
riscv - Rocketchip(riscv)加速器性能评估
我已经使用 Rocc 在 Rocket 芯片生成器上实现了加速器。如何计算加速器的性能并与 C 实现进行比较。我已经编写了 C 实现并将周期计算为“Cycle = End - Begin”。end 和 begin 调用 read_csr(mcycle)。我通过阅读 RISCV-test github 中的 dhrystone.h 来使用它。这是计算周期的正确方法吗?
我正在考虑将这种技术用于加速器和 C 实现。我可以为此目的使用 CSR。
riscv - 火箭芯片仿真显示意外指令数
以下两个代码片段仅在加载到 x23 寄存器中的值不同,但minstret
指令计数(由 Rocket 芯片的 Verilator 模拟报告)有很大不同。这是一个错误,还是我做错了什么?
该read_csr()
函数来自 RISC-V 前端服务器库 ( https://github.com/riscv/riscv-fesvr/blob/master/fesvr/encoding.h ),其余代码 [syscalls.c, crt. S, test.ld] 类似于 RISC-V 基准测试 ( https://github.com/riscv/riscv-tests/tree/master/benchmarks/common )。
我检查了编译后的二进制文件是否包含完全相同的指令,除了操作数的不同。
0x0fffffff 除以 0xff,重复 1024 次:3260 条指令。
0x0fffffff除以0xffff,重复1024次:3083条指令。
在这里,3083 条指令似乎是正确的 (1024 * 3 = 3072)。由于minstret
计算了退役指令,第一个示例执行了大约 200 条指令似乎很奇怪。无论我运行这两个程序多少次,这些结果总是相同的。
riscv - 如何监测火箭芯的性能?
在火箭/RocketCore.scala
存在描述缓存未命中、加载或存储的性能计数器。
火箭核心完成运行后如何查看此信息?
你能给我一个如何做到这一点的例子吗?
据我所知,本指南中没有任何内容。
riscv - 如何为 RISC-V Rocket-Chip 创建 SystemC 代码?
使用 Rocket-Chip 生成器,我可以使用 Verilator 的内置版本创建 Verilog 输出和 C++ 仿真器。
我想使用 Verilator 使用默认配置 Verilog 输出生成 SystemC 代码,但出现错误。
我正在使用简单的命令行;
验证器 -Wall -sc freechips.rocketchip.system.DefaultConfig.v
并看到像这样的错误;
找不到包含模块的文件:AsyncResetReg 这可能是因为没有使用 -I 指定的搜索路径。找不到包含模块的文件:plusarg_reader ...
有没有人这样做或知道我错过了什么?(包括路径?)
谢谢
riscv - 火箭芯片指令跟踪列
当我make run-asm-tests
在rocket-chip的emulator
目录中运行时,我在目录中得到了一堆*.out
文件emulator/output
。这些似乎是指令跟踪,但列没有标记。我想知道这些列中的每一个是什么意思。谢谢!
例如:
memory - 双端口存储器
我已经设法让 Chisel 使用正确使用 SeqMem() 实例的硬内存宏,但它们仅用于单端口内存。
有没有办法让 Chisel 推断出双端口内存宏?
linux - 哪个 Linux 实体负责生成非法指令陷阱?
我正在开发一个自定义版本的 Rocket Chip,其中包含一些我希望 Linux 正确处理的额外指令。尽管使用这些指令的裸机程序运行良好,但 Linux 使相同的基准测试因“非法指令”消息而崩溃。
有谁知道 Linux 的哪个软件元素——加载程序、反汇编程序、其他东西——负责检测非法指令?
我的目标是修改那个软件,让 Linux 不再抱怨我的指令。如果有人知道一种更简单的方法来抑制这种错误,那也将非常有用。