【发布时间】:2019-11-11 17:55:34
【问题描述】:
我正在学习 chisel 和 scala 语言,并尝试分析一些火箭芯片代码行。有人能解释一下吗? https://github.com/chipsalliance/rocket-chip/blob/54237b5602a273378e3b35307bb47eb1e58cb9fb/src/main/scala/rocket/RocketCore.scala#L957
我了解 log2Up 函数在做什么,但不明白为什么 log2Up(n)-1 和 0 像“参数”一样传递给 UInt 类型的 val 的 addr!?
【问题讨论】:
-
这就是您在 chisel 中执行位切片的方式。它调用 UInt 上的 apply 函数(带有两个整数参数的变体,即上限和下限),并且基本上会给您 addr 的 n 个最低有效位。
-
另一个可能有用的提示是,由于寄存器 0 在 RISC-V ISA 中被硬编码为 0,Rocket 的寄存器文件使用了一个小技巧,与 RISC 相比,它在物理上颠倒了寄存器的顺序-V 规格。
x1是rf中的索引 31,而x31是索引 0。
标签: scala chisel rocket-chip