risc-v中文社区

 找回密码
 立即注册
查看: 1488|回复: 2

[求助] diplomacy协商之后信号指定连接问题

  [复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-10-26 15:14:49 | 显示全部楼层 |阅读模式
object xxx extends SimpleNodeImp[DownwardParma,UpwardParam,EdgeParam,UInt]{
    def edge(...){...}
    def bundle(e:EdgeParam):UInt= ...
}
class NodeA(pds:Seq[DownwardParam])(implicit valName:ValName) extends SourceNode(协商实现类,是一个object xxx extends SimpleNodeImp)(pds)
class NodeB(dFn:Seq[DownwardParam]=>DownwardParam,uFn:Seq[UpwardParam]=>UpwardParam)(implicit valName:ValName) extends NexusNode(协商实现类xxx)(dFn,uFn)
class NodeC(pus:Seq[UpwardParam])(implicit valName:ValName) extends SinkNode(协商实现类xxx)(pus)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 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.nodeA  else  moduleC.nodeC := moduleA.nodeA}
回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 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.nodeA  else  moduleC.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节点的边之后就连接它,否则就要连另一个模块的节点。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-25 15:49 , Processed in 0.015932 second(s), 18 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表