/*private void SetInitPoint() * { * for (int i = 0; i < processNode.arcCollection.Count; i++) * { * trace.SetContact(Params.FromSimpleToCont(processNode.arcCollection[i].GetHigherPoint(0)), processNode.name, i, 0); * trace.SetContact(Params.FromSimpleToCont(processNode.arcCollection[i].GetLowerPoint(0)), processNode.name, i, 0); * } * }*/ private void SetStartPriority(TraceGlobe trace) { List <NodeDistanceBase> lst = nodeDistanceDict.Values.ToList(); lst.Sort(NodeDistanceBase.CompareBaseByDist); int countNd = lst.Count; //bestHighPrior = lst.First().name; trace.SetHighPriority(lst.First().name); int curPrior = Params.maxPriority; foreach (NodeDistanceBase disBase in lst)//Node curNode in nodeList) { processNode = trace.GetNodeByName(disBase.name); if (diffusionExcep.FindIndex(el => el == processNode.name) >= 0) { SetStartVccGndConnections(curPrior); } else { //List<int> markedPin = new List<int>(); for (int i = 0; i < processNode.arcCollection.Count; i++) { int idx = nodeDistanceDict[processNode.name].GetNumber(i); ContactSimple cnt = processNode.arcCollection[i]; //List<Contact> sours = trace.GetSourceContacts(processNode.arcCollection[i]) trace.SetPinSource(trace.GetSourceContacts(processNode.arcCollection[i], processNode.name)); bool notOpposite = true; for (int j = i + 1; j < processNode.arcCollection.Count; j++) { if (processNode.arcCollection[i].x == processNode.arcCollection[j].x) { //trace.SetLine(new LineStruct(processNode.arcCollection[i].GetInDiffusionEdge(), processNode.arcCollection[j].GetInDiffusionEdge()), // processNode.name, curPrior, idx, true); trace.SetStartLine(processNode.arcCollection[i], processNode.arcCollection[j], processNode.name, curPrior, idx); trace.SetContact(processNode.arcCollection[i].GetInDiffusionEdge(), processNode.name, idx, curPrior, 0); List <ContactSimple> startWave = new List <ContactSimple>(); startWave.Add(new ContactSimple(processNode.arcCollection[i].GetInDiffusionEdge())); NodePointProcess proc = new NodePointProcess(0, curPrior, idx, false); trace.CompleteSpreadWaveProcess(startWave, proc); //SpreadWaveProcess notOpposite = false; } } if (notOpposite) //markedPin.FindIndex(el => el == i) < 0) { trace.SetContact(processNode.arcCollection[i].GetInDiffusionEdge(), processNode.name, idx, curPrior, 0); /*trace.SetPinContact(Params.FromSimpleToCont(processNode.arcCollection[i].GetHigherPoint(0)), * processNode.name, idx, curPrior); * trace.SetPinContact(Params.FromSimpleToCont(processNode.arcCollection[i].GetLowerPoint(0)), * processNode.name, idx, curPrior);*/ } } } curPrior--; } }
/*private void SetInitPoint() { for (int i = 0; i < processNode.arcCollection.Count; i++) { trace.SetContact(Params.FromSimpleToCont(processNode.arcCollection[i].GetHigherPoint(0)), processNode.name, i, 0); trace.SetContact(Params.FromSimpleToCont(processNode.arcCollection[i].GetLowerPoint(0)), processNode.name, i, 0); } }*/ private void SetStartPriority(TraceGlobe trace) { List<NodeDistanceBase> lst = nodeDistanceDict.Values.ToList(); lst.Sort(NodeDistanceBase.CompareBaseByDist); int countNd = lst.Count; //bestHighPrior = lst.First().name; trace.SetHighPriority(lst.First().name); int curPrior = Params.maxPriority; foreach (NodeDistanceBase disBase in lst)//Node curNode in nodeList) { processNode = trace.GetNodeByName(disBase.name); if (diffusionExcep.FindIndex(el => el == processNode.name) >= 0) SetStartVccGndConnections(curPrior); else { //List<int> markedPin = new List<int>(); for (int i = 0; i < processNode.arcCollection.Count; i++) { int idx = nodeDistanceDict[processNode.name].GetNumber(i); ContactSimple cnt = processNode.arcCollection[i]; //List<Contact> sours = trace.GetSourceContacts(processNode.arcCollection[i]) trace.SetPinSource(trace.GetSourceContacts(processNode.arcCollection[i], processNode.name)); bool notOpposite = true; for (int j = i + 1; j < processNode.arcCollection.Count; j++) { if (processNode.arcCollection[i].x == processNode.arcCollection[j].x) { //trace.SetLine(new LineStruct(processNode.arcCollection[i].GetInDiffusionEdge(), processNode.arcCollection[j].GetInDiffusionEdge()), // processNode.name, curPrior, idx, true); trace.SetStartLine(processNode.arcCollection[i], processNode.arcCollection[j], processNode.name, curPrior, idx); trace.SetContact(processNode.arcCollection[i].GetInDiffusionEdge(), processNode.name, idx, curPrior, 0); List<ContactSimple> startWave = new List<ContactSimple>(); startWave.Add( new ContactSimple(processNode.arcCollection[i].GetInDiffusionEdge()) ); NodePointProcess proc = new NodePointProcess(0, curPrior, idx, false); trace.CompleteSpreadWaveProcess(startWave, proc);//SpreadWaveProcess notOpposite = false; } } if (notOpposite)//markedPin.FindIndex(el => el == i) < 0) { trace.SetContact(processNode.arcCollection[i].GetInDiffusionEdge(), processNode.name, idx, curPrior, 0); /*trace.SetPinContact(Params.FromSimpleToCont(processNode.arcCollection[i].GetHigherPoint(0)), processNode.name, idx, curPrior); trace.SetPinContact(Params.FromSimpleToCont(processNode.arcCollection[i].GetLowerPoint(0)), processNode.name, idx, curPrior);*/ } } } curPrior--; } }