如何找到 PLIC 上下文的数量?

Jen*_*ens 8 chisel rocket-chip riscv32

我是一名软件开发人员,试图了解 RISC-V 平台级中断控制器 (PLIC) 的配置,该控制器位于 FPGA 中火箭芯片衍生的 SoC 中。如果我的术语有问题,请纠正我。

我正在尝试在热启动后以编程方式配置 PLIC,特别是清除中断挂起位。我读过RISC-V PLIC 规范,其中谈到最多 15872 个上下文。虽然我当然可以迭代所有上下文,每个上下文有 1024 个中断,但我希望更加经济。

在哪里可以找到上下文的实际数量?对于所有火箭芯片设计来说它都是恒定的吗?它是一个可调值吗?应该问 FPGA 同事什么问题?他们使用凿子,我认为这是某种设计语言或工具。

Mat*_*one 3

澄清术语:什么是 hart 上下文?

我们使用术语hart来明确而简洁地描述硬件线程,而不是软件管理的线程上下文。

RISCV 规范允许最多 15872 个上下文,但实际上您会看到的上下文要少得多 - 实际数量由每个特定的 RISCV 实现设置。它可以在火箭芯片中进行定制,因此可能会有所不同。默认配置可能会提供更多见解,但您的特定配置可以是任何内容。

你的问题:

上下文从哪里来?在哪里可以找到上下文总数?

您可以从实现细节中推测该数字应该是多少,但据我所知,没有寄存器表明可能有多少个上下文。这将是特定于实现的。最好的选择是查看您的火箭芯片配置。

来自 Linux核心文档

hart 上下文是硬件执行线程中的特权模式。例如,在具有 2 路SMT的 4 核系统中,您有 8 个 HART,每个 HART 可能至少有两种特权模式;机器模式和管理员模式。

这意味着在这种情况下您将有 16 个上下文(4 核 x 2 线程 x 2 特权模式)。

这个问题

PLIC 上下文与hart的可中断特权模式是 1:1。(例如,如果您有 3 个 HART,每个 HART 都支持将中断引入 M 模式和 S 模式,那么您就有 6 个上下文。)

在这种情况下,M模式和S模式是特权模式。

是否有 Scala/Chisel/VHDL 代码行用于 grep 获取上下文数量?

不。您可能能做的最好的事情就是在火箭芯片配置中找到相关值并找出它应该是什么。或者询问团队中具有丰富 RISCV 经验的人,这个数字应该是多少。没有存储上下文总数的寄存器。

对于所有火箭芯片设计来说它都是恒定的吗?

不会。设计可以指定任意数量的硬件或用户模式。这是特定于实现的,火箭芯片不强制执行任何特定值。

它是一个可调值吗?

是的。规范提到了max,但实际上它可以是<=该规范的任何数字。

应该问 FPGA 同事什么问题?

询问他们期望的最大上下文数量是多少。如果他们不知道,请询问他们您的实现中有多少个硬件,以及有多少个用户模式。然后将两者相乘。

更多资源

RISCV 维基百科页面
官方 RISCV 规范
RISCV PLIC 规范
Rocket-chip 文档
Chisel 文档