|
class SubSystemConfig extends Config(
new MyConfig
// alterPartial{ //类构造中不能使用偏函数
// case BUSWIDTH => 16 //此处配置不起作用
// case CHIPNAME => "RISC-V16" //此处配置不起作用
// }
// ++
// new JtagConfig //++
// new CacheConfig
)
object MainStart {
def main(args: Array[String]): Unit = {
implicit val sysconfig = new SubSystemConfig
val cm2 = new CacheModule()
}
}
//MyModule.scala
class MyConfig extends Config((v1,v2,v3)=>{
case BUSWIDTH => 32
case CHIPNAME => "RISC-V"
})
class MyModule(implicit p: Parameters) {
val buswidth:Int = p(BUSWIDTH)
val chipname:String = p(CHIPNAME)
println(buswidth)
println(chipname)
}
//CacheModule.scala
case object BUSWIDTH extends Field[Int]
case object CHIPNAME extends Field[String]
case object IDECODERBUSWIDTH extends Field[Int]
class CacheConfig extends Config((site,here,up) => {
case BUSWIDTH => 64
case CHIPNAME => "RISC-V64"
case IDECODERBUSWIDTH => here(CHIPNAME) match {
case "RISC-V64" => 164
case _ => 32
}
})
class CacheModule(implicit p: Parameters){
val buswidth:Int = p(BUSWIDTH)
val name = p(CHIPNAME)
println("CacheModule " + buswidth)
println("CacheModule " + name)
val mmp = p.alterPartial({
case BUSWIDTH => 16
case CHIPNAME => "RISC-V16"
})
val mymodule = new MyModule{mmp} //此mmp配置不起作用 ,所以本句其实可以写成 val mymodule = new MyModule
println("mymodule " + mymodule.buswidth) //32
println("mymodule " + mymodule.chipname) //RSIC-V
println(mmp(BUSWIDTH)) //注意此时配置值才会是16
}
|
|