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

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

?? 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区视频在线看| 欧美视频在线一区二区三区| 欧美成人女星排行榜| 美女视频黄a大片欧美| 日韩色视频在线观看| 麻豆精品国产91久久久久久| 欧美va亚洲va香蕉在线| 国产剧情av麻豆香蕉精品| 2024国产精品| 成人午夜电影久久影院| 亚洲精品自拍动漫在线| 5566中文字幕一区二区电影| 久久电影国产免费久久电影| 国产亚洲精久久久久久| av一本久道久久综合久久鬼色| 亚洲三级视频在线观看| 欧美日韩国产色站一区二区三区| 蜜臀av亚洲一区中文字幕| 久久综合色鬼综合色| 99精品国产99久久久久久白柏| 一区二区三区精品在线观看| 在线成人av网站| 国产大片一区二区| 亚洲国产视频一区| 欧美精品一区男女天堂| 色综合天天综合网国产成人综合天 | 亚洲午夜久久久久中文字幕久| 欧美精品 日韩| 国产成人精品免费在线| 亚洲一区二区三区四区在线| 2024国产精品| 欧美精品久久天天躁| 风间由美性色一区二区三区| 一个色在线综合| 久久青草国产手机看片福利盒子| 91久久精品网| 国产99一区视频免费| 性做久久久久久久免费看| 中文字幕欧美日韩一区| 91精品国产综合久久福利软件| hitomi一区二区三区精品| 日本亚洲欧美天堂免费| 最新不卡av在线| 久久蜜桃香蕉精品一区二区三区| 欧美视频完全免费看| 成人永久免费视频| 视频一区视频二区在线观看| 中文字幕一区二区三区av| 日韩欧美中文字幕一区| 欧美性受xxxx黑人xyx性爽| 国产成人自拍在线| 理论电影国产精品| 午夜精品久久久久久久| 亚洲乱码中文字幕综合| 国产性天天综合网| 日韩三级精品电影久久久| 欧美日韩精品二区第二页| 成人免费视频网站在线观看| 久久99精品国产麻豆婷婷| 亚洲成人在线免费| 亚洲精品成人在线| 中文字幕中文字幕一区二区| 久久久777精品电影网影网 | 国产一区999| 美腿丝袜亚洲三区| 人人狠狠综合久久亚洲| 亚洲一区二区三区视频在线| 亚洲黄网站在线观看| 日韩一区在线播放| 欧美激情一区二区三区蜜桃视频| 久久综合狠狠综合| 精品欧美黑人一区二区三区| 正在播放亚洲一区| 这里只有精品视频在线观看| 555www色欧美视频| 欧美久久久久久久久久| 911精品国产一区二区在线| 欧美日韩精品二区第二页| 欧美精品在线观看播放| 欧美日韩一区不卡| 中文字幕不卡在线观看| 91精品国产aⅴ一区二区| 欧美三级电影精品| 777亚洲妇女| 日韩亚洲欧美中文三级| 亚洲精品在线观看网站| 国产亚洲精品aa| 国产精品久久久久天堂| 亚洲日本va午夜在线电影| 亚洲人成网站影音先锋播放| 亚洲毛片av在线| 午夜精品123| 精品一区二区三区视频在线观看 | 久久91精品国产91久久小草| 精品中文字幕一区二区| 国产精一区二区三区| 大美女一区二区三区| av动漫一区二区| 欧美亚洲高清一区| 日韩色在线观看| 国产精品污www在线观看| 亚洲欧洲av色图| 亚洲午夜影视影院在线观看| 日本色综合中文字幕| 国产在线精品不卡| 99免费精品视频| 制服丝袜中文字幕一区| 国产农村妇女精品| 亚洲乱码国产乱码精品精的特点| 天堂一区二区在线免费观看| 国产精品影视天天线| av资源站一区| 欧美高清性hdvideosex| 国产日韩欧美精品一区| 亚洲二区在线观看| 国产一区二区三区黄视频| av一区二区三区在线| 4hu四虎永久在线影院成人| 久久久精品综合| 午夜精品福利在线| 高清shemale亚洲人妖| 欧美日韩一区成人| 国产精品欧美久久久久一区二区| 亚洲福利视频三区| 99久久综合精品| 欧美电影免费观看高清完整版在 | 亚洲综合网站在线观看| 激情另类小说区图片区视频区| 一本色道久久综合亚洲aⅴ蜜桃| 精品久久五月天| 亚洲国产精品一区二区久久恐怖片| 久久精品久久综合| 欧美性xxxxxxxx| 亚洲国产电影在线观看| 精品一区二区免费在线观看| 欧美在线制服丝袜| 一色屋精品亚洲香蕉网站| 国产一区在线精品| 69堂成人精品免费视频| 一区二区三区资源| 成人免费高清在线| 久久一区二区三区国产精品| 秋霞影院一区二区| 色综合久久88色综合天天6| 欧美激情一区二区三区四区| 国内精品在线播放| 欧美伦理视频网站| 一区二区三区在线视频免费观看 | 亚洲欧美日韩国产手机在线| 国产毛片精品一区| 精品国产亚洲一区二区三区在线观看| 亚洲国产精品一区二区www在线| 97成人超碰视| 国产精品视频一二三| 国产成人午夜高潮毛片| 欧美不卡视频一区| 美女脱光内衣内裤视频久久网站 | av在线综合网| 国产精品日韩成人| 国产河南妇女毛片精品久久久| 日韩精品一区二区三区四区| 免费在线看一区| 日韩一区二区在线看| 免费人成精品欧美精品| 91精品国产综合久久婷婷香蕉| 日韩精彩视频在线观看| 欧美精品在线一区二区| 日本不卡在线视频| 日韩午夜av一区| 久久国内精品自在自线400部| 日韩欧美国产电影| 国模无码大尺度一区二区三区| 精品国产伦一区二区三区观看体验| 日韩电影免费在线| 精品国内二区三区| 国产福利一区二区三区在线视频| 精品99久久久久久| 国产不卡一区视频| 中文字幕亚洲在| 一本色道久久综合精品竹菊| 亚洲一区二区av电影| 91精品国模一区二区三区| 韩国欧美国产1区| 久久九九久精品国产免费直播| 成人一区在线观看| 1024成人网| 欧美丰满美乳xxx高潮www| 麻豆成人久久精品二区三区小说| 日韩你懂的在线播放| 高清国产一区二区| 一区二区高清免费观看影视大全| 欧美日韩国产首页| 国产美女精品一区二区三区| 亚洲图片激情小说| 欧美性猛交xxxx黑人交| 美女视频免费一区| 日韩一区中文字幕| 91精品国产91久久久久久最新毛片| 精品在线播放免费| 中文字幕一区二区三区精华液|