Ejemplo n.º 1
0
        //添加一个背板的描述到_rawTopo里面
        private void AddBackPlane(BackPlane bp, int frameId, ref int curUrlId)
        {
            //添加节点(槽位,包含虚拟槽位)
            for (int i = 0; i < bp.VirtualSlotsNum; i++)
            {
                RawTopo.RawNode bpNode = new RawTopo.RawNode(EndType.VPX, null, curUrlId++);
                bpNode.FrameId = frameId;
                bpNode.SlotId  = i;
                _rawTopo.SetNodeValue(bpNode.UrlId, bpNode);
            }

            //加入link
            foreach (var links in bp.LinksArray)
            {
                foreach (var link in links)
                {
                    var subLink = new RawTopo.RawSubLink(link.FirstEndPostion, link.SecondEndPostion, link.LanesNum);
                    int urlId1  = _rawTopo.NodeArray
                                  .Where(node => ((node != null) && (node.SlotId == link.FirstEndId) && (node.Type == EndType.VPX) && (node.FrameId == frameId)))
                                  .Select(node => node.UrlId)
                                  .FirstOrDefault();
                    int urlId2 = _rawTopo.NodeArray
                                 .Where(node => ((node != null) && (node.SlotId == link.SecondEndId) && (node.Type == EndType.VPX) && (node.FrameId == frameId)))
                                 .Select(node => node.UrlId)
                                 .FirstOrDefault();
                    _rawTopo.AddSubLink(link.LinkType, urlId1, urlId2, subLink);
                }
            }
        }
Ejemplo n.º 2
0
        //转化RawNode到与之对应的StaticNode
        private StaticNode RNodeToSNode(RawTopo.RawNode rNode)
        {
            var staticNode = _topoNet.NodeArray.Where(sNode => rNode.Type == sNode.NodeType &&
                                                      rNode.FrameId == sNode.FrameId &&
                                                      rNode.SlotId == sNode.SlotId &&
                                                      rNode.EndId == sNode.EndId).FirstOrDefault();

            return(staticNode);
        }
Ejemplo n.º 3
0
        //添加一个板卡的描述到图里面
        private void AddBoard(Board board, int frameId, int slotId, ref int curUrlId)
        {
            //创建一个字典用于保存GraphNode的endId与UrlId的映射关系
            Dictionary <int, int> endId2UrlId = new Dictionary <int, int>();

            //1.添加节点到_nodeList
            #region
            //添加ppc节点到顶点集合
            foreach (var ppc in board.PPCList)
            {
                var node = new RawTopo.RawNode(EndType.PPC, ppc.Name, curUrlId++);
                node.FrameId = frameId;
                node.SlotId  = slotId;
                node.GenerateEndId(board.PPCList.IndexOf(ppc));

                endId2UrlId.Add(node.EndId, node.UrlId);
                _rawTopo.SetNodeValue(node.UrlId, node);
            }
            //添加fpga节点到顶点集合
            foreach (var fpga in board.FPGAList)
            {
                var node = new RawTopo.RawNode(EndType.FPGA, fpga.Name, curUrlId++);
                node.FrameId = frameId;
                node.SlotId  = slotId;
                node.GenerateEndId(board.FPGAList.IndexOf(fpga));

                endId2UrlId.Add(node.EndId, node.UrlId);
                _rawTopo.SetNodeValue(node.UrlId, node);
            }
            //添加zynq节点到顶点集合
            foreach (var zynq in board.ZYNQList)
            {
                var node = new RawTopo.RawNode(EndType.ZYNQ, zynq.Name, curUrlId++);
                node.FrameId = frameId;
                node.SlotId  = slotId;
                node.GenerateEndId(board.ZYNQList.IndexOf(zynq));

                endId2UrlId.Add(node.EndId, node.UrlId);
                _rawTopo.SetNodeValue(node.UrlId, node);
            }
            //添加sw节点到顶点集合
            foreach (var sw in board.SwitchList)
            {
                //这里的交换机的名字用Type代替
                var node = new RawTopo.RawNode(EndType.SW, sw.Type, curUrlId++);
                node.FrameId = frameId;
                node.SlotId  = slotId;
                node.GenerateEndId(board.SwitchList.IndexOf(sw));

                endId2UrlId.Add(node.EndId, node.UrlId);
                _rawTopo.SetNodeValue(node.UrlId, node);
            }
            //不用添加板卡上的vpx节点到顶点集合,因为该vpx一定对应了一个backPlane的slot
            #endregion
            //2.添加link到对应的matrix
            foreach (var link in board.LinkList)
            {
                //把每一条link都加入到matrix里面
                var subLink = new RawTopo.RawSubLink(link.FirstEndPositionList[0], link.SecondEndPositionList[0]);
                //端1一般为板卡上的芯片不为vpx,端2才可能会包含vpx类型
                int urlId1 = endId2UrlId[RawTopo.RawNode.CalculateEndId(link.FirstEndType, link.FirstEndId)];
                int urlId2 = 0;
                if (link.SecondEndType == EndType.VPX)
                {
                    //直接去找vpx插在相应槽位的urlId
                    urlId2 = _rawTopo.NodeArray
                             .Where(node => ((node != null) && (node.SlotId == slotId) && (node.Type == EndType.VPX) && (node.FrameId == frameId)))
                             .Select(node => node.UrlId)
                             .FirstOrDefault();
                }
                else
                {
                    urlId2 = endId2UrlId[RawTopo.RawNode.CalculateEndId(link.SecondEndType, link.SecondEndId)];
                }
                _rawTopo.AddSubLink(link.LinkType, urlId1, urlId2, subLink);
            }
        }