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_ALU7 = 8;
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 *VDD = NULL; /* user name for power high */
char *VSS = NULL; /* user name for power ground */
@ -302,6 +311,43 @@ static char MBK_RAND_SEED[] = { 0x62,
if (str != NULL)
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);
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_ALU7;
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 *VDD; /* user name for power high */
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 ) ) )
{
if ( SIDE_STEP == 0 ) break;
if ( WSX < (SIDE_STEP << 1) ) break;
if ( WSY < (SIDE_STEP << 1) ) break;
if ( WSX < SIDE+(SIDE>>1) ) break;
if ( WSY < SIDE+(SIDE>>1) ) break;
X1R = Xvia + OVERLAP - ( ( WSX + 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;
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_ALU3, &MBK_TRACK_SPACING_ALU4,
&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_ALU5, &MBK_TRACK_WIDTH_ALU6,
&MBK_TRACK_WIDTH_ALU7, &MBK_TRACK_WIDTH_ALU8,
&RING_WALIM,
&MBK_WIDTH_VDD,
&MBK_WIDTH_VSS,
&RING_WMIN_ALU1,
&RING_WMIN_ALU2,
&RING_WVIA_ALU1,
&RING_WVIA_ALU2,
&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 ] =
{
"bv_via_via",
"dmin_alu1_alu1",
"dmin_alu2_alu2",
"extension_alu2",
"track_spacing_alu1",
"track_spacing_alu2",
"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_alu7",
"track_width_alu8",
"walim",
"width_vdd",
"width_vss",
"wmin_alu1",
"wmin_alu2",
"wvia_alu1",
"wvia_alu2",
"x_grid",
"y_grid",
"y_slice"

View File

@ -33,7 +33,7 @@
# define RPR_MAX_BUFFER 512
# define RPR_MAX_KEYWORD 151
# define MBK_MAX_WIRESETTING 21
# define MBK_MAX_WIRESETTING 30
# define RPR_SEPARATORS_STRING " \t\n"
# 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 */
/* on recupere (long) SCALE_X */
if (mode_debug)
if (mode_debug) {
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)))
ringerreur(ERR_CATAL, CATAL, NULL);

View File

@ -77,19 +77,20 @@
#define OUEST 2
#define EST 3
/* Nombres entiers obligatoires ! */
#define WMIN_ALU1 MBK_TRACK_WIDTH_ALU2 /* largeur minimum de l'alu1,l'alu2,dist mini alu1<->alu2 */
#define WMIN_ALU2 MBK_TRACK_WIDTH_ALU2 /* et largeur du via */
#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_ALU2_ALU2 ((MBK_TRACK_SPACING_ALU2+(MBK_TRACK_SPACING_ALU2)%2)/2)
#define WVIA_ALU1 MBK_TRACK_WIDTH_ALU1 /* largeur du via pour l'alu1 */
#define WVIA_ALU2 MBK_TRACK_WIDTH_ALU2 /* largeur du via pour l'alu2 */
#define WMIN_ALU1 RING_WMIN_ALU1
#define WMIN_ALU2 RING_WMIN_ALU2
#define DMIN_ALU1_ALU1 RING_DMIN_ALU1_ALU1
#define DMIN_ALU2_ALU2 RING_DMIN_ALU2_ALU2
#define WVIA_ALU1 RING_WVIA_ALU1
#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 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 */
/* code des ringerreurs traitees par ringerreur(code) */