我正在尝试使用ROCC向RISC-V添加自定义指令,而我的基础是火箭芯片。 某些加速器需要将额外的IO添加到RoCCIO类中。 我试图理解附加IO的条件实例化,就像浮点单元& page table walker(PTW),我是Chisel& amp;斯卡拉对我来说非常神秘。
有人可以解释这段代码如何实现条件实例化:
class RoCCIO(outer: LazyRoCC)(implicit p: Parameters) extends RoCCCoreIO()(p) {
val ptw = Vec(p(RoccNPTWPorts), new TLBPTWIO)
val fpu_req = Decoupled(new FPInput)
val fpu_resp = Decoupled(new FPResult).flip
}
答案 0 :(得分:1)
这个问题可能更适合火箭芯片库,因此开发人员会看到它:https://github.com/freechipsproject/rocket-chip/issues
话虽如此,有几种方法可以在Chisel代码中有条件地实例化。
答案 1 :(得分:1)
你的RoCC的例子是使用死码消除(但是,你必须小心地将你不能使用的信号联系起来)。
您可以使用Option在IO包声明中执行条件实例化:
val a = if (cond) Some(UInt(width=5.W)) else None