Hi, I am quite new to Chipyard. I have a hardware message queue module implemented as a tightly-coupled RoCC accelerator (i.e. extends LazyRocc and LazyRoccModule class). This module receives instruction from the rocket core and performs some operations. My base design has 4 of such modules, which I want to exchange data with each other over the system bus. What is the best way to achieve a direct connection from each module to the system bus and have all four modules talk to each other? I added a client and manager tilelink interface to each module. What should I consider in establishing this connection if using this interface? I specified my connection like this in my src file.
// This trait connects the rocc modules to the system bus
trait CanHaveROCCMODULEBlocks { this: BaseSubsystem =>
private val systemBus = locateTLBusWrapper(SBUS)
private val roccModules = p(BuildRoCC).collect { case s: ROCCMODULE => s }
roccModules.zipWithIndex.foreach { case (roccmodule, index) =>
val baseAddress = 0x20000000L + index * 0x1000L // Unique base address
roccmodule.setBaseAddress(baseAddress) // Set the base address
systemBus.coupleTo(s"roccmodule_manager_${index}") { bus =>
roccmodule.tlManagerNode := TLBuffer() := bus
}
systemBus.coupleFrom(s"roccmodule_client_${index}") { bus =>
bus := TLBuffer() := roccmodule.tlClientNode
}
}
}
Should I use something else? Any example implementation or resource you can point me to will be greatly appreciated.
Best Regards,
Johnson