Exemplo n.º 1
0
        public void SetLine(LineStruct inLine, string inName, int priority, int ndNumber, bool makeFixed)
        {
            int       layer   = inLine.type;
            NodePoint ndPoint = new NodePoint(inName, priority, ndNumber);

            if (inLine.Height > 0)
            {
                for (int y = inLine.Bottom; y <= inLine.Top; y++)
                {
                    bool isSrs = layoutMap[inLine.X][y][layer].isSource;
                    layoutMap[inLine.X][y][layer]          = new NodePoint(ndPoint);
                    layoutMap[inLine.X][y][layer].isSource = isSrs;
                    layoutMap[inLine.X][y][layer].number   = -1;  //change!
                    layoutMap[inLine.X][y][layer].isFixed  = makeFixed;
                }
            }
            if (inLine.Width > 0)
            {
                for (int x = inLine.Left; x <= inLine.Right; x++)
                {
                    bool isSrs = layoutMap[x][inLine.Y][layer].isSource;
                    layoutMap[x][inLine.Y][layer]          = new NodePoint(ndPoint);
                    layoutMap[x][inLine.Y][layer].isSource = isSrs;
                    layoutMap[x][inLine.Y][layer].number   = -1;
                    layoutMap[x][inLine.Y][layer].isFixed  = makeFixed;
                }
            }
        }
Exemplo n.º 2
0
 private string GetLineW(LineStruct inLine)
 {
     if ((inLine.Length() <= 1) || (inLine.type == Material.na_) || (inLine.type == Material.pa_))
     {
         return("-2.00");
     }
     return("1.00");
 }
Exemplo n.º 3
0
 private double CorrectBottom(LineStruct inLine)
 {
     if ((inLine.type == Layers.siliconTrace) && (inLine.Width == 0))
     {
         if ((inLine.Bottom == (Params.lineN + 1)) || (inLine.Bottom == (Params.lineP + 1)))
         {
             return(0.1);
         }
     }
     return(0.0);
 }
Exemplo n.º 4
0
 private double CorrectTop(LineStruct inLine)
 {
     if ((inLine.type == Layers.siliconTrace) && (inLine.Width == 0))
     {
         if ((inLine.Top == (Params.lineN - 1)) || (inLine.Top == (Params.lineP - 1)))
         {
             return(-0.1);
         }
     }
     return(0.0);
 }
Exemplo n.º 5
0
        private void InitGndVccConts()
        {
            int lay = Layers.metal1Trace;

            if (Params.IsModelBusM2InMiddle())
            {
                lay = Layers.metal2Trace;
            }

            ContactSimple busStart = new ContactSimple(Params.leftEdge, Params.VccPosition, lay);
            ContactSimple busEnd   = new ContactSimple(wide - 1, Params.VccPosition, lay);

            if (processNode.name == Params.GndName)
            {
                busStart.y = Params.GndPosition;
                busEnd.y   = Params.GndPosition;
            }
            busEnd.SetInOut();
            busStart.SetInOut();
            processNode.arcCollection.Insert(0, busEnd);
            processNode.arcCollection.Insert(0, busStart);

            int idxLast = processNode.arcCollection.Count;
            NodeDistanceBase dictUnit = new NodeDistanceBase(idxLast, processNode.name);

            for (int i = 0; i < idxLast; i++)
            {
                for (int j = i + 1; j < idxLast; j++)
                {
                    bool connected       = true;
                    bool fixedConnection = false;
                    if (i == 0 && j == 1)
                    {
                        fixedConnection = true;
                    }

                    if (i != j)
                    {
                        dictUnit.AddDistance(i, j, LineStruct.Distance(processNode.arcCollection[i],
                                                                       processNode.arcCollection[j]), connected, fixedConnection);
                    }
                }
            }

            if (idxLast > 1)
            {
                nodeDistanceDict.Add(processNode.name, dictUnit);
            }
        }
Exemplo n.º 6
0
        private void InitOneNodeConts()
        {
            if (diffusionExcep.FindIndex(el => el == processNode.name) >= 0)
            {
                InitGndVccConts();
                return;
            }

            int idxLast = processNode.arcCollection.Count;

            NodeDistanceBase dictUnit = new NodeDistanceBase(idxLast, processNode.name);


            for (int i = 0; i < idxLast; i++)
            {
                for (int j = i + 1; j < idxLast; j++)
                {
                    bool connected       = false;
                    bool fixedConnection = false;
                    if (processNode.arcCollection[i].x == processNode.arcCollection[j].x)
                    {
                        connected       = true;
                        fixedConnection = true;
                    }
                    if (i != j)
                    {
                        dictUnit.AddDistance(i, j, LineStruct.Distance(processNode.arcCollection[i],
                                                                       processNode.arcCollection[j]), connected, fixedConnection);
                    }
                }
            }

            if (idxLast > 1)
            {
                nodeDistanceDict.Add(processNode.name, dictUnit);
            }
        }