English keywords support for RDS file (courtesy of Frederic Petrot).
This commit is contained in:
parent
c5d9fbe540
commit
7a8824dd34
|
@ -1,4 +1,3 @@
|
|||
|
||||
%option noinput
|
||||
%option nounput
|
||||
|
||||
|
@ -39,6 +38,15 @@ int yylineno;
|
|||
: yytchar)
|
||||
#endif
|
||||
|
||||
void DrucEcho ( char *text )
|
||||
{
|
||||
if ( DrucStructStat.FLAG_VIEW_RULE_MODE == DRUC_VERBOSE )
|
||||
{
|
||||
DrucViewString ( text );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
%}
|
||||
|
||||
%p 3000
|
||||
|
@ -61,137 +69,217 @@ comment [#]({lettre}*{dec}*{esp}*{pct}*)*{rc}
|
|||
%%
|
||||
|
||||
|
||||
{blanc} { DrucEcho ( yytext );
|
||||
{blanc} {
|
||||
DrucEcho ( yytext );
|
||||
}
|
||||
layer { DrucEcho ( yytext );
|
||||
return(DRUC_LAYER);}
|
||||
regle { DrucEcho ( yytext );
|
||||
return(DRUC_REGLE);}
|
||||
regles { DrucEcho ( yytext );
|
||||
return(DRUC_REGLES);}
|
||||
fin { DrucEcho ( yytext );
|
||||
return(DRUC_FIN);}
|
||||
|
||||
define { DrucEcho ( yytext );
|
||||
return(DRUC_DEFINE);}
|
||||
undefine { DrucEcho ( yytext );
|
||||
return(DRUC_UNDEFINE);}
|
||||
caracterise { DrucEcho ( yytext );
|
||||
return(DRUC_CARACTERISE);}
|
||||
relation { DrucEcho ( yytext );
|
||||
return(DRUC_RELATION);}
|
||||
|
||||
resize { DrucEcho ( yytext );
|
||||
return(DRUC_RESIZE);}
|
||||
exclusion { DrucEcho ( yytext );
|
||||
return(DRUC_EXCLUSION);}
|
||||
union { DrucEcho ( yytext );
|
||||
return(DRUC_UNION);}
|
||||
enveloppe { DrucEcho ( yytext );
|
||||
return(DRUC_ENVELOPPE);}
|
||||
marge { DrucEcho ( yytext );
|
||||
return(DRUC_MARGE);}
|
||||
croix { DrucEcho ( yytext );
|
||||
return(DRUC_CROIX);}
|
||||
intersection { DrucEcho ( yytext );
|
||||
return(DRUC_INTERSECT);}
|
||||
extension { DrucEcho ( yytext );
|
||||
return(DRUC_EXTENSION);}
|
||||
inclusion { DrucEcho ( yytext );
|
||||
return(DRUC_INCLUSION);}
|
||||
distance { DrucEcho ( yytext );
|
||||
return(DRUC_DISTANCE);}
|
||||
|
||||
surface_inter { DrucEcho ( yytext );
|
||||
return(DRUC_SURFACE_INTER);}
|
||||
longueur_inter { DrucEcho ( yytext );
|
||||
return(DRUC_LONG_INTER);}
|
||||
largeur_inter { DrucEcho ( yytext );
|
||||
return(DRUC_LARGE_INTER);}
|
||||
penetre_inter { DrucEcho ( yytext );
|
||||
return(DRUC_PENET_INTER);}
|
||||
parallele_inter { DrucEcho ( yytext );
|
||||
return(DRUC_PARAL_INTER);}
|
||||
perpendiculaire_inter { DrucEcho ( yytext );
|
||||
return(DRUC_PERPEN_INTER);}
|
||||
|
||||
axiale { DrucEcho ( yytext );
|
||||
return(DRUC_AXIALE);}
|
||||
geodesique { DrucEcho ( yytext );
|
||||
return(DRUC_GEODESIQUE);}
|
||||
frontale { DrucEcho ( yytext );
|
||||
return(DRUC_FRONTALE);}
|
||||
laterale_min { DrucEcho ( yytext );
|
||||
return(DRUC_LATERALE_MIN);}
|
||||
laterale_max { DrucEcho ( yytext );
|
||||
return(DRUC_LATERALE_MAX);}
|
||||
|
||||
longueur_min { DrucEcho ( yytext );
|
||||
return(DRUC_LONGUEUR_MIN);}
|
||||
longueur_max { DrucEcho ( yytext );
|
||||
return(DRUC_LONGUEUR_MAX);}
|
||||
largeur_min { DrucEcho ( yytext );
|
||||
return(DRUC_LARGEUR_MIN);}
|
||||
largeur_max { DrucEcho ( yytext );
|
||||
return(DRUC_LARGEUR_MAX);}
|
||||
superieure { DrucEcho ( yytext );
|
||||
return(DRUC_SUP);}
|
||||
inferieure { DrucEcho ( yytext );
|
||||
return(DRUC_INF);}
|
||||
|
||||
surface { DrucEcho ( yytext );
|
||||
return(DRUC_SURFACE);}
|
||||
longueur { DrucEcho ( yytext );
|
||||
return(DRUC_LONGUEUR);}
|
||||
largeur { DrucEcho ( yytext );
|
||||
return(DRUC_LARGEUR);}
|
||||
|
||||
notch { DrucEcho ( yytext );
|
||||
return(DRUC_NOTCH);}
|
||||
min { DrucEcho ( yytext );
|
||||
return(DRUC_MIN);}
|
||||
max { DrucEcho ( yytext );
|
||||
return(DRUC_MAX);}
|
||||
"<=" { DrucEcho ( yytext );
|
||||
return(DRUC_INFEQ);}
|
||||
">=" { DrucEcho ( yytext );
|
||||
return(DRUC_SUPEQ);}
|
||||
|
||||
"->" { DrucEcho ( yytext );
|
||||
return(DRUC_DESTINATION);}
|
||||
|
||||
{decimal} { DrucEcho ( yytext );
|
||||
sscanf(yytext,"%d",&DrucInputEntier);
|
||||
return(DRUC_ENTIER);
|
||||
layer {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LAYER;
|
||||
}
|
||||
{reel} { DrucEcho ( yytext );
|
||||
sscanf( yytext,"%f",& DrucInputFloat);
|
||||
return(DRUC_FLOAT);
|
||||
regle|rule {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_REGLE;
|
||||
}
|
||||
{negat} { DrucEcho ( yytext );
|
||||
sscanf( yytext,"%f",& DrucInputFloat);
|
||||
return(DRUC_NEG_FLOAT);
|
||||
regles|rules {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_REGLES;
|
||||
}
|
||||
{ident} { DrucEcho ( yytext );
|
||||
sscanf(yytext,"%s",DrucInputChaine);
|
||||
return(DRUC_NOM);
|
||||
fin|end {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_FIN;
|
||||
}
|
||||
{comment} { DrucEcho ( yytext );
|
||||
define {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_DEFINE;
|
||||
}
|
||||
undefine {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_UNDEFINE;
|
||||
}
|
||||
caracterise|characterize {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_CARACTERISE;
|
||||
}
|
||||
relation {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_RELATION;
|
||||
}
|
||||
|
||||
resize {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_RESIZE;
|
||||
}
|
||||
exclusion {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_EXCLUSION;
|
||||
}
|
||||
union {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_UNION;
|
||||
}
|
||||
enveloppe|envelope {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_ENVELOPPE;
|
||||
}
|
||||
marge|margin {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_MARGE;
|
||||
}
|
||||
croix|cross {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_CROIX;
|
||||
}
|
||||
intersection {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_INTERSECT;
|
||||
}
|
||||
extension {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_EXTENSION;
|
||||
}
|
||||
inclusion {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_INCLUSION;
|
||||
}
|
||||
distance|spacing {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_DISTANCE;
|
||||
}
|
||||
surface_inter|intersection_area {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_SURFACE_INTER;
|
||||
}
|
||||
longueur_inter|intersection_length {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LONG_INTER;
|
||||
}
|
||||
largeur_inter|intersection_width {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LARGE_INTER;
|
||||
}
|
||||
penetre_inter|inclusion_intersection {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_PENET_INTER;
|
||||
}
|
||||
parallele_inter|parallel_intersection {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_PARAL_INTER;
|
||||
}
|
||||
perpendiculaire_inter|perpendicular_intersection {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_PERPEN_INTER;
|
||||
}
|
||||
axiale|axial {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_AXIALE;
|
||||
}
|
||||
geodesique|geodetic {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_GEODESIQUE;
|
||||
}
|
||||
frontale {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_FRONTALE;
|
||||
}
|
||||
laterale_min|min_sideways {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LATERALE_MIN;
|
||||
}
|
||||
laterale_max|max_sideways {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LATERALE_MAX;
|
||||
}
|
||||
longueur_min|min_length {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LONGUEUR_MIN;
|
||||
}
|
||||
longueur_max|max_length {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LONGUEUR_MAX;
|
||||
}
|
||||
largeur_min|min_width {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LARGEUR_MIN;
|
||||
}
|
||||
largeur_max|max_width {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LARGEUR_MAX;
|
||||
}
|
||||
superieure|superior {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_SUP;
|
||||
}
|
||||
inferieure|inferior {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_INF;
|
||||
}
|
||||
surface|area {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_SURFACE;
|
||||
}
|
||||
longueur|length {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LONGUEUR;
|
||||
}
|
||||
largeur|width {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_LARGEUR;
|
||||
}
|
||||
notch {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_NOTCH;
|
||||
}
|
||||
min|">\:" {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_MIN;
|
||||
}
|
||||
max|"<\:" {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_MAX;
|
||||
}
|
||||
"<=" {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_INFEQ;
|
||||
}
|
||||
">=" {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_SUPEQ;
|
||||
}
|
||||
"->" {
|
||||
DrucEcho ( yytext );
|
||||
return DRUC_DESTINATION;
|
||||
}
|
||||
{decimal} {
|
||||
DrucEcho ( yytext );
|
||||
sscanf( yytext,"%d", &DrucInputEntier );
|
||||
return DRUC_ENTIER;
|
||||
}
|
||||
{reel} {
|
||||
DrucEcho ( yytext );
|
||||
sscanf( yytext,"%f", &DrucInputFloat );
|
||||
return DRUC_FLOAT;
|
||||
}
|
||||
{negat} {
|
||||
DrucEcho ( yytext );
|
||||
sscanf( yytext,"%f", &DrucInputFloat );
|
||||
return DRUC_NEG_FLOAT;
|
||||
}
|
||||
{ident} {
|
||||
DrucEcho ( yytext );
|
||||
sscanf( yytext,"%s",DrucInputChaine );
|
||||
return DRUC_NOM;
|
||||
}
|
||||
{comment} {
|
||||
DrucEcho ( yytext );
|
||||
}
|
||||
. {
|
||||
DrucEcho ( yytext );
|
||||
return *yytext;
|
||||
}
|
||||
. { DrucEcho ( yytext );
|
||||
return (*yytext);}
|
||||
|
||||
%%
|
||||
|
||||
void DrucEcho ( text )
|
||||
int yywrap( void )
|
||||
{
|
||||
if ( DrucStructStat.FLAG_VIEW_RULE_MODE == DRUC_VERBOSE
|
||||
)
|
||||
{
|
||||
DrucViewString ( text );
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int yywrap()
|
||||
{ return(1) ; }
|
||||
|
|
|
@ -27,12 +27,13 @@
|
|||
\------------------------------------------------------------*/
|
||||
extern int yylineno;
|
||||
extern FILE *yyin;
|
||||
int DrucIndexMesure;
|
||||
int DrucInputEntier;
|
||||
int DrucNegatif;
|
||||
float DrucInputFloat;
|
||||
char DrucInputChaine[DRUC_MAX_STRING_BUFFER + 1];
|
||||
extern int yylex ();
|
||||
|
||||
int DrucIndexMesure;
|
||||
int DrucInputEntier;
|
||||
int DrucNegatif;
|
||||
float DrucInputFloat;
|
||||
char DrucInputChaine[DRUC_MAX_STRING_BUFFER + 1];
|
||||
%}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
|
@ -40,6 +41,10 @@ extern int yylex ();
|
|||
| Druc Types LEX/YACC |
|
||||
| |
|
||||
\------------------------------------------------------------*/
|
||||
%union {
|
||||
unsigned int uint;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Druc Terminaux |
|
||||
|
@ -54,29 +59,25 @@ extern int yylex ();
|
|||
|
||||
DRUC_UNION DRUC_EXCLUSION DRUC_RESIZE
|
||||
|
||||
DRUC_ENVELOPPE DRUC_MARGE DRUC_CROIX
|
||||
DRUC_INTERSECT DRUC_EXTENSION DRUC_INCLUSION
|
||||
DRUC_DISTANCE
|
||||
|
||||
DRUC_SURFACE_INTER DRUC_LONG_INTER DRUC_LARGE_INTER
|
||||
DRUC_PENET_INTER DRUC_PARAL_INTER DRUC_PERPEN_INTER
|
||||
|
||||
DRUC_FRONTALE DRUC_LATERALE_MIN DRUC_LATERALE_MAX
|
||||
DRUC_LARGEUR_MIN DRUC_LARGEUR_MAX
|
||||
DRUC_LONGUEUR_MIN DRUC_LONGUEUR_MAX
|
||||
DRUC_SUP DRUC_INF
|
||||
DRUC_AXIALE DRUC_GEODESIQUE
|
||||
|
||||
DRUC_SURFACE DRUC_LONGUEUR DRUC_LARGEUR
|
||||
|
||||
DRUC_MIN DRUC_MAX
|
||||
DRUC_INFEQ DRUC_SUPEQ
|
||||
DRUC_DIFF DRUC_NOTCH
|
||||
|
||||
DRUC_DESTINATION
|
||||
|
||||
DRUC_ENTIER DRUC_FLOAT DRUC_NEG_FLOAT
|
||||
|
||||
%type <uint> config
|
||||
%token <uint> DRUC_DISTANCE DRUC_INTERSECT DRUC_EXTENSION
|
||||
DRUC_INCLUSION DRUC_ENVELOPPE DRUC_MARGE DRUC_CROIX
|
||||
%type <uint> mesure_rel
|
||||
%token <uint> DRUC_SURFACE_INTER DRUC_LONG_INTER DRUC_LARGE_INTER
|
||||
DRUC_PENET_INTER DRUC_PARAL_INTER DRUC_PERPEN_INTER
|
||||
DRUC_LONGUEUR_MIN DRUC_LONGUEUR_MAX DRUC_LARGEUR_MIN
|
||||
DRUC_LARGEUR_MAX DRUC_FRONTALE DRUC_LATERALE_MIN
|
||||
DRUC_LATERALE_MAX DRUC_SUP DRUC_INF DRUC_AXIALE
|
||||
DRUC_GEODESIQUE
|
||||
%type <uint> mesure
|
||||
%token <uint> DRUC_SURFACE DRUC_LONGUEUR DRUC_LARGEUR DRUC_NOTCH
|
||||
%type <uint> compar
|
||||
%token <uint> DRUC_MIN DRUC_MAX DRUC_INFEQ DRUC_SUPEQ '<' '>'
|
||||
'=' DRUC_DIFF
|
||||
/*------------------------------------------------------------\
|
||||
| |
|
||||
| Druc Racine |
|
||||
|
@ -182,8 +183,10 @@ regle_1 : DRUC_REGLE { DrucIndexMesure ++ ;}
|
|||
DRUC_ENTIER { DrucInitRegleNumero ( DrucInputEntier,
|
||||
DrucIndexMesure) ;}
|
||||
':'
|
||||
mesure
|
||||
compar
|
||||
mesure { DrucInitRegleMesure( $6,
|
||||
DrucIndexMesure );}
|
||||
compar { DrucInitRegleOpCompare ( $8,
|
||||
DrucIndexMesure );}
|
||||
DRUC_FLOAT { DrucInitRegleValeur ( RprTranslateParam ( DrucInputFloat ),
|
||||
DrucIndexMesure );}
|
||||
';'
|
||||
|
@ -205,103 +208,66 @@ lst_rgl_2 : lst_rgl_2
|
|||
| regle_2
|
||||
;
|
||||
|
||||
regle_2 : DRUC_REGLE { DrucIndexMesure ++ ;}
|
||||
regle_2 : DRUC_REGLE { DrucIndexMesure++ ;}
|
||||
DRUC_ENTIER { DrucInitRegleNumero ( DrucInputEntier,
|
||||
DrucIndexMesure ) ;}
|
||||
':'
|
||||
config
|
||||
mesure_rel
|
||||
compar
|
||||
config { DrucInitRegleRelation( $6,
|
||||
DrucIndexMesure );}
|
||||
mesure_rel { DrucInitRegleMesure( $8,
|
||||
DrucIndexMesure );}
|
||||
compar { DrucInitRegleOpCompare ( $10,
|
||||
DrucIndexMesure );}
|
||||
DRUC_FLOAT { DrucInitRegleValeur ( RprTranslateParam ( DrucInputFloat ),
|
||||
DrucIndexMesure );}
|
||||
';'
|
||||
;
|
||||
|
||||
config : DRUC_DISTANCE { DrucInitRegleRelation( DRUC_RELATION_DISTANCE,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_INTERSECT { DrucInitRegleRelation( DRUC_RELATION_INTERSECTION,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_EXTENSION { DrucInitRegleRelation( DRUC_RELATION_EXTENSION,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_INCLUSION { DrucInitRegleRelation( DRUC_RELATION_INCLUSION,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_ENVELOPPE { DrucInitRegleRelation( DRUC_RELATION_ENVELOPPE,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_MARGE { DrucInitRegleRelation( DRUC_RELATION_MARGE,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_CROIX { DrucInitRegleRelation( DRUC_RELATION_CROIX,
|
||||
DrucIndexMesure );}
|
||||
config : DRUC_DISTANCE { $$ = DRUC_RELATION_DISTANCE;}
|
||||
| DRUC_INTERSECT { $$ = DRUC_RELATION_INTERSECTION;}
|
||||
| DRUC_EXTENSION { $$ = DRUC_RELATION_EXTENSION;}
|
||||
| DRUC_INCLUSION { $$ = DRUC_RELATION_INCLUSION;}
|
||||
| DRUC_ENVELOPPE { $$ = DRUC_RELATION_ENVELOPPE;}
|
||||
| DRUC_MARGE { $$ = DRUC_RELATION_MARGE;}
|
||||
| DRUC_CROIX { $$ = DRUC_RELATION_CROIX;}
|
||||
;
|
||||
|
||||
mesure_rel: DRUC_SURFACE_INTER{ DrucInitRegleMesure( DRUC_MESURE_SURFACE_INTER,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LONG_INTER { DrucInitRegleMesure( DRUC_MESURE_LONGUEUR_INTER,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LARGE_INTER { DrucInitRegleMesure( DRUC_MESURE_LARGEUR_INTER,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_PENET_INTER { DrucInitRegleMesure( DRUC_MESURE_PENETRE_INTER,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_PARAL_INTER { DrucInitRegleMesure( DRUC_MESURE_PARALEL_INTER,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_PERPEN_INTER{ DrucInitRegleMesure( DRUC_MESURE_PERPEND_INTER,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LONGUEUR_MIN{ DrucInitRegleMesure( DRUC_MESURE_LONGUEUR_MIN,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LONGUEUR_MAX{ DrucInitRegleMesure( DRUC_MESURE_LONGUEUR_MAX,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LARGEUR_MIN { DrucInitRegleMesure( DRUC_MESURE_LARGEUR_MIN,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LARGEUR_MAX { DrucInitRegleMesure( DRUC_MESURE_LARGEUR_MAX,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_FRONTALE { DrucInitRegleMesure( DRUC_MESURE_FRONTALE,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LATERALE_MIN{ DrucInitRegleMesure( DRUC_MESURE_LATERALE_MIN,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LATERALE_MAX{ DrucInitRegleMesure( DRUC_MESURE_LATERALE_MAX,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_SUP { DrucInitRegleMesure( DRUC_MESURE_SUP,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_INF { DrucInitRegleMesure( DRUC_MESURE_INF,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_AXIALE { DrucInitRegleMesure( DRUC_MESURE_AXIALE,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_GEODESIQUE { DrucInitRegleMesure( DRUC_MESURE_GEODESIQUE,
|
||||
DrucIndexMesure );}
|
||||
mesure_rel: DRUC_SURFACE_INTER { $$ = DRUC_MESURE_SURFACE_INTER;}
|
||||
| DRUC_LONG_INTER { $$ = DRUC_MESURE_LONGUEUR_INTER;}
|
||||
| DRUC_LARGE_INTER { $$ = DRUC_MESURE_LARGEUR_INTER;}
|
||||
| DRUC_PENET_INTER { $$ = DRUC_MESURE_PENETRE_INTER;}
|
||||
| DRUC_PARAL_INTER { $$ = DRUC_MESURE_PARALEL_INTER;}
|
||||
| DRUC_PERPEN_INTER { $$ = DRUC_MESURE_PERPEND_INTER;}
|
||||
| DRUC_LONGUEUR_MIN { $$ = DRUC_MESURE_LONGUEUR_MIN;}
|
||||
| DRUC_LONGUEUR_MAX { $$ = DRUC_MESURE_LONGUEUR_MAX;}
|
||||
| DRUC_LARGEUR_MIN { $$ = DRUC_MESURE_LARGEUR_MIN;}
|
||||
| DRUC_LARGEUR_MAX { $$ = DRUC_MESURE_LARGEUR_MAX;}
|
||||
| DRUC_FRONTALE { $$ = DRUC_MESURE_FRONTALE;}
|
||||
| DRUC_LATERALE_MIN { $$ = DRUC_MESURE_LATERALE_MIN;}
|
||||
| DRUC_LATERALE_MAX { $$ = DRUC_MESURE_LATERALE_MAX;}
|
||||
| DRUC_SUP { $$ = DRUC_MESURE_SUP;}
|
||||
| DRUC_INF { $$ = DRUC_MESURE_INF;}
|
||||
| DRUC_AXIALE { $$ = DRUC_MESURE_AXIALE;}
|
||||
| DRUC_GEODESIQUE { $$ = DRUC_MESURE_GEODESIQUE;}
|
||||
;
|
||||
|
||||
mesure : DRUC_SURFACE { DrucInitRegleMesure( DRUC_MESURE_SURFACE,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LONGUEUR { DrucInitRegleMesure( DRUC_MESURE_LONGUEUR,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LARGEUR { DrucInitRegleMesure( DRUC_MESURE_LARGEUR,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_NOTCH { DrucInitRegleMesure( DRUC_MESURE_NOTCH,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_SURFACE_INTER { DrucInitRegleMesure( DRUC_MESURE_SURFACE_INTER,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LONG_INTER { DrucInitRegleMesure( DRUC_MESURE_LONGUEUR_INTER,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_LARGE_INTER { DrucInitRegleMesure( DRUC_MESURE_LARGEUR_INTER,
|
||||
DrucIndexMesure );}
|
||||
mesure : DRUC_SURFACE { $$ = DRUC_MESURE_SURFACE;}
|
||||
| DRUC_LONGUEUR { $$ = DRUC_MESURE_LONGUEUR;}
|
||||
| DRUC_LARGEUR { $$ = DRUC_MESURE_LARGEUR;}
|
||||
| DRUC_NOTCH { $$ = DRUC_MESURE_NOTCH;}
|
||||
| DRUC_SURFACE_INTER { $$ = DRUC_MESURE_SURFACE_INTER;}
|
||||
| DRUC_LONG_INTER { $$ = DRUC_MESURE_LONGUEUR_INTER;}
|
||||
| DRUC_LARGE_INTER { $$ = DRUC_MESURE_LARGEUR_INTER;}
|
||||
;
|
||||
|
||||
compar : DRUC_MIN { DrucInitRegleOpCompare ( DRUC_OPERATION_MIN,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_MAX { DrucInitRegleOpCompare ( DRUC_OPERATION_MAX,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_INFEQ { DrucInitRegleOpCompare ( DRUC_OPERATION_INFEQ,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_SUPEQ { DrucInitRegleOpCompare ( DRUC_OPERATION_SUPEQ,
|
||||
DrucIndexMesure );}
|
||||
| '<' { DrucInitRegleOpCompare ( DRUC_OPERATION_INF,
|
||||
DrucIndexMesure );}
|
||||
| '>' { DrucInitRegleOpCompare ( DRUC_OPERATION_SUP,
|
||||
DrucIndexMesure );}
|
||||
| '=' { DrucInitRegleOpCompare ( DRUC_OPERATION_EQUAL,
|
||||
DrucIndexMesure );}
|
||||
| DRUC_DIFF { DrucInitRegleOpCompare ( DRUC_OPERATION_DIFF,
|
||||
DrucIndexMesure );}
|
||||
compar : DRUC_MIN { $$ = DRUC_OPERATION_MIN;}
|
||||
| DRUC_MAX { $$ = DRUC_OPERATION_MAX;}
|
||||
| DRUC_INFEQ { $$ = DRUC_OPERATION_INFEQ;}
|
||||
| DRUC_SUPEQ { $$ = DRUC_OPERATION_SUPEQ;}
|
||||
| '<' { $$ = DRUC_OPERATION_INF;}
|
||||
| '>' { $$ = DRUC_OPERATION_SUP;}
|
||||
| '=' { $$ = DRUC_OPERATION_EQUAL;}
|
||||
| DRUC_DIFF { $$ = DRUC_OPERATION_DIFF;}
|
||||
;
|
||||
|
||||
|
||||
%%
|
||||
|
|
|
@ -218,6 +218,7 @@ void DrucStatInit ( Flatten,
|
|||
)
|
||||
boolean Flatten;
|
||||
boolean Verbose;
|
||||
boolean View_Rules;
|
||||
boolean FileType;
|
||||
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
etcdir=$(prefix)/etc
|
||||
|
||||
etc_DATA=cmos.rds scn6m_deep_09.rds
|
||||
etc_DATA=symbolic.rds cmos.rds scn6m_deep_09.rds
|
||||
|
||||
EXTRA_DIST=$(etc_DATA)
|
||||
|
||||
|
|
|
@ -0,0 +1,942 @@
|
|||
#=====================================================================
|
||||
#
|
||||
# ALLIANCE VLSI CAD
|
||||
# (R)eal (D)ata (S)tructure parameter file
|
||||
# (c) copyright 1992 Laboratory UPMC/MASI/CAO-VLSI
|
||||
# all rights reserved
|
||||
# e-mail : cao-vlsi@masi.ibp.fr
|
||||
#
|
||||
# file : symbolic.rds, derived from cmos.rds
|
||||
# version : 12
|
||||
# last modif : Mar 19, 2019
|
||||
#
|
||||
##-------------------------------------------------------------------
|
||||
# Symbolic to micron on a 'one lambda equals one micron' basis
|
||||
##-------------------------------------------------------------------
|
||||
# Refer to the documentation for more precise information.
|
||||
#=====================================================================
|
||||
# 01/11/09 ALU5/6 pitch 10
|
||||
#
|
||||
# 99/11/3 ALU5/6 rules
|
||||
# . theses rules are preliminary rules, we hope that they wil change
|
||||
# in future. For now, ALU5/6 are dedicated to supplies an clock.
|
||||
#
|
||||
# 99/3/22 new symbolics rules
|
||||
# . ALU1 width remains 1, ALU2/3/4 is 2
|
||||
# . ALU1/2/3/4 spacing (edge to edge) is now 3 for all
|
||||
# . GATE to GATE spacing is 3 but POLY wire to POLY wire remains 2
|
||||
# . All via stacking are allowed
|
||||
#
|
||||
# 98/12/1 drc rules were updated
|
||||
# spacing VIA to POLY or gate is one rather 2
|
||||
# VIA2 and ALU3 appeared
|
||||
# . ALU3 width is 3
|
||||
# . ALU2/VIA2/ALU3 is resp. 3/1/3
|
||||
# . ALU3 edge spacing is 2
|
||||
# . stacked VIA/VIA2 is allowed
|
||||
# . if they are not stacked they must distant of 2
|
||||
# . CONT/VIA2 is free
|
||||
# note
|
||||
# . stacked CONT/VIA is always not allowed
|
||||
# NWELL is automatically drawn with the DIFN and NTIE layers
|
||||
#=====================================================================
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# PHYSICAL_GRID :
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
DEFINE PHYSICAL_GRID .5
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# LAMBDA :
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
DEFINE LAMBDA 1
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE MBK_TO_RDS_SEGMENT :
|
||||
#
|
||||
# MBK RDS layer 1 RDS layer 2
|
||||
# name name TRANS DLR DWR OFFSET name TRANS DLR DWR OFFSET ...
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE MBK_TO_RDS_SEGMENT
|
||||
|
||||
PWELL RDS_PWELL VW 0.0 0.0 0.0 EXT
|
||||
NWELL RDS_NWELL VW 0.0 0.0 0.0 ALL
|
||||
NDIF RDS_NDIF VW 0.5 0.0 0.0 ALL
|
||||
PDIF RDS_PDIF VW 0.5 0.0 0.0 ALL \
|
||||
RDS_NWELL VW 1.0 1.0 0.0 ALL
|
||||
NTIE RDS_NTIE VW 0.5 0.0 0.0 ALL \
|
||||
RDS_NWELL VW 1.0 1.0 0.0 ALL
|
||||
PTIE RDS_PTIE VW 0.5 0.0 0.0 ALL
|
||||
NTRANS RDS_POLY VW 0.0 0.0 0.0 ALL \
|
||||
RDS_NDIF LCW -1.5 2.0 0.0 EXT \
|
||||
RDS_NDIF RCW -1.5 2.0 0.0 EXT \
|
||||
RDS_NDIF VW -1.5 4.0 0.0 DRC \
|
||||
RDS_ACTIV VW -1.5 5.0 0.0 ALL \
|
||||
RDS_PWELL VW -1.5 0.0 0.0 EXT
|
||||
PTRANS RDS_POLY VW 0.0 0.0 0.0 ALL \
|
||||
RDS_PDIF LCW -1.5 2.0 0.0 EXT \
|
||||
RDS_PDIF RCW -1.5 2.0 0.0 EXT \
|
||||
RDS_PDIF VW -1.5 4.0 0.0 DRC \
|
||||
RDS_ACTIV VW -1.5 5.0 0.0 ALL \
|
||||
RDS_NWELL VW -1.0 5.0 0.0 ALL
|
||||
POLY RDS_POLY VW 0.5 0.0 0.0 ALL
|
||||
POLY2 RDS_POLY2 VW 0.5 0.0 0.0 ALL
|
||||
ALU1 RDS_ALU1 VW 0.5 0.0 0.0 ALL
|
||||
ALU2 RDS_ALU2 VW 1.0 0.0 0.0 ALL
|
||||
ALU3 RDS_ALU3 VW 1.0 0.0 0.0 ALL
|
||||
ALU4 RDS_ALU4 VW 1.0 0.0 0.0 ALL
|
||||
ALU5 RDS_ALU5 VW 1.0 0.0 0.0 ALL
|
||||
ALU6 RDS_ALU6 VW 1.0 0.0 0.0 ALL
|
||||
CALU1 RDS_ALU1 VW 1.0 0.0 0.0 ALL
|
||||
CALU2 RDS_ALU2 VW 1.0 0.0 0.0 ALL
|
||||
CALU3 RDS_ALU3 VW 1.0 0.0 0.0 ALL
|
||||
CALU4 RDS_ALU4 VW 1.0 0.0 0.0 ALL
|
||||
CALU5 RDS_ALU5 VW 1.0 0.0 0.0 ALL
|
||||
CALU6 RDS_ALU6 VW 1.0 0.0 0.0 ALL
|
||||
TPOLY RDS_TPOLY VW 0.5 0.0 0.0 ALL
|
||||
TALU1 RDS_TALU1 VW 0.5 0.0 0.0 ALL
|
||||
TALU2 RDS_TALU2 VW 1.0 0.0 0.0 ALL
|
||||
TALU3 RDS_TALU3 VW 1.0 0.0 0.0 ALL
|
||||
TALU4 RDS_TALU4 VW 1.0 0.0 0.0 ALL
|
||||
TALU5 RDS_TALU5 VW 1.0 0.0 0.0 ALL
|
||||
TALU6 RDS_TALU6 VW 1.0 0.0 0.0 ALL
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE MBK_TO_RDS_CONNECTOR :
|
||||
#
|
||||
# MBK RDS layer
|
||||
# name name DER DWR
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE MBK_TO_RDS_CONNECTOR
|
||||
|
||||
POLY RDS_POLY .5 0
|
||||
POLY2 RDS_POLY2 .5 0
|
||||
ALU1 RDS_ALU1 .5 0
|
||||
ALU2 RDS_ALU2 1.0 0
|
||||
ALU3 RDS_ALU3 1.0 0
|
||||
ALU4 RDS_ALU4 1.0 0
|
||||
ALU5 RDS_ALU5 1.0 0
|
||||
ALU6 RDS_ALU6 1.0 0
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE MBK_TO_RDS_REFERENCE :
|
||||
#
|
||||
# MBK ref RDS layer
|
||||
# name name width
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE MBK_TO_RDS_REFERENCE
|
||||
|
||||
REF_REF RDS_REF 1
|
||||
REF_CON RDS_VALU1 2 RDS_TVIA1 1 RDS_TALU2 2
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE MBK_TO_RDS_VIA1 :
|
||||
#
|
||||
# MBK via RDS layer 1 RDS layer 2 RDS layer 3 RDS layer 4
|
||||
# name name width name width name width name width
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE MBK_TO_RDS_VIA
|
||||
|
||||
CONT_BODY_P RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_PTIE 3 ALL
|
||||
CONT_BODY_N RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_NTIE 3 ALL RDS_NWELL 4 ALL
|
||||
CONT_DIF_N RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_NDIF 3 ALL
|
||||
CONT_DIF_P RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_PDIF 3 ALL RDS_NWELL 4 ALL
|
||||
CONT_POLY RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_POLY 3 ALL
|
||||
CONT_POLY2 RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_POLY2 3 ALL
|
||||
CONT_VIA RDS_ALU1 2 ALL RDS_VIA1 1 ALL RDS_ALU2 2 ALL
|
||||
CONT_VIA2 RDS_ALU2 2 ALL RDS_VIA2 1 ALL RDS_ALU3 2 ALL
|
||||
CONT_VIA3 RDS_ALU3 2 ALL RDS_VIA3 1 ALL RDS_ALU4 2 ALL
|
||||
CONT_VIA4 RDS_ALU4 2 ALL RDS_VIA4 1 ALL RDS_ALU5 2 ALL
|
||||
CONT_VIA5 RDS_ALU5 2 ALL RDS_VIA5 1 ALL RDS_ALU6 2 ALL
|
||||
C_X_N RDS_POLY 1 ALL RDS_NDIF 5 ALL RDS_ACTIV 6 ALL
|
||||
C_X_P RDS_POLY 1 ALL RDS_PDIF 5 ALL RDS_NWELL 6 ALL RDS_ACTIV 6 ALL
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE MBK_TO_RDS_BIGVIA_HOLE :
|
||||
#
|
||||
# MBK via RDS Hole
|
||||
# name name side step mode
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE MBK_TO_RDS_BIGVIA_HOLE
|
||||
|
||||
CONT_VIA RDS_VIA1 1 4 ALL
|
||||
CONT_VIA2 RDS_VIA2 1 4 ALL
|
||||
CONT_VIA3 RDS_VIA3 1 4 ALL
|
||||
CONT_VIA4 RDS_VIA4 1 4 ALL # should be more than 4
|
||||
CONT_VIA5 RDS_VIA5 1 4 ALL # should be more than 4
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE MBK_TO_RDS_BIGVIA_METAL :
|
||||
#
|
||||
# MBK via RDS layer 1 ...
|
||||
# name name delta-width overlap mode
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE MBK_TO_RDS_BIGVIA_METAL
|
||||
|
||||
CONT_VIA RDS_ALU1 0.0 0.5 ALL RDS_ALU2 0.0 0.5 ALL
|
||||
CONT_VIA2 RDS_ALU2 0.0 0.5 ALL RDS_ALU3 0.0 0.5 ALL
|
||||
CONT_VIA3 RDS_ALU3 0.0 0.5 ALL RDS_ALU4 0.0 0.5 ALL
|
||||
CONT_VIA4 RDS_ALU4 0.0 0.5 ALL RDS_ALU5 0.0 0.5 ALL
|
||||
CONT_VIA5 RDS_ALU5 0.0 0.5 ALL RDS_ALU6 0.0 0.5 ALL
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE MBK_TO_RDS_TURNVIA :
|
||||
#
|
||||
# MBK via RDS layer 1 ...
|
||||
# name name DWR MODE
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE MBK_TO_RDS_TURNVIA
|
||||
|
||||
CONT_TURN1 RDS_ALU1 0 ALL
|
||||
CONT_TURN2 RDS_ALU2 0 ALL
|
||||
CONT_TURN3 RDS_ALU3 0 ALL
|
||||
CONT_TURN4 RDS_ALU4 0 ALL
|
||||
CONT_TURN5 RDS_ALU5 0 ALL
|
||||
CONT_TURN6 RDS_ALU6 0 ALL
|
||||
|
||||
END
|
||||
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE LYNX_GRAPH :
|
||||
#
|
||||
# RDS layer Rds layer 1 Rds layer 2 ...
|
||||
# name name name ...
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE LYNX_GRAPH
|
||||
|
||||
##---------------------------
|
||||
#
|
||||
# Modifie par L.Jacomme (Pb Bulk/Alim avec Lynx)
|
||||
# 23.11.99
|
||||
#
|
||||
# RDS_NWELL RDS_NTIE RDS_NWELL
|
||||
# RDS_PWELL RDS_PTIE RDS_PWELL
|
||||
# RDS_NDIF RDS_CONT RDS_NDIF
|
||||
# RDS_PDIF RDS_CONT RDS_PDIF
|
||||
# RDS_NTIE RDS_CONT RDS_NTIE RDS_NWELL
|
||||
# RDS_PTIE RDS_CONT RDS_PTIE RDS_PWELL
|
||||
|
||||
RDS_NDIF RDS_CONT RDS_NDIF
|
||||
RDS_PDIF RDS_CONT RDS_PDIF
|
||||
RDS_NTIE RDS_CONT RDS_NTIE
|
||||
RDS_PTIE RDS_CONT RDS_PTIE
|
||||
|
||||
RDS_POLY RDS_CONT RDS_POLY
|
||||
RDS_POLY2 RDS_CONT RDS_POLY2
|
||||
RDS_CONT RDS_PDIF RDS_NDIF RDS_POLY RDS_PTIE RDS_NTIE RDS_ALU1 RDS_CONT
|
||||
RDS_ALU1 RDS_CONT RDS_VIA1 RDS_ALU1 RDS_VALU1 RDS_ALU1
|
||||
RDS_VALU1 RDS_CONT RDS_VIA1 RDS_ALU1 RDS_VALU1
|
||||
RDS_VIA1 RDS_ALU1 RDS_ALU2 RDS_VIA1
|
||||
RDS_VIA2 RDS_ALU2 RDS_ALU3 RDS_VIA2
|
||||
RDS_VIA3 RDS_ALU3 RDS_ALU4 RDS_VIA3
|
||||
RDS_VIA4 RDS_ALU4 RDS_ALU5 RDS_VIA4
|
||||
RDS_VIA5 RDS_ALU5 RDS_ALU6 RDS_VIA5
|
||||
RDS_ALU2 RDS_VIA1 RDS_VIA2 RDS_ALU2
|
||||
RDS_ALU3 RDS_VIA2 RDS_VIA3 RDS_ALU3
|
||||
RDS_ALU4 RDS_VIA3 RDS_VIA4 RDS_ALU4
|
||||
RDS_ALU5 RDS_VIA4 RDS_VIA5 RDS_ALU5
|
||||
RDS_ALU6 RDS_VIA5 RDS_ALU6
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE LYNX_CAPA :
|
||||
#
|
||||
# RDS layer Surface capacitance Perimetric capacitance
|
||||
# name piF / Micron^2 piF / Micron
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE LYNX_CAPA
|
||||
|
||||
RDS_POLY 1.00e-04 1.00e-04
|
||||
RDS_POLY2 1.00e-04 1.00e-04
|
||||
RDS_ALU1 0.50e-04 0.90e-04
|
||||
RDS_ALU2 0.25e-04 0.95e-04
|
||||
RDS_ALU3 0.25e-04 0.95e-04
|
||||
RDS_ALU4 0.25e-04 0.95e-04
|
||||
RDS_ALU5 0.25e-04 0.95e-04
|
||||
RDS_ALU6 0.25e-04 0.95e-04
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE LYNX_RESISTOR :
|
||||
#
|
||||
# RDS layer Surface resistor
|
||||
# name Ohm / Micron^2
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE LYNX_RESISTOR
|
||||
|
||||
RDS_POLY 50.0
|
||||
RDS_POLY2 50.0
|
||||
RDS_ALU1 0.1
|
||||
RDS_ALU2 0.05
|
||||
RDS_ALU3 0.05
|
||||
RDS_ALU4 0.05
|
||||
RDS_ALU5 0.05
|
||||
RDS_ALU6 0.05
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE LYNX_TRANSISTOR :
|
||||
#
|
||||
# MBK layer Transistor Type MBK via
|
||||
# name name name
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE LYNX_TRANSISTOR
|
||||
|
||||
NTRANS NTRANS C_X_N RDS_POLY RDS_NDIF RDS_NDIF RDS_PWELL
|
||||
PTRANS PTRANS C_X_P RDS_POLY RDS_PDIF RDS_PDIF RDS_NWELL
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE LYNX_DIFFUSION :
|
||||
#
|
||||
# RDS layer RDS layer
|
||||
# name name
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE LYNX_DIFFUSION
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE LYNX_BULK_IMPLICIT :
|
||||
#
|
||||
# RDS layer Bulk type
|
||||
# name EXPLICIT/IMPLICIT
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE LYNX_BULK_IMPLICIT
|
||||
|
||||
##---------------------------
|
||||
#
|
||||
# Modifie par L.Jacomme (Pb Bulk/Alim avec Lynx)
|
||||
# 23.11.99
|
||||
#
|
||||
# NWELL EXPLICIT
|
||||
# PWELL IMPLICIT
|
||||
|
||||
END
|
||||
|
||||
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE S2R_OVERSIZE_DENOTCH :
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE S2R_OVERSIZE_DENOTCH
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE S2R_BLOC_RING_WIDTH :
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE S2R_BLOC_RING_WIDTH
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE S2R_MINIMUM_LAYER_WIDTH :
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE S2R_MINIMUM_LAYER_WIDTH
|
||||
|
||||
RDS_NWELL 4
|
||||
RDS_PDIF 2
|
||||
RDS_NTIE 2
|
||||
RDS_PTIE 2
|
||||
RDS_POLY 1
|
||||
RDS_POLY2 1
|
||||
RDS_TPOLY 1
|
||||
RDS_CONT 1
|
||||
RDS_ALU1 1
|
||||
RDS_TALU1 1
|
||||
RDS_VIA1 1
|
||||
RDS_ALU2 2
|
||||
RDS_TALU2 2
|
||||
RDS_VIA2 1
|
||||
RDS_ALU3 2
|
||||
RDS_TALU3 2
|
||||
RDS_VIA3 1
|
||||
RDS_ALU4 2
|
||||
RDS_TALU4 2
|
||||
RDS_VIA4 1
|
||||
RDS_ALU5 2
|
||||
RDS_TALU5 2
|
||||
RDS_VIA5 1
|
||||
RDS_ALU6 2
|
||||
RDS_TALU6 2
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE MBK_WIRESETTING :
|
||||
##-------------------------------------------------------------------
|
||||
#
|
||||
# This table is used by ocp, nero & ring. It supplies *symbolic*
|
||||
# information about the routing grid, the cell gauge and the power
|
||||
# wires.
|
||||
|
||||
|
||||
TABLE MBK_WIRESETTING
|
||||
|
||||
X_GRID 5
|
||||
Y_GRID 5
|
||||
Y_SLICE 50
|
||||
WIDTH_VDD 6
|
||||
WIDTH_VSS 6
|
||||
TRACK_WIDTH_ALU8 0
|
||||
TRACK_WIDTH_ALU7 2
|
||||
TRACK_WIDTH_ALU6 2
|
||||
TRACK_WIDTH_ALU5 2
|
||||
TRACK_WIDTH_ALU4 2
|
||||
TRACK_WIDTH_ALU3 2
|
||||
TRACK_WIDTH_ALU2 2
|
||||
TRACK_WIDTH_ALU1 2
|
||||
TRACK_SPACING_ALU8 0
|
||||
TRACK_SPACING_ALU7 8
|
||||
TRACK_SPACING_ALU6 8
|
||||
TRACK_SPACING_ALU5 3
|
||||
TRACK_SPACING_ALU4 3
|
||||
TRACK_SPACING_ALU3 3
|
||||
TRACK_SPACING_ALU2 3
|
||||
TRACK_SPACING_ALU1 3
|
||||
|
||||
END
|
||||
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE CIF_LAYER :
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE CIF_LAYER
|
||||
|
||||
RDS_NWELL LNWELL
|
||||
RDS_NDIF LNDIF
|
||||
RDS_PDIF LPDIF
|
||||
RDS_NTIE LNTIE
|
||||
RDS_PTIE LPTIE
|
||||
RDS_POLY LPOLY
|
||||
RDS_POLY2 LPOLY2
|
||||
RDS_TPOLY LTPOLY
|
||||
RDS_CONT LCONT
|
||||
RDS_ALU1 LALU1
|
||||
RDS_VALU1 LVALU1
|
||||
RDS_TALU1 LTALU1
|
||||
RDS_VIA1 LVIA
|
||||
RDS_TVIA1 LTVIA1
|
||||
RDS_ALU2 LALU2
|
||||
RDS_TALU2 LTALU2
|
||||
RDS_VIA2 LVIA2
|
||||
RDS_ALU3 LALU3
|
||||
RDS_TALU3 LTALU3
|
||||
RDS_VIA3 LVIA3
|
||||
RDS_ALU4 LALU4
|
||||
RDS_TALU4 LTALU4
|
||||
RDS_VIA4 LVIA4
|
||||
RDS_ALU5 LALU5
|
||||
RDS_TALU5 LTALU5
|
||||
RDS_VIA5 LVIA5
|
||||
RDS_ALU6 LALU6
|
||||
RDS_TALU6 LTALU6
|
||||
RDS_REF LREF
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE GDS_LAYER :
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE GDS_LAYER
|
||||
|
||||
RDS_NWELL 1
|
||||
RDS_NDIF 3
|
||||
RDS_PDIF 4
|
||||
RDS_NTIE 5
|
||||
RDS_PTIE 6
|
||||
RDS_POLY 7
|
||||
RDS_POLY2 8
|
||||
RDS_TPOLY 9
|
||||
RDS_CONT 10
|
||||
RDS_ALU1 11
|
||||
RDS_VALU1 12
|
||||
RDS_TALU1 13
|
||||
RDS_VIA1 14
|
||||
RDS_TVIA1 15
|
||||
RDS_ALU2 16
|
||||
RDS_TALU2 17
|
||||
RDS_VIA2 18
|
||||
RDS_ALU3 19
|
||||
RDS_TALU3 20
|
||||
RDS_VIA3 21
|
||||
RDS_ALU4 22
|
||||
RDS_TALU4 23
|
||||
RDS_VIA4 25
|
||||
RDS_ALU5 26
|
||||
RDS_TALU5 27
|
||||
RDS_VIA5 28
|
||||
RDS_ALU6 29
|
||||
RDS_TALU6 30
|
||||
RDS_REF 24
|
||||
|
||||
END
|
||||
|
||||
##-------------------------------------------------------------------
|
||||
# TABLE S2R_POST_TREAT :
|
||||
##-------------------------------------------------------------------
|
||||
|
||||
TABLE S2R_POST_TREAT
|
||||
|
||||
END
|
||||
DRC_RULES
|
||||
|
||||
layer RDS_NWELL 4.;
|
||||
layer RDS_NTIE 2.;
|
||||
layer RDS_PTIE 2.;
|
||||
layer RDS_NDIF 2.;
|
||||
layer RDS_PDIF 2.;
|
||||
layer RDS_ACTIV 2.;
|
||||
layer RDS_CONT 1.;
|
||||
layer RDS_VIA1 1.;
|
||||
layer RDS_VIA2 1.;
|
||||
layer RDS_VIA3 1.;
|
||||
layer RDS_VIA4 1.;
|
||||
layer RDS_VIA5 1.;
|
||||
layer RDS_POLY 1.;
|
||||
layer RDS_POLY2 1.;
|
||||
layer RDS_ALU1 1.;
|
||||
layer RDS_ALU2 2.;
|
||||
layer RDS_ALU3 2.;
|
||||
layer RDS_ALU4 2.;
|
||||
layer RDS_ALU5 2.;
|
||||
layer RDS_ALU6 2.;
|
||||
layer RDS_USER0 1.;
|
||||
layer RDS_USER1 1.;
|
||||
layer RDS_USER2 1.;
|
||||
|
||||
rules
|
||||
# Note : ``>:'' is different from ``>=''.
|
||||
# >: is applied on polygons and >= is applied on rectangles.
|
||||
# There is the same difference between <: and <=.
|
||||
# >= is faster than >:, but >: must be used where it is
|
||||
# required to consider polygons, for example spacing of
|
||||
# two objects in the same layer
|
||||
#
|
||||
# There is no rule to check NTIE and PDIF are included in NWELL
|
||||
# since this is necessarily true
|
||||
#-----------------------------------------------------------
|
||||
|
||||
# Check the NWELL shapes
|
||||
#-----------------------
|
||||
characterize RDS_NWELL (
|
||||
rule 1 : width >= 4. ;
|
||||
rule 2 : intersection_length >: 4. ;
|
||||
rule 3 : notch >= 12. ;
|
||||
);
|
||||
relation RDS_NWELL, RDS_NWELL (
|
||||
rule 4 : spacing axial >: 12. ;
|
||||
);
|
||||
|
||||
# Check RDS_PTIE is really excluded outside NWELL
|
||||
#------------------------------------------------
|
||||
relation RDS_PTIE, RDS_NWELL (
|
||||
rule 5 : spacing axial >= 7.5;
|
||||
rule 6 : enveloppe intersection_length < 0. ;
|
||||
rule 7 : margin intersection_length < 0. ;
|
||||
rule 8 : cross intersection_length < 0. ;
|
||||
rule 9 : intersection intersection_length < 0. ;
|
||||
rule 10 : extension intersection_length < 0. ;
|
||||
rule 11 : inclusion intersection_length < 0. ;
|
||||
);
|
||||
|
||||
# Check RDS_NDIF is really excluded outside NWELL
|
||||
#------------------------------------------------
|
||||
relation RDS_NDIF, RDS_NWELL (
|
||||
rule 12 : spacing axial >= 7.5;
|
||||
rule 13 : enveloppe intersection_length < 0. ;
|
||||
rule 14 : margin intersection_length < 0. ;
|
||||
rule 15 : cross intersection_length < 0. ;
|
||||
rule 16 : intersection intersection_length < 0. ;
|
||||
rule 17 : extension intersection_length < 0. ;
|
||||
rule 18 : inclusion intersection_length < 0. ;
|
||||
);
|
||||
|
||||
# Check the RDS_PDIF shapes
|
||||
#--------------------------
|
||||
characterize RDS_PDIF (
|
||||
rule 19 : width >= 2. ;
|
||||
rule 20 : intersection_length >: 2. ;
|
||||
rule 21 : notch >= 3. ;
|
||||
);
|
||||
relation RDS_PDIF, RDS_PDIF (
|
||||
rule 22 : spacing axial >: 3. ;
|
||||
);
|
||||
|
||||
# Check the RDS_NDIF shapes
|
||||
#--------------------------
|
||||
characterize RDS_NDIF (
|
||||
rule 23 : width >= 2. ;
|
||||
rule 24 : intersection_length >: 2. ;
|
||||
rule 25 : notch >= 3. ;
|
||||
);
|
||||
relation RDS_NDIF, RDS_NDIF (
|
||||
rule 26 : spacing axial >: 3. ;
|
||||
);
|
||||
|
||||
# Check the RDS_PTIE shapes
|
||||
#--------------------------
|
||||
characterize RDS_PTIE (
|
||||
rule 27 : width >= 2. ;
|
||||
rule 28 : intersection_length >: 2. ;
|
||||
rule 29 : notch >= 3. ;
|
||||
);
|
||||
relation RDS_PTIE, RDS_PTIE (
|
||||
rule 30 : spacing axial >: 3. ;
|
||||
);
|
||||
|
||||
# Check the RDS_NTIE shapes
|
||||
#--------------------------
|
||||
characterize RDS_NTIE (
|
||||
rule 31 : width >= 2. ;
|
||||
rule 32 : intersection_length >: 2. ;
|
||||
rule 33 : notch >= 3. ;
|
||||
);
|
||||
relation RDS_NTIE, RDS_NTIE (
|
||||
rule 34 : spacing axial >: 3. ;
|
||||
);
|
||||
|
||||
define RDS_PDIF, RDS_PTIE union -> ANY_P_DIF;
|
||||
define RDS_NDIF, RDS_NTIE union -> ANY_N_DIF;
|
||||
|
||||
# Check the ANY_N_DIF ANY_P_DIFF exclusion
|
||||
#--------------------------------------
|
||||
relation ANY_N_DIF, ANY_P_DIF (
|
||||
rule 35 : spacing axial >= 3. ;
|
||||
rule 36 : enveloppe intersection_length < 0. ;
|
||||
rule 37 : margin intersection_length < 0. ;
|
||||
rule 38 : cross intersection_length < 0. ;
|
||||
rule 39 : intersection intersection_length < 0. ;
|
||||
rule 40 : extension intersection_length < 0. ;
|
||||
rule 41 : inclusion intersection_length < 0. ;
|
||||
);
|
||||
|
||||
undefine ANY_P_DIF;
|
||||
undefine ANY_N_DIF;
|
||||
|
||||
define RDS_NDIF, RDS_PDIF union -> NP_DIF;
|
||||
|
||||
# Check RDS_POLY related to NP_DIF
|
||||
#---------------------------------
|
||||
relation RDS_POLY, NP_DIF (
|
||||
rule 42 : spacing axial >= 1. ;
|
||||
rule 43 : intersection intersection_length < 0. ;
|
||||
);
|
||||
|
||||
define NP_DIF, RDS_POLY intersection -> CHANNEL;
|
||||
|
||||
# Check the RDS_POLY shapes
|
||||
#--------------------------
|
||||
characterize RDS_POLY (
|
||||
rule 44 : width >= 1. ;
|
||||
rule 45 : intersection_length >: 1. ;
|
||||
rule 46 : notch >= 2. ;
|
||||
);
|
||||
relation RDS_POLY, RDS_POLY (
|
||||
rule 47 : spacing axial >: 2.;
|
||||
);
|
||||
|
||||
define NP_DIF, RDS_CONT intersection -> CONT_DIFF;
|
||||
# Check the CHANNEL shapes
|
||||
#--------------------------
|
||||
characterize CHANNEL (
|
||||
rule 48 : notch >= 3. ;
|
||||
);
|
||||
relation CHANNEL, CHANNEL (
|
||||
rule 49 : spacing axial >: 3.;
|
||||
);
|
||||
|
||||
undefine CHANNEL;
|
||||
|
||||
# Check RDS_POLY is distant from ACTIV ZONE of TRANSISTOR
|
||||
#--------------------------------------------------------
|
||||
relation RDS_POLY, RDS_ACTIV (
|
||||
rule 79 : spacing axial >= 1. ;
|
||||
);
|
||||
|
||||
relation RDS_POLY, CONT_DIFF (
|
||||
rule 50 : spacing axial >= 2. ;
|
||||
);
|
||||
|
||||
undefine CONT_DIFF;
|
||||
undefine NP_DIF;
|
||||
|
||||
|
||||
# Check RDS_ALU1 shapes
|
||||
#----------------------
|
||||
characterize RDS_ALU1 (
|
||||
rule 51 : width >= 1. ;
|
||||
rule 52 : intersection_length >: 1. ;
|
||||
rule 53 : notch >= 3. ;
|
||||
);
|
||||
relation RDS_ALU1, RDS_ALU1 (
|
||||
rule 54 : spacing axial >: 3. ;
|
||||
);
|
||||
|
||||
# Check RDS_ALU2 shapes
|
||||
#----------------------
|
||||
characterize RDS_ALU2 (
|
||||
rule 55 : width >= 2. ;
|
||||
rule 56 : intersection_length >: 2. ;
|
||||
rule 57 : notch >= 3. ;
|
||||
);
|
||||
relation RDS_ALU2, RDS_ALU2 (
|
||||
rule 58 : spacing axial >: 3. ;
|
||||
);
|
||||
|
||||
# Check RDS_ALU3 shapes
|
||||
#----------------------
|
||||
characterize RDS_ALU3 (
|
||||
rule 59 : width >= 2. ;
|
||||
rule 60 : intersection_length >: 2. ;
|
||||
rule 61 : notch >= 3. ;
|
||||
);
|
||||
relation RDS_ALU3, RDS_ALU3 (
|
||||
rule 62 : spacing axial >: 3. ;
|
||||
);
|
||||
|
||||
# Check RDS_ALU4 shapes
|
||||
#----------------------
|
||||
characterize RDS_ALU4 (
|
||||
rule 63 : width >= 2. ;
|
||||
rule 64 : intersection_length >: 2. ;
|
||||
rule 65 : notch >= 3. ;
|
||||
);
|
||||
relation RDS_ALU4, RDS_ALU4 (
|
||||
rule 66 : spacing axial >: 3. ;
|
||||
);
|
||||
|
||||
# Check RDS_ALU5 shapes
|
||||
#----------------------
|
||||
characterize RDS_ALU5 (
|
||||
rule 80 : width >= 2. ;
|
||||
rule 81 : intersection_length >: 2. ;
|
||||
rule 82 : notch >= 3. ;
|
||||
);
|
||||
relation RDS_ALU5, RDS_ALU5 (
|
||||
rule 83 : spacing axial >: 3. ;
|
||||
);
|
||||
|
||||
# Check RDS_ALU6 shapes
|
||||
#----------------------
|
||||
characterize RDS_ALU6 (
|
||||
rule 84 : width >= 2. ;
|
||||
rule 85 : intersection_length >: 2. ;
|
||||
rule 86 : notch >= 3. ;
|
||||
);
|
||||
relation RDS_ALU6, RDS_ALU6 (
|
||||
rule 87 : spacing axial >: 3. ;
|
||||
);
|
||||
|
||||
# Check ANY_VIA layers, stacking are free
|
||||
#----------------------------------------
|
||||
relation RDS_CONT, RDS_CONT (
|
||||
rule 67 : spacing axial >= 3. ;
|
||||
);
|
||||
relation RDS_VIA, RDS_VIA (
|
||||
rule 68 : spacing axial >= 4. ;
|
||||
);
|
||||
relation RDS_VIA2, RDS_VIA2 (
|
||||
rule 69 : spacing axial >= 4. ;
|
||||
);
|
||||
relation RDS_VIA3, RDS_VIA3 (
|
||||
rule 70 : spacing axial >= 4. ;
|
||||
);
|
||||
relation RDS_VIA4, RDS_VIA4 (
|
||||
rule 88 : spacing axial >= 4. ;
|
||||
);
|
||||
relation RDS_VIA5, RDS_VIA5 (
|
||||
rule 89 : spacing axial >= 4. ;
|
||||
);
|
||||
characterize RDS_CONT (
|
||||
rule 71 : width >= 1. ;
|
||||
rule 72 : length <= 1. ;
|
||||
);
|
||||
characterize RDS_VIA (
|
||||
rule 73 : width >= 1. ;
|
||||
rule 74 : length <= 1. ;
|
||||
);
|
||||
characterize RDS_VIA2 (
|
||||
rule 75 : width >= 1. ;
|
||||
rule 76 : length <= 1. ;
|
||||
);
|
||||
characterize RDS_VIA3 (
|
||||
rule 77 : width >= 1. ;
|
||||
rule 78 : length <= 1. ;
|
||||
);
|
||||
characterize RDS_VIA4 (
|
||||
rule 90 : width >= 1. ;
|
||||
rule 91 : length <= 1. ;
|
||||
);
|
||||
characterize RDS_VIA5 (
|
||||
rule 92 : width >= 1. ;
|
||||
rule 93 : length <= 1. ;
|
||||
);
|
||||
|
||||
# Check the POLY2 shapes
|
||||
#-----------------------
|
||||
characterize RDS_POLY2 (
|
||||
rule 94 : width >= 1. ;
|
||||
rule 95 : intersection_length >: 1. ;
|
||||
rule 96 : notch >= 5. ;
|
||||
);
|
||||
relation RDS_POLY2, RDS_POLY2 (
|
||||
rule 97 : spacing axial >: 5. ;
|
||||
);
|
||||
|
||||
# Check RDS_POLY2 is really included inside RDS_POLY1
|
||||
#----------------------------------------------------
|
||||
relation RDS_POLY, RDS_POLY2 (
|
||||
rule 98 : spacing axial < 0.;
|
||||
rule 99 : envelope inferior >: 5. ;
|
||||
rule 100 : margin intersection_length < 0. ;
|
||||
rule 101 : cross intersection_length < 0. ;
|
||||
rule 102 : intersection intersection_length < 0. ;
|
||||
rule 103 : extension intersection_length < 0. ;
|
||||
rule 104 : inclusion intersection_length < 0. ;
|
||||
);
|
||||
|
||||
end rules
|
||||
|
||||
DRC_COMMENT
|
||||
1 (RDS_NWELL) minimum width 4.
|
||||
2 (RDS_NWELL) minimum width 4.
|
||||
3 (RDS_NWELL) Manhatan distance min 12.
|
||||
4 (RDS_NWELL,RDS_NWELL) Manhatan distance min 12.
|
||||
5 (RDS_PTIE,RDS_NWELL) Manhatan distance min 7.5
|
||||
6 (RDS_PTIE,RDS_NWELL) must never been in contact
|
||||
7 (RDS_PTIE,RDS_NWELL) must never been in contact
|
||||
8 (RDS_PTIE,RDS_NWELL) must never been in contact
|
||||
9 (RDS_PTIE,RDS_NWELL) must never been in contact
|
||||
10 (RDS_PTIE,RDS_NWELL) must never been in contact
|
||||
11 (RDS_PTIE,RDS_NWELL) must never been in contact
|
||||
12 (RDS_NDIF,RDS_NWELL) Manhatan distance min 7.5
|
||||
13 (RDS_NDIF,RDS_NWELL) must never been in contact
|
||||
14 (RDS_NDIF,RDS_NWELL) must never been in contact
|
||||
15 (RDS_NDIF,RDS_NWELL) must never been in contact
|
||||
16 (RDS_NDIF,RDS_NWELL) must never been in contact
|
||||
17 (RDS_NDIF,RDS_NWELL) must never been in contact
|
||||
18 (RDS_NDIF,RDS_NWELL) must never been in contact
|
||||
19 (RDS_PDIF) minimum width 2.
|
||||
20 (RDS_PDIF) minimum width 2.
|
||||
21 (RDS_PDIF) Manhatan distance min 3.
|
||||
22 (RDS_PDIF,RDS_PDIF) Manhatan distance min 3.
|
||||
23 (RDS_NDIF) minimum width 2.
|
||||
24 (RDS_NDIF) minimum width 2.
|
||||
25 (RDS_NDIF) Manhatan distance min 3.
|
||||
26 (RDS_NDIF,RDS_NDIF) Manhatan distance min 3.
|
||||
27 (RDS_PTIE) minimum width 2.
|
||||
28 (RDS_PTIE) minimum width 2.
|
||||
29 (RDS_PTIE) Manhatan distance min 3.
|
||||
30 (RDS_PTIE,RDS_PTIE) Manhatan distance min 3.
|
||||
31 (RDS_NTIE) minimum width 2.
|
||||
32 (RDS_NTIE) minimum width 2.
|
||||
33 (RDS_NTIE) Manhatan distance min 3.
|
||||
34 (RDS_NTIE,RDS_NTIE) Manhatan distance min 3.
|
||||
35 (ANY_N_DIF,ANY_P_DIF) Manhatan distance min 3.
|
||||
36 (ANY_N_DIF,ANY_P_DIF) must never been in contact
|
||||
37 (ANY_N_DIF,ANY_P_DIF) must never been in contact
|
||||
38 (ANY_N_DIF,ANY_P_DIF) must never been in contact
|
||||
39 (ANY_N_DIF,ANY_P_DIF) must never been in contact
|
||||
40 (ANY_N_DIF,ANY_P_DIF) must never been in contact
|
||||
41 (ANY_N_DIF,ANY_P_DIF) must never been in contact
|
||||
42 (RDS_POLY,ANY_N_DIF) Manhatan distance min 1.
|
||||
43 (RDS_POLY,NP_DIF) bad intersection
|
||||
44 (RDS_POLY) minimum width 1.
|
||||
45 (RDS_POLY) minimum width 1.
|
||||
46 (RDS_POLY) Manhatan distance min 2.
|
||||
47 (RDS_POLY,RDS_POLY) Manhatan distance min 2.
|
||||
48 (CHANNEL) Manhatan distance min 3.
|
||||
49 (CHANNEL,CHANNEL) Manhatan distance min 3.
|
||||
50 (RDS_POLY,CONT_DIFF) Manhatan distance min 2.
|
||||
51 (RDS_ALU1) minimum width 1.
|
||||
52 (RDS_ALU1) minimum width 1.
|
||||
53 (RDS_ALU1) Manhatan distance min 3.
|
||||
54 (RDS_ALU1,RDS_ALU1) Manhatan distance min 3.
|
||||
55 (RDS_ALU2) minimum width 2.
|
||||
56 (RDS_ALU2) minimum width 2.
|
||||
57 (RDS_ALU2) Manhatan distance min 3.
|
||||
58 (RDS_ALU2,RDS_ALU2) Manhatan distance min 3.
|
||||
59 (RDS_ALU3) minimum width 2.
|
||||
60 (RDS_ALU3) minimum width 2.
|
||||
61 (RDS_ALU3) Manhatan distance min 3.
|
||||
62 (RDS_ALU3,RDS_ALU3) Manhatan distance min 3.
|
||||
63 (RDS_ALU4) minimum width 2.
|
||||
64 (RDS_ALU4) minimum width 2.
|
||||
65 (RDS_ALU4) Manhatan distance min 3.
|
||||
66 (RDS_ALU4,RDS_ALU4) Manhatan distance min 3.
|
||||
67 (RDS_CONT,RDS_CONT) Manhatan distance min 3.
|
||||
68 (RDS_VIA,RDS_VIA) Manhatan distance min 4.
|
||||
69 (RDS_VIA2,RDS_VIA2) Manhatan distance min 4.
|
||||
70 (RDS_VIA3,RDS_VIA3) Manhatan distance min 4.
|
||||
71 (RDS_CONT) minimum width 1.
|
||||
72 (RDS_CONT) maximum length 1.
|
||||
73 (RDS_VIA) minimum width 1.
|
||||
74 (RDS_VIA) maximum length 1.
|
||||
75 (RDS_VIA2) minimum width 1.
|
||||
76 (RDS_VIA2) maximum length 1.
|
||||
77 (RDS_VIA3) minimum width 1.
|
||||
78 (RDS_VIA3) maximum length 1.
|
||||
79 (RDS_POLY,RDS_ACTIV) Manhatan distance min 1.
|
||||
80 (RDS_ALU5) minimum width 2.
|
||||
81 (RDS_ALU5) minimum width 2.
|
||||
82 (RDS_ALU5) Manhatan distance min 4.
|
||||
83 (RDS_ALU5,RDS_ALU5) Manhatan distance min 4.
|
||||
84 (RDS_ALU6) minimum width 2.
|
||||
85 (RDS_ALU6) minimum width 2.
|
||||
86 (RDS_ALU6) Manhatan distance min 4.
|
||||
87 (RDS_ALU6,RDS_ALU6) Manhatan distance min 4.
|
||||
88 (RDS_VIA4,RDS_VIA4) Manhatan distance min 4.
|
||||
89 (RDS_VIA5,RDS_VIA5) Manhatan distance min 4.
|
||||
90 (RDS_VIA4) minimum width 1.
|
||||
91 (RDS_VIA4) maximum length 1.
|
||||
92 (RDS_VIA5) minimum width 1.
|
||||
93 (RDS_VIA5) maximum length 1.
|
||||
94 (RDS_POLY2) minimum width 1.
|
||||
95 (RDS_POLY2) minimum width 1.
|
||||
96 (RDS_POLY2) Manhatan distance min 5.
|
||||
97 (RDS_POLY2,POLY2) Manhatan distance min 5.
|
||||
98 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
|
||||
99 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
|
||||
100 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
|
||||
101 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
|
||||
102 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
|
||||
103 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
|
||||
104 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
|
||||
END_DRC_COMMENT
|
||||
END_DRC_RULES
|
|
@ -1,10 +1,9 @@
|
|||
#! /bin/sh
|
||||
# ylwrap - wrapper for lex/yacc invocations.
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
scriptversion=2012-12-21.17; # UTC
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
|
||||
# 2007, 2009 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-2013 Free Software Foundation, Inc.
|
||||
#
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
|
@ -30,9 +29,41 @@ scriptversion=2009-04-28.21; # UTC
|
|||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
get_dirname ()
|
||||
{
|
||||
case $1 in
|
||||
*/*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';;
|
||||
# Otherwise, we want the empty string (not ".").
|
||||
esac
|
||||
}
|
||||
|
||||
# guard FILE
|
||||
# ----------
|
||||
# The CPP macro used to guard inclusion of FILE.
|
||||
guard()
|
||||
{
|
||||
printf '%s\n' "$1" \
|
||||
| sed \
|
||||
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
|
||||
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \
|
||||
-e 's/__*/_/g'
|
||||
}
|
||||
|
||||
# quote_for_sed [STRING]
|
||||
# ----------------------
|
||||
# Return STRING (or stdin) quoted to be used as a sed pattern.
|
||||
quote_for_sed ()
|
||||
{
|
||||
case $# in
|
||||
0) cat;;
|
||||
1) printf '%s\n' "$1";;
|
||||
esac \
|
||||
| sed -e 's|[][\\.*]|\\&|g'
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
'')
|
||||
echo "$0: No files given. Try \`$0 --help' for more information." 1>&2
|
||||
echo "$0: No files given. Try '$0 --help' for more information." 1>&2
|
||||
exit 1
|
||||
;;
|
||||
--basedir)
|
||||
|
@ -67,6 +98,8 @@ esac
|
|||
# The input.
|
||||
input="$1"
|
||||
shift
|
||||
# We'll later need for a correct munging of "#line" directives.
|
||||
input_sub_rx=`get_dirname "$input" | quote_for_sed`
|
||||
case "$input" in
|
||||
[\\/]* | ?:[\\/]*)
|
||||
# Absolute path; do nothing.
|
||||
|
@ -76,15 +109,47 @@ case "$input" in
|
|||
input="`pwd`/$input"
|
||||
;;
|
||||
esac
|
||||
input_rx=`get_dirname "$input" | quote_for_sed`
|
||||
|
||||
# Since DOS filename conventions don't allow two dots,
|
||||
# the DOS version of Bison writes out y_tab.c instead of y.tab.c
|
||||
# and y_tab.h instead of y.tab.h. Test to see if this is the case.
|
||||
y_tab_nodot=false
|
||||
if test -f y_tab.c || test -f y_tab.h; then
|
||||
y_tab_nodot=true
|
||||
fi
|
||||
|
||||
# The parser itself, the first file, is the destination of the .y.c
|
||||
# rule in the Makefile.
|
||||
parser=$1
|
||||
|
||||
# A sed program to s/FROM/TO/g for all the FROM/TO so that, for
|
||||
# instance, we rename #include "y.tab.h" into #include "parse.h"
|
||||
# during the conversion from y.tab.c to parse.c.
|
||||
sed_fix_filenames=
|
||||
|
||||
# Also rename header guards, as Bison 2.7 for instance uses its header
|
||||
# guard in its implementation file.
|
||||
sed_fix_header_guards=
|
||||
|
||||
pairlist=
|
||||
while test "$#" -ne 0; do
|
||||
if test "$1" = "--"; then
|
||||
shift
|
||||
break
|
||||
fi
|
||||
pairlist="$pairlist $1"
|
||||
from=$1
|
||||
# Handle y_tab.c and y_tab.h output by DOS
|
||||
if $y_tab_nodot; then
|
||||
case $from in
|
||||
"y.tab.c") from=y_tab.c;;
|
||||
"y.tab.h") from=y_tab.h;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
to=$1
|
||||
shift
|
||||
sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;"
|
||||
sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;"
|
||||
done
|
||||
|
||||
# The program to run.
|
||||
|
@ -99,7 +164,11 @@ esac
|
|||
# FIXME: add hostname here for parallel makes that run commands on
|
||||
# other machines. But that might take us over the 14-char limit.
|
||||
dirname=ylwrap$$
|
||||
trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
|
||||
do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
|
||||
trap "ret=129; $do_exit" 1
|
||||
trap "ret=130; $do_exit" 2
|
||||
trap "ret=141; $do_exit" 13
|
||||
trap "ret=143; $do_exit" 15
|
||||
mkdir $dirname || exit 1
|
||||
|
||||
cd $dirname
|
||||
|
@ -111,98 +180,56 @@ esac
|
|||
ret=$?
|
||||
|
||||
if test $ret -eq 0; then
|
||||
set X $pairlist
|
||||
shift
|
||||
first=yes
|
||||
# Since DOS filename conventions don't allow two dots,
|
||||
# the DOS version of Bison writes out y_tab.c instead of y.tab.c
|
||||
# and y_tab.h instead of y.tab.h. Test to see if this is the case.
|
||||
y_tab_nodot="no"
|
||||
if test -f y_tab.c || test -f y_tab.h; then
|
||||
y_tab_nodot="yes"
|
||||
fi
|
||||
|
||||
# The directory holding the input.
|
||||
input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
|
||||
# Quote $INPUT_DIR so we can use it in a regexp.
|
||||
# FIXME: really we should care about more than `.' and `\'.
|
||||
input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
|
||||
|
||||
while test "$#" -ne 0; do
|
||||
from="$1"
|
||||
# Handle y_tab.c and y_tab.h output by DOS
|
||||
if test $y_tab_nodot = "yes"; then
|
||||
if test $from = "y.tab.c"; then
|
||||
from="y_tab.c"
|
||||
else
|
||||
if test $from = "y.tab.h"; then
|
||||
from="y_tab.h"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
for from in *
|
||||
do
|
||||
to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"`
|
||||
if test -f "$from"; then
|
||||
# If $2 is an absolute path name, then just use that,
|
||||
# otherwise prepend `../'.
|
||||
case "$2" in
|
||||
[\\/]* | ?:[\\/]*) target="$2";;
|
||||
*) target="../$2";;
|
||||
# otherwise prepend '../'.
|
||||
case $to in
|
||||
[\\/]* | ?:[\\/]*) target=$to;;
|
||||
*) target="../$to";;
|
||||
esac
|
||||
|
||||
# We do not want to overwrite a header file if it hasn't
|
||||
# changed. This avoid useless recompilations. However the
|
||||
# parser itself (the first file) should always be updated,
|
||||
# because it is the destination of the .y.c rule in the
|
||||
# Makefile. Divert the output of all other files to a temporary
|
||||
# file so we can compare them to existing versions.
|
||||
if test $first = no; then
|
||||
# Do not overwrite unchanged header files to avoid useless
|
||||
# recompilations. Always update the parser itself: it is the
|
||||
# destination of the .y.c rule in the Makefile. Divert the
|
||||
# output of all other files to a temporary file so we can
|
||||
# compare them to existing versions.
|
||||
if test $from != $parser; then
|
||||
realtarget="$target"
|
||||
target="tmp-`echo $target | sed s/.*[\\/]//g`"
|
||||
target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'`
|
||||
fi
|
||||
# Edit out `#line' or `#' directives.
|
||||
#
|
||||
# We don't want the resulting debug information to point at
|
||||
# an absolute srcdir; it is better for it to just mention the
|
||||
# .y file with no path.
|
||||
#
|
||||
# We want to use the real output file name, not yy.lex.c for
|
||||
# instance.
|
||||
#
|
||||
# We want the include guards to be adjusted too.
|
||||
FROM=`echo "$from" | sed \
|
||||
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
|
||||
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
|
||||
TARGET=`echo "$2" | sed \
|
||||
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
|
||||
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
|
||||
|
||||
sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
|
||||
-e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
|
||||
# Munge "#line" or "#" directives. Don't let the resulting
|
||||
# debug information point at an absolute srcdir. Use the real
|
||||
# output file name, not yy.lex.c for instance. Adjust the
|
||||
# include guards too.
|
||||
sed -e "/^#/!b" \
|
||||
-e "s|$input_rx|$input_sub_rx|" \
|
||||
-e "$sed_fix_filenames" \
|
||||
-e "$sed_fix_header_guards" \
|
||||
"$from" >"$target" || ret=$?
|
||||
|
||||
# Check whether header files must be updated.
|
||||
if test $first = no; then
|
||||
# Check whether files must be updated.
|
||||
if test "$from" != "$parser"; then
|
||||
if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
|
||||
echo "$2" is unchanged
|
||||
echo "$to is unchanged"
|
||||
rm -f "$target"
|
||||
else
|
||||
echo updating "$2"
|
||||
echo "updating $to"
|
||||
mv -f "$target" "$realtarget"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# A missing file is only an error for the first file. This
|
||||
# is a blatant hack to let us support using "yacc -d". If -d
|
||||
# is not specified, we don't want an error when the header
|
||||
# file is "missing".
|
||||
if test $first = yes; then
|
||||
# A missing file is only an error for the parser. This is a
|
||||
# blatant hack to let us support using "yacc -d". If -d is not
|
||||
# specified, don't fail when the header file is "missing".
|
||||
if test "$from" = "$parser"; then
|
||||
ret=1
|
||||
fi
|
||||
fi
|
||||
shift
|
||||
shift
|
||||
first=no
|
||||
done
|
||||
else
|
||||
ret=$?
|
||||
fi
|
||||
|
||||
# Remove the directory.
|
||||
|
|
Loading…
Reference in New Issue