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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? maker.java

?? The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: Maker.java * Silicon compiler tool (QUISC): make Electric circuitry * Written by Andrew R. Kostiuk, Queen's University. * Translated to Java by Steven M. Rubin, Sun Microsystems. * * Copyright (c) 2005 Sun Microsystems and Static Free Software * * Electric(tm) is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Electric(tm) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Electric(tm); see the file COPYING.  If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, Mass 02111-1307, USA. */package com.sun.electric.tool.sc;import com.sun.electric.database.geometry.Orientation;import com.sun.electric.database.geometry.Poly;import com.sun.electric.database.hierarchy.Cell;import com.sun.electric.database.hierarchy.Export;import com.sun.electric.database.hierarchy.Library;import com.sun.electric.database.prototype.PortCharacteristic;import com.sun.electric.database.prototype.PortProto;import com.sun.electric.database.topology.ArcInst;import com.sun.electric.database.topology.NodeInst;import com.sun.electric.database.topology.PortInst;import com.sun.electric.technology.ArcProto;import com.sun.electric.technology.Layer;import com.sun.electric.technology.PrimitiveNode;import com.sun.electric.technology.PrimitivePort;import com.sun.electric.technology.Technology;import com.sun.electric.technology.technologies.Schematics;import com.sun.electric.tool.user.User;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import java.util.Iterator;/** * The generation part of the Silicon Compiler tool. */public class Maker{	private static class MakerData	{		/** cell being layed out */			GetNetlist.SCCell	cell;		/** list of rows */					MakerRow		rows;		/** list of channels */				MakerChannel	channels;		/** list of vdd ports */			MakerPower		power;		/** list of ground ports */			MakerPower		ground;		/** minimum x position */			double			minX;		/** maximum x position */			double			maxX;		/** minimum y position */			double			minY;		/** maximum y position */			double			maxY;	};	private static class MakerRow	{		/** row number */					int				number;		/** instances in rows */			MakerInst		members;		/** minimum X position */			double			minX;		/** maximum X position */			double			maxX;		/** minimum Y position */			double			minY;		/** maximum Y position */			double			maxY;		/** processing bits */				int				flags;		/** last row */						MakerRow		last;		/** next row */						MakerRow		next;	};	private static class MakerInst	{		/** reference place */				Place.NBPlace	place;		/** reference row */				MakerRow		row;		/** X position */					double			xPos;		/** Y position */					double			yPos;		/** size in X */					double			xSize;		/** size in Y */					double			ySize;		/** processing flags */				int				flags;		/** leaf instance */				NodeInst		instance;		/** next in row */					MakerInst		next;	};	private static class MakerChannel	{		/** number of channel */			int				number;		/** list of tracks */				MakerTrack		tracks;		/** number of tracks */				int				numTracks;		/** minimum Y position */			double			minY;		/** Y size */						double			ySize;		/** processing bits */				int				flags;		/** last channel */					MakerChannel	last;		/** next channel */					MakerChannel	next;	};	private static class MakerTrack	{		/** track number */					int				number;		/** nodes in track */				MakerNode		nodes;		/** reference track */				Route.RouteTrack	track;		/** Y position */					double			yPos;		/** processing bits */				int				flags;		/** previous track */				MakerTrack		last;		/** next track */					MakerTrack		next;	};	private static class MakerNode	{		/** list of vias */					MakerVia		vias;		/** next node in track */			MakerNode		next;	};	private static final int VIASPECIAL	= 0x00000001;	private static final int VIAEXPORT	= 0x00000002;	private static final int VIAPOWER	= 0x00000004;	private static class MakerVia	{		/** X position */					double			xPos;		/** associated channel port */		Route.RouteChPort	chPort;		/** associated leaf instance */		NodeInst		instance;		/** flags for processing */			int				flags;		/** export port */					Route.RouteExport	xPort;		/** next via */						MakerVia		next;	};	private static class MakerPower	{		/** list of power ports */			MakerPowerPort ports;		/** vertical position of row */		double			yPos;		/** next in row list */				MakerPower		next;		/** last in row list */				MakerPower		last;	};	private static class MakerPowerPort	{		/** instance */						MakerInst		inst;		/** port on instance */				GetNetlist.SCNiPort port;		/** resultant x position */			double			xPos;		/** next in list */					MakerPowerPort	next;		/** last in list */					MakerPowerPort	last;	};	private PrimitiveNode layer1Proto;	private PrimitiveNode layer2Proto;	private PrimitiveNode viaProto;	private PrimitiveNode pWellProto;	private PrimitiveNode nWellProto;	private ArcProto layer1Arc;	private ArcProto layer2Arc;	/**	 * Method to make Electric circuitry from the results of place-and-route.	 *	 *   o  Determination of final position	 *   o  Include squeezing rows in vertical direction	 *   o  Squeeze tracks together if nonadjacent via	 *   o  Creating ties to power and ground	 *   o  Routing Power and Ground buses	 *   o  Creation in Electric's database	 */	public Object makeLayout(Library destLib, GetNetlist gnl)	{		// check if working in a cell		if (gnl.curSCCell == null) return "No cell selected";		// check if placement structure exists		if (gnl.curSCCell.placement == null)			return "No PLACEMENT structure for cell '" + gnl.curSCCell.name + "'";		// check if route structure exists		if (gnl.curSCCell.route == null)			return "No ROUTE structure for cell '" + gnl.curSCCell.name + "'";		// set up make structure		MakerData makeData = setUp(gnl.curSCCell);		// create actual layout		Object result = createLayout(destLib, makeData);		if (result instanceof String) return result;		return result;	}	/**	 * Method to create the data structures to define the precise layout of the cell.	 * Decide exactly where cells are placed, tracks are laid, via are positioned, etc.	 * @param cell pointer to cell to layout.	 * @return created data.	 */	private MakerData setUp(GetNetlist.SCCell cell)	{		// create top level data structure		MakerData data = new MakerData();		data.cell = cell;		data.rows = null;		data.channels = null;		data.power = null;		data.ground = null;		data.minX = Double.MAX_VALUE;		data.maxX = Double.MIN_VALUE;		data.minY = Double.MAX_VALUE;		data.maxY = Double.MIN_VALUE;		// create Maker Channel and Track data structures		double rowToTrack = (SilComp.getViaSize() / 2) + SilComp.getMinMetalSpacing();		double minTrackToTrack = (SilComp.getViaSize() / 2) +			SilComp.getMinMetalSpacing() + (SilComp.getHorizArcWidth() / 2);		double maxTrackToTrack = SilComp.getViaSize() + SilComp.getMinMetalSpacing();		MakerChannel lastMChan = null;		for (Route.RouteChannel chan = cell.route.channels; chan != null; chan = chan.next)		{			// create Maker Channel structute			MakerChannel mChan = new MakerChannel();			mChan.number = chan.number;			mChan.tracks = null;			mChan.numTracks = 0;			mChan.ySize = 0;			mChan.flags = 0;			mChan.next = null;			mChan.last = lastMChan;			if (lastMChan != null)			{				lastMChan.next = mChan;			} else			{				data.channels = mChan;			}			lastMChan = mChan;			// create Make Track structures			MakerTrack lastMTrack = null;			double yPos = 0;			for (Route.RouteTrack track = chan.tracks; track != null; track = track.next)			{				MakerTrack mTrack = new MakerTrack();				mTrack.number = track.number;				mTrack.nodes = null;				mTrack.track = track;				mTrack.flags = 0;				mTrack.next = null;				mTrack.last = lastMTrack;				if (lastMTrack != null)				{					lastMTrack.next = mTrack;				} else				{					mChan.tracks = mTrack;				}				lastMTrack = mTrack;				mChan.numTracks++;				if (mTrack.number == 0)				{					yPos += rowToTrack;					mTrack.yPos = yPos;				} else				{					// determine if min or max track to track spacing is used					double deltaY = minTrackToTrack;					Route.RouteTrackMem tr1Mem = track.nodes;					Route.RouteTrackMem tr2Mem = track.last.nodes;					Route.RouteChPort tr1Port = tr1Mem.node.firstPort;					Route.RouteChPort tr2Port = tr2Mem.node.firstPort;					while (tr1Port != null && tr2Port != null)					{						if (Math.abs(tr1Port.xPos - tr2Port.xPos) < maxTrackToTrack)						{							deltaY = maxTrackToTrack;							break;						}						if (tr1Port.xPos < tr2Port.xPos)						{							tr1Port = tr1Port.next;							if (tr1Port == null)							{								tr1Mem = tr1Mem.next;								if (tr1Mem != null)									tr1Port = tr1Mem.node.firstPort;							}						} else						{							tr2Port = tr2Port.next;							if (tr2Port == null)							{								tr2Mem = tr2Mem.next;								if (tr2Mem != null)									tr2Port = tr2Mem.node.firstPort;							}						}					}					yPos += deltaY;					mTrack.yPos = yPos;				}				if (track.next == null)					yPos += rowToTrack;			}			mChan.ySize = yPos;		}		// create Maker Rows and Instances data structures		MakerChannel mChan = data.channels;		mChan.minY = 0;		double yPos = mChan.ySize;		MakerRow lastMRow = null;		for(Place.RowList row : cell.placement.theRows)		{			// create maker row data structure			MakerRow mRow = new MakerRow();			mRow.number = row.rowNum;			mRow.members = null;			mRow.minX = Double.MAX_VALUE;			mRow.maxX = Double.MIN_VALUE;			mRow.minY = Double.MAX_VALUE;			mRow.maxY = Double.MIN_VALUE;			mRow.flags = 0;			mRow.next = null;			mRow.last = lastMRow;			if (lastMRow != null)			{				lastMRow.next = mRow;			} else			{				data.rows = mRow;			}			lastMRow = mRow;			// determine permissible top and bottom overlap			double tOffset = Double.MIN_VALUE;			double bOffset = Double.MAX_VALUE;			for (Place.NBPlace place = row.start; place != null; place = place.next)			{				if (place.cell.type != GetNetlist.LEAFCELL) continue;				GetNetlist.SCCellNums cNums = GetNetlist.getLeafCellNums((Cell)place.cell.np);				tOffset = Math.max(tOffset, SilComp.leafCellYSize((Cell)place.cell.np) - cNums.topActive);				bOffset = Math.min(bOffset, cNums.bottomActive);			}			yPos -= bOffset;			// create maker instance structure for each member in the row			MakerInst lastMInst = null;			for (Place.NBPlace place = row.start; place != null; place = place.next)			{				if (place.cell.type != GetNetlist.LEAFCELL &&					place.cell.type != GetNetlist.FEEDCELL &&					place.cell.type != GetNetlist.LATERALFEED) continue;				MakerInst mInst = new MakerInst();				mInst.place = place;				mInst.row = mRow;				mInst.xPos = place.xPos;				mInst.yPos = yPos;				mInst.xSize = place.cell.size;				if (place.cell.type == GetNetlist.LEAFCELL)				{					mInst.ySize = SilComp.leafCellYSize((Cell)place.cell.np);					// add power ports					for (GetNetlist.SCNiPort iport = place.cell.power; iport != null; iport = iport.next)					{						MakerPowerPort powerPort = new MakerPowerPort();						powerPort.inst = mInst;						powerPort.port = iport;						if ((mRow.number % 2) != 0)						{							powerPort.xPos = mInst.xPos + mInst.xSize - iport.xPos;						} else						{							powerPort.xPos = mInst.xPos + iport.xPos;						}						powerPort.next = null;						powerPort.last = null;						double portYPos = mInst.yPos + SilComp.leafPortYPos((Export)iport.port);						MakerPower pList;						for (pList = data.power; pList != null; pList = pList.next)						{							if (pList.yPos == portYPos) break;						}						if (pList == null)						{							pList = new MakerPower();							pList.ports = null;							pList.yPos = portYPos;							MakerPower lastPList = null;							MakerPower nextPList;							for (nextPList = data.power; nextPList != null; nextPList = nextPList.next)							{								if (portYPos < nextPList.yPos) break;								lastPList = nextPList;							}							pList.next = nextPList;							pList.last = lastPList;							if (lastPList != null)							{								lastPList.next = pList;							} else							{								data.power = pList;							}							if (nextPList != null)							{								nextPList.last = pList;							}						}						MakerPowerPort lastPort = null;						MakerPowerPort nextPort;						for (nextPort = pList.ports; nextPort != null; nextPort = nextPort.next)						{							if (powerPort.xPos < nextPort.xPos) break;							lastPort = nextPort;						}						powerPort.next = nextPort;						powerPort.last = lastPort;						if (lastPort != null)						{							lastPort.next = powerPort;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电影免费观看高清完整版在线 | 免费在线观看成人| 韩国av一区二区| 91亚洲午夜精品久久久久久| 91精品国产91久久久久久一区二区 | 精品久久久久久亚洲综合网 | www成人在线观看| 一区二区在线免费| 狠狠色丁香久久婷婷综合_中| 色婷婷综合激情| 久久影院电视剧免费观看| 一区二区三区在线视频免费| 国产乱子轮精品视频| 欧美亚洲动漫精品| 国产精品欧美一区喷水| 久久国产尿小便嘘嘘| 欧美亚洲一区二区在线| 欧美极品xxx| 六月婷婷色综合| 欧美日韩小视频| 国产精品国产a| 国产精品亚洲人在线观看| 欧美日本一区二区三区四区| 亚洲色图另类专区| av一二三不卡影片| 国产视频视频一区| 韩国女主播一区二区三区| 欧美一区二区三区思思人| 一区二区免费看| 91黄色激情网站| 欧美高清在线视频| 国产成人在线影院| 欧美精品一区二区高清在线观看| 午夜欧美一区二区三区在线播放| 色综合久久综合网97色综合| 国产精品对白交换视频| 粉嫩av亚洲一区二区图片| 26uuu亚洲综合色欧美| 国产美女精品一区二区三区| 精品国产乱码久久久久久牛牛 | 捆绑调教美女网站视频一区| 欧美日韩1234| 日本大胆欧美人术艺术动态| 欧美伦理电影网| 午夜日韩在线观看| 日韩欧美一级片| 国产精品亚洲午夜一区二区三区| 欧美二区三区91| 美国欧美日韩国产在线播放| 日韩欧美在线1卡| 精品一区二区三区蜜桃| 久久综合视频网| 国产精品1区2区3区| 国产精品热久久久久夜色精品三区 | 精品国产免费一区二区三区四区| 蜜臀久久99精品久久久画质超高清| 欧美一区二区在线观看| 美女一区二区三区| 国产目拍亚洲精品99久久精品| 成人激情免费视频| 一区二区三区色| 欧美人xxxx| 国模套图日韩精品一区二区| 中文字幕高清不卡| 欧美视频在线一区二区三区 | 亚洲一区在线观看视频| 911精品产国品一二三产区| 美女视频一区二区| 国产日韩在线不卡| 色爱区综合激月婷婷| 免费xxxx性欧美18vr| 国产精品久久久久久久久晋中| 91黄色激情网站| 狠狠色综合播放一区二区| 国产精品久久99| 欧美日本国产视频| 粉嫩嫩av羞羞动漫久久久| 亚洲午夜成aⅴ人片| 久久久久国产免费免费| 91黄色小视频| 国产精品1024久久| 亚洲成人手机在线| 久久精品夜色噜噜亚洲a∨| 欧美伊人久久大香线蕉综合69| 精彩视频一区二区三区| 亚洲综合小说图片| 国产欧美一区二区三区在线看蜜臀| 日本韩国欧美国产| 国产成人综合网| 日本成人超碰在线观看| 亚洲人成在线播放网站岛国| 日韩一卡二卡三卡| 在线免费观看日本一区| 国产一区二区女| 午夜av一区二区三区| 国产精品久久久久久久久久久免费看 | 久久99精品久久只有精品| 亚洲免费在线视频| 337p粉嫩大胆噜噜噜噜噜91av| 欧美天天综合网| 成人涩涩免费视频| 激情综合色播五月| 青青草国产成人99久久| 亚洲一区二区三区四区的| 国产欧美久久久精品影院| 日韩欧美一级二级| 欧美日本免费一区二区三区| 在线免费观看日本欧美| 色综合天天视频在线观看| 国产精品一级在线| 久久国产精品无码网站| 婷婷中文字幕综合| 亚洲成人中文在线| 夜夜嗨av一区二区三区四季av| 国产精品蜜臀av| 国产三级精品视频| 国产日韩欧美一区二区三区乱码 | 亚洲国产日韩精品| 国产精品麻豆一区二区 | 极品少妇一区二区三区精品视频| 亚洲韩国一区二区三区| 亚洲成av人片一区二区梦乃| 一区二区三区国产精品| 一区二区在线观看免费| 亚洲欧美一区二区三区孕妇| 综合网在线视频| 亚洲欧美一区二区久久| 亚洲视频免费在线观看| 亚洲欧美日韩国产手机在线| 亚洲精品少妇30p| 亚洲精品va在线观看| 亚洲h精品动漫在线观看| 亚洲高清久久久| 婷婷成人综合网| 久久99深爱久久99精品| 国产激情视频一区二区在线观看| 不卡一区二区中文字幕| 色综合色狠狠综合色| 欧美日韩中文字幕一区二区| 3d成人动漫网站| 精品少妇一区二区三区日产乱码 | 一区二区三区国产豹纹内裤在线| 亚洲一区在线看| 免费成人在线视频观看| 成人看片黄a免费看在线| 一本色道久久加勒比精品| 欧美日韩一区小说| 精品免费国产二区三区| 国产精品国产三级国产三级人妇| 一区二区三区资源| 青青青伊人色综合久久| 国产丶欧美丶日本不卡视频| av资源站一区| 欧美久久高跟鞋激| 国产日韩亚洲欧美综合| 亚洲欧美aⅴ...| 91在线观看免费视频| 91精品视频网| 亚洲国产精品av| 亚洲成人1区2区| 国产老女人精品毛片久久| 日本久久一区二区三区| 日韩女同互慰一区二区| 亚洲欧洲精品一区二区三区不卡| 亚洲成人午夜电影| 成人国产精品免费网站| 制服丝袜亚洲网站| 中文字幕视频一区| 韩国精品主播一区二区在线观看 | 国产精品一区二区免费不卡 | 欧美性猛交一区二区三区精品 | 欧美精品tushy高清| 国产视频911| 日韩黄色免费电影| 一本大道久久a久久精品综合| 欧美一级片在线| 亚洲精品ww久久久久久p站| 国产成人日日夜夜| 日韩午夜激情电影| 亚洲国产成人av好男人在线观看| 国产麻豆精品一区二区| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲精品高清在线观看| 激情久久五月天| 欧美久久高跟鞋激| 亚洲国产一区在线观看| a亚洲天堂av| 国产精品视频第一区| 毛片一区二区三区| 在线播放亚洲一区| 一区二区欧美精品| 色婷婷av一区二区三区之一色屋| 国产日产欧美精品一区二区三区| 免费观看91视频大全| 欧美日韩夫妻久久| 亚洲福利视频一区二区| 一本到不卡免费一区二区| 亚洲裸体在线观看| 99精品热视频| 中文字幕日韩一区二区|