gpt4 book ai didi

chisel - 如何向火箭芯片外设添加 sbus 主控

转载 作者:行者123 更新时间:2023-12-02 06:41:48 29 4
gpt4 key购买 nike

我正在尝试在火箭芯片上实现类似 DMA 的外围设备。意思是连接到 pbus 并由寄存器控制的模块。它还有一个连接到 sbus 的主设备。

我关注了sifive格式连接寄存器控制的外围设备没有任何问题。我的问题是如何添加 sbus master ?,下面是我在进入死胡同之前尝试过的方法。

在附加参数类中,我添加了 sbus:

case class dmaAttachParams(
dma : dmaParams,
controlBus: TLBusWrapper,
masterBus : TLBusWrapper, // <-- my addition
....
) (implicit val p: Parameters)

然后我修改了工厂对象中的attach方法:

def attach(params: dmaAttachParams): TLdma = {
implicit val p = params.p
val name = s"dma_${nextId()}"
val cbus = params.controlBus
val mbus = params.masterBus // <- my addition
val dma = LazyModule(new TLdma(params.dma))
dma.suggestName(name)

cbus.coupleTo(s"slave_named_name") {
dma.controlXing(params.controlXType) := TLFragmenter(cbus.beatBytes, cbus.blockBytes) := _
}

InModuleBody { dma.module.clock := params.mclock.map(_.getWrappedValue).getOrElse(cbus.module.clock) }
InModuleBody { dma.module.reset := params.mreset.map(_.getWrappedValue).getOrElse(cbus.module.reset) }

// this section is my problem // <-- this section is my addition
mbus.from(s"master_named_name") {
mbus.inwardNode := TLBuffer() := dma.mnode // <- what should i do here ???
}
dma
}

mndoe 是我添加到 dma 类的一个节点,如下所示:

val mnode = TLClientNode(Seq(TLClientPortParameters(Seq(TLClientParameters(name = "dmaSbusMaster")))))

完成这项工作的 mbus.from() 方法的主体应该是什么?尝试构建此代码会出现此错误:

Caused by: java.lang.IllegalArgumentException: requirement failed: buffer.node (A adapter node with parent buffer inside coupler_from_master_named_name) has 1 inputs and 0 outputs; they must match (Buffer.scala:69:28)

任何帮助将不胜感激,在火箭芯片 github 问题论坛中,他们不再回答支持问题。因此,如果那里的人可以在这里回答那就太好了,因为我真的被困在这里了。

附注只需添加调用 Attach 方法的方式即可:

 trait HasPeripheryDma { this: BaseSubsystem =>
val dmaNodes = p(PeripheryDmaKey).map { ps =>
dma.attach(dmaAttachParams(ps, pbus, sbus))
}
}

更新:

实现 mbus.from() 方法的主体如下:

mbus.from(s"master_named_name") {
mbus.inwardNode := TLBuffer(BufferParams.default) := dma.mnode
}

确实从 SBUS 上的 DMA 创建耦合器,但它未连接到 DMA 外设。有什么想法吗?

最佳答案

我不明白你的“更新”出了什么问题,但这应该有效:

mbus.coupleFrom("master_named_dma") {
_ := TLBuffer(BufferParams.default) := dma.mnode
}

关于chisel - 如何向火箭芯片外设添加 sbus 主控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52142504/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com