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

📄 mocmosgenerator.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
字号:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: MoCMOSGenerator.java * Written by: Jonathan Gainsley, Sun Microsystems. * * Copyright (c) 2003 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.generator.layout.gates;import com.sun.electric.tool.generator.layout.StdCellParams;import com.sun.electric.database.hierarchy.Cell;public class MoCMOSGenerator {    /**     * Generate a Gate     * @param gateType the gate type ("inv", "nand2", etc)     * @param Xstrength the drive strength of the gate     * @param sc the standard cell parameters     * @return the generated Cell     */    public static Cell makeGate(String gateType, double Xstrength, StdCellParams sc) {        double x = Xstrength;        String pNm = gateType;        Cell gate = null;        if      (pNm == null)                 return null;		else if (pNm.equals("inv"))           gate = Inv.makePart(x, sc);		else if (pNm.equals("inv2i"))         gate = Inv2i.makePart(x, sc);		else if (pNm.equals("inv2iKn"))       gate = Inv2iKn.makePart(x, sc);		else if (pNm.equals("inv2iKp"))       gate = Inv2iKp.makePart(x, sc);		else if (pNm.equals("invCLK"))        gate = InvCLK.makePart(x, sc);		else if (pNm.equals("invCTLn"))       gate = InvCTLn.makePart(x, sc);		else if (pNm.equals("invHT"))         gate = InvHT.makePart(x, sc);		else if (pNm.equals("invLT"))         gate = InvLT.makePart(x, sc);		else if (pNm.equals("inv_passgate"))  gate = Inv_passgate.makePart(x, sc);		else if (pNm.equals("mullerC_sy"))	  gate = MullerC_sy.makePart(x, sc);		else if (pNm.equals("nand2"))         gate = Nand2.makePart(x, sc);		//else if (pNm.equals("nand2HLT"))      gate = Nand2HLT.makePart(x, sc);		else if (pNm.equals("nand2HLT_sy"))   gate = Nand2HLT_sy.makePart(x, sc);		else if (pNm.equals("nand2LT"))       gate = Nand2LT.makePart(x, sc);		else if (pNm.equals("nand2LT_sy"))    gate = Nand2LT_sy.makePart(x, sc);		else if (pNm.equals("nand2PH"))       gate = Nand2PH.makePart(x, sc);    		//else if (pNm.equals("nand2PHfk"))     gate = Nand2PHfk.makePart(x, sc);    		else if (pNm.equals("nand2_sy"))      gate = Nand2_sy.makePart(x, sc);		else if (pNm.equals("nand2en"))       gate = Nand2en.makePart(x, sc);		else if (pNm.equals("nand2LTen"))     gate = Nand2LTen.makePart(x, sc);		else if (pNm.equals("nand2HTen"))     gate = Nand2HTen.makePart(x, sc);		//else if (pNm.equals("nand2en_sy"))    gate = Nand2en_sy.makePart(x, sc);		else if (pNm.equals("nand3"))         gate = Nand3.makePart(x, sc);		else if (pNm.equals("nand3LT"))       gate = Nand3LT.makePart(x, sc);		else if (pNm.equals("nand3LT_sy3"))   gate = Nand3LT_sy3.makePart(x, sc);		else if (pNm.equals("nand3LTen"))     gate = Nand3LTen.makePart(x, sc);		//else if (pNm.equals("nand3LTen_sy"))  gate = Nand3LTen_sy.makePart(x, sc);		//else if (pNm.equals("nand3LTen_sy3")) gate = Nand3LTen_sy3.makePart(x, sc);		else if (pNm.equals("nand3MLT"))      gate = Nand3MLT.makePart(x, sc);		//else if (pNm.equals("nand3_sy3"))     gate = Nand3_sy3.makePart(x, sc);		else if (pNm.equals("nand3en"))       gate = Nand3en.makePart(x, sc);		//else if (pNm.equals("nand3en_sy"))    gate = Nand3en_sy.makePart(x, sc);		//else if (pNm.equals("nand3en_sy3"))   gate = Nand3en_sy3.makePart(x, sc);		else if (pNm.equals("nms1"))          gate = Nms1.makePart(x, sc);		else if (pNm.equals("nms2"))          gate = Nms2.makePart(x, sc);		else if (pNm.equals("nms2_sy"))       gate = Nms2_sy.makePart(x, sc);		else if (pNm.equals("nms3_sy3"))      gate = Nms3_sy3.makePart(x, sc);		else if (pNm.equals("nor2"))          gate = Nor2.makePart(x, sc);		//else if (pNm.equals("nor2LT"))        gate = Nor2LT.makePart(x, sc);		else if (pNm.equals("nor2kresetV"))   gate = Nor2kresetV.makePart(x, sc);		else if (pNm.equals("pms1"))          gate = Pms1.makePart(x, sc);		else if (pNm.equals("pms2"))          gate = Pms2.makePart(x, sc);		else if (pNm.equals("pms2_sy"))       gate = Pms2_sy.makePart(x, sc);		// The layout of these keeper gates are identical to normal gates. 		// They're just treated differently by Logical Effort tool.		else if (pNm.equals("invK"))          gate = Inv.makePart(x, sc);		else if (pNm.equals("nand2k"))        gate = Nand2.makePart(x, sc);		else if (pNm.equals("nms1K"))         gate = Nms1.makePart(x, sc);		else if (pNm.equals("nms2K"))         gate = Nms2.makePart(x, sc);		else if (pNm.equals("pms1K"))         gate = Pms1.makePart(x, sc);		        return gate;    }    private static int gateNb;    private static void tracePass(double x) {        System.out.println("\nbegin pass x="+x);        gateNb=0;    }    private static void traceGate() {        System.out.print(" "+gateNb++);        System.out.flush();    }    /**    * Generates all gates with the given size and standard cell params    * @param x the drive strength    * @param stdCell the standard cell parameters    */    public static void generateAllGates(double x, StdCellParams stdCell) {        tracePass(x);		Inv.makePart(x, stdCell); 			traceGate();		Inv_star_wideOutput.makePart(x, "", stdCell); traceGate();		Inv2i.makePart(x, stdCell); 		traceGate();		Inv2iKn.makePart(x, stdCell); 		traceGate();		Inv2iKp.makePart(x, stdCell); 		traceGate();		InvCLK.makePart(x, stdCell); 		traceGate();		InvCTLn.makePart(x, stdCell); 		traceGate();		InvHT.makePart(x, stdCell); 		traceGate();		InvLT.makePart(x, stdCell); 		traceGate();		Inv_passgate.makePart(x, stdCell); 	traceGate();		MullerC_sy.makePart(x, stdCell); 	traceGate();		Nand2.makePart(x, stdCell); 		traceGate();		//Nand2HLT.makePart(x, stdCell); 		traceGate(); //no purple schematic		Nand2HLT_sy.makePart(x, stdCell); 	traceGate();		Nand2LT.makePart(x, stdCell); 		traceGate();		Nand2LT_sy.makePart(x, stdCell); 	traceGate();		Nand2PH.makePart(x, stdCell); 		traceGate();		//Nand2PHfk.makePart(x, stdCell); 	traceGate(); //DRC error because mirroring doesn't work		Nand2_sy.makePart(x, stdCell); 		traceGate();		Nand2en.makePart(x, stdCell); 		traceGate();		//Nand2en_sy.makePart(x, stdCell); 	traceGate(); // no purple schematic		Nand3.makePart(x, stdCell); 		traceGate();		Nand3LT.makePart(x, stdCell); 		traceGate();		Nand3LT_sy3.makePart(x, stdCell); 	traceGate();		Nand3LTen.makePart(x, stdCell); 	traceGate();		//Nand3LTen_sy.makePart(x, stdCell); 	traceGate(); // real NCC mismatch		//Nand3LTen_sy3.makePart(x, stdCell);	traceGate(); // no purple schematic		Nand3MLT.makePart(x, stdCell); 		traceGate();		//Nand3_sy3.makePart(x, stdCell); 	traceGate(); //no purple schematic		Nand3en.makePart(x, stdCell); 		traceGate();		//Nand3en_sy.makePart(x, stdCell); 	traceGate(); // real NCC mismatch		//Nand3en_sy3.makePart(x, stdCell); 	traceGate();// no purple schematic		Nms1.makePart(x, stdCell); 			traceGate();		Nms2.makePart(x, stdCell); 			traceGate();		Nms2_sy.makePart(x, stdCell); 		traceGate();		Nms3_sy3.makePart(x, stdCell); 		traceGate(); //DRC error: doesn't fit in 42 lambda 		Nor2.makePart(x, stdCell); 			traceGate();		//Nor2LT.makePart(x, stdCell); 		traceGate(); //no purple schematic		Nor2kresetV.makePart(x, stdCell); 	traceGate();		Pms1.makePart(x, stdCell); 			traceGate();		Pms2.makePart(x, stdCell); 			traceGate();		Pms2_sy.makePart(x, stdCell); 		traceGate();//		// Test gates that can double strap MOS gates//		stdCell.setDoubleStrapGate(true);//		Inv.makePart(x, stdCell); traceGate();//		InvLT.makePart(x, stdCell); traceGate();//		InvHT.makePart(x, stdCell); traceGate();//		Nms1.makePart(x, stdCell); traceGate();//		Pms1.makePart(x, stdCell); traceGate();//		stdCell.setDoubleStrapGate(false);    }}

⌨️ 快捷键说明

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