⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sogrouteradapter.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
字号:
package com.sun.electric.tool.generator.flag.router;

import java.util.ArrayList;
import java.util.List;

import com.sun.electric.database.hierarchy.Cell;
import com.sun.electric.database.network.Netlist;
import com.sun.electric.database.network.Network;
import com.sun.electric.database.topology.ArcInst;
import com.sun.electric.database.topology.PortInst;
import com.sun.electric.technology.ArcProto;
import com.sun.electric.technology.Technology;
import com.sun.electric.tool.Job;
import com.sun.electric.tool.routing.SeaOfGates;
import com.sun.electric.tool.routing.SeaOfGatesEngine;

/** The SogRouter is an adapter between FLAG and Electric's built in
 * Sea of Gates router. */
public class SogRouterAdapter {
    private static final boolean SORT_UNROUTED_ARCS = true;
    private static final boolean DUMP_UNROUTED_ARCS = false;
	private final Job job;
	private final SeaOfGatesEngine seaOfGates = SORT_UNROUTED_ARCS ? null : new SeaOfGatesEngine();
	private final Technology generic = Technology.findTechnology("Generic");
	private final ArcProto unroutedArc = generic.findArcProto("Unrouted");

	private Cell findParent(List<ToConnect> toConns) {
		for (ToConnect tc : toConns) {
			for (PortInst pi : tc.getPortInsts()) {
				return pi.getNodeInst().getParent();
			}
		}
		return null;
	}

	private List<ArcInst> addUnroutedArcs(Cell cell, List<ToConnect> toConns) {
		Netlist nl = cell.getUserNetlist();

		List<ArcInst> unroutedArcs = new ArrayList<ArcInst>();
		for (ToConnect tc : toConns) {
			PortInst firstPi = null;
			Network firstNet = null;
			for (PortInst pi : tc.getPortInsts()) {
				if (firstPi==null) {
					firstPi = pi;
					firstNet = nl.getNetwork(firstPi);
					continue;
				}
				Network net = nl.getNetwork(pi);
				if (firstNet==net) continue;
				ArcInst ai = ArcInst.newInstanceBase(unroutedArc, 1, firstPi, pi);
				unroutedArcs.add(ai);
			}
		}
		return unroutedArcs;
	}

	// ----------------------------- public methods ---------------------------
	public SogRouterAdapter(Job job) {this.job = job;}

	public void route(List<ToConnect> toConns) {
		Cell cell = findParent(toConns);
		if (cell==null) return; 					// no work to do

		List<ArcInst> arcsToRoute = addUnroutedArcs(cell, toConns);
        if (DUMP_UNROUTED_ARCS) {
            String newName = cell.getName() + "_unrouted{lay}";
            Cell.copyNodeProto(cell, cell.getLibrary(), newName, true);
        }

        if (SORT_UNROUTED_ARCS)
            SeaOfGates.seaOfGatesRoute(cell);
        else
            seaOfGates.routeIt(job, cell, arcsToRoute);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -