![](/img/trans.png)
[英]How to connect AHB port to DRAM controller device using Diplomacy
[英]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.