扩展 RocketChip 寄存器
Extending RocketChip register
是否可以扩展 RocketChip 中可用的寄存器集?如果是这样,我该怎么做?
我正在尝试添加一条新指令,该指令能够将数据从现有的 RISCV 寄存器移动到一组扩展的寄存器。
可能吗? Rocket-chip 和相应的 RISC-V 工具链是免费和开源的,所以是的,您当然可以根据自己的喜好修改它(当然也没有什么技术可以阻止您这样做)。
但是,这将是一个庞大的项目,涉及很多东西,因此您必须逐个分析每个部分。关于 ISA,您必须从:
1) 学习如何向 GNU 汇编器 "gas" 添加指令。
这将比正常情况下更难,因为您正在尝试添加一整套新的寄存器(而不是扩展现有的整数集或浮点集)。我可能会先看看向量寄存器是如何被处理的。
2) 一旦您可以生成满足您要求的汇编代码,您就需要修改 spike ISA 模拟器来执行和测试您的程序。这很简单 - 但您必须盯着代码库看一会儿,并学习如何向其添加新指令(请参阅 riscv.org 讨论如何添加自定义指令和加速器以达到峰值)。
3) 一旦您可以生成代码并在 ISA 模拟器上对其进行测试,那么您就可以继续破解 Rocket-chip 本身。火箭核心是一个相对直接的 5 级有序流水线,因此您可以自行发挥创造力,决定如何向其添加新的寄存器组。查看浮点单元代码和浮点寄存器文件以获取灵感。
但我是一个 gcc 人,也许你的冒险在 llvm 中会更容易?
是否可以扩展 RocketChip 中可用的寄存器集?如果是这样,我该怎么做? 我正在尝试添加一条新指令,该指令能够将数据从现有的 RISCV 寄存器移动到一组扩展的寄存器。
可能吗? Rocket-chip 和相应的 RISC-V 工具链是免费和开源的,所以是的,您当然可以根据自己的喜好修改它(当然也没有什么技术可以阻止您这样做)。
但是,这将是一个庞大的项目,涉及很多东西,因此您必须逐个分析每个部分。关于 ISA,您必须从:
1) 学习如何向 GNU 汇编器 "gas" 添加指令。
这将比正常情况下更难,因为您正在尝试添加一整套新的寄存器(而不是扩展现有的整数集或浮点集)。我可能会先看看向量寄存器是如何被处理的。
2) 一旦您可以生成满足您要求的汇编代码,您就需要修改 spike ISA 模拟器来执行和测试您的程序。这很简单 - 但您必须盯着代码库看一会儿,并学习如何向其添加新指令(请参阅 riscv.org 讨论如何添加自定义指令和加速器以达到峰值)。
3) 一旦您可以生成代码并在 ISA 模拟器上对其进行测试,那么您就可以继续破解 Rocket-chip 本身。火箭核心是一个相对直接的 5 级有序流水线,因此您可以自行发挥创造力,决定如何向其添加新的寄存器组。查看浮点单元代码和浮点寄存器文件以获取灵感。
但我是一个 gcc 人,也许你的冒险在 llvm 中会更容易?