我正在研究RocketChip(RISC-V),我问是否有人可以解释这段代码。
class WithNCores(n: Int) extends Config((pname,site,here) => pname match {
case NTiles => n
case BuildTiles => {
List.tabulate(site(NTiles)){ i => (p: Parameters) =>
LazyModule(new RocketTile()(p.alterPartial({
case TileId => i
case TLId => "L1toL2"
case NUncachedTileLinkPorts => 1 + site(RoccNMemChannels)
})))
}
}
case _ => throw new CDEMatchError})
由于
答案 0 :(得分:2)
RocketChip使用这些配置对象将参数提供给生成器。 Config的参数是一个函数。 (pname, site, here)
是函数的参数。第一个参数pname是参数名称,它是函数确定请求的设置的方式。匹配语句pname match { case Foo => Bar }
正是这样做的。
顺便说一下,你似乎正在使用一个非常老版本的火箭芯片。我建议升级到最新版本。有关于如何使用参数系统的文档。