请选择 进入手机版 | 继续访问电脑版

risc-v中文社区

 找回密码
 立即注册
查看: 1424|回复: 2

[原创] rocketchip高级参数化机制--必看--终极Config调试实验(12)

  [复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-10-21 10:08:24 | 显示全部楼层 |阅读模式
完全模拟rocket chip设计中参数配置代码:

/**
  * @Author Joe_Liang
  * @Date 2021/10/21 8:21
  * @Version 1.0
  */
//SubSystemConfig.scala 总配置
class SubSystemConfig extends Config(
  new MyConfig ++
  new JtagConfig ++
  new CacheConfig
)

//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)
}

//JtagModule.scala文件
case object JtagBUSWIDTH extends Field[Int]
class JtagConfig extends Config((site,here,up) => {
  case BUSWIDTH => 10
  case JtagBUSWIDTH => 2 * here(BUSWIDTH)
})
class JtagModule (implicit p: Parameters){
  val jtagbuswidth = p(JtagBUSWIDTH)
  println("JtagModule:jtagbuswidth " + jtagbuswidth)
}

//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 => site(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 mymodule = new MyModule{p.alterPartial({
    case BUSWIDTH => 16
    case CHIPNAME => "RISC-V16"
  })}
  println("mymodule " + mymodule.buswidth)
  println("mymodule " + mymodule.chipname)
  val np = p.alter((site,here,up) => {
    case IDECODERBUSWIDTH => 1285
  })
  val idecoder = new IDecoderModule{np}
}

//IDecoderModule.scala文件
class IDecoderModule(implicit p: Parameters) {
  val decoderbuswidth :Int= p(IDECODERBUSWIDTH)
  val name = p(CHIPNAME)
  val buswidth:Int = p(BUSWIDTH)
  val myidecoderherewidth = 20 * buswidth  
  println("IDecoderModule:decoderbuswidth " + decoderbuswidth)
  println("IDecoderModule:name " + name)
  println("IDecoderModule:myidecoderherewidth " + decoderbuswidth)
}

//MainStart.scala文件
object MainStart {
  def main(args: Array[String]): Unit = {
    implicit val sysconfig = new SubSystemConfig
    val jm = new JtagModule()
    val idm = new IDecoderModule()
    val cm2 = new CacheModule()
  }
}
实验显示如下:
JtagModule:jtagbuswidth 20
IDecoderModule:decoderbuswidth 32
IDecoderModule:name RISC-V
IDecoderModule:myidecoderherewidth 32
CacheModule 32
CacheModule RISC-V
32
RISC-V
mymodule 32
mymodule RISC-V
IDecoderModule:decoderbuswidth 32
IDecoderModule:name RISC-V
IDecoderModule:myidecoderherewidth 32

回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-10-21 10:10:33 | 显示全部楼层
如何CacheModule.scala中修改如下:
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
  }
})

其它所有代码都不变,则显示如下:
JtagModule:jtagbuswidth 20
IDecoderModule:decoderbuswidth 164
IDecoderModule:name RISC-V
IDecoderModule:myidecoderherewidth 164
CacheModule 32
CacheModule RISC-V
32
RISC-V
mymodule 32
mymodule RISC-V
IDecoderModule:decoderbuswidth 164
IDecoderModule:name RISC-V
IDecoderModule:myidecoderherewidth 164

回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-10-21 10:37:42 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-3-28 20:57 , Processed in 0.015416 second(s), 18 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表