/* "NETGEN", a netlist-specification tool for VLSI Copyright (C) 1989, 1990 Massimo A. Sivilotti Author's address: mass@csvax.cs.caltech.edu; Caltech 256-80, Pasadena CA 91125. This program 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 (any version). This program 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 this program; see the file copying. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* actellib.c -- definitions of all cells in ACTEL's cell library */ /* define the following to make pads unique */ /* this is necessary for ntk2adl, but is annoying for PLACE */ #undef USE_UNIQUE_GLOBALS #include "config.h" #include #include "netgen.h" static int actel_lib_present = 0; int ActelLibPresent(void) { return actel_lib_present; } void ActelLib(void) { int OldDebug; OldDebug = Debug; Debug = 0; CellDef("OUTBUF", -1); #ifdef USE_UNIQUE_GLOBALS UniqueGlobal("PAD"); #else Port("PAD"); #endif Port("D"); SetClass(CLASS_MODULE); EndCell(); CellDef("INBUF", -1); Port("Y"); #ifdef USE_UNIQUE_GLOBALS UniqueGlobal("PAD"); #else Port("PAD"); #endif SetClass(CLASS_MODULE); EndCell(); CellDef("CLKBUF", -1); Port("Y"); #ifdef USE_UNIQUE_GLOBALS UniqueGlobal("PAD"); #else Port("PAD"); #endif SetClass(CLASS_MODULE); EndCell(); CellDef("TRIBUFF", -1); #ifdef USE_UNIQUE_GLOBALS UniqueGlobal("PAD"); #else Port("PAD"); #endif Port("D"); Port("E"); SetClass(CLASS_MODULE); EndCell(); CellDef("BIBUF", -1); #ifdef USE_UNIQUE_GLOBALS UniqueGlobal("PAD"); #else Port("PAD"); #endif Port("D"); Port("E"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND2", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND2A", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND2B", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND2", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND2A", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND2B", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR2", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR2A", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR2B", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR2", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR2A", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR2B", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND3", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND3A", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND3B", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND3C", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND3", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND3A", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND3B", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND3C", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR3", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR3A", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR3B", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR3C", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR3", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR3A", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR3B", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR3C", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND4", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND4A", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND4B", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND4C", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AND4D", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND4", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND4A", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND4B", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND4C", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NAND4D", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR4", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR4A", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR4B", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR4C", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OR4D", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR4", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR4A", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR4B", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR4C", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("NOR4D", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); /* INBUF CLKBUF OUTBUF TRIBUF BIBUF */ CellDef("BUF", -1); Port("A"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("BUFA", -1); Port("A"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("INV", -1); Port("A"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("INVA", -1); Port("A"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("XOR", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("XNOR", -1); Port("A"); Port("B"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("XO1", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("X01A", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("XA1", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("XA1A", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AX1", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AX1A", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AX1B", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AO1", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AO1A", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AO1B", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AO1C", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AOI1A", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AOI1B", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); /* Added by Tim 12/8/99 */ CellDef("AO3", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("MAJ3", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AO2", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AO2A", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AOI2A", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("AOI2B", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OA1", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OA1A", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OA1B", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OA1C", -1); Port("A"); Port("B"); Port("C"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OA3", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OA3A", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OA3B", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OA2", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("OA2A", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("MX2", -1); Port("A"); Port("B"); Port("S"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("MX2A", -1); Port("A"); Port("B"); Port("S"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("MX2B", -1); Port("A"); Port("B"); Port("S"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("MX2C", -1); Port("A"); Port("B"); Port("S"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("MX4", -1); Port("D0"); Port("D1"); Port("D2"); Port("D3"); Port("S1"); Port("S0"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("GMX4", -1); Port("D0"); Port("D1"); Port("D2"); Port("D3"); Port("G"); Port("S0"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("MXT", -1); Port("A"); Port("B"); Port("C"); Port("D"); Port("S0A"); Port("S0B"); Port("S1"); Port("Y"); SetClass(CLASS_MODULE); EndCell(); CellDef("HA1", -1); Port("A"); Port("B"); Port("CO"); Port("S"); SetClass(CLASS_MODULE); EndCell(); CellDef("HA1A", -1); Port("A"); Port("B"); Port("CO"); Port("S"); SetClass(CLASS_MODULE); EndCell(); CellDef("HA1B", -1); Port("A"); Port("B"); Port("CO"); Port("S"); SetClass(CLASS_MODULE); EndCell(); CellDef("HA1C", -1); Port("A"); Port("B"); Port("CO"); Port("S"); SetClass(CLASS_MODULE); EndCell(); CellDef("FA1A", -1); Port("A"); Port("B"); Port("CI"); Port("CO"); Port("S"); SetClass(CLASS_MODULE); EndCell(); CellDef("FA1B", -1); Port("A"); Port("B"); Port("CI"); Port("CO"); Port("S"); SetClass(CLASS_MODULE); EndCell(); CellDef("FA2A", -1); Port("A0"); Port("A1"); Port("B"); Port("CI"); Port("CO"); Port("S"); SetClass(CLASS_MODULE); EndCell(); CellDef("DL1", -1); Port("D"); Port("G"); Port("Q"); SetClass(CLASS_MODULE); EndCell(); CellDef("DL1A", -1); Port("D"); Port("G"); Port("QN"); SetClass(CLASS_MODULE); EndCell(); CellDef("DL1B", -1); Port("D"); Port("G"); Port("Q"); SetClass(CLASS_MODULE); EndCell(); CellDef("DL1C", -1); Port("D"); Port("G"); Port("QN"); SetClass(CLASS_MODULE); EndCell(); CellDef("DLC", -1); Port("D"); Port("G"); Port("Q"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DLCA", -1); Port("D"); Port("G"); Port("Q"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DLE", -1); Port("D"); Port("G"); Port("Q"); Port("E"); SetClass(CLASS_MODULE); EndCell(); CellDef("DLEA", -1); Port("D"); Port("G"); Port("Q"); Port("E"); SetClass(CLASS_MODULE); EndCell(); CellDef("DLEB", -1); Port("D"); Port("G"); Port("Q"); Port("E"); SetClass(CLASS_MODULE); EndCell(); CellDef("DLEC", -1); Port("D"); Port("G"); Port("Q"); Port("E"); SetClass(CLASS_MODULE); EndCell(); CellDef("DLM", -1); Port("A"); Port("B"); Port("S"); Port("G"); Port("Q"); SetClass(CLASS_MODULE); EndCell(); CellDef("DLMA", -1); Port("A"); Port("B"); Port("S"); Port("G"); Port("Q"); SetClass(CLASS_MODULE); EndCell(); CellDef("JKF", -1); Port("J"); Port("K"); Port("CLK"); Port("Q"); SetClass(CLASS_MODULE); EndCell(); CellDef("JKFPC", -1); Port("J"); Port("K"); Port("CLK"); Port("Q"); Port("PRE"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("TFC", -1); Port("T"); Port("CLK"); Port("Q"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFM", -1); Port("A"); Port("B"); Port("S"); Port("CLK"); Port("Q"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFMA", -1); Port("A"); Port("B"); Port("S"); Port("CLK"); Port("Q"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFMB", -1); Port("A"); Port("B"); Port("S"); Port("CLK"); Port("Q"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DF1", -1); Port("D"); Port("CLK"); Port("Q"); SetClass(CLASS_MODULE); EndCell(); CellDef("DF1A", -1); Port("D"); Port("CLK"); Port("QN"); SetClass(CLASS_MODULE); EndCell(); CellDef("DF1B", -1); Port("D"); Port("CLK"); Port("Q"); SetClass(CLASS_MODULE); EndCell(); CellDef("DF1C", -1); Port("D"); Port("CLK"); Port("QN"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFC1", -1); Port("D"); Port("CLK"); Port("Q"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFC1A", -1); Port("D"); Port("CLK"); Port("Q"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFC1B", -1); Port("D"); Port("CLK"); Port("Q"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFC1C", -1); Port("D"); Port("CLK"); Port("QN"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFC1D", -1); Port("D"); Port("CLK"); Port("Q"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFC1E", -1); Port("D"); Port("CLK"); Port("QN"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFC1F", -1); Port("D"); Port("CLK"); Port("QN"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFC1G", -1); Port("D"); Port("CLK"); Port("QN"); Port("CLR"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFP1", -1); Port("D"); Port("CLK"); Port("Q"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFP1A", -1); Port("D"); Port("CLK"); Port("Q"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFP1B", -1); Port("D"); Port("CLK"); Port("Q"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFP1C", -1); Port("D"); Port("CLK"); Port("QN"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFP1D", -1); Port("D"); Port("CLK"); Port("Q"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFP1E", -1); Port("D"); Port("CLK"); Port("QN"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFP1F", -1); Port("D"); Port("CLK"); Port("QN"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFP1G", -1); Port("D"); Port("CLK"); Port("QN"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFPC", -1); Port("D"); Port("CLK"); Port("Q"); Port("CLR"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFPCA", -1); Port("D"); Port("CLK"); Port("Q"); Port("CLR"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFE", -1); Port("D"); Port("CLK"); Port("Q"); Port("E"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFEA", -1); Port("D"); Port("CLK"); Port("Q"); Port("E"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFEB", -1); Port("D"); Port("CLK"); Port("Q"); Port("E"); Port("CLR"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFEC", -1); Port("D"); Port("CLK"); Port("Q"); Port("E"); Port("CLR"); Port("PRE"); SetClass(CLASS_MODULE); EndCell(); CellDef("DFED", -1); Port("D"); Port("CLK"); Port("Q"); Port("E"); SetClass(CLASS_MODULE); EndCell(); Debug = OldDebug; actel_lib_present = 1; }