importing s2r ....
This commit is contained in:
parent
f1b6c69766
commit
cfbe7b858e
|
@ -0,0 +1,3 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
SUBDIRS = doc src
|
|
@ -0,0 +1,33 @@
|
|||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(src/postrat.c)
|
||||
|
||||
S2R_MAJOR_VERSION=4
|
||||
S2R_MINOR_VERSION=0
|
||||
S2R_VERSION=$S2R_MAJOR_VERSION.$S2R_MINOR_VERSION
|
||||
|
||||
AC_SUBST(S2R_MAJOR_VERSION)
|
||||
AC_SUBST(S2R_MINOR_VERSION)
|
||||
AC_SUBST(S2R_VERSION)
|
||||
|
||||
# For automake.
|
||||
VERSION=$S2R_VERSION
|
||||
PACKAGE=s2r
|
||||
|
||||
dnl Initialize automake stuff
|
||||
AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
AC_PROG_RANLIB
|
||||
AC_PROG_MAKE_SET
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
|
||||
AM_ALLIANCE
|
||||
|
||||
AC_OUTPUT([
|
||||
Makefile
|
||||
doc/Makefile
|
||||
src/Makefile
|
||||
])
|
|
@ -0,0 +1,4 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
man_MANS = s2r.1
|
||||
EXTRA_DIST = $(man_MANS)
|
|
@ -0,0 +1,174 @@
|
|||
.\" $Id: s2r.1,v 1.1 2002/04/09 11:20:14 franck Exp $
|
||||
.\" @(#)Labo.l 0.0 90/21/08 UPMC; Author: Fr'ed'eric P'etrot & Franck Wajsburt
|
||||
.TH S2R 1 "October 1, 1997" "ASIM/LIP6" "ALLIANCE USER COMMANDS"
|
||||
.SH NAME
|
||||
.TP
|
||||
s2r
|
||||
\- Process mapping from symbolic layout to physical layout
|
||||
.SH SYNOPSIS
|
||||
.TP
|
||||
\fBs2r\fP [\fB-sc1rv\fP] \fIsource\fP [\fIresult\fP]
|
||||
.so man1/alc_origin.1
|
||||
.SH DESCRIPTION
|
||||
The goal of \fBs2r\fP is to perform the translation from the symbolic layout
|
||||
to physical layout for the foundry.
|
||||
\fBs2r\fP uses a technolgy file whose name is defined by the environnement
|
||||
variable RDS_TECHNO_NAME.
|
||||
.br
|
||||
Some cells, like I/O pads, are specific to a given foundry.
|
||||
In the symbolic methodology, these cells are phantom cells.
|
||||
It means that only their abutment box and and connectors are present.
|
||||
\fBs2r\fP wil substitute physical cells to the symbolic phamtom cells.
|
||||
Beware, this implies that the manufacturer cells must be modified by hand to
|
||||
ensure the abutment box is a symbolic grid step multiple, and that the
|
||||
real connectors are centered on symbolic grid.
|
||||
.br
|
||||
In order for the replacement to work well, the physicals cells must have
|
||||
the abutment box lower left corner at coordinate (0,0)
|
||||
The name of cells to be replaced are written in the catalog file with the
|
||||
G attribute, see \fBcatal\fP(5) for details on that file.
|
||||
See also \fBring\fP(1) for more on pads.
|
||||
Ouput can be generated in either cif or gds formats, to fit the manufacturer
|
||||
requirements.
|
||||
.br
|
||||
.LP
|
||||
Mainly two kinds of users are concerned with \fBs2r\fP :
|
||||
.TP 21
|
||||
experts
|
||||
they should be able to parametrize the technology file for a new process
|
||||
technology file is described in \fBtechno(5)\fP.
|
||||
.TP
|
||||
designers
|
||||
they are not directly concerned with the target process, but need to be able to
|
||||
compute real capacitances for simulation.
|
||||
.PP
|
||||
The \fIsource\fP argument is the name of the symbolic layout file to be
|
||||
translated.
|
||||
The optional \fIresult\fP argument indicates the name to be given to the real
|
||||
layout output.
|
||||
This name is also the name of the top level model of the layout hierarchy.
|
||||
If \fIresult\fP name is omitted, then \fIsource\fP name is used.
|
||||
.PP
|
||||
Six environment variables must be set for proper usage of \fBs2r\fP,
|
||||
all of them having default values, thus ensuring the possibility of using it
|
||||
``as it is''.
|
||||
.TP 21
|
||||
MBK_IN_PH
|
||||
The input format for symbolic layout is given by this environment variable.
|
||||
The possible values are \fI cp, ap\fP. Default is \fIcp\fP.
|
||||
See \fBMBK_IN_PH\fP(1) for details.
|
||||
.TP
|
||||
MBK_CATA_LIB
|
||||
Sets the directories that are to be searched thru for reading files.
|
||||
The seaching mecanism first look in MBK_WORK_LIB(1)
|
||||
MBK_WORK_LIB
|
||||
defines the path where the generated file is saved.
|
||||
Make sure the write permissions are set up correctly, otherwise no save
|
||||
will occur.
|
||||
.TP
|
||||
MBK_CATAL_NAME
|
||||
This indicates the name of the catalog file used for pad substitution.
|
||||
For the appropriate syntax of this file, see \fBcatal\fP(5).
|
||||
.TP
|
||||
RDS_IN
|
||||
Defines the format to be used as input for cell substitution.
|
||||
The available ones are \fIcif\fP and \fIgds\fP (default one).
|
||||
The cells to be parsed must not containt 45
|
||||
.ie t \(de
|
||||
.el degrees
|
||||
wires. If an unknown layer is encountered, the entire cell will be skipped.
|
||||
.TP
|
||||
RDS_OUT
|
||||
Gives the format of the output file.
|
||||
This may be either \fIcif\fP or \fIgds\fP (default is \fIgds\fP).
|
||||
.TP
|
||||
RDS_TECHNO_NAME
|
||||
This points to the technology file to be used for symbolic to real translation.
|
||||
This file is in general shared between all the designers.
|
||||
it is the full path name to the file location, with the extension.
|
||||
.SH OPTIONS
|
||||
Without option, \fBs2r\fP should produce a layout that fits for the foundry.
|
||||
Nevertheless, its behaviour can be modified when invoked with the
|
||||
following options:
|
||||
.TP 21
|
||||
\-s
|
||||
Suppress the denotching phase. \fBs2r\fP performs gap filling, denotching
|
||||
in order to avoid DRC errors. This operation is time consuming.
|
||||
It is mandatory for the foundry but not really useful for capacitance
|
||||
evaluation.
|
||||
.TP
|
||||
\-c
|
||||
Deletes connectors and node names at all hierarchy level.
|
||||
Theses objects link the physical view and the logical view of a chip.
|
||||
If simulation is to be done after physical mapping, connectors must appear,
|
||||
so that the extractors and simulators can use them.
|
||||
This must \fInot\fP be used when preparing a final layout for the foundry.
|
||||
.br
|
||||
For the factory, the top level connectors are forbidden, since they do not
|
||||
represent any physical reality.
|
||||
.TP
|
||||
\-1
|
||||
Creates the top level cell with the instances as black boxes.
|
||||
This may be useful for hierarchical extractors, since the file size may be
|
||||
greatly reduced.
|
||||
.TP
|
||||
\-r
|
||||
does not replace black boxes.
|
||||
Cells flagged with the \fBG\fP attribute in the \fBcatal\fP(5) file will not
|
||||
be replaced by their equivalent layout loaded from disk.
|
||||
.TP
|
||||
\-v
|
||||
verbose mode on.
|
||||
|
||||
|
||||
.SH EXAMPLES
|
||||
.RS
|
||||
You should first have a correct execution environment :
|
||||
.br
|
||||
It is recommanded to put it in the ``.cshrc'' file if in c shell, as in the
|
||||
example below.
|
||||
.RE
|
||||
.br
|
||||
.ie t \{\
|
||||
.ft CR \}
|
||||
.el \fB
|
||||
.ta 30n
|
||||
.nf
|
||||
setenv MBK_IN_PH ap
|
||||
setenv MBK_WORK_LIB ~fred/mbk/layout
|
||||
setenv MBK_CATA_LIB ~franck/s2r:/alliance/cells
|
||||
setenv MBK_CATAL_NAME catalog
|
||||
setenv RDS_TECHNO_NAME /labo/etc/prol15.rds
|
||||
setenv RDS_IN gds
|
||||
setenv RDS_OUT gds
|
||||
s2r -c na2_y
|
||||
.fi
|
||||
.ft R
|
||||
.RS
|
||||
This invocation will produce the cell \fBna2_y\fP from the standard cell
|
||||
library in real layout, without connectors, scotches if needed, in gds format.
|
||||
.RE
|
||||
.SH SEE ALSO
|
||||
.BR mbk (1),
|
||||
.BR ring(1),
|
||||
.BR MBK_IN_PH (1),
|
||||
.BR MBK_CATA_LIB (1),
|
||||
.BR MBK_WORK_LIB (1),
|
||||
.BR MBK_CATAL_NAME (1),
|
||||
.BR RDS_IN (1),
|
||||
.BR RDS_OUT (1),
|
||||
.BR RDS_TECHNO_NAME (1),
|
||||
.BR techno(5),
|
||||
.BR catal(5).
|
||||
|
||||
.SH DIAGNOSTICS
|
||||
.br
|
||||
The actual version of the gds parser and driver doesn't translate neither
|
||||
connectors, nor node names.
|
||||
If an extraction on s2r output is needed, cif format will create the
|
||||
connectors using cif extension \fB4X\fP, and the node names with \fB4N\fP.
|
||||
|
||||
|
||||
|
||||
.so man1/alc_bug_report.1
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
bin_PROGRAMS = s2r
|
||||
|
||||
CFLAGS = @CFLAGS@ @ALLIANCE_CFLAGS@
|
||||
|
||||
s2r_LDADD = @ALLIANCE_LIBS@ \
|
||||
-lMpu -lMcp -lMap -lMmg \
|
||||
-lRtl -lRgs -lRcf -lRfm -lRpr -lRwi -lRut -lRds\
|
||||
-lMph -lMut
|
||||
|
||||
s2r_SOURCES = generic.h hash.h maxima.h merge.h\
|
||||
postrat.h rdsacces.h statistics.c hash.c\
|
||||
main.c merge.c postrat.c rdsacces.c\
|
||||
statistics.h
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
|
||||
# include <stdio.h>
|
||||
# include <math.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include <time.h>
|
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include "hash.h"
|
||||
|
||||
static int primes[] = {
|
||||
101, 223, 311, 419, 547, 659, 727, 877, 967,
|
||||
1061, 2053, 3299, 4391, 5309, 6421, 7069, 8543, 9397,
|
||||
10337, 20143, 32423, 43151, 52223, 63179, 0
|
||||
};
|
||||
|
||||
void htremove (ht_t * htable)
|
||||
{
|
||||
int i;
|
||||
for (i = 1; i < (int)htable[0]; i++)
|
||||
freechain (htable[i]);
|
||||
free (htable);
|
||||
}
|
||||
|
||||
ht_t *htinit (int size)
|
||||
{
|
||||
int i;
|
||||
ht_t *htable;
|
||||
|
||||
/* prend le premier nombre premier au dela de size */
|
||||
for (i = 0; primes[i] && (size > primes[i]); i++);
|
||||
if (primes[i] == 0)
|
||||
{
|
||||
fprintf (stderr, "Erreur : hash table trop grande (> %d)\n", primes[i - 1]);
|
||||
exit (1);
|
||||
}
|
||||
size = primes[i];
|
||||
if ((htable = calloc (size + 1, sizeof (chain_list *))) == NULL)
|
||||
{
|
||||
perror ("htinit");
|
||||
exit (1);
|
||||
}
|
||||
htable[0] = (chain_list *) size; /* taille de la table dans premiere case */
|
||||
return htable;
|
||||
}
|
||||
|
||||
static int hash (ht_t * htable, char *key)
|
||||
{
|
||||
int alveole = 0;
|
||||
int length = strlen (key);
|
||||
int segment;
|
||||
int l;
|
||||
|
||||
if ((key == NULL) || (length == 0))
|
||||
{
|
||||
fprintf (stderr, "Error : hash (NULL)\n");
|
||||
exit (1);
|
||||
}
|
||||
for (l = 0; l < length; l += 2)
|
||||
{
|
||||
segment = 0xFFFF & ((key[l] << 8) | key[l + 1]);
|
||||
alveole = alveole ^ ((segment << 1) | (segment >> 15));
|
||||
}
|
||||
alveole %= (int) htable[0]; /* htable[0] == la taille de la table */
|
||||
return (alveole + 1); /* +1 car on ne doit rien mettre dans case 0 */
|
||||
}
|
||||
|
||||
chain_list *htget (ht_t * htable, char *key)
|
||||
{
|
||||
int alveole = hash (htable, key);
|
||||
chain_list *p;
|
||||
|
||||
for (p = htable[alveole]; p && strcmp (p->DATA, key); p = p->NEXT);
|
||||
return p;
|
||||
}
|
||||
|
||||
chain_list *htset (ht_t * htable, char *key)
|
||||
{
|
||||
int alveole = hash (htable, key);
|
||||
chain_list *p;
|
||||
|
||||
for (p = htable[alveole]; p && strcmp (p->DATA, key); p = p->NEXT);
|
||||
if (p)
|
||||
return p;
|
||||
htable[alveole] = addchain (htable[alveole], strdup (key));
|
||||
return htable[alveole];
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef HASH_H
|
||||
#define HASH_H
|
||||
|
||||
#include <mut.h>
|
||||
|
||||
typedef chain_list *ht_t; /* def d'1 table de hachage table de htele_t */
|
||||
|
||||
extern ht_t *htinit (int size);
|
||||
extern void htremove (ht_t * htable);
|
||||
extern chain_list *htset (ht_t * htable, char *key);
|
||||
extern chain_list *htget (ht_t * htable, char *key);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,354 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* ALLIANCE CAO & VLSI CAD */
|
||||
/* */
|
||||
/* Product : (S)ymbolic (2)to (R)eal translater */
|
||||
/* File : main.c */
|
||||
/* */
|
||||
/* (c) copyright 1992 MASI laboratory CAO & VLSI team */
|
||||
/* All Right Reserved */
|
||||
/* Support : e-mail cao-vlsi@masi.ibp.fr */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* Main of Symbolic to Real */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
|
||||
#ident "@(#)s2r 3.8 30/01/02 ALLIANCE 4.5 (S)ymbolic (2)to (R)eal converter"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <mph.h>
|
||||
#include <mut.h>
|
||||
#include <rds.h>
|
||||
#include <rwi.h>
|
||||
#include <rut.h>
|
||||
#include <rtl.h>
|
||||
#include <rfm.h>
|
||||
#include <rpr.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "rdsacces.h"
|
||||
#include "statistics.h"
|
||||
#include "postrat.h"
|
||||
|
||||
void Usage (Name)
|
||||
char *Name;
|
||||
{
|
||||
fprintf (stderr, "\tUsage : %s [-cs1trv] source [result]\n\n", Name);
|
||||
fprintf (stderr, "\tsource\t: filename of symbolic layout circuit\n");
|
||||
fprintf (stderr, "\t\t to translate to real layout\n");
|
||||
fprintf (stderr, "\tresult\t: result filename of real layout circuit\n");
|
||||
fprintf (stderr, "\t\t source name is used, if result is absent\n\n");
|
||||
fprintf (stderr, "\toptionnal options (any order, any occurence) :\n");
|
||||
fprintf (stderr, "\t-c\t: deletes top-level (c)onnectors, keeps all others\n");
|
||||
fprintf (stderr, "\t-C\t: keeps top-level (c)onnectors, deletes all others\n");
|
||||
fprintf (stderr, "\t-n\t: deletes all signal names, but connectors\n");
|
||||
fprintf (stderr, "\t-s\t: (s)cotchs are not created\n");
|
||||
fprintf (stderr, "\t-1\t: only (1) level is translated, all otherwise.\n");
|
||||
fprintf (stderr, "\t-t\t: layout is just (t)ranslated, not post-treated\n");
|
||||
fprintf (stderr, "\t-r\t: black boxes are not (r)eplaced\n");
|
||||
fprintf (stderr, "\t-v\t: (v)erbose mode armed\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
int main (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
rdsfig_list *rds_model;
|
||||
phfig_list *mbk_model;
|
||||
|
||||
/*\
|
||||
* banner and parameters
|
||||
\*/
|
||||
|
||||
char *source_name = NULL; /* need default values */
|
||||
char *result_name = NULL; /* need default values */
|
||||
int root_conn = 1; /* keep top-level figure connectors by default */
|
||||
int sub_conn = 1; /* keep sub-level figure connectors by default */
|
||||
int signal_name = 1; /* keep signal names by default */
|
||||
int scotch_on = 1; /* scotchs are not created by default */
|
||||
int one_level = 0; /* all hierarchy level translated by default */
|
||||
int do_post_treat = 1; /* post-treatment is done by default */
|
||||
int do_replace_cells = 1; /* cells_replacement is done by default */
|
||||
int verbose = 0; /* verbose mode desarmed by default */
|
||||
int flat = 0; /* flat mode desarmed by default */
|
||||
int physical = 0; /* physical mode desarmed by default */
|
||||
int split_layer = 0; /* split_layer mode desarmed by default */
|
||||
int shift;
|
||||
|
||||
alliancebanner ("s2r", VERSION, "Symbolic to Real layout converter", "2002", ALLIANCE_VERSION);
|
||||
|
||||
{
|
||||
char *debug_env;
|
||||
if ((debug_env = getenv ("S2RDEBUG")) != NULL)
|
||||
{
|
||||
unsigned char v = *debug_env - '0';
|
||||
s2rdebug = (v <= 9) ? v : 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (argc < 2)
|
||||
Usage (argv[0]);
|
||||
|
||||
mbkenv ();
|
||||
rdsenv ();
|
||||
|
||||
for (shift = 1; shift < argc; shift++)
|
||||
{
|
||||
char *arg = argv[shift];
|
||||
if (*arg == '-')
|
||||
{
|
||||
while (*++arg)
|
||||
{
|
||||
switch (*arg)
|
||||
{
|
||||
case 'C':
|
||||
sub_conn = 0;
|
||||
break;
|
||||
case 'c':
|
||||
root_conn = 0;
|
||||
break;
|
||||
case 'n':
|
||||
signal_name = 0;
|
||||
break;
|
||||
case 's':
|
||||
scotch_on = 0;
|
||||
break;
|
||||
case '1':
|
||||
one_level = 1;
|
||||
break;
|
||||
case 't':
|
||||
do_post_treat = 0;
|
||||
break;
|
||||
case 'r':
|
||||
do_replace_cells = 0;
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
case 'l':
|
||||
split_layer = 1;
|
||||
break;
|
||||
case 'f':
|
||||
flat = 1;
|
||||
break;
|
||||
case 'p':
|
||||
physical = 1;
|
||||
break;
|
||||
default:
|
||||
Usage (argv[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!source_name)
|
||||
source_name = namealloc (argv[shift]);
|
||||
else if (!result_name)
|
||||
{
|
||||
result_name = namealloc (argv[shift]);
|
||||
}
|
||||
else
|
||||
Usage (argv[0]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (!source_name)
|
||||
{
|
||||
Usage (argv[0]);
|
||||
}
|
||||
|
||||
if (!result_name)
|
||||
{
|
||||
result_name = source_name;
|
||||
}
|
||||
|
||||
/*\
|
||||
* setting environement
|
||||
* MBK_CATAL_NAME : file where file name to be replaced are put
|
||||
* MBK_CATA_LIB : where cells, catal file and techno file are
|
||||
* MBK_WORK_LIB : where result file is written or where techno file is
|
||||
* WORK_LIB is watched before CATA_LIB
|
||||
* MBK_WORK_LIB : where result file is placed
|
||||
* MBK_IN_PH : file format of symbolic figure
|
||||
* RDS_TECHNO_NAME : techno file name
|
||||
* RDS_IN : file format of real figures to replace
|
||||
* RDS_OUT : file format of result file
|
||||
\*/
|
||||
|
||||
/*\
|
||||
* Read the techno file
|
||||
\*/
|
||||
printf ("\n\to loading technology file : %s\n", RDS_TECHNO_NAME);
|
||||
fflush (stdout);
|
||||
loadrdsparam ();
|
||||
|
||||
/*\
|
||||
* Read the model file
|
||||
\*/
|
||||
if (physical)
|
||||
{
|
||||
printf ("\to loading %s level of real layout : %s\n", one_level ? "one" : "all", source_name);
|
||||
fflush (stdout);
|
||||
rds_model = getrdsfig (source_name, one_level ? 'P' : 'A', 0);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("\to loading %s level of symbolic layout : %s\n", one_level ? "one" : "all", source_name);
|
||||
fflush (stdout);
|
||||
|
||||
mbk_model = getphfig (source_name, 'A');
|
||||
if (!root_conn)
|
||||
mbk_model->PHCON = NULL;
|
||||
rds_model = S2Rfigmbkrds (mbk_model, one_level ? 0 : 1);
|
||||
|
||||
/* Removing symbolic data structure */
|
||||
|
||||
printf ("\to removing symbolic data structure \n");
|
||||
rds_mbk_kill ();
|
||||
}
|
||||
|
||||
/*\
|
||||
* flattening
|
||||
\*/
|
||||
if (flat)
|
||||
{
|
||||
printf ("\to flattening figure\n");
|
||||
rflattenrdsfig (rds_model, RDS_NO, RDS_NO);
|
||||
}
|
||||
|
||||
/*\
|
||||
* post treatement
|
||||
\*/
|
||||
rds_model = rds_model_out (source_name);
|
||||
|
||||
if (do_post_treat)
|
||||
{
|
||||
printf ("\to layout post-treating\n ");
|
||||
if (root_conn)
|
||||
printf ("\t\twith top connectors,\n ");
|
||||
else
|
||||
printf ("\t\twithout top connector,\n ");
|
||||
if (sub_conn)
|
||||
printf ("\t\twith sub connectors,\n ");
|
||||
else
|
||||
printf ("\t\twithout sub connector,\n ");
|
||||
if (signal_name)
|
||||
printf ("\t\twith signal names,\n ");
|
||||
else
|
||||
printf ("\t\twithout signal name,\n ");
|
||||
if (scotch_on)
|
||||
printf ("\t\twith scotchs.\n");
|
||||
else
|
||||
printf ("\t\twithout scotch.\n");
|
||||
post_treat (rds_model, scotch_on, verbose);
|
||||
fflush (stdout);
|
||||
}
|
||||
|
||||
/*\
|
||||
* Replace cells
|
||||
\*/
|
||||
|
||||
if (do_replace_cells)
|
||||
{
|
||||
replace_cells (verbose);
|
||||
}
|
||||
|
||||
/*\
|
||||
* save file
|
||||
\*/
|
||||
printf ("\to saving %s.%s\n", result_name, RDS_OUT);
|
||||
rds_model->NAME = result_name;
|
||||
|
||||
if (split_layer)
|
||||
{
|
||||
char *RDS_CIF_LAYER_TABLE_BAK[RDS_ALL_LAYER][RDS_CIF_LAYER_FIELD];
|
||||
unsigned char RDS_GDS_LAYER_TABLE_BAK[RDS_ALL_LAYER][RDS_GDS_LAYER_FIELD];
|
||||
char WORK_LIB_TMP[256];
|
||||
char WORK_LIB_BAK[256];
|
||||
int layer;
|
||||
|
||||
strcpy (WORK_LIB_BAK, WORK_LIB);
|
||||
for (layer = 0; layer < RDS_ALL_LAYER; layer++)
|
||||
{
|
||||
*strchr (RDS_LAYER_NAME[layer], ' ') = '\0';
|
||||
RDS_CIF_LAYER_TABLE_BAK[layer][0] = RDS_CIF_LAYER_TABLE[layer][0];
|
||||
RDS_GDS_LAYER_TABLE_BAK[layer][0] = RDS_GDS_LAYER_TABLE[layer][0];
|
||||
RDS_GDS_LAYER_TABLE[layer][0] = RDS_GDS_LAYER_EMPTY;
|
||||
RDS_CIF_LAYER_TABLE[layer][0] = RDS_CIF_LAYER_EMPTY;
|
||||
}
|
||||
|
||||
for (layer = 0; layer < RDS_ALL_LAYER; layer++)
|
||||
{
|
||||
if (!strcmp (RDS_OUT, "gds"))
|
||||
{
|
||||
if (RDS_GDS_LAYER_TABLE_BAK[layer][0] != RDS_GDS_LAYER_EMPTY)
|
||||
{
|
||||
sprintf (WORK_LIB_TMP, "%s/%s/", WORK_LIB_BAK, RDS_LAYER_NAME[layer]);
|
||||
WORK_LIB = WORK_LIB_TMP;
|
||||
if (verbose)
|
||||
{
|
||||
printf ("\t - %s\n", WORK_LIB);
|
||||
fflush (stdout);
|
||||
}
|
||||
|
||||
RDS_GDS_LAYER_TABLE[layer][0] = RDS_GDS_LAYER_TABLE_BAK[layer][0];
|
||||
saverdsfig (rds_model);
|
||||
RDS_GDS_LAYER_TABLE[layer][0] = RDS_GDS_LAYER_EMPTY;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (RDS_CIF_LAYER_TABLE_BAK[layer][0] != RDS_CIF_LAYER_EMPTY)
|
||||
{
|
||||
sprintf (WORK_LIB_TMP, "%s/%s/", WORK_LIB_BAK, RDS_LAYER_NAME[layer]);
|
||||
WORK_LIB = WORK_LIB_TMP;
|
||||
if (verbose)
|
||||
{
|
||||
printf ("\t - %s\n", WORK_LIB);
|
||||
fflush (stdout);
|
||||
}
|
||||
|
||||
RDS_CIF_LAYER_TABLE[layer][0] = RDS_CIF_LAYER_TABLE_BAK[layer][0];
|
||||
saverdsfig (rds_model);
|
||||
RDS_CIF_LAYER_TABLE[layer][0] = RDS_CIF_LAYER_EMPTY;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
saverdsfig (rds_model);
|
||||
|
||||
if (verbose)
|
||||
print_statistics (scotch_on);
|
||||
|
||||
return (0);
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/**********************************************************************
|
||||
* *
|
||||
* Definitions to tune the program *
|
||||
* *
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef MAX_WIN_SEG /* max. number of segments( rectangles) */
|
||||
#define MAX_WIN_SEG 10000 /* in a window */
|
||||
#endif
|
||||
#ifndef MIN_WIN_SEG /* min. number of segments( rectangles) */
|
||||
#define MIN_WIN_SEG 100 /* in a window */
|
||||
#endif
|
||||
#ifndef MRG_EXT_RATIO /* the approx. ratio between the num. */
|
||||
#define MRG_EXT_RATIO 20 /* of operations done if a rect. is */
|
||||
/* taken in a widow and the num of */
|
||||
/* operations done to extract rect. */
|
||||
#endif
|
||||
#ifndef BUFFER_SIZE
|
||||
#define BUFFER_SIZE 255
|
||||
#endif
|
||||
#ifndef MAX_STRING_SIZE
|
||||
#define MAX_STRING_SIZE 30
|
||||
#endif
|
||||
#ifndef MAX_FILE_NAME_SIZE
|
||||
#define MAX_FILE_NAME_SIZE 255
|
||||
#endif
|
||||
#ifndef MAX_PHYS_LAYER
|
||||
#define MAX_PHYS_LAYER 20
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
extern void merge_layer_2 (rdsfig_list *model, int layer_num, int verbose);
|
||||
extern void merge_layer (rdsfig_list *model, int layer_num, int verbose);
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#define TREAT 1
|
||||
#define NOTREAT 0
|
||||
|
||||
extern void post_treat ();
|
||||
extern void replace_cells ();
|
|
@ -0,0 +1,649 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* ALLIANCE CAO & VLSI CAD */
|
||||
/* */
|
||||
/* Product : (S)ymbolic (2)to (R)eal translater */
|
||||
/* File : rdsacces+.c */
|
||||
/* */
|
||||
/* (c) copyright 1992 MASI laboratory CAO & VLSI team */
|
||||
/* All Right Reserved */
|
||||
/* Support : e-mail cao-vlsi@masi.ibp.fr */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* Access functions to the rds database objects */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
|
||||
#include "generic.h"
|
||||
#include <rds.h>
|
||||
#include <mph.h>
|
||||
#include <mut.h>
|
||||
#include <rfm.h>
|
||||
#include <rpr.h>
|
||||
#include "rdsacces.h"
|
||||
#include "statistics.h"
|
||||
|
||||
int s2rdebug = 0;
|
||||
|
||||
rdsrec_list *Free_List = NULL; /* a global variable pointing to the free list
|
||||
of rectangles */
|
||||
void view_rec (rec)
|
||||
rdsrec_list *rec;
|
||||
{
|
||||
viewrdsrec (rec);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* rds_rectangle_in: adds the rectangle given by its data to the given list
|
||||
* and returns a pointer to the new list.
|
||||
* Before allocating memory for the new rectangle, the free
|
||||
* list is checked and if it is not empty : we use the memory
|
||||
* area pointed by the first element of this list.
|
||||
****************************************************************************/
|
||||
|
||||
rdsrec_list *rds_rectangle_in (layer_list, x, y, dx, dy, layer_num, flags, name)
|
||||
rdsrec_list *layer_list;
|
||||
long x, y, dx, dy;
|
||||
int layer_num;
|
||||
long flags;
|
||||
char *name;
|
||||
{
|
||||
rdsrec_list *npr;
|
||||
|
||||
STAT_RECT_REQRD++;
|
||||
if (Free_List)
|
||||
npr = pull_free_list ();
|
||||
else
|
||||
{
|
||||
npr = allocrdsrec (0);
|
||||
STAT_RECT_ALLOC++;
|
||||
}
|
||||
|
||||
flags = flags & 0xFFFFFF00;
|
||||
|
||||
npr->NEXT = layer_list;
|
||||
npr->X = x;
|
||||
npr->Y = y;
|
||||
npr->DX = dx;
|
||||
npr->DY = dy;
|
||||
npr->FLAGS = flags | (long) (layer_num);
|
||||
npr->NAME = name;
|
||||
|
||||
return layer_list = npr;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* rds_instance_in: adds the instance given by its data to the given list
|
||||
* and returns a pointer to the new list.
|
||||
****************************************************************************/
|
||||
|
||||
rdsins_list *rds_instance_in (instance, model, name, x, y, sym)
|
||||
rdsins_list *instance;
|
||||
char *model, *name;
|
||||
long x, y;
|
||||
char sym;
|
||||
{
|
||||
rdsins_list *npr;
|
||||
int i;
|
||||
|
||||
npr = allocrdsins ();
|
||||
|
||||
npr->NEXT = instance;
|
||||
npr->FIGNAME = namealloc (model);
|
||||
npr->INSNAME = namealloc (name);
|
||||
npr->X = x;
|
||||
npr->Y = y;
|
||||
npr->TRANSF = sym;
|
||||
for (i = 0; i < RDS_MAX_LAYER; i++)
|
||||
npr->COURONNE[i] = NULL;
|
||||
|
||||
return instance = npr;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* rds_remove_model: removes the model with the specified name from the list
|
||||
* of models.
|
||||
****************************************************************************/
|
||||
|
||||
void rds_remove_model (name)
|
||||
char *name;
|
||||
{
|
||||
|
||||
rds_figurep_typ *modelp;
|
||||
|
||||
name = namealloc (name);
|
||||
for (modelp = &(HEAD_RDSFIG); *modelp;)
|
||||
if ((*modelp)->NAME == name)
|
||||
*modelp = (*modelp)->NEXT;
|
||||
/*****************************************************
|
||||
*** return to system the free memory would be cue ***
|
||||
*****************************************************/
|
||||
else
|
||||
modelp = &((*modelp)->NEXT);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* rds_create_model: creates a new model with the given name and adds it to
|
||||
* the list of models pointed by HeadFigureRds and returns
|
||||
* a pointer to the created model.
|
||||
* Note: if the model exists it creates a new model and
|
||||
* remove the existing one.
|
||||
****************************************************************************/
|
||||
|
||||
rdsfig_list *rds_create_model (name)
|
||||
char *name;
|
||||
{
|
||||
rdsfig_list *npr;
|
||||
|
||||
rds_remove_model (name);
|
||||
npr = allocrdsfig ();
|
||||
|
||||
npr->NEXT = HEAD_RDSFIG;
|
||||
npr->NAME = namealloc (name);
|
||||
npr->INSTANCE = NULL;
|
||||
|
||||
return HEAD_RDSFIG = npr;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* rds_model_out: given a model name it returns a pointer to it by inspecting
|
||||
* the model list pointed by HeadFigureRds.
|
||||
****************************************************************************/
|
||||
|
||||
rdsfig_list *rds_model_out (name)
|
||||
char *name;
|
||||
{
|
||||
rdsfig_list *pt;
|
||||
|
||||
name = namealloc (name);
|
||||
|
||||
for (pt = HEAD_RDSFIG; pt; pt = pt->NEXT)
|
||||
if (pt->NAME == name)
|
||||
return pt;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* rds_instance_out: given an instance name and a pointer to its father model
|
||||
* it returns a poiner to the instance.
|
||||
****************************************************************************/
|
||||
|
||||
rdsins_list *rds_instance_out (rds_model, name)
|
||||
rdsfig_list *rds_model;
|
||||
char *name;
|
||||
{
|
||||
rdsins_list *pt;
|
||||
|
||||
name = namealloc (name);
|
||||
|
||||
for (pt = rds_model->INSTANCE; pt; pt = pt->NEXT)
|
||||
if (pt->INSNAME == name)
|
||||
return pt;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* rds_mbk_kill: destroies mbk database. May take time ...
|
||||
*****************************************************************************/
|
||||
|
||||
void rds_mbk_kill ()
|
||||
{
|
||||
phfig_list *pt, *pt_next;
|
||||
|
||||
for (pt = HEAD_PHFIG; pt; pt = pt_next)
|
||||
{
|
||||
pt_next = pt->NEXT;
|
||||
delphfig (pt->NAME);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mark_remove: marks the given rectangle as to be removed
|
||||
******************************************************************************/
|
||||
|
||||
void mark_remove (rectangle)
|
||||
rdsrec_list *rectangle;
|
||||
{
|
||||
if (!(is_remove (rectangle)))
|
||||
rectangle->FLAGS += REMOVE;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* demark_flattenres: removes the flag of the given rectangle
|
||||
******************************************************************************/
|
||||
|
||||
void demark_flattenres (rectangle)
|
||||
rdsrec_list *rectangle;
|
||||
{
|
||||
if (is_flattenres (rectangle))
|
||||
rectangle->FLAGS -= FLATTENRES;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mark_flattenres: marks the given rectangle as a result of a flatten operation
|
||||
******************************************************************************/
|
||||
|
||||
void mark_flattenres (rectangle)
|
||||
rdsrec_list *rectangle;
|
||||
{
|
||||
if (!(is_flattenres (rectangle)))
|
||||
rectangle->FLAGS += FLATTENRES;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* demark_used: removes the used flag
|
||||
******************************************************************************/
|
||||
|
||||
void demark_used (rectangle)
|
||||
rdsrec_list *rectangle;
|
||||
{
|
||||
if (is_used (rectangle))
|
||||
rectangle->FLAGS -= USED;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* mark_used: marks the given rectangle as used
|
||||
******************************************************************************/
|
||||
|
||||
void mark_used (rectangle)
|
||||
rdsrec_list *rectangle;
|
||||
{
|
||||
if (!(is_used (rectangle)))
|
||||
rectangle->FLAGS += USED;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* mark_scotch: marks the given rectangle as a scotch.
|
||||
******************************************************************************/
|
||||
|
||||
void mark_scotch (rectangle)
|
||||
rdsrec_list *rectangle;
|
||||
{
|
||||
if (!(is_scotch (rectangle)))
|
||||
{
|
||||
rectangle->FLAGS += SCOTCH;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* demark_scotch: removes the scotch flag from the rectangle.
|
||||
******************************************************************************/
|
||||
|
||||
void demark_scotch (rectangle)
|
||||
rdsrec_list *rectangle;
|
||||
{
|
||||
if (is_scotch (rectangle))
|
||||
rectangle->FLAGS -= SCOTCH;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* mark_old_scotch: marks the given rectangle as an old scotch
|
||||
******************************************************************************/
|
||||
|
||||
void mark_old_scotch (rectangle)
|
||||
rdsrec_list *rectangle;
|
||||
{
|
||||
if (!(is_old_scotch (rectangle)))
|
||||
rectangle->FLAGS += OLD_SCOTCH;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* mark_empty: marks the given model at the specified layer as empty
|
||||
****************************************************************************/
|
||||
|
||||
void mark_empty (model, layer_num)
|
||||
rdsfig_list *model;
|
||||
int layer_num;
|
||||
{
|
||||
if (!(is_empty (model, layer_num)))
|
||||
model->FLAGTAB[layer_num] += EMPTY;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* mark_post: marks the given model at the specified layer as post_treated
|
||||
****************************************************************************/
|
||||
|
||||
void mark_treat (model)
|
||||
rdsfig_list *model;
|
||||
{
|
||||
model->FLAGS = S2R_TREAT;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* push_free_list: pushes the given pointer to a deleted rectangle into the free
|
||||
* list.
|
||||
******************************************************************************/
|
||||
|
||||
void push_free_list (rectp)
|
||||
rdsrec_list *rectp;
|
||||
{
|
||||
rectp->NEXT = Free_List;
|
||||
Free_List = rectp;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* pull_free_list: pulls from the free list - if not empty - a pointer to
|
||||
* a ( rectangle) memory space area not used anymore.
|
||||
******************************************************************************/
|
||||
|
||||
rdsrec_list *pull_free_list ()
|
||||
{
|
||||
rdsrec_list *temp;
|
||||
|
||||
if (Free_List)
|
||||
{
|
||||
temp = Free_List;
|
||||
Free_List = Free_List->NEXT;
|
||||
temp->X = 0;
|
||||
temp->Y = 0;
|
||||
temp->DX = 0;
|
||||
temp->DY = 0;
|
||||
temp->NAME = NULL;
|
||||
temp->USER = (void *) NULL;
|
||||
temp->FLAGS = 0;
|
||||
return (temp);
|
||||
}
|
||||
else
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
* rds_remove_rectangle: removes from the specified list at the specified
|
||||
* layer all the rectangles that are marked to be removed.
|
||||
* The removed rectangles are put in a free list, to minimize
|
||||
* memory consumption: if we need to allocate memory for a new
|
||||
* rectangle we check the free list first.
|
||||
***************************************************************************/
|
||||
|
||||
void rds_remove_rectangle (list)
|
||||
rds_rectanglep_typ *list;
|
||||
{
|
||||
register rds_rectanglep_typ *rectanglep;
|
||||
register rdsrec_list *temp;
|
||||
|
||||
for (rectanglep = list; *rectanglep;)
|
||||
{
|
||||
if (is_remove (*rectanglep))
|
||||
{
|
||||
temp = (*rectanglep)->NEXT;
|
||||
push_free_list ((*rectanglep));
|
||||
*rectanglep = temp;
|
||||
}
|
||||
else
|
||||
rectanglep = &((*rectanglep)->NEXT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
* rds_clean_layer: removes from the specified model at the specified layer
|
||||
* all the rectangles that have been flattened and were not used.
|
||||
* The removed rectangles are put in a free list, to minimize
|
||||
* memory consumption: if we need to allocate memory for a new
|
||||
* rectangle we check the free list first.
|
||||
***************************************************************************/
|
||||
|
||||
void rds_clean_layer (list)
|
||||
rds_rectanglep_typ *list;
|
||||
{
|
||||
register rds_rectanglep_typ *rectanglep;
|
||||
register rdsrec_list *temp;
|
||||
|
||||
for (rectanglep = list; *rectanglep;)
|
||||
{
|
||||
/* when a rectangle is issued from a subcell after a ring flattening
|
||||
if is to be erased if it was not used by merge */
|
||||
if ((is_flattenres (*rectanglep)) && (!(is_used (*rectanglep))))
|
||||
{
|
||||
/**** remove it ****/
|
||||
temp = (*rectanglep)->NEXT;
|
||||
push_free_list ((*rectanglep));
|
||||
*rectanglep = temp;
|
||||
}
|
||||
else
|
||||
{
|
||||
/**** just erase using flag and flattenres ****/
|
||||
/**** the rectangle owns to the current hierararchical level ***/
|
||||
demark_flattenres (*rectanglep);
|
||||
demark_used (*rectanglep);
|
||||
rectanglep = &((*rectanglep)->NEXT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* side_intersec: determines if 2 rectangles could intersect in the dimension
|
||||
* of the specified sides.
|
||||
* If yes it returns (1) and puts where and how long is the side
|
||||
* of their intersection in rs and rds respectively.
|
||||
* If not it returns (0).
|
||||
*****************************************************************************/
|
||||
|
||||
int side_intersec (s1, s2, ds1, ds2, rs, rds)
|
||||
long s1, s2, ds1, ds2, *rs, *rds;
|
||||
{
|
||||
if ((s2 >= s1) && (s2 <= (s1 + ds1)))
|
||||
{
|
||||
if ((s2 + ds2) >= (s1 + ds1))
|
||||
{
|
||||
*rs = s2;
|
||||
*rds = s1 + ds1 - s2;
|
||||
}
|
||||
else
|
||||
{
|
||||
*rs = s2;
|
||||
*rds = ds2;
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
if ((s2 <= s1) && ((s2 + ds2) >= s1))
|
||||
{
|
||||
if ((s2 + ds2) >= (s1 + ds1))
|
||||
{
|
||||
*rs = s1;
|
||||
*rds = ds1;
|
||||
}
|
||||
else
|
||||
{
|
||||
*rs = s1;
|
||||
*rds = s2 + ds2 - s1;
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* rect_intersec: determines if 2 rectangles intersect.
|
||||
* If yes it returns (1) and puts the data of the rectangle
|
||||
* of their intersection in rx, ry, rdx and rdy.
|
||||
* If not it returns (0).
|
||||
*****************************************************************************/
|
||||
|
||||
int rect_intersec (x1, x2, dx1, dx2, y1, y2, dy1, dy2, rx, rdx, ry, rdy)
|
||||
long x1, x2, dx1, dx2, y1, y2, dy1, dy2, *rx, *rdx, *ry, *rdy;
|
||||
{
|
||||
if (side_intersec (x1, x2, dx1, dx2, rx, rdx))
|
||||
return (side_intersec (y1, y2, dy1, dy2, ry, rdy));
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
|
||||
static chain_list *MODEL_CHAIN;
|
||||
|
||||
static chain_list *rmake_model_list (pt_phfig)
|
||||
phfig_list *pt_phfig;
|
||||
|
||||
{
|
||||
phins_list *pt_ins;
|
||||
chain_list *pt_chain;
|
||||
|
||||
for (pt_ins = pt_phfig->PHINS; pt_ins != NULL; pt_ins = pt_ins->NEXT)
|
||||
{
|
||||
for (pt_chain = MODEL_CHAIN; pt_chain != NULL; pt_chain = pt_chain->NEXT)
|
||||
{
|
||||
if (((phfig_list *) pt_chain->DATA)->NAME == pt_ins->FIGNAME)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pt_chain == NULL)
|
||||
{
|
||||
/* if not already in model list , add a new model to it */
|
||||
phfig_list *pt_model;
|
||||
pt_model = getphfig (pt_ins->FIGNAME, 'A');
|
||||
/* cells whose have got gds equivalent must have been shifted to zero */
|
||||
if (incataloggds (pt_model->NAME))
|
||||
zero (pt_model);
|
||||
(void) rmake_model_list (pt_model);
|
||||
}
|
||||
}
|
||||
MODEL_CHAIN = addchain (MODEL_CHAIN, (char *) pt_phfig);
|
||||
|
||||
return (MODEL_CHAIN);
|
||||
}
|
||||
|
||||
static chain_list *make_model_list (fig)
|
||||
phfig_list *fig;
|
||||
{
|
||||
if (MODEL_CHAIN != NULL)
|
||||
freechain (MODEL_CHAIN);
|
||||
MODEL_CHAIN = NULL;
|
||||
return rmake_model_list (fig);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------\
|
||||
| Transform a hierarchy Mbk -> Rds |
|
||||
\------------------------------------------------------*/
|
||||
|
||||
rdsfig_list *S2Rfigmbkrds (FigureMbk, All)
|
||||
phfig_list *FigureMbk;
|
||||
char All;
|
||||
{
|
||||
rdsfig_list *FigureRds;
|
||||
chain_list *Pt;
|
||||
|
||||
if (All)
|
||||
{
|
||||
Pt = make_model_list (FigureMbk);
|
||||
|
||||
if (s2rdebug)
|
||||
{
|
||||
chain_list *pc = Pt;
|
||||
fprintf (stderr, "MODELS :\n");
|
||||
for (; pc; pc = pc->NEXT)
|
||||
{
|
||||
fprintf (stderr, " %s\t", ((phfig_list *) (pc->DATA))->NAME);
|
||||
if ((((phfig_list *) (pc->DATA))->PHINS) == NULL)
|
||||
fprintf (stderr, "FEUILLE");
|
||||
fprintf (stderr, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
FigureRds = figmbkrds ((phfig_list *) Pt->DATA, 0, 0);
|
||||
for (Pt = Pt->NEXT; Pt != NULL; Pt = Pt->NEXT)
|
||||
figmbkrds ((phfig_list *) Pt->DATA, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
FigureRds = figmbkrds (FigureMbk, 0, 0);
|
||||
for (Pt = FigureMbk->MODELCHAIN; Pt != NULL; Pt = Pt->NEXT)
|
||||
figmbkrds (getphfig ((char *) Pt->DATA, 'P'), 0, 0);
|
||||
}
|
||||
return FigureRds;
|
||||
}
|
||||
|
||||
void zero (phfig)
|
||||
phfig_list *phfig;
|
||||
{
|
||||
long x, y;
|
||||
phins_list *phins;
|
||||
phcon_list *phcon;
|
||||
phseg_list *phseg;
|
||||
phvia_list *phvia;
|
||||
phref_list *phref;
|
||||
|
||||
x = phfig->XAB1;
|
||||
y = phfig->YAB1;
|
||||
|
||||
phfig->XAB1 = phfig->YAB1 = 0;
|
||||
phfig->XAB2 -= x;
|
||||
phfig->YAB2 -= y;
|
||||
|
||||
for (phins = phfig->PHINS; phins != NULL; phins = phins->NEXT)
|
||||
{
|
||||
phins->XINS -= x;
|
||||
phins->YINS -= y;
|
||||
}
|
||||
|
||||
for (phcon = phfig->PHCON; phcon != NULL; phcon = phcon->NEXT)
|
||||
{
|
||||
phcon->XCON -= x;
|
||||
phcon->YCON -= y;
|
||||
}
|
||||
|
||||
for (phseg = phfig->PHSEG; phseg != NULL; phseg = phseg->NEXT)
|
||||
{
|
||||
phseg->X1 -= x;
|
||||
phseg->Y1 -= y;
|
||||
phseg->X2 -= x;
|
||||
phseg->Y2 -= y;
|
||||
}
|
||||
|
||||
for (phvia = phfig->PHVIA; phvia != NULL; phvia = phvia->NEXT)
|
||||
{
|
||||
phvia->XVIA -= x;
|
||||
phvia->YVIA -= y;
|
||||
}
|
||||
|
||||
for (phref = phfig->PHREF; phref != NULL; phref = phref->NEXT)
|
||||
{
|
||||
phref->XREF -= x;
|
||||
phref->YREF -= y;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,150 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
extern int s2rdebug;
|
||||
|
||||
/******************************************************************************
|
||||
* *
|
||||
* Rectangle Data Base : Structures and Access functions *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
#include "maxima.h"
|
||||
|
||||
/******************************************************************************
|
||||
* definitions of flags
|
||||
*****************************************************************************/
|
||||
|
||||
#define is_remove(rectangle) ( (rectangle)->FLAGS & REMOVE)
|
||||
#define is_flattenres(rectangle) ( (rectangle)->FLAGS & FLATTENRES)
|
||||
#define is_used(rectangle) ( (rectangle)->FLAGS & USED)
|
||||
#define is_scotch(rectangle) ( (rectangle)->FLAGS & SCOTCH)
|
||||
#define is_old_scotch(rectangle) ( (rectangle)->FLAGS & OLD_SCOTCH)
|
||||
|
||||
#define REC_INIT 0x00000000 /* rectangle: default */
|
||||
#define REMOVE 0x01000000 /* rectangle: to be removed */
|
||||
#define FLATTENRES 0x02000000 /* rectangle: resulted from a flatten */
|
||||
#define USED 0x04000000 /* rectangle: used in merge */
|
||||
#define SCOTCH 0x08000000 /* rectangle: a scotch */
|
||||
#define OLD_SCOTCH 0x10000000 /* rectangle: an old scotch */
|
||||
|
||||
#define EMPTY 1 /* model(specific for a layer):
|
||||
it contains nothing in this layer */
|
||||
#define POST 1 /* model->FLAGS: the model is postrated */
|
||||
#define READ 2 /* model->FLAGS: model already read from disk */
|
||||
/* when a cell contains a model which has been */
|
||||
/* already read in another cell, this flag */
|
||||
/* prevents from reading it twice from disk */
|
||||
|
||||
/* Rectangles */
|
||||
|
||||
typedef rdsrec_list *rds_rectanglep_typ;
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Instances :
|
||||
* The coordinates and symetry semantics are the gds & cif 's one, that's
|
||||
* completly different from mbk's
|
||||
*****************************************************************************/
|
||||
|
||||
/* Models */
|
||||
|
||||
typedef rdsfig_list *rds_figurep_typ;
|
||||
|
||||
/************************************************************************
|
||||
* types and definitions of rectangle data base access
|
||||
*************************************************************************/
|
||||
|
||||
/************************************************************************
|
||||
* free list of rectangles removed to be
|
||||
* allocated when a creation of a rectangle is requested
|
||||
************************************************************************/
|
||||
extern rdsrec_list *Free_List;
|
||||
|
||||
/************************************************************************
|
||||
* declaration of the functions defined in rds_access.c
|
||||
************************************************************************/
|
||||
|
||||
extern rdsfig_list *S2Rfigmbkrds ();
|
||||
extern void zero ();
|
||||
extern rdsrec_list *rds_rectangle_in ();
|
||||
extern rdsins_list *rds_instance_in ();
|
||||
extern void rds_remove_model ();
|
||||
extern rdsfig_list *rds_create_model ();
|
||||
extern rdsfig_list *rds_model_out ();
|
||||
extern rdsins_list *rds_instance_out ();
|
||||
extern void rds_mbk_kill ();
|
||||
extern void mark_treat ();
|
||||
extern void mark_remove ();
|
||||
extern void mark_flattenres ();
|
||||
extern void mark_used ();
|
||||
extern void mark_scotch ();
|
||||
extern void mark_old_scotch ();
|
||||
extern void mark_empty ();
|
||||
extern void mark_post ();
|
||||
extern void demark_flattenres ();
|
||||
extern void demark_scotch ();
|
||||
extern void demark_used ();
|
||||
extern void push_free_list ();
|
||||
extern rdsrec_list *pull_free_list ();
|
||||
extern void rds_remove_rectangle ();
|
||||
extern void rds_clean_layer ();
|
||||
extern int side_intersec ();
|
||||
extern int rect_intersec ();
|
||||
|
||||
/*******************************************************************************
|
||||
* macro definitions to test the flags fields of rectangles and models
|
||||
******************************************************************************/
|
||||
|
||||
/******************************************************************************
|
||||
* rectangles
|
||||
*****************************************************************************/
|
||||
|
||||
#define is_remove(rectangle) ( (rectangle)->FLAGS & REMOVE)
|
||||
#define is_flattenres(rectangle) ( (rectangle)->FLAGS & FLATTENRES)
|
||||
#define is_used(rectangle) ( (rectangle)->FLAGS & USED)
|
||||
#define is_scotch(rectangle) ( (rectangle)->FLAGS & SCOTCH)
|
||||
#define is_old_scotch(rectangle) ( (rectangle)->FLAGS & OLD_SCOTCH)
|
||||
|
||||
/*****************************************************************************
|
||||
* are_rect_intersec: tests if the 2 given rectangles ( given by their
|
||||
* coordinates) intersect or not.
|
||||
******************************************************************************/
|
||||
|
||||
#define are_rect_intersec(x1,y1,dx1,dy1,x2,y2,dx2,dy2) (\
|
||||
(( ((x2) >= (x1)) && ((x2) <= ((x1)+(dx1))))\
|
||||
||\
|
||||
(( (x2) <= (x1)) && ( ((x2)+(dx2)) >= (x1))))\
|
||||
&&\
|
||||
(( ((y2) >= (y1)) && ((y2) <= ((y1)+(dy1))))\
|
||||
||\
|
||||
(( (y2) <= (y1)) && ( ((y2)+(dy2)) >= (y1))))\
|
||||
)
|
||||
|
||||
/****************************************************************************
|
||||
* models
|
||||
****************************************************************************/
|
||||
|
||||
#define is_empty(model,layer_num) ( (model)->FLAGTAB[layer_num] & EMPTY)
|
||||
#define is_post(model) ( (model)->FLAGS & POST)
|
||||
#define is_read(model) ( (model)->FLAGS & READ)
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* ALLIANCE CAO & VLSI CAD */
|
||||
/* */
|
||||
/* Product : (S)ymbolic (2)to (R)eal translater */
|
||||
/* File : rdsx2y.c */
|
||||
/* */
|
||||
/* (c) copyright 1992 MASI laboratory CAO & VLSI team */
|
||||
/* All Right Reserved */
|
||||
/* Support : e-mail cao-vlsi@masi.ibp.fr */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* Main of cif or gds translater */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
|
||||
#include "generic.h"
|
||||
#include <mph.h>
|
||||
#include <mut.h>
|
||||
#include <rds.h>
|
||||
#include <rfm.h>
|
||||
#include <rpr.h>
|
||||
#include <rwi.h>
|
||||
#include <rut.h>
|
||||
#include <rtl.h>
|
||||
|
||||
getarg (argc, argv, model_name)
|
||||
int argc;
|
||||
char **argv;
|
||||
char **model_name;
|
||||
{
|
||||
char *option1;
|
||||
char *option2;
|
||||
|
||||
if (argc != 2)
|
||||
{
|
||||
fprintf (stderr, "usage : %s <file> \n", argv[0]);
|
||||
exit (1);
|
||||
}
|
||||
*model_name = namealloc (argv[1]);
|
||||
}
|
||||
|
||||
|
||||
main (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
char *model_name;
|
||||
rdsfig_list *pf;
|
||||
|
||||
/**** banner and parameters ****/
|
||||
getarg (argc, argv, &model_name);
|
||||
|
||||
/*\
|
||||
* setting environement
|
||||
* MBK_CATAL_NAME : file where file name to be replaced are put
|
||||
* MBK_CATA_LIB : where cells, catal file and techno file are
|
||||
* MBK_WORK_LIB : where result file is written or where techno file is
|
||||
* WORK_LIB is watched before CATA_LIB
|
||||
* MBK_WORK_LIB : where result file is placed
|
||||
* MBK_IN_PH : file format of symbolic figure
|
||||
* RDS_TECHNO_NAME : techno file name
|
||||
* RDS_IN : file format of real figures to replace
|
||||
* RDS_OUT : file format of result file
|
||||
\*/
|
||||
mbkenv ();
|
||||
rdsenv ();
|
||||
loadrdsparam ();
|
||||
pf = getrdsfig (model_name, 'A', 0);
|
||||
saverdsfig (pf);
|
||||
|
||||
return (0);
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* ALLIANCE CAO & VLSI CAD */
|
||||
/* */
|
||||
/* Product : (S)ymbolic (2)to (R)eal translater */
|
||||
/* File : statistics.c */
|
||||
/* */
|
||||
/* (c) copyright 1992 MASI laboratory CAO & VLSI team */
|
||||
/* All Right Reserved */
|
||||
/* Support : e-mail cao-vlsi@masi.ibp.fr */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* Statistics functions */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "statistics.h"
|
||||
|
||||
long STAT_RECT_REQRD = 0; /* number of rectangles required to be allocated */
|
||||
long STAT_RECT_ALLOC = 0; /* number of rectangles really allocated in memory */
|
||||
long STAT_SCTCH_RQRD = 0; /* number of scotchs needed */
|
||||
long STAT_SCTCH_CRTD = 0; /* number of scotchs created */
|
||||
extern long mbkalloc_stat; /* memory allocated by mbk */
|
||||
|
||||
/*******************************************************************************
|
||||
* print_statistics: prints statistics
|
||||
******************************************************************************/
|
||||
|
||||
void print_statistics (scotch_on_flag)
|
||||
int scotch_on_flag;
|
||||
{
|
||||
printf ("\to memory allocation informations\n");
|
||||
printf ("\t--> required rectangles = %ld ", STAT_RECT_REQRD);
|
||||
printf (" really allocated = %ld\n", STAT_RECT_ALLOC);
|
||||
if (scotch_on_flag)
|
||||
{
|
||||
printf ("\t--> required scotchs = %ld ", STAT_SCTCH_RQRD);
|
||||
printf (" really created = %ld\n", STAT_SCTCH_CRTD);
|
||||
}
|
||||
printf ("\t--> Number of allocated bytes: %ld\n", mbkalloc_stat);
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* This file is part of the Alliance CAD System
|
||||
* Copyright (C) Laboratoire LIP6 - Département ASIM
|
||||
* Universite Pierre et Marie Curie
|
||||
*
|
||||
* Home page : http://www-asim.lip6.fr/alliance/
|
||||
* E-mail support : mailto:alliance-support@asim.lip6.fr
|
||||
*
|
||||
* This progam 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 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* Alliance VLSI CAD System 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 the GNU C Library; see the file COPYING. If not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
extern void print_statistics ();
|
||||
extern long STAT_RECT_REQRD;
|
||||
extern long STAT_RECT_ALLOC;
|
||||
extern long STAT_SCTCH_RQRD;
|
||||
extern long STAT_SCTCH_CRTD;
|
Loading…
Reference in New Issue