Introduce configuration variables for the Ring router.

* New: In MBK, read new environment variables for ring router
    RING_WMIN_ALU1, RING_DMIN_ALU1, ...
* New: In RDS, in rprparse.c add entry in table MBK_WIRESETTING for the
    new ring variables.
* Change: In RDS, in rfmaccess.c, degenerate a BIGVIA into a default VIA
    when one of it's side is inferior to SIDE*1.5. This allow ring to
    keep it's 6x6 BIGVIAs.

Contributed by N. Shimizu.
This commit is contained in:
Jean-Paul Chaput 2014-09-17 17:21:34 +02:00
parent 6e258b40dd
commit 601c919035
7 changed files with 98 additions and 13 deletions

View File

@ -90,6 +90,15 @@ long MBK_TRACK_SPACING_ALU5 = 8;
long MBK_TRACK_SPACING_ALU6 = 8; long MBK_TRACK_SPACING_ALU6 = 8;
long MBK_TRACK_SPACING_ALU7 = 8; long MBK_TRACK_SPACING_ALU7 = 8;
long MBK_TRACK_SPACING_ALU8 = 0; long MBK_TRACK_SPACING_ALU8 = 0;
unsigned long RING_WMIN_ALU1 = 2;
unsigned long RING_WMIN_ALU2 = 2;
unsigned long RING_DMIN_ALU1_ALU1 = 3;
unsigned long RING_DMIN_ALU2_ALU2 = 3;
unsigned long RING_WVIA_ALU1 = 2;
unsigned long RING_WVIA_ALU2 = 3;
unsigned long RING_EXTENSION_ALU2 = 1;
unsigned long RING_BV_VIA_VIA = 4;
unsigned long RING_WALIM = 60;
char PARSER_INFO[100] = "nothing yet"; /* version number, and so on */ char PARSER_INFO[100] = "nothing yet"; /* version number, and so on */
char *VDD = NULL; /* user name for power high */ char *VDD = NULL; /* user name for power high */
char *VSS = NULL; /* user name for power ground */ char *VSS = NULL; /* user name for power ground */
@ -302,6 +311,43 @@ static char MBK_RAND_SEED[] = { 0x62,
if (str != NULL) if (str != NULL)
MBK_TRACK_SPACING_ALU8 = (long)atoi(str); MBK_TRACK_SPACING_ALU8 = (long)atoi(str);
str = mbkgetenv("RING_WMIN_ALU1");
if (str != NULL)
RING_WMIN_ALU1 - (long)atoi(str);
str = mbkgetenv("RING_WMIN_ALU2");
if (str != NULL)
RING_WMIN_ALU2 - (long)atoi(str);
str = mbkgetenv("RING_DMIN_ALU1_ALU1");
if (str != NULL)
RING_DMIN_ALU1_ALU1 - (long)atoi(str);
str = mbkgetenv("RING_DMIN_ALU2_ALU2");
if (str != NULL)
RING_DMIN_ALU2_ALU2 - (long)atoi(str);
str = mbkgetenv("RING_WVIA_ALU1");
if (str != NULL)
RING_WVIA_ALU1 - (long)atoi(str);
str = mbkgetenv("RING_WVIA_ALU2");
if (str != NULL)
RING_WVIA_ALU2 - (long)atoi(str);
str = mbkgetenv("RING_EXTENSION_ALU2");
if (str != NULL)
RING_EXTENSION_ALU2 - (long)atoi(str);
str = mbkgetenv("RING_BV_VIA_VIA");
if (str != NULL)
RING_BV_VIA_VIA - (long)atoi(str);
str = mbkgetenv("RING_WALIM");
if (str != NULL)
RING_WALIM - (long)atoi(str);
srand((unsigned int) MBK_RAND_SEED); srand((unsigned int) MBK_RAND_SEED);
str = mbkgetenv("MBK_IN_LO"); str = mbkgetenv("MBK_IN_LO");

View File

@ -211,6 +211,17 @@ extern long MBK_TRACK_SPACING_ALU5;
extern long MBK_TRACK_SPACING_ALU6; extern long MBK_TRACK_SPACING_ALU6;
extern long MBK_TRACK_SPACING_ALU7; extern long MBK_TRACK_SPACING_ALU7;
extern long MBK_TRACK_SPACING_ALU8; extern long MBK_TRACK_SPACING_ALU8;
extern unsigned long RING_WMIN_ALU1;
extern unsigned long RING_WMIN_ALU2;
extern unsigned long RING_DMIN_ALU1_ALU1;
extern unsigned long RING_DMIN_ALU2_ALU2;
extern unsigned long RING_WVIA_ALU1;
extern unsigned long RING_WVIA_ALU2;
extern unsigned long RING_EXTENSION_ALU2;
extern unsigned long RING_BV_VIA_VIA;
extern unsigned long RING_WALIM;
extern char PARSER_INFO[]; /* version number, and so on */ extern char PARSER_INFO[]; /* version number, and so on */
extern char *VDD; /* user name for power high */ extern char *VDD; /* user name for power high */
extern char *VSS; /* user name for power ground */ extern char *VSS; /* user name for power ground */

View File

@ -478,8 +478,8 @@ rdsrec_list *viambkrds( Figure, Via, Lynx )
( ( USE == RDS_USE_DRC ) && ( ! Lynx ) ) ) ( ( USE == RDS_USE_DRC ) && ( ! Lynx ) ) )
{ {
if ( SIDE_STEP == 0 ) break; if ( SIDE_STEP == 0 ) break;
if ( WSX < (SIDE_STEP << 1) ) break; if ( WSX < SIDE+(SIDE>>1) ) break;
if ( WSY < (SIDE_STEP << 1) ) break; if ( WSY < SIDE+(SIDE>>1) ) break;
X1R = Xvia + OVERLAP - ( ( WSX + DWR ) >> 1 ); X1R = Xvia + OVERLAP - ( ( WSX + DWR ) >> 1 );
Y1R = Yvia + OVERLAP - ( ( WSY + DWR ) >> 1 ); Y1R = Yvia + OVERLAP - ( ( WSY + DWR ) >> 1 );

View File

@ -103,6 +103,10 @@ extern long MBK_X_GRID, MBK_Y_GRID, MBK_Y_SLICE, MBK_WIDTH_VSS, MBK_WIDTH_VDD,
MBK_TRACK_SPACING_ALU7, MBK_TRACK_SPACING_ALU8; MBK_TRACK_SPACING_ALU7, MBK_TRACK_SPACING_ALU8;
long *RDS_WIRESETTING_TABLE [ MBK_MAX_WIRESETTING ] = long *RDS_WIRESETTING_TABLE [ MBK_MAX_WIRESETTING ] =
{ {
&RING_BV_VIA_VIA,
&RING_DMIN_ALU1_ALU1,
&RING_DMIN_ALU2_ALU2,
&RING_EXTENSION_ALU2,
&MBK_TRACK_SPACING_ALU1, &MBK_TRACK_SPACING_ALU2, &MBK_TRACK_SPACING_ALU1, &MBK_TRACK_SPACING_ALU2,
&MBK_TRACK_SPACING_ALU3, &MBK_TRACK_SPACING_ALU4, &MBK_TRACK_SPACING_ALU3, &MBK_TRACK_SPACING_ALU4,
&MBK_TRACK_SPACING_ALU5, &MBK_TRACK_SPACING_ALU6, &MBK_TRACK_SPACING_ALU5, &MBK_TRACK_SPACING_ALU6,
@ -111,9 +115,15 @@ extern long MBK_X_GRID, MBK_Y_GRID, MBK_Y_SLICE, MBK_WIDTH_VSS, MBK_WIDTH_VDD,
&MBK_TRACK_WIDTH_ALU3, &MBK_TRACK_WIDTH_ALU4, &MBK_TRACK_WIDTH_ALU3, &MBK_TRACK_WIDTH_ALU4,
&MBK_TRACK_WIDTH_ALU5, &MBK_TRACK_WIDTH_ALU6, &MBK_TRACK_WIDTH_ALU5, &MBK_TRACK_WIDTH_ALU6,
&MBK_TRACK_WIDTH_ALU7, &MBK_TRACK_WIDTH_ALU8, &MBK_TRACK_WIDTH_ALU7, &MBK_TRACK_WIDTH_ALU8,
&RING_WALIM,
&MBK_WIDTH_VDD, &MBK_WIDTH_VDD,
&MBK_WIDTH_VSS, &MBK_WIDTH_VSS,
&RING_WMIN_ALU1,
&RING_WMIN_ALU2,
&RING_WVIA_ALU1,
&RING_WVIA_ALU2,
&MBK_X_GRID, &MBK_Y_GRID, &MBK_Y_SLICE &MBK_X_GRID, &MBK_Y_GRID, &MBK_Y_SLICE
}; };
/*------------------------------------------------------------\ /*------------------------------------------------------------\
| | | |
@ -412,6 +422,10 @@ extern long MBK_X_GRID, MBK_Y_GRID, MBK_Y_SLICE, MBK_WIDTH_VSS, MBK_WIDTH_VDD,
char MBK_WIRESETTING_NAME [ MBK_MAX_WIRESETTING ][ MBK_MAX_WIRESETTING_TLEN ] = char MBK_WIRESETTING_NAME [ MBK_MAX_WIRESETTING ][ MBK_MAX_WIRESETTING_TLEN ] =
{ {
"bv_via_via",
"dmin_alu1_alu1",
"dmin_alu2_alu2",
"extension_alu2",
"track_spacing_alu1", "track_spacing_alu1",
"track_spacing_alu2", "track_spacing_alu2",
"track_spacing_alu3", "track_spacing_alu3",
@ -428,8 +442,13 @@ extern long MBK_X_GRID, MBK_Y_GRID, MBK_Y_SLICE, MBK_WIDTH_VSS, MBK_WIDTH_VDD,
"track_width_alu6", "track_width_alu6",
"track_width_alu7", "track_width_alu7",
"track_width_alu8", "track_width_alu8",
"walim",
"width_vdd", "width_vdd",
"width_vss", "width_vss",
"wmin_alu1",
"wmin_alu2",
"wvia_alu1",
"wvia_alu2",
"x_grid", "x_grid",
"y_grid", "y_grid",
"y_slice" "y_slice"

View File

@ -33,7 +33,7 @@
# define RPR_MAX_BUFFER 512 # define RPR_MAX_BUFFER 512
# define RPR_MAX_KEYWORD 151 # define RPR_MAX_KEYWORD 151
# define MBK_MAX_WIRESETTING 21 # define MBK_MAX_WIRESETTING 30
# define RPR_SEPARATORS_STRING " \t\n" # define RPR_SEPARATORS_STRING " \t\n"
# define RPR_COMMENT_CHAR '#' # define RPR_COMMENT_CHAR '#'

View File

@ -132,8 +132,16 @@ void lecture_param(int nbarg, char** tab, char** nom_circuit_lo,
mbkenv(); /* choix de l'utilisateur mis dans des variables UNIX */ mbkenv(); /* choix de l'utilisateur mis dans des variables UNIX */
/* on recupere (long) SCALE_X */ /* on recupere (long) SCALE_X */
if (mode_debug) if (mode_debug) {
printf("CATALNAME is %s\n", CATAL); printf("CATALNAME is %s\n", CATAL);
printf("WMIN_ALU1 is %ld\n", WMIN_ALU1);
printf("WVIA_ALU1 is %ld\n", WVIA_ALU1);
printf("WMIN_ALU2 is %ld\n", WMIN_ALU2);
printf("WVIA_ALU2 is %ld\n", WVIA_ALU2);
printf("DMIN_ALU1_ALU1 is %ld\n", DMIN_ALU1_ALU1);
printf("DMIN_ALU2_ALU2 is %ld\n", DMIN_ALU2_ALU2);
printf("BV_VIA_VIA is %ld\n", BV_VIA_VIA);
}
if (NULL == (f_catal = mbkfopen(CATAL, NULL, READ_TEXT))) if (NULL == (f_catal = mbkfopen(CATAL, NULL, READ_TEXT)))
ringerreur(ERR_CATAL, CATAL, NULL); ringerreur(ERR_CATAL, CATAL, NULL);

View File

@ -77,19 +77,20 @@
#define OUEST 2 #define OUEST 2
#define EST 3 #define EST 3
/* Nombres entiers obligatoires ! */ /* Nombres entiers obligatoires ! */
#define WMIN_ALU1 MBK_TRACK_WIDTH_ALU2 /* largeur minimum de l'alu1,l'alu2,dist mini alu1<->alu2 */ #define WMIN_ALU1 RING_WMIN_ALU1
#define WMIN_ALU2 MBK_TRACK_WIDTH_ALU2 /* et largeur du via */ #define WMIN_ALU2 RING_WMIN_ALU2
#define DMIN_ALU1_ALU1 ((MBK_TRACK_SPACING_ALU1+(MBK_TRACK_SPACING_ALU1)%2)/2) /* dmin en a1 a1 2.5 arrondi a 3 */ #define DMIN_ALU1_ALU1 RING_DMIN_ALU1_ALU1
#define DMIN_ALU2_ALU2 ((MBK_TRACK_SPACING_ALU2+(MBK_TRACK_SPACING_ALU2)%2)/2) #define DMIN_ALU2_ALU2 RING_DMIN_ALU2_ALU2
#define WVIA_ALU1 MBK_TRACK_WIDTH_ALU1 /* largeur du via pour l'alu1 */ #define WVIA_ALU1 RING_WVIA_ALU1
#define WVIA_ALU2 MBK_TRACK_WIDTH_ALU2 /* largeur du via pour l'alu2 */
#define EXTENSION_ALU2 1 /* extension alu2 pour fignoler coin couronne */ #define WVIA_ALU2 RING_WVIA_ALU2 /* largeur du via pour l'alu2 */
#define BV_VIA_VIA (MBK_TRACK_WIDTH_ALU2+MBK_TRACK_WIDTH_ALU2%2) /* must be even, whatever! */ #define EXTENSION_ALU2 RING_EXTENSION_ALU2 /* pour fignoler coin couronne */
#define BV_VIA_VIA RING_BV_VIA_VIA /* must be even, whatever! */
#define BV_VIASIZE WVIA_ALU2 /* design rule for equipotential vias */ #define BV_VIASIZE WVIA_ALU2 /* design rule for equipotential vias */
#define WALIM 60 /* largeur prdefinie des alim */ #define WALIM RING_WALIM /* largeur prdefinie des alim */
/*#define PISTE_DEP_ALIMPLOT 10 Nombre de piste a considerer pour une deport alim plot */ /*#define PISTE_DEP_ALIMPLOT 10 Nombre de piste a considerer pour une deport alim plot */
/* code des ringerreurs traitees par ringerreur(code) */ /* code des ringerreurs traitees par ringerreur(code) */