chiselrocket-chip

How do I connect a client to an IdentityNode with two managers?


The PCIe overlay I'm attempting to invoke connects the two slave/manager nodes to a slaveSide IdentityNode like so:

  val slaveSide = TLIdentityNode()
  pcie.crossTLIn(pcie.slave)   := slaveSide
  pcie.crossTLIn(pcie.control) := slaveSide

How do I connect my client to both of these nodes? Would it be something like this?

slaveSide :*= myClient

What if I wanted one client for each manager? Is there a way outside of changing the overlay placing function?


Solution

  • Something like the following worked for this situation.

    // Assuming TLClient1 and TLClient2 have been declared. 
    
    val connectorNode = TLIdentityNode()
    
    connectorNode := TLClient1
    connectorNode := TLClient2
    
    slaveSide :=* connectorNode
    
    

    Since here the number of slaves and clients is equal

    slaveSide :*= connectorNode
    

    should be equally as valid.