Esempio n. 1
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);
            }
        }
Esempio n. 2
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);
            }
        }
Esempio n. 3
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);
        }
Esempio n. 4
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);
        }