Merge branch 'nptran_hvio_fast-support' into verhaegen-devel

This commit is contained in:
Staf Verhaegen 2021-07-08 12:32:12 +02:00
commit 03c76c4d58
22 changed files with 263 additions and 27 deletions

View File

@ -12,4 +12,4 @@ libAbl_la_SOURCES = abldel.h ablflat.h abloptim.h ablunflat.h
ablctlsimp.h ablerror.h ablmap.h ablsubst.h \
abldel.c ablflat.c abloptim.c ablunflat.c
libAbl_la_LDFLAGS = -version-info @ABL_DLL_VERSION@ -L../../aut/src
libAbl_la_LIBADD = -lAut -lMut
libAbl_la_LIBADD = -L../../aut/src/.libs -lAut -L../../mbk/src/.libs -lMut

View File

@ -24,5 +24,5 @@ libBdd_la_SOURCES = bdd.h bddenv.h bddimply.h bddsimp
bdddump.h bddhoper.h bddsatisfy.h \
bddenv.c bddimply.c bddsimpdc.c
libBdd_la_LDFLAGS = -version-info @BDD_DLL_VERSION@ -L../../abl/src -L../../mbk/src
libBdd_la_LDFLAGS = -version-info @BDD_DLL_VERSION@ -L../../abl/src -L../../mbk/src -L../../aut/src
libBdd_la_LIBADD = -lAbl -lAut

View File

@ -2,6 +2,7 @@ lib_LTLIBRARIES = libVrd.la
include_HEADERS = vrd.h
libVrd_la_SOURCES = drucompi_l.l drucompi_y.y \
defdefin.c defdefin.h defexclu.c defexclu.h definclu.c definclu.h definter.c \
defminmax.h defminmax.c \
definter.h defresiz.c defresiz.h deftools.c deftools.h defunion.c defunion.h \
drucgral.c druchier.c druchier.h drucmin.c drucmin.h drucompi.c \
drucompi.h drucring.c drucring.h drucutil.c drucutil.h vmcaract.c vmcaract.h \

View File

@ -126,6 +126,21 @@ DrucViewString ("\n");
\*/
break;
}
case DRUC_MESURE_LARGEUR_MIN:
case DRUC_MESURE_LARGEUR_MAX:
case DRUC_MESURE_LONGUEUR_MIN:
case DRUC_MESURE_LONGUEUR_MAX:
{
// printf("DRUC_OPERATION_%d\n", DrucInstructionCourante->OP_COMPOSE );
DrucDefineMinMax ( DrucFigureRds,
DrucRdsWindow,
DrucInstructionCourante
);
break;
}
defualt:
DRUC_EXIT( DRUC_ERROR_UNDEFINED );
}/* switch */
DrucComputeEquiLayer ( DrucFigureRds ,

View File

@ -0,0 +1,131 @@
/*------------------------------------------------------------\
| |
| Tool : DRUC |
| |
| File : DEFMINMAX.C |
| |
| Authors : Naohiko Shimizu |
| |
| Date : 04/03/20 |
| |
\------------------------------------------------------------*/
/*------------------------------------------------------------\
| |
| Include Files |
| |
\------------------------------------------------------------*/
#include <stdlib.h>
#include <stdio.h>
#include <ctype.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 "drucutil.h"
#include "vmctools.h"
#include "deftools.h"
#include "defresiz.h"
/*------------------------------------------------------------\
| |
| DefMinMax Fonctions |
| |
\------------------------------------------------------------*/
/*------------------------------------------------------------\
| |
| DrucDefineUnion |
| Definit un layer temporaire caracterise par l'union |
| des deux layers source |
| range le resultat dans le tableau des layers user defini par|
| l'instruction |
\------------------------------------------------------------*/
void DrucDefineMinMax ( DrucFigureRds,
DrucRdsWindow ,
DrucInstructionCourante
)
rdsfig_list *DrucFigureRds;
rdswindow *DrucRdsWindow;
DrucTypeStructInstruction *DrucInstructionCourante;
{
int TmpLayerDest;
int TmpLayerSource1;
register rdsrec_list *TmpRectangleSource;
register rdsrec_list *TmpRectangleDest;
long MesureMax, MesureMin;
long Value;
TmpLayerDest = DrucInstructionCourante->LAYER_DEST;
TmpLayerSource1 = DrucInstructionCourante->LAYER_1;
Value = DrucInstructionCourante->DEF_VALEUR;
/*\
* modifier tous les rectangles du layer source 1
\*/
for ( TmpRectangleSource = DrucFigureRds->LAYERTAB[ TmpLayerSource1 ];
TmpRectangleSource != (rdsrec_list *)NULL;
TmpRectangleSource = TmpRectangleSource->NEXT
)
{
/*\
* modif des dimensions X
\*/
MesureMax = ( TmpRectangleSource->DX > TmpRectangleSource->DY ?
TmpRectangleSource->DX :
TmpRectangleSource->DY
);
MesureMin = ( TmpRectangleSource->DX < TmpRectangleSource->DY ?
TmpRectangleSource->DX :
TmpRectangleSource->DY
);
switch ( DrucInstructionCourante->OP_COMPOSE )
{
case DRUC_MESURE_LARGEUR_MIN:
if(! (MesureMin > Value)) continue;
break;
case DRUC_MESURE_LARGEUR_MAX:
if(! (MesureMin < Value)) continue;
break;
case DRUC_MESURE_LONGUEUR_MIN:
if(! (MesureMax > Value)) continue;
break;
case DRUC_MESURE_LONGUEUR_MAX:
if(! (MesureMax < Value)) continue;
break;
defualt:
DRUC_EXIT( DRUC_ERROR_UNDEFINED );
}
// printf("\n1:X,Y=%d,%d, DX,DY = %d,%dM:V=%d:%d, %s\n",TmpRectangleSource->X, TmpRectangleSource->Y,TmpRectangleSource->DX, TmpRectangleSource->DY, MesureMin, Value, TmpRectangleSource->NAME);
TmpRectangleDest = allocrdsrec ( sizeof ( DrucTypeStructPlusRect ));
TmpRectangleDest->NEXT = ( rdsrec_list *)NULL;
TmpRectangleDest->USER = (rdsrec_list *)NULL;
TmpRectangleDest->NAME = TmpRectangleSource->NAME;
TmpRectangleDest->X = TmpRectangleSource->X ;
TmpRectangleDest->Y = TmpRectangleSource->Y ;
TmpRectangleDest->DX = TmpRectangleSource->DX ;
TmpRectangleDest->DY = TmpRectangleSource->DY ;
SetRdsLayer ( TmpRectangleDest ,
TmpLayerDest
);
MACRO_NEXT_EQUI ( TmpRectangleDest ) = (rdsrec_list *)NULL;
DrucChaineCompose ( TmpRectangleDest ,
TmpRectangleSource,
TmpLayerSource1
);
addrdsrecwindow ( TmpRectangleDest ,
DrucRdsWindow
);
DrucAddRecFigure ( TmpRectangleDest ,
DrucFigureRds ,
TmpLayerDest
);
}
}

View File

@ -0,0 +1,25 @@
/*------------------------------------------------------------\
| |
| Tool : DRUC |
| |
| File : DEFMINMAX.H |
| |
| Authors : Naohiko Shimizu |
| |
| Date : 04/03/20 |
| |
\------------------------------------------------------------*/
/*------------------------------------------------------------\
| |
| DefMinMax Fonctions |
| |
\------------------------------------------------------------*/
/*------------------------------------------------------------\
| |
| DrucDefineResize |
| Definit un layer temporaire caracterise par la modification |
| des dimensions des rectangles par valeur positive ou negative
| range le resultat dans le tableau des layers user defini par|
| l'instruction |
\------------------------------------------------------------*/
extern void DrucDefineMinMax ();

View File

@ -124,7 +124,6 @@ bloc : define { DrucLoadInstructionDefine () ;}
define : DRUC_DEFINE
DRUC_NOM { DrucInitDefineLayerA ( DrucInputChaine ) ;}
','
resiz
DRUC_DESTINATION
DRUC_NOM { DrucInitDefineLayerDest ( DrucInputChaine ) ;}
@ -133,8 +132,10 @@ define : DRUC_DEFINE
resiz : valresiz
defmodif
defoper
| DRUC_NOM { DrucInitDefineLayerB ( DrucInputChaine ) ;}
| mesure_rel
valresiz { DrucStructDefineOpCompose ( $1 ) ; }
| ','
DRUC_NOM { DrucInitDefineLayerB ( DrucInputChaine ) ;}
compose
;

View File

@ -131,8 +131,12 @@ END
TABLE GRAAL_TRANSISTOR_NAME
NTRANS Ntrans lawn_green Black
PTRANS Ptrans yellow Black
NTRANS Ntrans lawn_green Black
NTRANS_HVIO NtrHVIO lawn_green Dark_gray
NTRANS_FAST NtrFAST lawn_green light_gray
PTRANS Ptrans yellow Black
PTRANS_HVIO PtrHVIO yellow Dark_gray
PTRANS_FAST PtrFAST yellow light_gray
END
@ -172,7 +176,11 @@ TABLE GRAAL_SEGMENT_VALUE
NTIE 2 2
PTIE 2 2
NTRANS 1 4
NTRANS_HVIO 2 4
NTRANS_FAST 3 4
PTRANS 1 4
PTRANS_HVIO 2 4
NTRANS_FAST 3 4
POLY 1 1
POLY2 1 1
ALU1 1 1

View File

@ -381,8 +381,13 @@ void GraalEditModify()
if ( IsRdsSegment( Rectangle ) )
{
if ( ( ((phseg_list *)Pointer)->LAYER != NTRANS ) &&
( ((phseg_list *)Pointer)->LAYER != PTRANS ) )
if ( ( ((phseg_list *)Pointer)->LAYER != NTRANS ) &&
( ((phseg_list *)Pointer)->LAYER != NTRANS_FAST ) &&
( ((phseg_list *)Pointer)->LAYER != NTRANS_HVIO ) &&
( ((phseg_list *)Pointer)->LAYER != PTRANS ) &&
( ((phseg_list *)Pointer)->LAYER != PTRANS_FAST ) &&
( ((phseg_list *)Pointer)->LAYER != PTRANS_HVIO )
)
{
GraalAcceptRectangle( Rectangle );
GraalDisplayRectangle( Rectangle );

View File

@ -146,7 +146,7 @@
static char *CursorSizeKeyword;
static keyword KeywordDefine[ GSB_MAX_KEYWORD ] =
static keyword GsbKeywordDefine[ GSB_MAX_KEYWORD ] =
{
@ -199,12 +199,16 @@
{ "nosym", NOSYM },
{ "ntie", NTIE },
{ "ntrans", NTRANS },
{ "ntrans_fast", NTRANS_FAST },
{ "ntrans_hvio", NTRANS_HVIO },
{ "nwell", NWELL },
{ "pdif", PDIF },
{ "poly", POLY },
{ "poly2", POLY2 },
{ "ptie", PTIE },
{ "ptrans", PTRANS },
{ "ptrans_fast", PTRANS_FAST },
{ "ptrans_hvio", PTRANS_HVIO },
{ "pwell", PWELL },
{ "rds_abox", RDS_LAYER_ABOX },
{ "rds_activ", RDS_LAYER_ACTIV },
@ -567,7 +571,7 @@ long GsbGetStringValue( String )
Entry.NAME = String;
Keyword = (keyword *)bsearch( (char *)(&Entry),
(char *)KeywordDefine,
(char *)GsbKeywordDefine,
GSB_MAX_KEYWORD, sizeof( keyword ),
GsbKeywordCompare );

View File

@ -47,7 +47,7 @@
# define GSB_PARSE
# define GSB_MAX_BUFFER 255
# define GSB_MAX_KEYWORD 149
# define GSB_MAX_KEYWORD 153
# define GSB_SEPARATORS_STRING " \t\n"
# define GSB_COMMENT_CHAR '#'

View File

@ -851,8 +851,18 @@ long LynxBuildLogicalTransistor( FigureRds, LogicalFigure )
( BulkLayer == RDS_LYNX_TRANSISTOR_EMPTY )) continue; /*4p*/
#if 0
if ( TransType == NTRANS ) TransType = TRANSN;
else TransType = TRANSP;
#endif
switch ( TransType ) {
case NTRANS: TransType = TRANSN; break;
case NTRANS_FAST: TransType = TRANSN_FAST; break;
case NTRANS_HVIO: TransType = TRANSN_HVIO; break;
case PTRANS: TransType = TRANSP; break;
case PTRANS_FAST: TransType = TRANSP_FAST; break;
case PTRANS_HVIO: TransType = TRANSP_HVIO; break;
}
for ( Gate = FigureRds->LAYERTAB[ GateLayer ];
Gate != (rdsrec_list *)0;

View File

@ -111,10 +111,10 @@ static char *alc_decode[] = {
"NDIF",
"PDIF",
"NTRANS",
"PTRANS",
"NTRANS_FAST",
"PTRANS_FAST",
"NTRANS_HVIO",
"PTRANS",
"PTRANS_FAST",
"PTRANS_HVIO",
"POLY",
"POLY2",

View File

@ -347,7 +347,11 @@ static char *TabNameLayer[] =
"DIFN",
"DIFP",
"NTRANS",
"NTRANS_FAST",
"NTRANS_HVIO",
"PTRANS",
"PTRANS_FAST",
"PTRANS_HVIO",
"POLY",
"TPOLY",
"POLY2",
@ -385,10 +389,10 @@ static char *TabNameLayer[] = {
"NDIF",
"PDIF",
"NTRANS",
"PTRANS",
"NTRANS_FAST",
"PTRANS_FAST",
"NTRANS_HVIO",
"PTRANS",
"PTRANS_FAST",
"PTRANS_HVIO",
"POLY",
"POLY2",

View File

@ -53,7 +53,11 @@ static int Ext[LAST_LAYER + 1] = {
/* NDIF */ 1,
/* PDIF */ 1,
/* NTRANS */ 0, /* meant for N transistor grid */
/* NTRANS_FAST */ 0, /* meant for N transistor grid */
/* NTRANS_HVIO */ 0, /* meant for N transistor grid */
/* PTRANS */ 0, /* meant for P transistor grid */
/* PTRANS_FAST */ 0, /* meant for P transistor grid */
/* PTRANS_HVIO */ 0, /* meant for P transistor grid */
/* POLY */ 1,
/* ALU1 */ 1,
/* ALU2 */ 2,
@ -131,7 +135,11 @@ static char *mg_layer[] = {
/* NDIF */ "nn",
/* PDIF */ "pp",
/* NTRANS */ "NULL",
/* NTRANS_FAST */ "NULL",
/* NTRANS_HVIO */ "NULL",
/* PTRANS */ "NULL",
/* PTRANS_FAST */ "NULL",
/* PTRANS_HVIO */ "NULL",
/* POLY */ "ps",
/* ALU1 */ "m1",
/* ALU2 */ "m2",
@ -333,7 +341,11 @@ register long Xcenter, Ycenter;
if (Ptr->TYPE == LEFT || Ptr->TYPE == RIGHT) {
switch (Ptr->LAYER) {
case NTRANS :
case NTRANS_FAST :
case NTRANS_HVIO :
case PTRANS :
case PTRANS_FAST :
case PTRANS_HVIO :
Xbl = Ptr->X1;
Ybl = Ptr->Y1;
Xtr = Ptr->X2;
@ -368,7 +380,11 @@ register long Xcenter, Ycenter;
} else {
switch (Ptr->LAYER) {
case NTRANS :
case NTRANS_FAST :
case NTRANS_HVIO :
case PTRANS :
case PTRANS_FAST :
case PTRANS_HVIO :
Xbl = Ptr->X1;
Ybl = Ptr->Y1;
Ytr = Ptr->Y2;

View File

@ -1037,10 +1037,10 @@ static const char *layername[LAST_LAYER + 2] = {
"NDIF",
"PDIF",
"NTRANS",
"PTRANS",
"NTRANS_FAST",
"PTRANS_FAST",
"NTRANS_HVIO",
"PTRANS",
"PTRANS_FAST",
"PTRANS_HVIO",
"POLY",
"POLY2",

View File

@ -52,7 +52,11 @@ static int Extension[MAXLAYER] = {
/* NDIF */ 1,
/* PDIF */ 1,
/* NTRANS */ 0, /* meant for N transistor grid */
/* NTRANS_FAST */ 0, /* meant for N transistor grid */
/* NTRANS_HVIO */ 0, /* meant for N transistor grid */
/* PTRANS */ 0, /* meant for P transistor grid */
/* PTRANS_FAST */ 0, /* meant for P transistor grid */
/* PTRANS_HVIO */ 0, /* meant for P transistor grid */
/* POLY */ 1,
/* ALU1 */ 1,
/* ALU2 */ 2,

View File

@ -51,11 +51,11 @@ extern "C" {
#define TRANSFAST (1 << 1)
#define TRANSHVIO (1 << 3)
#define TRANSN_FAST (TRANSN & TRANSFAST)
#define TRANSP_FAST (TRANSP & TRANSFAST)
#define TRANSN_FAST (TRANSN | TRANSFAST)
#define TRANSP_FAST (TRANSP | TRANSFAST)
#define TRANSN_HVIO (TRANSN & TRANSHVIO)
#define TRANSP_HVIO (TRANSP & TRANSHVIO)
#define TRANSN_HVIO (TRANSN | TRANSHVIO)
#define TRANSP_HVIO (TRANSP | TRANSHVIO)
#define IsTransP(type) (type & 1)
#define IsTransN(type) (!IsTransP(type))

View File

@ -110,10 +110,10 @@ enum {
NDIF,
PDIF,
NTRANS,
PTRANS,
NTRANS_FAST,
PTRANS_FAST,
NTRANS_HVIO,
PTRANS,
PTRANS_FAST,
PTRANS_HVIO,
POLY,
POLY2,

View File

@ -356,8 +356,16 @@ char *layername;
return PTIE;
else if (!strcmp(layername, "ntrans"))
return NTRANS;
else if (!strcmp(layername, "ntrans_hvio"))
return NTRANS_HVIO;
else if (!strcmp(layername, "ntrans_fast"))
return NTRANS_FAST;
else if (!strcmp(layername, "ptrans"))
return PTRANS;
else if (!strcmp(layername, "ptrans_hvio"))
return PTRANS_HVIO;
else if (!strcmp(layername, "ptrans_fast"))
return PTRANS_FAST;
else if (!strcmp(layername, "nwell"))
return NWELL;
else if (!strcmp(layername, "pwell"))

View File

@ -220,6 +220,8 @@ extern long MBK_X_GRID, MBK_Y_GRID, MBK_Y_SLICE, MBK_WIDTH_VSS, MBK_WIDTH_VDD,
{ "notreat", S2R_NOTREAT },
{ "ntie", NTIE },
{ "ntrans", NTRANS },
{ "ntrans_fast", NTRANS_FAST },
{ "ntrans_hvio", NTRANS_HVIO },
{ "null", S2R_NOTREAT },
{ "nwell", NWELL },
{ "pdif", PDIF },
@ -227,6 +229,8 @@ extern long MBK_X_GRID, MBK_Y_GRID, MBK_Y_SLICE, MBK_WIDTH_VSS, MBK_WIDTH_VDD,
{ "poly2", POLY2 },
{ "ptie", PTIE },
{ "ptrans", PTRANS },
{ "ptrans_fast", PTRANS_FAST },
{ "ptrans_hvio", PTRANS_HVIO },
{ "pwell", PWELL },
{ "rcw", RDS_TRANS_RCW },
{ "rds_abox", RDS_LAYER_ABOX },
@ -380,10 +384,10 @@ extern long MBK_X_GRID, MBK_Y_GRID, MBK_Y_SLICE, MBK_WIDTH_VSS, MBK_WIDTH_VDD,
"NDIF ",
"PDIF ",
"NTRANS ",
"PTRANS ",
"NTRANS_FAST",
"PTRANS_FAST",
"NTRANS_HVIO",
"PTRANS ",
"PTRANS_FAST",
"PTRANS_HVIO",
"POLY ",
"POLY2 ",

View File

@ -31,7 +31,7 @@
# define RPR_MAX_RDS_UNIT 100000L
# define RPR_EPSILON ((double)0.001)
# define RPR_MAX_BUFFER 512
# define RPR_MAX_KEYWORD 151
# define RPR_MAX_KEYWORD 155
# define MBK_MAX_WIRESETTING 30
# define RPR_SEPARATORS_STRING " \t\n"