joe 发表于 2021-10-25 11:32:26

rocketchip高级参数化机制--Parameters.alterpartial(13)

class SubSystemConfig extends Config(
new MyConfig
//    alterPartial{ //类构造中不能使用偏函数
//    case BUSWIDTH => 16 //此处配置不起作用
//    case CHIPNAME => "RISC-V16" //此处配置不起作用
//}
// ++
//new JtagConfig //++
//new CacheConfig
)
object MainStart {
def main(args: Array): 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
case object CHIPNAME extends Field
case object IDECODERBUSWIDTH extends Field
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
}

joe 发表于 2021-10-25 11:36:42

val mymodule=new MyModule,在MyModule中println(buswidth)打印的值是默认Paramerters配置值即32
页: [1]
查看完整版本: rocketchip高级参数化机制--Parameters.alterpartial(13)