📄 gem.java
字号:
{ new Technology.NodeLayer(TA_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, box_7) }); tp_node.addPrimitivePorts(new PrimitivePort[] { PrimitivePort.newInstance(this, tp_node, new ArcProto [] {Temporal_arc}, "temporal", 0,180, 0, PortCharacteristic.UNKNOWN, EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter()) }); tp_node.setFunction(PrimitiveNode.Function.PIN); tp_node.setArcsWipe(); tp_node.setArcsShrink(); /** Cause-Pin */ PrimitiveNode cp_node = PrimitiveNode.newInstance("Cause-Pin", this, 1, 1, null, new Technology.NodeLayer [] { new Technology.NodeLayer(CA_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, box_7) }); cp_node.addPrimitivePorts(new PrimitivePort[] { PrimitivePort.newInstance(this, cp_node, new ArcProto [] {Causal_arc}, "cause", 0,180, 0, PortCharacteristic.UNKNOWN, EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter()) }); cp_node.setFunction(PrimitiveNode.Function.PIN); cp_node.setArcsWipe(); cp_node.setArcsShrink(); /** Prereq-Pin */ PrimitiveNode pp_node = PrimitiveNode.newInstance("Prereq-Pin", this, 1, 1, null, new Technology.NodeLayer [] { new Technology.NodeLayer(PA_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, box_7) }); pp_node.addPrimitivePorts(new PrimitivePort[] { PrimitivePort.newInstance(this, pp_node, new ArcProto [] {Prerequisite_arc}, "prereq", 0,180, 0, PortCharacteristic.UNKNOWN, EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter()) }); pp_node.setFunction(PrimitiveNode.Function.PIN); pp_node.setArcsWipe(); pp_node.setArcsShrink(); /** Nondet-Pin */ PrimitiveNode np_node = PrimitiveNode.newInstance("Nondet-Pin", this, 1, 1, null, new Technology.NodeLayer [] { new Technology.NodeLayer(NA_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, box_7) }); np_node.addPrimitivePorts(new PrimitivePort[] { PrimitivePort.newInstance(this, np_node, new ArcProto [] {Nondeterministic_arc}, "nondet", 0,180, 0, PortCharacteristic.UNKNOWN, EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter()) }); np_node.setFunction(PrimitiveNode.Function.PIN); np_node.setArcsWipe(); np_node.setArcsShrink(); /** Fork-Pin */ PrimitiveNode fp_node = PrimitiveNode.newInstance("Fork-Pin", this, 1, 1, null, new Technology.NodeLayer [] { new Technology.NodeLayer(FA_lay, 0, Poly.Type.DISC, Technology.NodeLayer.POINTS, box_7) }); fp_node.addPrimitivePorts(new PrimitivePort[] { PrimitivePort.newInstance(this, fp_node, new ArcProto [] {Nondeterministic_fork_arc}, "fork", 0,180, 0, PortCharacteristic.UNKNOWN, EdgeH.makeCenter(), EdgeV.makeCenter(), EdgeH.makeCenter(), EdgeV.makeCenter()) }); fp_node.setFunction(PrimitiveNode.Function.PIN); fp_node.setArcsWipe(); fp_node.setArcsShrink(); /** Element */ e_node = PrimitiveNode.newInstance("Element", this, 8, 8, null, new Technology.NodeLayer [] { new Technology.NodeLayer(E_lay, 0, Poly.Type.CIRCLE, Technology.NodeLayer.POINTS, box_7) }); e_node.addPrimitivePorts(new PrimitivePort[] { PrimitivePort.newInstance(this, e_node, new ArcProto [] {General_arc, Temporal_arc, Causal_arc, Prerequisite_arc, Nondeterministic_arc, Nondeterministic_fork_arc}, "port1", 0,180, 0, PortCharacteristic.UNKNOWN, EdgeH.fromLeft(2), EdgeV.fromCenter(0.5), EdgeH.fromLeft(2), EdgeV.fromCenter(0.5)), PrimitivePort.newInstance(this, e_node, new ArcProto [] {General_arc, Temporal_arc, Causal_arc, Prerequisite_arc, Nondeterministic_arc, Nondeterministic_fork_arc}, "port2", 0,180, 0, PortCharacteristic.UNKNOWN, EdgeH.fromLeft(2), EdgeV.fromCenter(-0.5), EdgeH.fromLeft(2), EdgeV.fromCenter(-0.5)), PrimitivePort.newInstance(this, e_node, new ArcProto [] {General_arc, Temporal_arc, Causal_arc, Prerequisite_arc, Nondeterministic_arc, Nondeterministic_fork_arc}, "port3", 0,180, 0, PortCharacteristic.UNKNOWN, EdgeH.fromLeft(2), EdgeV.fromCenter(-1.5), EdgeH.fromLeft(2), EdgeV.fromCenter(-1.5)), PrimitivePort.newInstance(this, e_node, new ArcProto [] {General_arc, Temporal_arc, Causal_arc, Prerequisite_arc, Nondeterministic_arc, Nondeterministic_fork_arc}, "port4", 0,180, 0, PortCharacteristic.UNKNOWN, EdgeH.fromLeft(2), EdgeV.fromCenter(-2.5), EdgeH.fromLeft(2), EdgeV.fromCenter(-2.5)) }); e_node.setFunction(PrimitiveNode.Function.UNKNOWN); /** Group */ PrimitiveNode g_node = PrimitiveNode.newInstance("Group", this, 10, 10, null, new Technology.NodeLayer [] { new Technology.NodeLayer(E_lay, 0, Poly.Type.CLOSED, Technology.NodeLayer.BOX, box_6) }); g_node.addPrimitivePorts(new PrimitivePort[] { PrimitivePort.newInstance(this, g_node, new ArcProto [] {General_arc, Temporal_arc, Causal_arc, Prerequisite_arc, Nondeterministic_arc, Nondeterministic_fork_arc}, "group", 0,180, 0, PortCharacteristic.UNKNOWN, EdgeH.makeLeftEdge(), EdgeV.makeBottomEdge(), EdgeH.makeRightEdge(), EdgeV.makeTopEdge()) }); g_node.setFunction(PrimitiveNode.Function.UNKNOWN); // Building information for palette nodeGroups = new Object[9][2]; int count = -1; nodeGroups[++count][0] = General_arc; nodeGroups[count][1] = gp_node; nodeGroups[++count][0] = Temporal_arc; nodeGroups[count][1] = tp_node; nodeGroups[++count][0] = Causal_arc; nodeGroups[count][1] = cp_node; nodeGroups[++count][0] = Prerequisite_arc; nodeGroups[count][1] = pp_node; nodeGroups[++count][0] = Nondeterministic_arc; nodeGroups[count][1] = np_node; nodeGroups[++count][0] = Nondeterministic_fork_arc; nodeGroups[count][1] = fp_node; nodeGroups[++count][0] = Technology.SPECIALMENUCELL; nodeGroups[count][1] = e_node; nodeGroups[++count][0] = Technology.SPECIALMENUMISC; nodeGroups[count][1] = g_node; nodeGroups[++count][0] = Technology.SPECIALMENUPURE; //Foundry newFoundry(Foundry.Type.NONE, null); }; //**************************************** METHODS **************************************** /** * Method to return a list of Polys that describe a given NodeInst. * This method overrides the general one in the Technology object * because of the unusual primitives in this Technology. * @param ni the NodeInst to describe. * @param electrical true to get the "electrical" layers. * This makes no sense for Schematics primitives. * @param reasonable true to get only a minimal set of contact cuts in large contacts. * This makes no sense for Schematics primitives. * @param primLayers an array of NodeLayer objects to convert to Poly objects. * @param layerOverride the layer to use for all generated polygons (if not null). * @return an array of Poly objects. */ @Override protected Poly [] getShapeOfNode(NodeInst ni, boolean electrical, boolean reasonable, Technology.NodeLayer [] primLayers, Layer layerOverride) { if (ni.getProto() == e_node) { Technology.NodeLayer [] eventLayers = new Technology.NodeLayer[6]; eventLayers[0] = new Technology.NodeLayer(E_lay, 0, Poly.Type.CIRCLE, Technology.NodeLayer.POINTS, box_7); String title = ""; Variable varTitle = ni.getVar(ELEMENT_NAME); if (varTitle != null) title = varTitle.getPureValue(-1); eventLayers[1] = new Technology.NodeLayer(E_lay, 0, Poly.Type.TEXTCENT, Technology.NodeLayer.POINTS, new Technology.TechPoint[] { new Technology.TechPoint(EdgeH.makeCenter(), EdgeV.fromTop(1))}); eventLayers[1].setMessage(title); String event1 = ""; Variable varEvent1 = ni.getVar(EVENT_1); if (varEvent1 != null) event1 = varEvent1.getPureValue(-1); eventLayers[2] = new Technology.NodeLayer(E_lay, 0, Poly.Type.TEXTLEFT, Technology.NodeLayer.POINTS, new Technology.TechPoint[] { new Technology.TechPoint(EdgeH.fromLeft(2), EdgeV.fromCenter(0.5))}); eventLayers[2].setMessage(event1); String event2 = ""; Variable varEvent2 = ni.getVar(EVENT_2); if (varEvent2 != null) event2 = varEvent2.getPureValue(-1); eventLayers[3] = new Technology.NodeLayer(E_lay, 0, Poly.Type.TEXTLEFT, Technology.NodeLayer.POINTS, new Technology.TechPoint[] { new Technology.TechPoint(EdgeH.fromLeft(2), EdgeV.fromCenter(-0.5))}); eventLayers[3].setMessage(event2); String event3 = ""; Variable varEvent3 = ni.getVar(EVENT_3); if (varEvent3 != null) event3 = varEvent3.getPureValue(-1); eventLayers[4] = new Technology.NodeLayer(E_lay, 0, Poly.Type.TEXTLEFT, Technology.NodeLayer.POINTS, new Technology.TechPoint[] { new Technology.TechPoint(EdgeH.fromLeft(2), EdgeV.fromCenter(-1.5))}); eventLayers[4].setMessage(event3); String event4 = ""; Variable varEvent4 = ni.getVar(EVENT_4); if (varEvent4 != null) event4 = varEvent4.getPureValue(-1); eventLayers[5] = new Technology.NodeLayer(E_lay, 0, Poly.Type.TEXTLEFT, Technology.NodeLayer.POINTS, new Technology.TechPoint[] { new Technology.TechPoint(EdgeH.fromLeft(2), EdgeV.fromCenter(-2.5))}); eventLayers[5].setMessage(event4); primLayers = eventLayers; } return super.getShapeOfNode(ni, electrical, reasonable, primLayers, layerOverride); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -