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; } } }
private string GetLineW(LineStruct inLine) { if ((inLine.Length() <= 1) || (inLine.type == Material.na_) || (inLine.type == Material.pa_)) { return("-2.00"); } return("1.00"); }
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); }
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); }
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); } }
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); } }