Beispiel #1
0
 public void SetStartLine(ContactSimple cnt1, ContactSimple cnt2, string inName, int inPriority, int inIdx)
 {
     if (cnt1.layer == Layers.siliconTrace)
         SetLine(new LineStruct(cnt1.GetInDiffusionEdge(), cnt2.GetInDiffusionEdge()),
                 inName, inPriority, inIdx, true);
     else
     {
         if (Params.IsModelBusM1InMiddle())
         {
             if (cnt1.y > cnt2.y)
             {
                 SetLine(new LineStruct(cnt1.GetInDiffusionEdge(), cnt1.GetLowerPoint(2)),
                     inName, inPriority, inIdx, true);
                 SetLine(new LineStruct(cnt1.GetLowerPoint(2), cnt2.GetHigherPoint(2), Layers.metal2Trace),
                     inName, inPriority, inIdx, true);
                 SetLine(new LineStruct(cnt2.GetHigherPoint(2), cnt1.GetInDiffusionEdge()),
                     inName, inPriority, inIdx, true);
             }
             else
             {
                 SetLine(new LineStruct(cnt2.GetInDiffusionEdge(), cnt2.GetLowerPoint(2)),
                     inName, inPriority, inIdx, true);
                 SetLine(new LineStruct(cnt2.GetLowerPoint(2), cnt1.GetHigherPoint(2), Layers.metal2Trace),
                     inName, inPriority, inIdx, true);
                 SetLine(new LineStruct(cnt1.GetHigherPoint(2), cnt1.GetInDiffusionEdge()),
                     inName, inPriority, inIdx, true);
             }
         }
         else
         {
             SetLine(new LineStruct(cnt1.GetInDiffusionEdge(), cnt2.GetInDiffusionEdge()),
                 inName, inPriority, inIdx, true);
         }
     }
 }
Beispiel #2
0
        /*public List<ContactSimple> GetSourceContacts(ContactSimple inCnt, string inName)
        {
            int coordY = Params.lineN;
            if ((inCnt.y - Params.lineP) <= 2)
                coordY = Params.lineP;

            List<Contact> connectedCnt = new List<Contact>();

            if (inCnt.isInOut())
            {
                connectedCnt.Add(new Contact(inCnt));
                return connectedCnt;
            }

            connectedCnt.Add(new Contact(inCnt.x, coordY + 1, inCnt.typePoint));
            connectedCnt.Add(new Contact(inCnt.x, coordY - 1, inCnt.typePoint));
            if (diffusionExeption.FindIndex(el => el == inName) >= 0)
            {
                connectedCnt.Add(new Contact(inCnt.x, coordY + 3, inCnt.typePoint));
                connectedCnt.Add(new Contact(inCnt.x, coordY - 3, inCnt.typePoint));
            }
            return connectedCnt;
        }*/
        private bool IsOnlyConnectionM1Si(ContactSimple inCnt)
        {
            if (GetPoint(inCnt, Layers.contactTrace).name == Material.diffusionName)
                return false;

            int layOppos = Params.LayersRange[inCnt.layer][0];
            if (layOppos == inCnt.layer)
                layOppos = Params.LayersRange[inCnt.layer][1];

            if (inCnt.y < (Params.topEdge - 1) &&
                GetPoint(inCnt.GetHigherPoint(0), Layers.contactTrace).name == Material.diffusionName)
            {
                if ( (GetPoint(inCnt).name == GetPoint(inCnt.GetHigherPoint(0)).name) &&
                    (GetPoint(inCnt).name == GetPoint(inCnt.GetHigherPoint(0), layOppos).name) &&
                    (GetPoint(inCnt).name == GetPoint( inCnt.GetHigherPoint(5) ).name) &&
                    (GetPoint(inCnt).name == GetPoint( inCnt.GetHigherPoint(5), layOppos).name) )
                    return false;
                return true;
            }
            if (inCnt.y > 0 &&
                GetPoint(inCnt.GetLowerPoint(0), Layers.contactTrace).name == Material.diffusionName)
            {
                if ( (GetPoint(inCnt).name == GetPoint(inCnt.GetLowerPoint(0)).name) &&
                    (GetPoint(inCnt).name == GetPoint(inCnt.GetLowerPoint(0), layOppos).name) &&
                    (GetPoint(inCnt).name == GetPoint( inCnt.GetLowerPoint(5) ).name) &&
                    (GetPoint(inCnt).name == GetPoint( inCnt.GetLowerPoint(5), layOppos).name) )
                    return false;
                return true;
            }
            return false;
        }