亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? maker.java

?? The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
					{						if ((via.flags & VIAEXPORT) != 0)						{							if (exportPort(via.instance, null,								via.xPort.xPort.name, via.xPort.xPort.bits & GetNetlist.PORTTYPE, bCell) == null)							{								return "Cannot create export port '" + via.xPort.xPort.name + "' in MAKER";							}						}					}				}			}		}		// create power buses		NodeInst lastPower = null;		double xPos = data.minX - rowToTrack - (SilComp.getMainPowerWireWidth()/ 2);		String mainPowerArc = SilComp.getMainPowerArc();		boolean mainPwrRailHoriz = mainPowerArc.equals("Horizontal Arc");		for (MakerPower pList = data.power; pList != null; pList = pList.next)		{			double yPos = pList.yPos;			// create main power bus node			NodeInst bInst = null;			if (mainPwrRailHoriz)			{				bInst = NodeInst.makeInstance(layer1Proto, new Point2D.Double(xPos, yPos),					SilComp.getMainPowerWireWidth(), SilComp.getMainPowerWireWidth(), bCell);			} else			{				bInst = NodeInst.makeInstance(layer2Proto, new Point2D.Double(xPos, yPos),					SilComp.getMainPowerWireWidth(), SilComp.getMainPowerWireWidth(), bCell);			}			if (bInst == null)				return "Cannot create via in MAKER";			if (lastPower != null)			{				// join to previous				if (mainPwrRailHoriz)				{					if (trackLayer1(bInst, null, lastPower, null,						SilComp.getMainPowerWireWidth(), bCell) == null)					{						return "Cannot create layer1 track in MAKER";					}				} else				{					if (trackLayer2(bInst, null, lastPower, null,						SilComp.getMainPowerWireWidth(), bCell) == null)					{						return "Cannot create layer1 track in MAKER";					}				}			}			lastPower = bInst;			for (MakerPowerPort pPort = pList.ports; pPort != null; pPort = pPort.next)			{				if (pPort.last == null)				{					// connect to main power node					if (trackLayer1(lastPower, null, pPort.inst.instance, (PortProto)pPort.port.port,						SilComp.getPowerWireWidth(), bCell) == null)					{						return "Cannot create layer1 track in MAKER";					}				}				// connect to next if it exists				if (pPort.next != null)				{					if (trackLayer1(pPort.inst.instance, (PortProto)pPort.port.port,							pPort.next.inst.instance, (PortProto)pPort.next.port.port,							SilComp.getPowerWireWidth(), bCell) == null)					{						return "Cannot create layer1 track in MAKER";					}				}			}		}		// create ground buses		NodeInst lastGround = null;		xPos = data.maxX + rowToTrack + (SilComp.getMainPowerWireWidth() / 2);		for (MakerPower pList = data.ground; pList != null; pList = pList.next)		{			double yPos = pList.yPos;			// create main ground bus node			NodeInst bInst = null;			if (mainPwrRailHoriz)			{				bInst = NodeInst.makeInstance(layer1Proto, new Point2D.Double(xPos, yPos),					SilComp.getMainPowerWireWidth(), SilComp.getMainPowerWireWidth(), bCell);			} else			{				bInst = NodeInst.makeInstance(layer2Proto, new Point2D.Double(xPos, yPos),					SilComp.getMainPowerWireWidth(), SilComp.getMainPowerWireWidth(), bCell);			}			if (bInst == null) return "Cannot create via in MAKER";			if (lastGround != null)			{				// join to previous				if (mainPwrRailHoriz)				{					if (trackLayer1(bInst, null, lastGround, null,						SilComp.getMainPowerWireWidth(), bCell) == null)					{						return "Cannot create layer1 track in MAKER";					}				} else				{					if (trackLayer2(bInst, null, lastGround, null,						SilComp.getMainPowerWireWidth(), bCell) == null)					{						return "Cannot create layer1 track in MAKER";					}				}			} else			{				if (exportPort(bInst, null, "gnd", GetNetlist.GNDPORT, bCell) == null)				{					return "Cannot create export port 'gnd' in MAKER";				}			}			lastGround = bInst;			for (MakerPowerPort pPort = pList.ports; pPort != null; pPort = pPort.next)			{				if (pPort.next == null)				{					// connect to main ground node					if (trackLayer1(lastGround, null, pPort.inst.instance, (PortProto)pPort.port.port,						SilComp.getPowerWireWidth(), bCell) == null)					{						return "Cannot create layer1 track in MAKER";					}				}				// connect to next if it exists				else				{					if (trackLayer1(pPort.inst.instance, (PortProto)pPort.port.port,							pPort.next.inst.instance, (PortProto)pPort.next.port.port,							SilComp.getPowerWireWidth(), bCell) == null)					{						return "Cannot create layer1 track in MAKER";					}				}			}		}		if (lastPower != null)		{			// export as cell vdd			if (exportPort(lastPower, null, "vdd", GetNetlist.PWRPORT, bCell) == null)			{				return "Cannot create export port 'vdd' in MAKER";			}		}		// create overall P-wells if pwell size not zero		if (SilComp.getPWellHeight() != 0)		{			for (MakerRow row = data.rows; row != null; row = row.next)			{				MakerInst firstInst = null;				MakerInst prevInst = null;				for (MakerInst inst = row.members; inst != null; inst = inst.next)				{					if (inst.place.cell.type != GetNetlist.LEAFCELL) continue;					if (firstInst == null)					{						firstInst = inst;					} else					{						prevInst = inst;					}				}				if (prevInst != null)				{					xPos = (firstInst.xPos + prevInst.xPos + prevInst.xSize) / 2;					double xSize = (prevInst.xPos + prevInst.xSize) - firstInst.xPos;					double ySize = SilComp.getPWellHeight();					if (ySize > 0)					{						double yPos = firstInst.yPos + SilComp.getPWellOffset() +							(SilComp.getPWellHeight() / 2);						if (pWellProto != null)						{							NodeInst bInst = NodeInst.makeInstance(pWellProto, new Point2D.Double(xPos, yPos), xSize, ySize, bCell);							if (bInst == null)								return "Unable to create P-WELL in MAKER";						}					}					ySize = SilComp.getNWellHeight();					if (ySize > 0)					{						double yPos = firstInst.yPos + firstInst.ySize - SilComp.getNWellOffset() -							(SilComp.getNWellHeight() / 2);						if (nWellProto != null)						{							NodeInst bInst = NodeInst.makeInstance(nWellProto, new Point2D.Double(xPos, yPos), xSize, ySize, bCell);							if (bInst == null)								return "Unable to create N-WELL in MAKER";						}					}				}			}		}		return bCell;	}	/**	 * Method to create an export at the given instance at the given port.	 * Note that ports of primitive instances are passed as NULL and must be determined.	 * @param inst pointer to instance.	 * @param port pointer to port on the instance.	 * @param name name of the Export.	 * @param type type of port (eg. input, output, etc.)	 * @param bCell cell in which to create.	 * @return the new Export (null on error).	 */	private Export exportPort(NodeInst inst, PortProto port, String name, int type, Cell bCell)	{		// check if primative		if (port == null)			port = inst.getProto().getPort(0);		PortInst pi = inst.findPortInstFromProto(port);		PortCharacteristic pc = null;		switch (type)		{			case GetNetlist.INPORT:    pc = PortCharacteristic.IN;     break;			case GetNetlist.OUTPORT:   pc = PortCharacteristic.OUT;    break;			case GetNetlist.BIDIRPORT: pc = PortCharacteristic.BIDIR;  break;			case GetNetlist.PWRPORT:   pc = PortCharacteristic.PWR;    break;			default:                   pc = PortCharacteristic.GND;    break;		}		Export xPort = Export.newInstance(bCell, pi, name, pc);		return xPort;	}	/**	 * Method to create a track between the two given ports on the first routing layer.	 * Note that ports of primitive instances are passed as NULL and must be determined.	 * @param insta pointer to first instance.	 * @param portA pointer to first port.	 * @param instB pointer to second instance.	 * @param portB pointer to second port.	 * @param width width of track.	 * @param bCell cell in which to create.	 * @return the created ArcInst.	 */	private ArcInst trackLayer1(NodeInst instA, PortProto portA, NodeInst instB, PortProto portB, double width, Cell bCell)	{		// copy into internal structures		if (portA == null) portA = instA.getProto().getPort(0);		if (portB == null) portB = instB.getProto().getPort(0);		// find center positions		PortInst piA = instA.findPortInstFromProto(portA);		PortInst piB = instB.findPortInstFromProto(portB);		Poly polyA = piA.getPoly();		Poly polyB = piA.getPoly();		double xA = polyA.getCenterX();		double yA = polyA.getCenterY();		double xB = polyB.getCenterX();		double yB = polyB.getCenterY();		// make sure the arc can connect		if (!portA.getBasePort().connectsTo(layer1Arc))		{			// must place a via			piA = createConnection(piA, xA, yA, layer1Arc);		}		if (!portB.getBasePort().connectsTo(layer1Arc))		{			// must place a via			piB = createConnection(piB, xB, yB, layer1Arc);		}		ArcInst inst = ArcInst.makeInstanceBase(layer1Arc, width, piA, piB);//		ArcInst inst = ArcInst.makeInstanceFull(layer1Arc, width, piA, piB);		return inst;	}	/**	 * Method to create a track between the two given ports on the second routing layer.	 * Note that ports of primitive instances are passed as NULL and must be determined.	 * @param insta pointer to first instance.	 * @param portA pointer to first port.	 * @param instB pointer to second instance.	 * @param portB pointer to second port.	 * @param width width of track.	 * @param bCell cell in which to create.	 * @return the created ArcInst.	 */	private ArcInst trackLayer2(NodeInst instA, PortProto portA, NodeInst instB, PortProto portB, double width, Cell bCell)	{		// copy into internal structures		if (portA == null) portA = instA.getProto().getPort(0);		if (portB == null) portB = instB.getProto().getPort(0);		// find center positions		PortInst piA = instA.findPortInstFromProto(portA);		PortInst piB = instB.findPortInstFromProto(portB);		Poly polyA = piA.getPoly();		Poly polyB = piA.getPoly();		double xA = polyA.getCenterX();		double yA = polyA.getCenterY();		double xB = polyB.getCenterX();		double yB = polyB.getCenterY();		// make sure the arc can connect		if (!portA.getBasePort().connectsTo(layer2Arc))		{			// must place a via			piA = createConnection(piA, xA, yA, layer1Arc);		}		if (!portB.getBasePort().connectsTo(layer2Arc))		{			// must place a via			piB = createConnection(piB, xB, yB, layer1Arc);		}		ArcInst inst = ArcInst.makeInstanceBase(layer2Arc, width, piA, piB);//		ArcInst inst = ArcInst.makeInstanceFull(layer2Arc, width, piA, piB);		return inst;	}	private PortInst createConnection(PortInst pi, double x, double y, ArcProto arc)	{		// always use the standard via (David Harris)		if (viaProto == null) return null;		PrimitiveNode.Function fun = viaProto.getFunction();		if (fun != PrimitiveNode.Function.CONTACT && fun != PrimitiveNode.Function.CONNECT) return null;		// override given arc and choose one that will connect		if (pi.getPortProto() instanceof PrimitivePort)			arc = ((PrimitivePort)pi.getPortProto()).getConnection();		// make sure that this contact connects to the desired arc		if (!viaProto.getPort(0).connectsTo(arc)) return null;		// use this via to make the connection		NodeInst viaNode = NodeInst.makeInstance(viaProto, new Point2D.Double(x, y),			viaProto.getDefWidth(), viaProto.getDefHeight(), pi.getNodeInst().getParent());		if (viaNode == null) return null;//		double wid = arc.getDefaultLambdaFullWidth();		PortInst newPi = viaNode.getOnlyPortInst();		ArcInst zeroArc = ArcInst.makeInstance(arc, pi, newPi);//		ArcInst zeroArc = ArcInst.makeInstanceFull(arc, wid, pi, newPi);		if (zeroArc == null) return null;		return newPi;	}	/**	 * Method to locate the appropriate prototypes for circuit generation.	 */	private String setupForMaker()	{		Technology tech = Technology.getCurrent();		if (tech == Schematics.tech())			tech = User.getSchematicTechnology();		String layer1 = SilComp.getHorizRoutingArc();		String layer2 = SilComp.getVertRoutingArc();		layer1Arc = tech.findArcProto(layer1);		layer2Arc = tech.findArcProto(layer2);		if (layer1Arc == null) return "Unable to find Horizontal Arc " + layer1 + " for MAKER";		if (layer2Arc == null) return "Unable to find Vertical Arc " + layer2 + " for MAKER";		// find the contact between the two layers		for(Iterator<PrimitiveNode> it = tech.getNodes(); it.hasNext(); )		{			PrimitiveNode via = it.next();			PrimitiveNode.Function fun = via.getFunction();			if (fun != PrimitiveNode.Function.CONTACT && fun != PrimitiveNode.Function.CONNECT) continue;			PrimitivePort pp = via.getPort(0);			if (!pp.connectsTo(layer1Arc)) continue;			if (!pp.connectsTo(layer2Arc)) continue;			viaProto = via;			break;		}		if (viaProto == null) return "Unable to get VIA for MAKER";		// find the pin nodes on the connecting layers		layer1Proto = layer1Arc.findPinProto();		if (layer1Proto == null)			return "Unable to get LAYER1-NODE for MAKER";		layer2Proto = layer2Arc.findPinProto();		if (layer2Proto == null)			return "Unable to get LAYER2-NODE for MAKER";		/*		 * find the pure-layer node on the P-well layer		 * if the p-well size is zero don't look for the node		 * allows technologies without p-wells to be routed (i.e. GaAs)		 */		if (SilComp.getPWellHeight() == 0) pWellProto = null; else		{			pWellProto = null;			Layer pWellLay = tech.findLayerFromFunction(Layer.Function.WELLP, -1);			if (pWellLay != null) pWellProto = pWellLay.getPureLayerNode();			if (pWellProto == null)				return "Unable to get LAYER P-WELL for MAKER";		}		if (SilComp.getNWellHeight() == 0) nWellProto = null; else		{			nWellProto = null;			Layer nWellLay = tech.findLayerFromFunction(Layer.Function.WELLN, -1);			if (nWellLay != null) nWellProto = nWellLay.getPureLayerNode();			if (nWellProto == null)				return "Unable to get LAYER P-WELL for MAKER";		}		return null;	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频一区二区在线观看| 亚洲成av人片一区二区三区 | 爽好久久久欧美精品| 五月天精品一区二区三区| 韩国女主播一区| 91麻豆免费在线观看| 欧美浪妇xxxx高跟鞋交| 国产午夜亚洲精品理论片色戒| 国产精品久久国产精麻豆99网站 | 欧美日韩一级大片网址| 久久丝袜美腿综合| 有码一区二区三区| 激情图区综合网| 色综合久久99| 26uuu国产电影一区二区| 国产成人精品aa毛片| 图片区日韩欧美亚洲| 国产a精品视频| 3d动漫精品啪啪1区2区免费| 国产精品午夜在线观看| 奇米精品一区二区三区四区| bt欧美亚洲午夜电影天堂| 日韩一级成人av| 亚洲人成精品久久久久| 国产精品网曝门| 国产亚洲制服色| 亚洲人吸女人奶水| 一区二区三区中文在线| 韩国成人在线视频| 欧美无乱码久久久免费午夜一区 | 亚洲丰满少妇videoshd| 国产剧情一区二区三区| 91精品国产色综合久久久蜜香臀| 亚洲国产高清aⅴ视频| 在线国产电影不卡| 国产精品沙发午睡系列990531| 丝袜美腿一区二区三区| 色综合视频在线观看| 国产亚洲一本大道中文在线| 日韩电影免费在线| 91黄色免费看| 国产精品白丝在线| 国产美女视频91| 日韩西西人体444www| 亚洲一二三四区| 9i在线看片成人免费| 久久久亚洲午夜电影| 日韩电影免费一区| 欧美日韩国产一级| 一区二区三区精品在线| 风间由美一区二区av101| 精品国产制服丝袜高跟| 麻豆视频一区二区| 欧美喷潮久久久xxxxx| 亚洲一区二区三区四区不卡| 色婷婷亚洲一区二区三区| 国产精品欧美经典| 成人午夜又粗又硬又大| 久久久精品国产免大香伊| 九九久久精品视频| 欧美成人免费网站| 精品一区二区三区在线视频| 欧美一区二区三区精品| 爽好久久久欧美精品| 欧美精品在线视频| 日韩中文字幕麻豆| 欧美一区二区三区在| 日韩精品福利网| 在线不卡免费欧美| 免费看黄色91| 欧美mv日韩mv国产网站| 国产在线国偷精品产拍免费yy| 欧美一区二区成人| 久久精品999| 欧美成人官网二区| 欧美一区二区在线看| 亚洲成在人线免费| 欧美日韩一区久久| 日本成人中文字幕在线视频 | 精品一区二区三区久久久| 欧美一区二区免费| 久久精品国产免费看久久精品| 精品日韩99亚洲| 国产精品性做久久久久久| 欧美国产日韩在线观看| a4yy欧美一区二区三区| 亚洲最大成人网4388xx| 欧美日本韩国一区| 精品在线播放午夜| 欧美激情一区二区三区蜜桃视频 | 亚洲日本一区二区| 欧美性videosxxxxx| 日本女优在线视频一区二区| 亚洲精品在线电影| 成人avav影音| 亚洲h在线观看| 日韩精品一区二区在线观看| 国产很黄免费观看久久| 成人欧美一区二区三区视频网页| 色综合视频一区二区三区高清| 性欧美大战久久久久久久久| 日韩一级在线观看| 国产成人8x视频一区二区| 亚洲视频一区二区在线| 欧美日韩aaa| 国产精品18久久久| 亚洲综合小说图片| 日韩精品一区二区三区四区视频| 丁香另类激情小说| 亚洲午夜激情网页| 久久看人人爽人人| 欧美亚洲精品一区| 国产揄拍国内精品对白| 亚洲欧美一区二区三区极速播放 | 无码av免费一区二区三区试看| 日韩欧美不卡在线观看视频| 丰满少妇在线播放bd日韩电影| 亚洲欧美一区二区三区极速播放| 欧美一区二区三区在线观看视频| 国产精品一区二区不卡| 亚洲一区二区三区四区的| 久久―日本道色综合久久| 色8久久人人97超碰香蕉987| 国内久久婷婷综合| 亚洲高清一区二区三区| 国产欧美精品区一区二区三区| 在线一区二区三区| 狠狠色综合日日| 亚洲国产成人91porn| 中文字幕不卡的av| 亚洲一区欧美一区| 日本一区二区电影| 91精品一区二区三区在线观看| av亚洲精华国产精华| 麻豆精品一区二区综合av| 亚洲手机成人高清视频| 亚洲精品一区二区三区四区高清| 91高清视频在线| 国产成人无遮挡在线视频| 日产国产欧美视频一区精品| 亚洲色图制服诱惑| 久久久亚洲欧洲日产国码αv| 欧美美女bb生活片| 色综合一个色综合亚洲| 久久精品国产99久久6| 亚洲电影一区二区三区| 中文字幕一区三区| 国产女主播一区| 精品国产精品网麻豆系列 | 蜜桃免费网站一区二区三区| 亚洲人亚洲人成电影网站色| 久久久久一区二区三区四区| 91麻豆精品久久久久蜜臀| 在线精品视频一区二区三四| 岛国精品在线观看| 国精产品一区一区三区mba桃花| 日韩精品一二三| 亚洲国产毛片aaaaa无费看 | 在线播放中文字幕一区| 欧洲日韩一区二区三区| 99综合影院在线| 国产成人aaa| 国产宾馆实践打屁股91| 精品一区二区三区欧美| 麻豆传媒一区二区三区| 日本成人在线一区| 青椒成人免费视频| 蜜臀精品一区二区三区在线观看| 亚洲成人av福利| 亚洲国产精品一区二区久久恐怖片 | 一区二区三区高清在线| 国产精品剧情在线亚洲| 中文字幕不卡在线观看| 中文乱码免费一区二区| 国产亚洲美州欧州综合国| 欧美精品一区二区三区蜜桃| 欧美xxxx老人做受| 久久综合精品国产一区二区三区 | 精品一二三四在线| 久久se这里有精品| 国产伦精一区二区三区| 国产九九视频一区二区三区| 国产一区二区三区综合| 国产一区二区三区久久久| 国产九色精品成人porny | 中文字幕一区在线观看视频| 国产风韵犹存在线视精品| 韩国成人在线视频| 国产成人日日夜夜| 97aⅴ精品视频一二三区| 91丨九色丨国产丨porny| 91行情网站电视在线观看高清版| 在线观看国产日韩| 在线电影一区二区三区| 欧美一区二区人人喊爽| www一区二区| 国产精品欧美综合在线| 一区二区三区四区在线免费观看 | 日韩情涩欧美日韩视频| 久久综合色之久久综合|