在chiesl(RocketChip)建筑瓷砖

时间:2017-08-31 12:50:51

标签: scala riscv chisel

我正在研究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})  
  1. 什么是(pname,site,here)?它的作用是什么?
  2. 这是什么意思(pname,site,here)=> pname match {...}
  3. 由于

1 个答案:

答案 0 :(得分:2)

RocketChip使用这些配置对象将参数提供给生成器。 Config的参数是一个函数。 (pname, site, here)是函数的参数。第一个参数pname是参数名称,它是函数确定请求的设置的方式。匹配语句pname match { case Foo => Bar }正是这样做的。

顺便说一下,你似乎正在使用一个非常老版本的火箭芯片。我建议升级到最新版本。有关于如何使用参数系统的文档。

https://github.com/freechipsproject/rocket-chip