如何将客户端连接到挂载两个manager的IdentityNode?单manager对应单客户端如何实现?
问题1:单客户端连接两个PCIe节点的写法是否可行
你给出的slaveSide :*= myClient写法是完全可行的。
TileLink中:*=运算符的语义是将右侧单端口节点的输出,扇出适配到左侧节点的所有输入端口。你当前的TLIdentityNode已经通过两条连接语句对外暴露了2个输出端口,分别对应PCIe的slave和control两个manager节点,单客户端通过:*=连接后,请求会自动根据地址路由到对应节点。
相关代码的连接逻辑完全符合TileLink节点绑定规则:
// 原有聚合逻辑 val slaveSide = TLIdentityNode() pcie.crossTLIn(pcie.slave) := slaveSide pcie.crossTLIn(pcie.control) := slaveSide // 你的单客户端连接逻辑,可正常运行 slaveSide :*= myClient
问题2:不修改overlay实现每个manager对应独立客户端的方案
完全有可行方案,不需要调整overlay的放置函数。
你不需要使用overlay中已经做了聚合的slaveSide节点,直接调用PCIe overlay对外暴露的两个独立manager节点分别绑定客户端即可,写法如下:
// 直接绑定客户端到对应的独立PCIe manager节点 pcie.crossTLIn(pcie.slave) := clientForSlave pcie.crossTLIn(pcie.control) := clientForControl
这种方式完全绕开了聚合用的slaveSide节点,两个客户端的请求互相隔离,分别对应各自的manager节点,无需修改overlay原有代码。
内容的提问来源于stack exchange,提问作者metzkorn
相关产品推荐
相关产品推荐

