joe 发表于 2021-10-26 15:14:49

diplomacy协商之后信号指定连接问题

object xxx extends SimpleNodeImp{
    def edge(...){...}
    def bundle(e:EdgeParam):UInt= ...
}
class NodeA(pds:Seq)(implicit valName:ValName) extends SourceNode(协商实现类,是一个object xxx extends SimpleNodeImp)(pds)
class NodeB(dFn:Seq=>DownwardParam,uFn:Seq=>UpwardParam)(implicit valName:ValName) extends NexusNode(协商实现类xxx)(dFn,uFn)
class NodeC(pus:Seq)(implicit valName:ValName) extends SinkNode(协商实现类xxx)(pus)


joe 发表于 2021-10-27 10:43:24

假设1号边对应的协商数据值小于2号边对应的数据值
猜想做法:moduleA.nodeA.out.foreach{(bo,eo)=>if(bo == moduleA.nodeA.out.collect{case (ui,ep) => ui}.max)   moduleB.nodeB := moduleA.nodeAelsemoduleC.nodeC := moduleA.nodeA}

joe 发表于 2021-10-27 10:51:53

仔细分析:moduleA.nodeA.out.foreach{(bo,eo)=>if(bo == moduleA.nodeA.out.collect{case (ui,ep) => ui}.max)   moduleB.nodeB := moduleA.nodeAelsemoduleC.nodeC := moduleA.nodeA}
moduleA.nodeA.out ->因为nodeA是只有输出的SourceNode,它有二条边,out就是代表对应的Seq[(UInt,EdgeParam)],也就是说bo对应UInt,eo对应EdgeParam
moduleA.nodeA.out.collect{case(ui,ep)=>ui}表示对这个Seq[(UInt,EdgeParam)]再做一个只包括协商数据UInt的集合
.max表示找出协商数据最大值,也就是找出2号边对应的目标
moduleB.nodeB := moduleA.nodeA表示当找到目标边之后即找到要连模块A节点的边之后就连接它,否则就要连另一个模块的节点。

页: [1]
查看完整版本: diplomacy协商之后信号指定连接问题