


ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



NNNNAAAAMMMMEEEE
     Route_rules - Design rule file for the Placement and Routing
     programs.

DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
     The design rules for the routing system are specified in a
     special file called "Route_rules".  Apart from the usual
     spacing and width rules, this file also contains parameters
     which influence various aspects of the automatic router.
     Each program of the routing system (except _i_p_p) uses the
     "Route_rules"-file to read the specific design rules it
     requires.

WWWWhhhheeeerrrreeee iiiissss tttthhhheeee rrrroooouuuutttteeeerrrr ddddeeeessssiiiiggggnnnn rrrruuuulllleeee ffffiiiilllleeee????
     The routing programs start looking for a file called
     "Route_rules" in the project directory (the 'current working
     directory').  The user can tune the characteristics of the
     router to a specific situation by editing a "Route_rules"-
     file in his/her project directory.  If no file called
     "Route_rules" is present in the project directory a default
     (and process-specific) design rules file will be used
     automatically by all routing programs.  This file has the
     following path:

	       ICDPATH/lib/process/<process_name>/Route_rules

     In this path <process_name> is the name of the process which
     is selected in the project directory.  If this file is not
     present for a process, the routing programs will complain
     but they will not abort.  The default (and probably wrong)
     values for the design rule parameters will be selected by
     each of the programs.  On the distribution tape heavily
     documented router design rule files are present for the
     'nmos' and 'c5th' processes.  They can be used as example to
     install a "Route_rules"-file for a new process.

SSSSyyyynnnnttttaaaaxxxx ooooffff tttthhhheeee rrrroooouuuutttteeeerrrr ddddeeeessssiiiiggggnnnn rrrruuuulllleeee ffffiiiilllleeee
     The parsers in all of the routing programs were implemented
     using the well known UNIX-tools LEX and YACC.  Therefore,
     the syntax is quite user-friendly and flexible.  The indivi-
     dual design rule parameters are separated by semicolons.
     The syntax definition of the design rules file parser is
     listed in the next figure in the meta language proposed by
     Wirth.

     Comment can be included between C-like brackets:

	       /* comment */

     The text between the brackets will be ignored by the parser.





		   The Nelsis IC Design System			1






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



_____________________________________________________________________________________
|declarations =    {(rule_decl | dummy_decl)}					     |
|dummy_decl =	   identifier {(letter|digit|special)} ";".			     |
|rule_decl =	   (keyword1 "=" integer ";") | 				     |
|		   (keyword2 "=" identifier ";") |				     |
|		   (keyword3  "[" layer_id  "]" "=" integer  ";") |		     |
|		   (keyword4  "[" layer_id  "]" "=" float  ";") 		     |
|		   (keyword5  "[" layer_id  "]" "[" layer_id  "]" "=" integer ";") | |
|		   (keyword6  "[" layer_id  "]" "=" identifier ";") |		     |
|		   (keyword7  "[" layer_id  "]" "=" formula ";").		     |
|keyword1 =	   "grid_2" | "grid_3" | "minchanwidth" | "max_power_width".	     |
|keyword2 =	   "vertical" . 						     |
|keyword3 =	   "width" | "length" | "contspacing" | "minlength".		     |
|keyword4 =	   "polyfactor" | "metalfactor".				     |
|keyword5 =	   "spacing" | "contact" | "overlap".				     |
|keyword6 =	   "mask" | "contactmask".					     |
|keyword7 =	   "power_line" | "current".					     |
|formula =	   expression {formula}.					     |
|expression =	   float | "i" | "w"						     |
|		   expression "+" expression | expression "-" expression |	     |
|		   expression "*" expression | expression "/" expression |	     |
|		   expression "^" expression | "{" expression "}".		     |
|layer_id =	   identifier.							     |
|integer =	   ["-"] digit {digit}. 					     |
|float =	   ["-"] {digit} ["." digit {digit}].				     |
|identifier =	   letter {(letter|digit|"_")}. 				     |
|digit =	   "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9".			     |
|letter =	   "a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|			     |
|		   "k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|			     |
|		   "u"|"v"|"w"|"x"|"y"|"z"|					     |
|		   "A"|"B"|"C"|"D"|"E"|"F"|"G"|"H"|"I"|"J"|			     |
|		   "K"|"L"|"M"|"N"|"O"|"P"|"Q"|"R"|"S"|"T"|			     |
|		   "U"|"V"|"W"|"X"|"Y"|"Z".					     |
|special =	   "_"|"-"|"["|"]".						     |
_|____________________________________________________________________________________|

     The 'dummy_decl' was added to provide upward compatibility
     for future enhancements of the file syntax.  Any unknown
     statement will be ignored by the parsers WITHOUT warning.

     The elementary geometric design rule parameters must be
     positive integers.  If these parameters are not integers,
     all dimensions can be multiplied by a common factor prior to
     the routing.  This factor can be chosen such that all design
     rules can be approximated by integers.

LLLLaaaayyyyeeeerrrr iiiiddddeeeennnnttttiiiiffffiiiieeeerrrrssss
     In the input files of the channel router, the different
     layers are identified by a process-iiiinnnndependent identifier
     (called 'layer_id').  This was done in order to specify
     implicitly the level (or vertical relation) of the masks and
     to enhance the portability of the program.  Four different



2		   The Nelsis IC Design System






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



     layers are distinguished by the channel router: POLY, DIFF,
     METAL1 and METAL2.  Two of them, the (POLY and DIFF) cannot
     cross each other, and will therefore belong to the same
     routing level.  There are three routing levels, of which the
     layers can cross each other without interfering.  The rout-
     ing level of each layer identifier is predefined:

      __________________________________________________________
      layer identifier	 routing level	 direction of preference
      __________________________________________________________
	   poly 	  1 (POLY)	       Vertical
	   diff 	  1 (POLY)	       Vertical
	   metal1	  2 (METAL1)	       Horizontal
	   metal2	  3 (METAL2)	       Vertical

     The names of the layer identifiers were chosen such that
     they resemble the names of the corresponding masks in most
     NMOS or CMOS processes.  The layer identifiers can be linked
     to an arbitrary mask of the process used.	See
     _m_a_s_k_d_a_t_a(3ICD) for details on masks.

     The parser is very flexible in recognizing the layer inden-
     tifiers.  A number of alternatives can also be used to
     specify the layer.  In the following table the asterisk (*)
     matches any string following the first character.

		  __________________________________
		  layer identifier    alternatives
		  __________________________________
		       poly	      np, p*
		       diff	      nd, d*
		       metal1	      metal, nm, m*
		       metal2	      ins, s*

     A warning message will be printed in the following cases:

	       The layer identifier starts with the character
	       d, p, m or s , but matches none of the layer iden-
	       tifiers exactly.
	       AAAAccccttttiiiioooonnnn:::: The layer will be interpreted according to
	       the first character of the layer name.
	       EEEExxxxaaaammmmpppplllleeee:::: The string dumbo will be interpreted as
	       the DIFF -layer.

	       The layer identifier is unknown.
	       AAAAccccttttiiiioooonnnn:::: The polysilicon layer will be selected.
	       EEEExxxxaaaammmmpppplllleeee:::: The string xyz will be interpreted as a
	       POLY -identifier.







		   The Nelsis IC Design System			3






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



DDDDeeeessssiiiiggggnnnn rrrruuuulllleeee ppppaaaarrrraaaammmmeeeetttteeeerrrrssss
     The parser will not print warnings for missing design rule
     parameters.  Each undefined parameter will obtain its
     default value.

     Not all layer combinations of the rules must be specified.
     In the following paragraphs, the item 'Useful indices' con-
     tains a table which specifies which of the layer combina-
     tions are useful for that parameter.  In these tables, an
     uppercase 'X' indicates a layer combination which mmmmuuuusssstttt be
     specified.  A lowercase 'x' indicates that specification of
     one of the two equivalent layer combinations is sufficient.
     An 'O' indicates that specification of the parameter is
     optional.	Finally the '-' means that the specification of
     the layer combination will always be ignored.

     If the second metal layer is not available in a process, it
     is recommended to set the METAL2 -rules to the same values
     as the POLY -layer.

MMMMaaaasssskkkk ssssppppaaaacccciiiinnnngggg
     SSSSyyyynnnnttttaaaaxxxx::::
	  spacing[_l_a_y_e_r_1][_l_a_y_e_r_2] = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Sets the minimum spacing between _l_a_y_e_r_1 and _l_a_y_e_r_2.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_c_r(1ICD), _s_e_q_u(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  _________________________________________
	  |SSSSPPPPAAAACCCCIIIINNNNGGGG   diff   poly   metal1   metal2 |
	  _|________________________________________|
	  |diff       X      x	     -	      -    |
	  |poly       x      X	     -	      -    |
	  |metal1     -      -	     X	      -    |
	  |metal2     -      -	     -	      X    |
	  _|________________________________________|
     RRRReeeemmmmaaaarrrrkkkkssss::::
	  In the current implementation of _g_c_r (the channel
	  router), the same contour covers the POLY -layer and
	  the DIFF -layer.  In order to prevent spacing errors,
	  _g_c_r will set both spacing[poly][poly] and
	  spacing[diff][diff] to the maximum spacing between
	  these layers.
     EEEExxxxaaaammmmpppplllleeeessss::::
	  spacing[poly][poly] = 2;
	  spacing[poly][diff] = 1;

	  However, notice that
	  spacing[poly][poly] = 2;
	  spacing[diff][diff] = 3;
	  will result in:



4		   The Nelsis IC Design System






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



	  spacing[poly][poly] = 3;
	  spacing[diff][diff] = 3;

MMMMiiiinnnniiiimmmmuuuummmm wwwwiiiirrrreeee wwwwiiiiddddtttthhhh
     SSSSyyyynnnnttttaaaaxxxx::::
	  width[_l_a_y_e_r] = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Sets the minimum width of _l_a_y_e_r.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_c_r(1ICD), _s_e_q_u(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  _______________________________________
	  |WWWWIIIIDDDDTTTTHHHH   diff   poly	 metal1   metal2 |
	  _|______________________________________|
	  |	    X	   X	   X	    X	 |
	  _|______________________________________|
     EEEExxxxaaaammmmpppplllleeee::::
	  width[poly] = 2;

CCCCoooonnnnttttaaaacccctttt hhhhoooolllleeee ssssiiiizzzzeeee
     SSSSyyyynnnnttttaaaaxxxx::::
	  contact[_l_a_y_e_r_1][_l_a_y_e_r_2] = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Sets the minimum width of the contact cut mask in a
	  contact hole from _l_a_y_e_r_1 to _l_a_y_e_r_2 (or vice versa).
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_c_r(1ICD), _s_e_q_u(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  _________________________________________
	  |CCCCOOOONNNNTTTTAAAACCCCTTTT   diff   poly   metal1   metal2 |
	  _|________________________________________|
	  |diff       -      -	     x	      -    |
	  |poly       -      -	     x	      -    |
	  |metal1     x      x	     -	      x    |
	  |metal2     -      -	     x	      -    |
	  _|________________________________________|
     EEEExxxxaaaammmmpppplllleeee::::
	  contact[poly][metal] = 2;

CCCCoooonnnnttttaaaacccctttt hhhhoooolllleeee oooovvvveeeerrrrllllaaaapppp
     SSSSyyyynnnnttttaaaaxxxx::::
	  overlap[_l_a_y_e_r_1][_l_a_y_e_r_2] = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Sets the minimum overlap width that _l_a_y_e_r_1 must be
	  extended beyond the boundary of a contact cut mask
	  between _l_a_y_e_r_1 and _l_a_y_e_r_2.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_c_r(1ICD), _s_e_q_u(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::



		   The Nelsis IC Design System			5






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



	  _________________________________________
	  |OOOOVVVVEEEERRRRLLLLAAAAPPPP   diff   poly   metal1   metal2 |
	  _|________________________________________|
	  |diff       -      -	     X	      -    |
	  |poly       -      -	     X	      -    |
	  |metal1     X      X	     -	      X    |
	  |metal2     -      -	     X	      -    |
	  _|________________________________________|
     EEEExxxxaaaammmmpppplllleeeessss::::
	  overlap[metal][poly] = 1;
	  overlap[poly][metal] = 2;


CCCCoooonnnnttttaaaacccctttt hhhhoooolllleeee ssssppppaaaacccciiiinnnngggg
     SSSSyyyynnnnttttaaaaxxxx::::
	  contspacing[_l_a_y_e_r] = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Sets the minimum distance between two contact cut masks
	  for vias from _l_a_y_e_r to METAL1.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_c_r(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  _____________________________________________
	  |CCCCOOOONNNNTTTTSSSSPPPPAAAACCCCIIIINNNNGGGG	 diff	poly   metal1	metal2 |
	  _|____________________________________________|
	  |		  O	 O	 -	  O    |
	  _|____________________________________________|
     RRRReeeemmmmaaaarrrrkkkkssss::::
	  If this parameter is specified, larger contact holes
	  will consist of a number of smaller and minimum sized
	  square rectangles of which the spacing is the value of
	  this parameter.  However, if no contact spacing is
	  specified for a layer, the contact hole mask can obtain
	  any (rectangular) shape.  This parameter was primarily
	  added for processes which only allow minimum-sized con-
	  tact hole patterns.
     EEEExxxxaaaammmmpppplllleeee::::
	  contspacing[poly] = 6;

MMMMiiiinnnniiiimmmmuuuummmm cccchhhhaaaannnnnnnneeeellll wwwwiiiiddddtttthhhh
     SSSSyyyynnnnttttaaaaxxxx::::
	  minchanwidth = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Sets the minumum spacing between the two sides of the
	  channel.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_c_r(1ICD).
     RRRReeeemmmmaaaarrrrkkkkssss::::
	  For a CMOS process this parameter can be used to
	  prevent overlap of wells in an empty or nearly empty



6		   The Nelsis IC Design System






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



	  channel.  Note that the spacing between the two sides
	  of the channel is at least the maximum of the minimum
	  spacings of the four different layers.
     EEEExxxxaaaammmmpppplllleeee::::
	  minchanwidth = 30;

MMMMaaaaxxxxiiiimmmmuuuummmm ssssiiiizzzzeeee ooooffff ggggrrrroooouuuuppppiiiinnnngggg iiiinnnntttteeeerrrrvvvvaaaallll
     SSSSyyyynnnnttttaaaaxxxx::::
	  length[_l_a_y_e_r] = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Sets the maximum horizontal distance between a terminal
	  and a contact hole.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_c_r(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  ________________________________________
	  |LLLLEEEENNNNGGGGTTTTHHHH   diff   poly   metal1   metal2 |
	  _|_______________________________________|
	  |	     O	    O	    -	     O	  |
	  _|_______________________________________|
     RRRReeeemmmmaaaarrrrkkkkssss::::
	  This parameter can be used to limit the length of wires
	  in certain layers.  It controls the maximum size of the
	  'grouping' interval around a terminal.  A small value
	  results in shorter (and often less capricious) wires in
	  the specified layer.	A zero value prevents any group-
	  ing of terminals.  However, _g_c_r will still join or
	  remove two adjacent contact holes of the same net
	  automatically.  This mechanism can be disabled by
	  specifying a negative value for one of the length
	  values.  Keep in mind that a small length value also
	  reduces the effectiveness of the grouping mechanism and
	  the contact hole placement, which usually results in a
	  wider channel with more contact holes and doglegs.  The
	  default length value of all layers is 'infinity', that
	  is, no restraints are imposed on the horizontal length
	  of the wires.  If the length value of a layer is not
	  specified, no costs will be accounted for the x-
	  position of the contact holes.
     EEEExxxxaaaammmmpppplllleeee::::
	  length[diff] = 40;

WWWWiiiirrrreeee lllleeeennnnggggtttthhhh mmmmiiiinnnniiiimmmmiiiizzzzaaaattttiiiioooonnnn ((((''''mmmmeeeettttaaaalllliiiissssaaaattttiiiioooonnnn''''))))
     SSSSyyyynnnnttttaaaaxxxx::::
	  minlength[_l_a_y_e_r] = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Specifies the minimum length of a wire in _l_a_y_e_r to jus-
	  tify conversion of the wire into METAL1 and enables
	  contact hole shift in _l_a_y_e_r.
     UUUUsssseeeedddd bbbbyyyy::::



		   The Nelsis IC Design System			7






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



	  _g_c_r(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  ___________________________________________
	  |MMMMIIIINNNNLLLLEEEENNNNGGGGTTTTHHHH   diff   poly   metal1   metal2 |
	  _|__________________________________________|
	  |		O      O       -	O    |
	  _|__________________________________________|
     RRRReeeemmmmaaaarrrrkkkkssss::::
	  This parameter sets the minimum length of a wire to
	  justify its so-called 'metalisation'.  The goal is to
	  limit the resistance of the wire.  Notice that this
	  process introduces two additional contact holes for
	  each metalized wire segment.	If this design rule
	  parameter is omitted for a layer, _g_c_r will not perform
	  any wire length minimization in that layer (which
	  includes contact hole shifting).  Therefore a postpro-
	  cessing level above 2 is not useful unless this parame-
	  ter was specified for a layer.
     EEEExxxxaaaammmmpppplllleeee::::
	  minlength[poly] = 60;

CCCCoooonnnnttttaaaacccctttt hhhhoooolllleeee ppppoooossssiiiittttiiiioooonnnniiiinnnngggg
     SSSSyyyynnnnttttaaaaxxxx::::
	  polyfactor[_l_a_y_e_r] = _f_l_o_a_t;
	  metalfactor[_l_a_y_e_r] = _f_l_o_a_t;

     PPPPuuuurrrrppppoooosssseeee::::
	  Controls the contact hole placement algorithm.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_c_r(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  __________________________________________________
	  |PPPPOOOOLLLLYYYY////MMMMEEEETTTTAAAALLLLFFFFAAAACCCCTTTTOOOORRRR   diff   poly   metal1   metal2 |
	  _|_________________________________________________|
	  |		       O      O       -        O    |
	  _|_________________________________________________|
     RRRReeeemmmmaaaarrrrkkkkssss::::
	  This parameters enables the user to influence the con-
	  tact hole placement in _g_c_r.  Polyfactor sets the gain
	  (decrease) in height which is justified by 1 unit extra
	  length of a wire in _l_a_y_e_r.  In other words: this factor
	  controls the cost of offcentering a contact hole from
	  it's terminal (offcentering makes makes the wire
	  longer).  Example: if polyfactor[poly] = 0.25, _g_c_r will
	  only place a contact hole 4 units offcentered if its
	  height is at least 1 unit decreased.	The smaller this
	  factor, the larger the offcenterings can be expected in
	  _l_a_y_e_r.

	  Metalfactor is comparable to Polyfactor.  It sets the
	  gain (decrease) in height which is justified by an
	  additional wire length in METAL1 of 1 unit.  The larger



8		   The Nelsis IC Design System






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



	  this factor, the shorter the METAL1 -wire (the left-
	  and rightmost contact holes are more or less pulled to
	  the middle).

	  Metalfactor and polyfactor are strongly correlated.  If

	   metalfactor[layer] < polyfactor[layer]

	  the contact holes will not be offcentered if the height
	  over the entire interval is equal.  The larger this
	  difference, the more the contact holes are pulled
	  towards the terminals, even if some gain in height can
	  be achieved.	This reduces the wire length in _l_a_y_e_r.
	  However if

		    metalfactor[layer] > polyfactor[layer]

	  the tendency to make the METAL1 -wire shorter will be
	  stronger than the tendency to make the wire in _l_a_y_e_r
	  stronger.  This will result in longer wires in _l_a_y_e_r.
	  Because of this strong correlation, a metalfactor for
	  each layer can be specified.

	  If these parameters are not specified, they will obtain
	  default values.
     EEEExxxxaaaammmmpppplllleeee::::
	  Polyfactor[poly] = 0.8;
	  Metalfactor[poly] = 0.4;

MMMMaaaasssskkkk nnnnaaaammmmeeee ooooffff aaaa llllaaaayyyyeeeerrrr
     SSSSyyyynnnnttttaaaaxxxx::::
	  mask[_l_a_y_e_r] = _i_d_e_n_t_i_f_i_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Specifies the name of the mask which should be identi-
	  fied by _l_a_y_e_r.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_c_r(1ICD), _s_e_q_u(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  ______________________________________
	  |MMMMAAAASSSSKKKK   diff	 poly	metal1	 metal2 |
	  _|_____________________________________|
	  |	   X	  X	  X	   X	|
	  _|_____________________________________|
     RRRReeeemmmmaaaarrrrkkkkssss::::
	  The programs _g_c_r and _s_e_q_u read the names of all masks
	  of the process out of the database.  This command must
	  be used to link the internal layers to the correspond-
	  ing mask of the current process.  Notice that you can
	  link any mask to any layer.  Only the layers wich are
	  used need to be be specified.
     EEEExxxxaaaammmmpppplllleeeessss::::



		   The Nelsis IC Design System			9






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



	  mask[poly] = np;
	  mask[metal] = nm;

MMMMaaaasssskkkk nnnnaaaammmmeeee ooooffff aaaa ccccoooonnnnttttaaaacccctttt hhhhoooolllleeee
     SSSSyyyynnnnttttaaaaxxxx::::
	  contactmask[_l_a_y_e_r] = _i_d_e_n_t_i_f_i_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Specifies the name of the mask which will be used for a
	  contact hole from _l_a_y_e_r to METAL1.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_c_r(1ICD), _s_e_q_u(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  _____________________________________________
	  |CCCCOOOONNNNTTTTAAAACCCCTTTTMMMMAAAASSSSKKKK	 diff	poly   metal1	metal2 |
	  _|____________________________________________|
	  |		  X	 X	 -	  X    |
	  _|____________________________________________|
     EEEExxxxaaaammmmpppplllleeeessss::::
	  contactmask[poly] = nc;
	  contactmask[diff] = nc;

TTTTwwwwoooo llllaaaayyyyeeeerrrr ggggrrrriiiidddd ssssiiiizzzzeeee
     SSSSyyyynnnnttttaaaaxxxx::::
	  grid_2 = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Specifies the approximate width which should be
	  accounted per wire by the global router for the two
	  layer case.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_l_r_o_u_t_e(1ICD).
     RRRReeeemmmmaaaarrrrkkkkssss::::
	  Used by the global router to estimate the channel width
	  for the two layer case.
     EEEExxxxaaaammmmpppplllleeee::::
	  grid_2 = 15;

TTTThhhhrrrreeeeeeee llllaaaayyyyeeeerrrr ggggrrrriiiidddd ssssiiiizzzzeeee
     SSSSyyyynnnnttttaaaaxxxx::::
	  grid_3 = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Specifies the approximate width which should be
	  accounted per wire by the global router for the three
	  layer case.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_l_r_o_u_t_e(1ICD).
     EEEExxxxaaaammmmpppplllleeee::::
	  grid_3 = 8;





10		   The Nelsis IC Design System






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



MMMMaaaaxxxxiiiimmmmuuuummmm wwwwiiiiddddtttthhhh ooooffff ppppoooowwwweeeerrrr wwwwiiiirrrreeeessss
     SSSSyyyynnnnttttaaaaxxxx::::
	  max_power_width = _i_n_t_e_g_e_r;

     PPPPuuuurrrrppppoooosssseeee::::
	  Limits the width of a power line.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_l_r_o_u_t_e(1ICD).
     EEEExxxxaaaammmmpppplllleeee::::
	  max_power_widthgrid_3 = 150;

FFFFoooorrrrmmmmuuuullllaaaa ttttoooo eeeessssttttiiiimmmmaaaatttteeee ccccuuuurrrrrrrreeeennnntttt rrrreeeeqqqquuuuiiiirrrreeeemmmmeeeennnntttt ffffrrrroooommmm tttteeeerrrrmmmmiiiinnnnaaaallll wwwwiiiiddddtttthhhh
     SSSSyyyynnnnttttaaaaxxxx::::
	  current[_l_a_y_e_r] = _f_o_r_m_u_l_a ;

     PPPPuuuurrrrppppoooosssseeee::::
	  Specifies the formula which should be used by the glo-
	  bal router to calculate the current from the power ter-
	  minal width. Currently, _l_a_y_e_r should be _m_e_t_a_l_1.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_l_r_o_u_t_e(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  _________________________________________
	  |CCCCUUUURRRRRRRREEEENNNNTTTT   diff   poly   metal1   metal2 |
	  _|________________________________________|
	  |	      -      -	     X	      -    |
	  _|________________________________________|
     RRRReeeemmmmaaaarrrrkkkkssss::::
	  Use 'w' for the terminal width in the formula. The fol-
	  lowing operators can be used: +, -, /, *, ^ and con-
	  stants. Use brackets for the calculation order.
     EEEExxxxaaaammmmpppplllleeee::::

TTTThhhheeee ffffoooorrrrmmmmuuuullllaaaa ffffoooorrrr tttthhhheeee ppppoooowwwweeeerrrr wwwwiiiirrrreeee wwwwiiiiddddtttthhhh
     SSSSyyyynnnnttttaaaaxxxx::::
	  power_line[_l_a_y_e_r] = _f_o_r_m_u_l_a;

     PPPPuuuurrrrppppoooosssseeee::::
	  Specifies the formula which should be used by the glo-
	  bal router to calculate the power wire width, given the
	  current.  Currently, _l_a_y_e_r should be METAL1.
     UUUUsssseeeedddd bbbbyyyy::::
	  _g_l_r_o_u_t_e(1ICD).
     UUUUsssseeeeffffuuuullll iiiinnnnddddiiiicccceeeessss::::
	  ____________________________________________
	  |PPPPOOOOWWWWEEEERRRR____LLLLIIIINNNNEEEE	diff   poly   metal1   metal2 |
	  _|___________________________________________|
	  |		 -	-	X	 -    |
	  _|___________________________________________|
     RRRReeeemmmmaaaarrrrkkkkssss::::
	  Use 'i' for the current in the formula.  The following
	  operators can be used: +, -, /, *, ^ (=exponent) and



		   The Nelsis IC Design System		       11






ROUTE_RULES(3ICD)				ROUTE_RULES(3ICD)



	  constants.  Use brackets for the calculation order.
     EEEExxxxaaaammmmpppplllleeee::::
	  power_line[metal1] = ( (i * 2.8868) + 0.6666 );

EEEEXXXXAAAAMMMMPPPPLLLLEEEE
     A heavily documented router design rule file can be found in
     the directory "ICDPATH/lib/process/c5th".

AAAAUUUUTTTTHHHHOOOORRRRSSSS
     P. Groeneveld, H. Cai

SSSSEEEEEEEE AAAALLLLSSSSOOOO
     gcr(1ICD), glroute(1ICD), ipp(1ICD), maskdata(3ICD),
     sequ(1ICD).









































12		   The Nelsis IC Design System



