【问题标题】:How can RISC-V SYSTEM instructions be implemented as trap?RISC-V SYSTEM 指令如何实现为陷阱?
【发布时间】:2018-05-16 06:30:54
【问题描述】:

我目前正在研究 RISC-V 规范版本 2.2 和特权架构版本 1.10。在 RISC-V 规范的第 2 章中,提到“[...] 虽然一个简单的实现可能涵盖了 8 个 SCALL/SBREAK/CSRR* 指令和一个始终捕获 [...] 的单个 SYSTEM 硬件指令”

但是,当我查看特权规范时,MRET 指令也是一条 SYSTEM 指令,需要从陷阱中返回。现在我很困惑需要多少机器级 ISA:是否可以省略所有 M 级 CSR 并为任何 SYSTEM 指令使用软件处理程序,如规范中所述?如果是这样,如何传递返回地址和陷阱原因等信息?它们是通过常规寄存器 x1-x31 完成的吗?

或者,如果我的目标是一个只有 M 级权限的简单嵌入式内核,仅实现以下 M 级 CSR 就足够了吗?

mvendorid
marchid
mimpid
mhartid
misa
mscratch
mepc
mcause

最后,这些 CSR 有多少可以省略?

【问题讨论】:

  • 根据我的经验,最好是说“我什么都做”,而不是向每个客户解释,或者更糟糕的是,让竞争对手向您的客户解释您不做的事情做。但也许更了解企业社会责任的人可以提供帮助;这不是我做的事。
  • 听起来像是微码的替代品,将其完全从 CPU 中移出,用于存储在内存中的指令。 (除非内存在 CPU 内部,否则它基本上是一个微码 ROM。)

标签: exception interrupt cpu-architecture riscv


【解决方案1】:
  1. ECALL/EBREAK 指令无论如何都是陷阱。需要仔细解析 CSR 指令,以确保它们指定在允许模式下访问的现有寄存器,这听起来像是您最喜欢的稀疏矩阵的工作,无论是 PLA 还是 if/then。

  2. 您可以模拟所有 SYSTEM 指令,但是,如您所见,您需要能够访问硬件内部不属于正常 ISA 的信息。这意味着您需要添加“指令扩展”。

  3. 我还建议将 SYSTEM 指令设为原子指令,这意味着应在每条模拟指令中屏蔽或避免异常。

  4. 1234563内存区域。中断将被自动禁用。该模式将通过跳转到 epc+4 或非法指令处理程序来退出。为了安全起见,即使在 M 模式下,我也不希望 RISC-V 规范之外的任何内容可用。
  5. 根据我的经验,最好说“我什么都做”,而不是向每个客户解释,或者更糟糕的是,让竞争对手向您的客户解释您不做什么。但也许更了解企业社会责任的人可以提供帮助;这不是我做的事。

【讨论】:

  • 如果你有更多话要说,edit这个答案并添加更多段落。如果您想在一个答案中划分部分,可以选择使用--- 水平分隔符和/或### headlines 将它们分开。 不要将 3 个相关段落作为 3 个单独的答案发布。请将它们合并到此并删除其他帖子。
  • 我尽力了,但我的评论不会一直被删除。这只发生在我身上吗?
  • 您仍然可以看到自己已删除的帖子。 (拥有 10k 代表的用户也可以)。你所做的正是我所推荐的。 (尽管您的其中一个答案已被版主转换为评论;这就是为什么它也显示为对该问题的评论。您是说不能删除那个答案吗?)
  • 是的。 Mod Magic 超出了我的理解范围。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2018-11-22
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2017-01-22
相关资源
最近更新 更多