繁体   English   中英

如何在Rocket芯片中生成AHB memory端口

[英]How can I generate AHB memory port in Rocket chip

我正在尝试实现 Rocket 芯片 SoC 设计; SoC 设计默认会生成一个 AXI memory 端口。 但我想使用 AHB memory 端口,而 Rocket 芯片没有任何配置。 有人已经这样做了吗?

谢谢

subsystem/Ports.scala中的 AXI4MemPort 类似,总体思路是实例化 AHBSinkNode 并通过TLToAHB小部件连接到它。

trait CanHaveAhbMemPort { this: BaseSubsystem =>
  private val memPortParamsOpt = p(AhbExtMem) // could also add a parameter to switch between axi/ahb
  private val portName = "ahb"
  private val device = new MemoryDevice
  private val idBits = memPortParamsOpt.map(_.master.idBits).getOrElse(1)
  val memAhbNode = AHBSlaveSinkNode( memPortParamsOpt.map({ case MemoryPortParams(memPortParams, nMemoryChannels) =>
    Seq.tabulate(nMemoryChannels) { channel =>
      val base = AddressSet.misaligned(memPortParams.base, memPortParams.size)
      val filter = AddressSet(channel * mbus.blockBytes, ~((nMemoryChannels-1) * mbus.blockBytes))

    AHBSlavePortParameters(
      Seq(AHBSlaveParameters(
        address       = base.flatMap(_.intersect(filter)),
        resources     = device.reg,
        regionType    = RegionType.UNCACHED
        executable    = executable,
        supportsRead  = TransferSizes(1, memPortParams.beatBytes * AHBParameters.maxTransfer),
        supportsWrite = TransferSizes(1, memPortParams.beatBytes * AHBParameters.maxTransfer))),
        beatBytes  = memPortParams.beatBytes,
       lite = false)
    }
  }).toList.flatten)

  mbus.coupleTo(s"memory_controller_port_named_$portName") { 
    (memAhbNode 
      :*= TLToAHB()
      :*= TLWidthWidget(mbus.beatBytes)
      :*= _)
} 

注意:我还没有测试过这个。 这很有希望说明了如何使用 AHB 交换内存端口的一般思路。 就参数和小部件的使用而言,可能需要进行一些实验。 希望未来的答案或编辑此答案可以反映任何测试的结果或此转换的经验。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM