                     _K_I_C:  _A _G_r_a_p_h_i_c_s _E_d_i_t_o_r _f_o_r _I_n_t_e_g_r_a_t_e_d _C_i_r_c_u_i_t_s   F                      _G_i_l_e_s _B_i_l_l_i_n_g_s_l_e_y8                        _K_e_n _K_e_l_l_e_r[_1]p             _U_n_i_v_e_r_s_i_t_y _o_f _C_a_l_i_f_o_r_n_i_a _a_t _B_e_r_k_e_l_e_y        * _1.  _I_n_t_r_o_d_u_c_t_i_o_n  B This is a tutorial for _K_I_C: an interactive,  color  graphics< program  for  the laying out of integrated circuits.  If the< minimum resolvable unit  of  distance  in  your  process  isH termed  _l_a_m_b_d_a,  your  layout may be as large as 200,000,000< lambda by 200,000,000 lambda units on  each  of  25  layers.< KIC  can easily be recompiled to increase the maximum number of layers if 25 is not enough.  < KIC has symbolic layout and split-screen capabilities  that,< when  employed  correctly,  allow it to respond quickly with< most low-cost, low-performance graphics terminals.  You  can2 also control how layer interactions are displayed.  < Because KIC uses the model  frame  buffer  graphics  packageB _m_f_b,  KIC  can  run  on  several  terminals.   This tutorial< assumes that you are now logged in at  a  graphics  terminal\ with  a  color monitor on a _V_A_X-_1_1/_7_8_0 _c_o_m_p_u_t_e_r on which KICL is installed.  At Berkeley, KIC is on _E_S_V_A_X and all the  _C_A_D< machines.   It  is  also assumed that you know the basics ofH _U_N_I_X[2] or _V_M_S[3] (whichever system that you are running):       - logging in and out  <     - editing files with a text editor like _e_d or _v_i  H     - deleting files with the UNIX _r_m or VMS _d_e_l_e_t_e com-     mand  D     - renaming files with the UNIX _m_v or VMS  _c_o_p_y  com-     mand  8     - printing on your terminal the names of  the  files<     and  directories  in  a directory via the UNIX _l_s or     VMS _d_i_r command   D     - copying files with the UNIX _c_p or VMS _c_o_p_y command ____________________/ 9   [1]Fannie and John Hertz Foundation FellowA0    [2] UNIX is a trademark of Bell Laboratories.4    [3] VMS is a trademark of Digital Equipment Corp.        9                             1                    B     - making directories of files with the UNIX _m_k_d_i_r or"     VMS _c_r_e_a_t_e command       - running commands  < Accounts on Berkeley VAXs can be obtained from your research< adviser.   UNIX documentation can be purchased at Berkeley's computer center in Evans Hall.   _D_o_n'_t _b_e _a_f_r_a_i_d _t_o _a_s_k _f_e_l_l_o_w _s_t_u_d_e_n_t_s _q_u_e_s_t_i_o_n_s.  _K_I_C _q_u_e_s_- _t_i_o_n_s _w_i_l_l _b_e _a_n_s_w_e_r_e_d _b_y _s_t_u_d_e_n_t_s _i_n _r_o_o_m _3_2_1_A _C_o_r_y.       % _2.  _R_u_n_n_i_n_g _K_I_C  < KIC is stored in the ~cad/new directory on Berkeley VAX com-< puters.   If  you  are  on a terminal with a tablet (a white< plastic surface next to the terminal  with  a  little  black/ plastic box on top of it), invoke KIC by typing .                          _k_i_c -_g _x_x@ where _x_x is the mfb identifier  for  the  graphics  terminal< that  you  are  using.  You can use KIC with a joystick, but< you will find it to be cumbersome.  If you do not  know  the< mfb  identifier  for  your particular terminal, read the cad3 manual page for kic.  Do this by typing the command 5                          _c_a_d_m_a_n _k_i_cp  < If KIC gives you trouble at any time, you  can  stop  it  byv pressing  the _R_U_B_O_U_T or _c_t_r_l-_a keys.  _D_o _n_o_t _p_r_e_s_s _a_n_y _f_u_n_c_- _t_i_o_n _k_e_y_s _o_n _y_o_u_r _g_r_a_p_h_i_c_s _t_e_r_m_i_n_a_l _w_h_i_l_e _K_I_C _i_s _r_u_n_n_i_n_g.e      5 _3.  _T_h_e _S_c_r_e_e_n _L_a_y_o_u_te  < At this point do not type anything or manipulate the graphi- cal pointing device.  Z Most of the screen is covered by the _l_a_y_o_u_t _v_i_e_w_p_o_r_t_s  which< is where your layout will be displayed.  Notice the KIC logo here.   L You should be aware of the difference between a _v_i_e_w_p_o_r_t andH a  _w_i_n_d_o_w.   A  viewport describes a rectangular area on the< screen and a window describes a rectangular area in a  coor-H dinate system.  KIC provides two such viewports:  the _c_o_a_r_s_e _v_i_e_w_p_o_r_t and below it the _f_i_n_e-_p_o_s_i_t_i_o_n_i_n_g _v_i_e_w_p_o_r_t or  _m_a_g_-S _n_i_f_y_i_n_g _g_l_a_s_s.  This will become more clear as you proceed.r  J In the upper left corner of the screen, you see the  _c_o_m_m_a_n_d` _m_e_n_u.   The  _p_r_o_m_p_t  _v_i_e_w_p_o_r_t  is  located  above the row of< colored boxes near the bottom of the screen.  If KIC prompts                                  2                    < you  for information, anything you type will be displayed in< this viewport.  It  is  also  used  by  KIC  to  communicate< instructions  and  various  other information to you.  Watch< it:  it will make the use of KIC easier  for  you.   If  KICL ever  types  _M_O_R_E  in  this window, it has _m_o_r_e to show you.< When you have completed reading  what  KIC  has  shown  you,< press  the return key and it will show you the rest.  If KIC< seems to stop for some reason  or  seems  slow,  check  this6 viewport.  KIC may be asking you to answer a question.  < The row of colored boxes followed by text near the bottom of^ the  screen is called the _l_a_y_e_r _m_e_n_u _v_i_e_w_p_o_r_t.  Each colored< box is associated with an IC layer and has the layer's  name< next  to it.  The creation of a specific set of layers for a< particular process will be described later in  this  report.< The layer menu you see is for the local digital nMOS process< and is the default menu.  The first  character  of  a  layer< name  stands  for  the  technology (N for nMOS) and the rest< stands for the layer type. NI stands for implant.  ND stands< for  diffusion.   NP  stands for polysilicon.  NM stands for< metal.  NC stands for contact cut.  NG stands for overglass.D The  LYRL  and  LYRR layers are used by the _L_Y_R_A layout rule< checking program, and the layers that end in S are  symbolic as discussed later.  T There is always a _c_u_r_r_e_n_t _l_a_y_e_r selected with its name  out-< lined  in  black.  When KIC is invoked, the layer associated+ with the leftmost box is the current layer._  < There is one viewport that has not been  mentioned.   It  isN the  row  at  the  bottom of the screen called the _p_a_r_a_m_e_t_e_rL _v_i_e_w_p_o_r_t.  It displays the position information to  be  dis-< cussed  later,  the name of the cell currently being edited,- and the width in lambda of the coarse window.        _4.  _P_o_i_n_t_i_n_g  J The _c_u_r_s_o_r is a small _x (or you may  have  a  terminal  with< cross-hairs)  that  is  displayed  on  the monitor.  Move it< around by pushing the plastic black box along  the  tablet's< surface.   If  you are using a joystick instead of a tablet,' move the cursor by moving the joystick.a  < To inform KIC that the cursor is  where  you  want  it,  you< press  the  yellow  tablet  stylus button if you are using a< tablet, otherwise you can press the space bar  on  the  key-0 board.  This is called _p_o_i_n_t_i_n_g.  < To change the current layer, point at  the  layer  that  you< want  to  be  the  current one.  To invoke a command, simply) point at it.  Try pointing at the commands                                  3                    (                             _z_o_o_m< Since you haven't chosen a cell to edit, KIC  won't  execute< the  command. When a command is selected, the command's name< changes color.  Note  that  the  pointing  process  includes( pressing the stylus button or space bar.      , _5.  _E_d_i_t_i_n_g _a _C_e_l_l  F Mask sets or layouts are  known  as  _c_e_l_l_s.   Each  cell  is< stored  in  a  disk  file  and its name must be a valid file< name.  For UNIX users, cell names can be mixed case  and  up< to  14  characters long.  For VMS users, cell names can also< be mixed case and up to 9 characters long.  You  can  renameD and  copy  cells  via the _m_v and _c_p UNIX commands.  The UNIX@ command _l_s can be used to display cell names.   If  you  areD running  under VMS, you can copy cells via the VMS _c_o_p_y com-B mand.  The VMS _d_i_r command  can  be  used  to  display  cell names.  < The cells that you will use in this tutorial are from  Xerox< PARC's  nMOS  cell  library.   On the computers at Berkeley, these cells are stored inhR                   ~_c_a_d/_l_i_b/_K_i_c_L_i_b_r_a_r_y/_n_m_o_s  
 Invoke the(                             _e_d_i_t< command by pointing at it in the command menu.  KIC will ask< you  for a cell name in the prompt viewport.  If you wish to< start a new cell, type the name of a non-existent  file  andD KIC  will create a cell for you.  If you ever select _e_d_i_t by< mistake, simply push the return key, and KIC will again edit2 the current cell.  However, for this exercise type/                           _C_n_t_d_o_w_niL or _C_n_t_d_o_w_n._k if KIC is installed under VMS.   KIC  will  now) display the cell in the layout viewports.      s _5._1.  _F_i_n_e _P_o_s_i_t_i_o_n_i_n_g:  _T_h_e _M_a_g_n_i_f_y_i_n_g _G_l_a_s_sh  < There  is  a  small,  black,  outlined  box  in  the  coarse< viewport.   This  identifies  the  area that is displayed in< detail in the magnifying glass.  To identify the  area  that< you  are interested in viewing in detail, move the cursor to< the center of the area and press the white stylus button  if& you are using a tablet, otherwise type+                            _c_t_r_l-_f-< (f is for fine).  KIC will ask you to point  to  the  area's center.r  < The box will move so that its center is  where  you  pointed                                  4                    < and  the  area  in which you are interested will be shown in< the magnifying glass.  You may use the fine positioning com- mand at any time.'  < You may also define the  relative  size  of  the  magnifying glass.  When you type +                           _c_t_r_l-_g,t< KIC will ask you to point to the diagonal endpoints  of  the< area  that  you want to be magnified.  Do this.  KIC will do< its best to fit the magnifying glass with its  fixed  aspect< ratio  into  this area.  You may notice that the grid in the< magnifying glass has gone away;  KIC has  decided  that  the< magnifying  glass  is  large enough that the spacing between< grid lines would obscure the user's view of the  area  being
 magnified.  F If you are using a tablet, you don't need  to  type  _c_t_r_l-_g.< You  may  define the area to be magnified by pointing to the< endpoints of a diagonal using the green stylus button.   Try it.  < Thus two stylus buttons are dedicated to the control of  the< magnifying  glass; the white button is used only to position< the magnifying glass, and the green button is used to define< the relative size and position of the magnifying glass.  You< will find the magnifying glass to be  convenient  for  large< layouts  and  you  will quickly learn how to effectively use it.o  < It is possible to change the orientation of the  coarse  and< fine-positioning  viewports  from  top-bottom  to left-right% with respect to the display by typingv+                            _c_t_r_l-_tmp (_I_f _r_u_n_n_i_n_g _V_M_S, _t_y_p_e _c_t_r_l-_v).  When  you  type  _c_t_r_l-_t  you< will see the screen erased and repainted with the fine posi-< tioning viewport on the right of the screen and  the  coarseF viewport  on  the left.  Type _c_t_r_l-_t again, and you will see< the screen erased and repainted with  the  coarse  and  fine< positioning  viewports on the top and bottom respectively as% they were when you first invoked KIC.d  J Be sure to read the section on _r_o_u_t_i_n_g (Section  14)  before$ you attempt any substantial routing.      A _5._2.  _E_x_p_a_n_d_i_n_g _I_n_s_t_a_n_c_e_sy  < You can see that the cell Cntdown consists of geometry and a< large,  labeled,  outlined  box.  A labeled box such as thisp one is the _s_y_m_b_o_l_i_c or _u_n_e_x_p_a_n_d_e_d picture  of  an  _i_n_s_t_a_n_c_e.< An instance is simply a referenced and placed cell.  The box< you now see is labeled Passdown: this is the  placed  cell's                                  5                    < name.   In  the lower left corner of the box, the dimensions$ of the instance are given in lambda.  
 Now, point tor*                            _e_x_p_n_d< You will see the instance of Passdown expanded into its full< detail  (the  labeled box is no longer visible) and that the< menu selection remains highlighted. When you invoke KIC,  it< is  in  the  mode  where instances are not expanded.  But byF pointing at _e_x_p_n_d you have changed the mode of KIC such thatH instances  are  expanded  (i.e., KIC is in _e_x_p_a_n_d mode).  We< could change back to the unexpanded mode by  pointing  again at _e_x_p_n_d.n  
 Now, point at (                             _p_e_e_k< and you will see the instance of Passdown expanded  only  in< the  fine-positioning  viewport  or  magnifying glass at theF bottom  of  the  screen.   You  also  see  that  _e_x_p_n_d   was= deselected when you pointed at _p_e_e_k.  Again, point atg*                            _e_x_p_n_dD and you will see  that  _p_e_e_k  is  deselected  and  the  full< instance  of  Passdown  is  expanded  in both the coarse and fine-positioning viewports.s      N _5._3.  _T_r_a_v_e_r_s_i_n_g _t_h_e _H_i_e_r_a_r_c_h_y  < Because Cntdown contains an instance of  Passdown,  Passdown< is below Cntdown in the hierarchy. Hierarchies can be opera-9 tionally as deep as you like: the limit is currently 100.   + Put KIC in the unexpanded mode and point to *                            _s_e_l_e_cN This puts KIC in _s_e_l_e_c_t_i_o_n mode, and you  will  see  a  dif-< ferent  menu  displayed in the menu viewport:  the selection< menu. The menu shown when KIC is invoked is called the basic< menu.   Now, point at Passdown.  KIC will highlight the cellL by outlining it to show that it is _s_e_l_e_c_t_e_d.  Also, you will< see  a  diamond  shaped  instance marker that identifies the9 reference point where the cell was placed.  Now, point at(                             _p_u_s_h< in the selection menu.  You will see  Passdown  appear  cen-< tered in full detail.  Notice that KIC is still in the unex- panded mode.  Point at%                             _p_o_pu< in the selection menu.  You will see Cntdown appear again in< the  same place where you left it.  KIC remembered this con-< text.  You have just gone down and then back up the  hierar-< chy.   If  you  had changed Passdown, popped up a level, andH put KIC in _e_x_p_a_n_d mode, you would see any changes  to  Pass- down reflected in Cntdown.                                  6                    ) Now return to the basic menu by selectingt*                            _b_a_s_i_c> in the selection menu, and put KIC in _e_x_p_a_n_d mode.       _5._4.  _G_r_i_d_s   0 You can tell KIC not to show a grid by selecting(                             _g_r_i_d< You will be prompted for a number. If you do not want KIC to  display a grid, type zero or _0  D When you want the grid to be displayed  again,  select  _g_r_i_d< and  type the number of lambda you want between grid points.1 When you invoke KIC, this number defaults to one.  < You can tell KIC to snap the cursor to the  grid  points  by
 selecting thel(                             _s_n_a_p< command.  KIC will ask you for the number of lambda  between< points to which the cursor input will be snapped.  Enter the< number 5 and point several times in the layout viewport; you< will notice by reading the parameter viewport that all coor-< dinates you point to are integer multiples of 5.  Now selectD the _s_n_a_p command again and set the snapped grid spacing back to one lambda.      H _5._5.  _C_o_m_m_a_n_d _L_i_n_e _A_r_g_u_m_e_n_t_s  < When you invoked KIC, you could have commanded  it  to  edit the Cntdown cell by typing7                         _k_i_c _C_n_t_d_o_w_no  & The general format for invoking KIC isw     _k_i_c   [-_g _t_e_r_m_t_y_p_e]   [-_d _d_e_v_i_c_e_n_a_m_e]   [_C_e_l_l_n_a_m_e_s] L where _t_e_r_m_t_y_p_e is the mfb identifier for the graphics termi-N nal  as  described  earlier,  and _C_e_l_l_n_a_m_e_s is a list of the< names of the cells to be edited  by  KIC.   If  you  do  not< specify a cell name on the command line, KIC will expect you
 to use the(                             _e_d_i_t< command.  If you specify several cell names on  the  command< line,  KIC  will begin editing the first cell in the list of< names.  To begin editing the next cell in the list, point atD the  _e_d_i_t  command  and  simply push the carriage return key< when KIC prompts you for a cell name.   KIC  will  tell  you/ when you have edited all the cells in the list.u  < If KIC is running under UNIX, you can tell KIC to  send  the> graphics  data  to  another terminal by using the -_d option.                                  7                    P The _d_e_v_i_c_e_n_a_m_e argument specifies the terminal and may be  a< full  pathname  to  the device or simply the tty name (e.g., tty16).e      ; _5._6.  _C_o_o_r_d_i_n_a_t_e _S_y_s_t_e_mt  < You will be creating geometries on a mask coordinate system.< It  is  a  2D  Cartesian  system with integer coordinates. A< coordinate value can range between plus and minus  two  hun-2 dred million.  The units of the system are lambda.  < If you are not certain that this is enough  precision,  con-< sider  a  process  with  0.1 micron minimum geometries and 2< centimeters maximum die size.  Layouts for  such  a  process< can  be  done  in  a  200,000  by 200,000 coordinate system.# Thus, there is plenty of precision.t  < Now, simply point in one of the layout viewports.  The (x,y)< coordinate  in lambda of the position that you pointed at is< shown to you in  the  parameter  viewport.   Each  time  you< point, the distance you moved the cursor since the last time< you pointed is shown in the viewport to you as (dx,dy).  You< can  measure  distances in this way.  Point at the left edge< of the coarse layout viewport and then at  the  right  edge.F Notice  that  dx  is  approximately  the  value of the _w_i_d_t_h< parameter which is shown in the parameter  viewport  and  is2 the width of the coarse layout viewport in lambda.      ? _5._7.  _P_a_n_n_i_n_g _a_n_d _Z_o_o_m_i_n_g   6 Change the coarse layout viewport's center by invoking%                             _p_a_nn< Notice that the menu selection is still a  different  color.< You  will  be  asked  to  point  at  the  center for the new< viewport. Do so.  KIC will redisplay the layout centered  at< the position that you selected.  Notice that the menu selec-< tion remains a different color and the cursor vanishes until< redisplay is complete.  Again notice that the menu selection< is still a different color indicating that the KIC is  stillJ in  _p_a_n_n_i_n_g  mode.   Now  point  at  the  center  for  a new< viewport.  You can pan the viewport as often as you like  or need.t  < Panning enables you to move around in a layout.  To move  to< an area whose center is not presently visible, such that you can't point to it, typeC+                            _c_t_r_l-_clB after selecting _p_a_n instead of pointing at the  new  center.f (_I_f  _r_u_n_n_i_n_g _V_M_S, _t_y_p_e _c_t_r_l-_e.) KIC prompts you for an (x,y)                                  8                    ! coordinate which you then type ase#                             _x _ye< The layout is  then  redisplayed  with  the  center  of  the viewport at this point.1  
 Try selecting(                             _z_o_o_mB You will see that the _p_a_n command is deselected,  indicatingJ that  KIC  has  left the _p_a_n_n_i_n_g mode.  You will be asked to< select the magnification of the layout in the coarse  layout< viewport by choosing the viewport's width in lambda. Type in< a width of perhaps 200.  KIC will redisplay the layout  cen-< tered  about  the  same  window center, but with a different< magnification.  The magnifying glass will go  away  and  the< coarse viewport will grow to cover it when the width is suf-< ficiently small and  hence  the  magnification  sufficiently< great.  Try zooming again, this time with a width of say 40.< Notice the magnifying glass  is  gone.   Try  zooming  again< again  with  a  width  of  200.   Zooming out has caused the) coarse viewport to _s_p_l_i_t again.r   Try selecting the commandc*                            _w_i_n_d_o< You will be asked to define an area of interest by  pointing< at  the endpoints of the area's defining diagonal.  Point at< the lower left corner of the geometries in Cntdown and  then< at  the  upper  right.   KIC  will redisplay the layout, and< Cntdown should fit in the coarse  viewport.   The  viewports< are  rectangular;  not square.  Thus, this command will show< you everything inside the area you define, but the area will< usually  be  somewhat  larger than you defined.  Notice thatF the _w_i_n_d_o command remains a different color indicating  thatN KIC is now in a _w_i_n_d_o_w_i_n_g mode.  You can define a new window as often as is necessary.       K _6.  _T_h_e _L_a_y_e_r _A_t_t_r_i_b_u_t_e_s _M_e_n_up  < As an exercise of what you have learned in the previous sec-< tion,  manipulate  Cntdown so that the cell covers the whole< coarse layout viewport. Notice that  geometries  are  either< filled  in  completely,  filled in with a pattern, or simplyP outlined.  Notice also the _p_r_i_o_r_i_t_i_e_s of the layers.   Black< writes  over  red. Thus, black has higher priority than red.< The leftmost layer which  is  yellow  has  lowest  priority.< Priority  is  one  of  several  layer attributes:  priority,< visibility,  name,  color,  minimum  dimensions,  outlining," blinking, fill type, and symbolic.  < There are good reasons for the selection of the layer attri-< butes in the default nMOS process layer menu.  Depletion and< enhancement MOSFETs  can  be  differentiated  at  a  glance.                                  9                    < Polysilicon  gates  are  clear.   MOSFET diffusion paths are< unobstructed.  The metal pattern is clearly defined, but you< can see what is under it easily.  Contacts are also visible:< you see a black hole surrounded by some metal. Overglass  is typically only seen on pads.  < At this point, you may be asking questions such as the  fol-< lowing: What if you don't like this layer menu?  What if you< are laying out for a 10-layer CMOS process? When you  invoke, KIC, it initializes itself with a file named&                             ._K_I_C< This file has the description of the particular  layer  menu< in it.  It is possible to alter the layer menu while runningB KIC and to save these changes in the ._K_I_C file.  Creation of, .KIC files is discussed later in section 15.  < Six layer attributes can be changed while  KIC  is  running:< visibility,  color,  fill  type,  outlining,  blinking,  and) minimum dimensions.  Point to the command *                            _a_t_t_r_i< You will see  the  attribute  menu  displayed  in  the  menu	 viewport.e  9 To change the fill pattern of a particular layer, try thep*                            _f_i_l_l_e< command.  KIC will display a menu of fill  patterns  in  the< area  of  the  magnifying glass.  Point at a pattern that is< different from the current fill pattern for metal (NM),  and< then  point at metal in the layer menu.  You have just rede-< fined the fill pattern for metal.  The effect of the command< won't  be visible until you ask KIC to redisplay by pointing at the*                            _r_d_r_a_w command.  Try it..  0 To change the visibility of layers, point at the*                            _v_i_s_i_b< command.  You will see all of the small boxes in  the  layer< menu  disappear,  and  the  layer names will remain visible.< This means that all layers will now be  invisible  during  a< redisplay.  If a layer name in the layer menu is not immedi-< ately preceded by a small box, then that layer is invisible.< KIC  is  now  asking you to point at EACH layer in the layer< menu that you wish to be visible.  Do so.  As you  point  to< each  layer,  you will see a small box appear immediately to< the left of the layer name indicating that the layer is  now< visible.   Make  all layers except metal visible to see only< transistors. Again, the effect of the command won't be visi-F ble  until you ask KIC to redisplay by pointing at the _r_d_r_a_w command.  < To change the minimum dimensions of a particular layer,  try the                                   10p                    *                            _d_i_m_e_n< command.  KIC will ask you to type the minimum dimensions in lambda.a  L It is possible to set specific layers to  a  _b_l_i_n_k_i_n_g  mode. Point at the*                            _b_l_i_n_k< command.  KIC will ask you to point at  EACH  layer  in  the< layer  viewport  that  you wish to blink.  This command will< not work for all graphics terminals depending on their capa- bility.s  < If you do not want stippled boxes to be outlined, try point-
 ing at the*                            _o_u_t_l_n< command and then redisplay the layout.  When KIC is invoked,< the  outlining  attribute is selected by default.  By havingB KIC _N_O_T outline stippled boxes,  the  time  required  for  a< redisplay  of  the  layout  can be decreased by as much as a< factor of two.  There are also color selection  commands  in< the attribute menu, but they are discussed later in the sec-& tion on ._K_I_C files (Section 15).  3 You may pop back up to the basic menu, by selecting *                            _b_a_s_i_c< The remaining commands in this menu are discussed  later  in  the section on ._K_I_C files.      ! _7.  _S_e_l_e_c_t_i_o_n-  7 For this section, you should be editing the little cell 2                           _P_a_s_s_d_o_w_nN or _P_a_s_s_d_o_w_n._k if you are running KIC under VMS.  All  layers< should  be  visible.   You may edit Passdown by selecting anD instance of it in Cntdown and pointing to _p_u_s_h or by  point-T ing to _e_d_i_t in the basic menu and typing _P_a_s_s_d_o_w_n when asked< for the name of the cell you wish to edit.   Try  both  ways and then read on.e  3 You can _s_e_l_e_c_t an object by pointing atn*                            _s_e_l_e_cN in the basic menu to place KIC in the _s_e_l_e_c_t_i_o_n mode.  Again< the  selection  menu  appears  in the menu viewport, and theF _s_e_l_e_c command is invoked.  To select an object, point  some-< where inside the boundary of the object.  (Note: to select a< polygon or wire, you must point at a vertex.) When an object< is  selected,  its  boundary  is  outlined.   Pointing  at a/ selected object _d_e_s_e_l_e_c_t_s it.l  F Notice that the _l_a_y_e_r command is selected.  With  this  com-h mand  selected,  KIC  is  in a _l_a_y_e_r _s_p_e_c_i_f_i_c _s_e_l_e_c_t_i_o_n mode                                  11l                    < (i.e., you can only select geometries on the  current  layer< in  the  layer  menu.)   Try to select a metal box while the< current layer is not metal.  You will see that nothing  hap-< pens.   Now  change  the  current  layer to metal and try to< select the same metal box.  You will see the box highlighted! as described above.  Now point at +                            _l_a_y_e_r.aF You will see that the  _l_a_y_e_r  command  is  turned-off  whichh removes  KIC  from  the  _l_a_y_e_r _s_p_e_c_i_f_i_c _s_e_l_e_c_t_i_o_n mode.  Now< point at any object, and you will see any deselected  object< selected,  and  any selected object deselected.  Notice that< if you point at an area that is common to several boxes, all< of  these  boxes  will be selected or deselected.  Instances< are always selected when you point at them regardless of the mode of selection.  N You can easily see that pointing when KIC  is  in  _s_e_l_e_c_t_i_o_n< mode  has  a  sort  of toggling effect. You can have a large< number  of  objects  selected  at  any  time;  however,  the< highlighting  of  selected objects can severely increase the time required for a redisplay.  < There are several operations you  can  perform  on  selected< objects.  Each of these commands can be "undone" by pointing at(                             _u_n_d_o< immediately after invocation of the respective command.  TheD _u_n_d_o  command is also its own inverse (i.e., you may undo an _u_n_d_o command.)   Pointing toe*                            _d_e_l_e_t< causes the selected objects to be erased and their  descrip-< tions  deleted from the cell.  Try deleting a selected metal box.  Try to undo the deletion.h  : To change the layer of all selected geometry, point to the*                            _c_h_l_y_r< command.  You will be asked to point to  the  new  layer  to< which  all selected objects (excluding instances, of course)D will be changed.  Try it and then point to _u_n_d_o to undo  the change.   < Selection can be tricky.  Play with it until  you  are  com-< fortable in using it.  Remember to deselect selected objects< after you are done  invoking  selection  commands  on  them.N Commands such as _d_e_l_e_t and _m_o_v_e apply to all select objects,< and therefore if you forget to deselect objects,  you  might  easily destroy your layout.  The*                            _d_e_s_e_l< command deselects  all  selected  objects.   One  convenientF habit to learn is to invoke the _d_e_s_e_l command before return- ing to the basic menu.                                  12l                     There is also the command(                             _a_r_e_a< that enables you  to  select  all  objects  (geometries  and< instances)  whose  bounding  box intersects an area that youV define.  This command also has a _l_a_y_e_r _s_p_e_c_i_f_i_c mode depend-P ing on whether the _l_a_y_e_r command is invoked.  With the _l_a_y_e_r< command active, try selecting all the metal boxes in a givenF area.   Now  deselect  these  boxes by pointing at the _d_e_s_e_lh command.  Remove KIC from the _l_a_y_e_r _s_p_e_c_i_f_i_c _s_e_l_e_c_t_i_o_n  modeF by deselecting the _l_a_y_e_r command, and perform an area selec-< tion on this same area.  You will see that  all  objects  in< this  area  are  selected.  This command is useful for quick8 deletion of many objects.  Try it and undo the deletion.  < Thus there are four selection modes in KIC:  layer  specific< point  select,  layer  specific  area  select,  global pointF select (with the _l_a_y_e_r command turned-off), and  the  global< area  select.   Layer  specific  point selection will select< geometries on the current layer and  will  select  instances< only  if you point directly at them (i.e., if you point at a< geometry on the current layer that is on top of an instance,< the  geometry  will  be selected and the instance will not).< Layer specific area selection will select all geometries  on< the current layer in an area that you identify.  As with the< layer specific point selection, instances will  be  selected< by  a  layer  specific  area  selection  only if the area of< interest does not contain any geometry on the current layer.< Global  area and point selection will select everything that< you identify.  If you do not understand these commands,  you. should practice until you do and then read on.  < It is also possible to copy  the  selected  objects.   Using< area  or point selection, select several objects on at least two layers.  Now point to thet(                             _c_o_p_yX command.  You will be asked to point to  a  _r_e_f_e_r_e_n_c_e  _p_o_i_n_t< and  then  to  a  point  where the reference point should beL _c_o_p_i_e_d _t_o.  Try it.  You will see all the  selected  objectsD copied  exactly,  and  the  _c_o_p_y  command will remain active9 (i.e., _c_o_p_y is a _m_o_d_e).  Now point to the                                _0, command, and you will see it disappear and a#                              _9_0 < command appear in its place.  You  have  just  told  KIC  to< rotate  the selected objects 90 degrees around the reference< point (the same point which you defined for the  first  copy< operation)  before  the  objects are copied.  Point again in< the layout viewport, and you will see the  selected  objects< copied to this point with a 90 degree rotation.  Point again8 at the _9_0 command, and you will see it replaced by a%                             _1_8_0 < command.  What do you guess this will do?   Point  again  in< the  layout  viewport  to  see  if your guess is right.  You                                  13n                    < should see the selected objects copied to this point with  aB 180  degree rotation.  Now point at the _1_8_0 command, and you will see it replaced by am%                             _2_7_0a> command.  Point again at this, and you will see the  _0  com- mand return.  Now point at the#                              _m_xe< command.  You have just told  KIC  to  mirror  the  selected< objects  in  the  x-direction before the objects are copied.< Point again in the layout viewport, and  you  will  see  the< selected  objects  copied  to this point and mirrored in the x-direction.  The #                              _m_y < command allows you to mirror in the  y-direction.   Try  it.D The  _c_o_p_y  command  is indeed very powerful and confusing to< the novice user.  Play with  it  until  it  is  comfortable.+ Also, try to undo a _c_o_p_y operation.   6 Once you have learned how to copy geometries, point to(                             _m_o_v_eX You will be asked to point to a _r_e_f_e_r_e_n_c_e _p_o_i_n_t and then  toF a  point  where  the reference point should _m_a_p _t_o.  Try it.< You will see that the selected objects will  be  moved  with< whatever  rotation and mirroring transformation is currently< defined.  Thus it is possible,  for  example,  to  move  and< rotate  a box with the same command.  Note that the selected< objects remain selected, so you can point  again  and  againL until they are positioned just right (i.e., _m_o_v_e is a _m_o_d_e).  < There are two more selection commands that you should learn; thee*                            _s_t_b_o_x< command that allows you to stretch all selected  boxes,  and the *                            _s_t_p_t_h< command that allows you to  stretch  any  selected  wire  or< polygon.   You will learn these commands after you learn how& to create a wire and polygon with KIC.      K _8.  _T_h_e _K_I_C _L_a_y_o_u_t _G_e_o_m_e_t_r_i_e_s   < There are several types of geometries in KIC.  A short  dis- cussion of each follows.       _8._1.  _B_o_x_e_s   < The box or rectangle is the most frequently used type of KIC< geometry.  KIC will not let you create a box whose length or< width is less than the minimum dimensions allowed on a given                                  14                     < mask  layer.  Boxes oriented at non-Manhattan angles must be created as polygons or wires.e      " _8._2.  _P_o_l_y_g_o_n_s  < You can't  create  a  polygon  with  a  hole  in  it  (self-< intersecting),  unless  you  define it with wires.  KIC will< not allow you to create a polygon with more  than  200  ver-< tices.   A polygon is selected by pointing to any one of its< vertices; you will probably find the magnifying glass to  be very useful for this purpose.t       _8._3.  _W_i_r_e_s_  < A wire is simply a path whose width must not  be  less  than< the  minimum  dimensions for that layer.  You can change the< wire width of the current  layer  (it  defaults  to  minimum# dimensions) by invoking the commandh*                            _w_i_d_t_h< You will be asked by KIC to point to two manhattan, colinear< points  to  show the new wire width.  KIC will not allow you< to change the wire width to a value that is  less  than  the< minimum  dimension for that layer.  The command for changing< the minimum dimension of a layer is described in the section5 that discusses the Layer Attributes Menu (Section 6).   < Wires can be VERY useful.   Please  don't  use  only  boxes.< Wires  can  save  you  layout  time.   A wire is selected by< pointing at one of its reference points.  There is no  limit< to  the  size  (i.e.,  number of reference points) of a wire that you can create with KIC.o       _8._4.  _L_a_b_e_l_s  < Labels have two uses.  The first is as a note.   The  secondX is   as   a  node  label  for  the  _c_i_f_p_l_o_t  -_X  and  _M_E_X_T_R_A< transistor-level schematic extraction programs discussed  in< Fitzpatrick  [1981].   A  label is selected by pointing near< the lower left corner of its  first  character;  again,  you< will  probably  find  the magnifying glass to be very useful for this purpose.a           9  ! 9                             15h                     _8._5.  _L_i_n_e_se  < You can create a line by changing the wire width to zero and creating a wire.       _8._6.  _F_l_a_s_h_e_s   < The diameter of a flash or circle may not be less  than  the< minimum  dimension for that layer. A flash is represented by< KIC as a rounded polygon.  A round flash is  selected  as  a< polygon  by  pointing  to one of the vertices.  You may only. create a flash while in the basic menu of KIC.  < You can control the number of sides to this rounded  polygonF by going into the attributes menu via the _a_t_t_r_i command, and invoking the*                            _s_i_d_e_s< command.  KIC will then ask you to type the number of  sides< to  be  used  when  creating a round flash, arc, or doughnut< (discussed below).  The default  is  12,  and  changing  the< value  of this parameter does not change the number of sides< of any previously created round flash.  Also, KIC  will  ask< you  whether  or  not  the  vertices  of the rounded polygon< should be clipped to the nearest grid point; the vertices of< round polygons will not be clipped to the nearest grid point< by default.  This process of clipping the vertices  to  grid< points can produce an oddly shaped polygon for a round flash with small radius.       _8._7.  _A_r_c_s  < An arc might be thought of as a wire whose width may not  be< less  than  the  minimum  dimension for that layer, which is< bent around a central point.  KIC represents  an  arc  as  a< single  polygon.   Since  you may not have self-intersecting< polygons, KIC will not allow you to create an  arc  of  more< than 360 degrees.  An arc is selected as a polygon by point-< ing to one of the vertices.  You  may  only  create  an  arc while in the basic menu of KIC.t      % _8._8.  _D_o_u_g_h_n_u_t_s   < A doughnut is a circle with a hole in it.  KIC represents  a< doughnut as two overlapping arcs.  A doughnut is selected by< selecting  both  arcs  (or  polygons)  that   comprise   the< doughnut.  You may only create a doughnut while in the basic menu of KIC.                                  16                     / _9.  _C_r_e_a_t_i_n_g _a _C_e_l_l   % While in the basic menu, point to theu%                             _d_i_r < command.  In the magnifying glass you will see a list of all( files in your current working directory.   Now point to(                             _e_d_i_t< in the basic menu.  Be sure to read what is  in  the  prompt< viewport  now.   Because you may have modified Passdown (you< did some moving and deleting), KIC will ask you if you  wish@ to  save the changes.  Answer no by typing _n_o.  Finally, you< will be prompted for a cell name.  Type any valid file  name< that  does  not exist in your current directory, for example< Foo.k, and then the return key.  KIC will tell you that  you< are  editing  a new cell after it displays an empty viewport< for you.  Editing a cell that has never been  edited  before> creates  that  cell.   Using  names that end in ._k is a nice< convention that allows you to readily recognize  a  file  as storing a KIC cell.g  < Zoom and pan until the coarse  layout  viewport's  width  is< small enough for the magnifying glass to go away and and the center is the origin.f  < We are now going to create layout geometries.  Any time  you< create  a  geometry,  you  are  creating it on the currently* selected layer in the layer menu viewport.   Point to*                            _b_o_x_e_s< Then point inside the coarse layout viewport to the two end-< points of the diagonal of the box you wish to create.  A box/ is displayed on the current layer.  Pointing tod(                             _u_n_d_o< at this time will erase the box and delete it from the cell. _T_o  _u_n_d_o  _t_h_e _c_r_e_a_t_i_o_n _o_f _a _g_e_o_m_e_t_r_y, _y_o_u _m_u_s_t _p_o_i_n_t _t_o _u_n_d_oY _b_e_f_o_r_e _p_o_i_n_t_i_n_g _a_t _a_n_y_t_h_i_n_g _e_l_s_e.   < Now, create another box on another layer  so  that  the  box1 overlaps slightly the box you previously created.   N Notice also that the _b_o_x_e_s command is a _m_o_d_e.  The followingF sequence  is  valid.   Point  to _b_o_x_e_s, point to poly layer,< create three boxes in a row, undo the  last  one,  point  to< diffusion  layer,  create  a box, etc.  For all of the above? sequence, the _b_o_x_e_s command was pointed at only once.y  < You will now make a box with a width of  exactly  13  lambda< and height of 11 lambda in order to introduce another useful< command.  Point to the first endpoint  of  the  box.  Notice< what (x,y) is by looking in the parameter viewport after the                                  17u                    < point has been selected.  Now find (x+13,y+11) by repeatedly< moving the cursor around and pressing the blue stylus button$ if you are using a tablet, else type+                            _c_t_r_l-_ws< (w is for where) and KIC will ask you to point.   Each  timeL you  invoke  this  _w_h_e_r_e _a_m _i command, KIC updates the (x,y)< display, but does NOT assume you are ready to  point.   When< the  (x,y)  display  shows  that you are ready to finish the< box, press the yellow button if you are using a tablet, oth-1 erwise press the space bar.  The box will appear.n  	 Note thatl+                            _c_t_r_l-_cl< could have been used to do this.  After you pointed  to  theF first endpoint, say it was (3,3), you would type _c_t_r_l-_c fol-< lowed by the (x,y) coordinate of the next endpoint, which in! this case would be _1_6 _1_4..   To create a wire, point to*                            _w_i_r_e_s< Then point to its reference points:  pointing  to  the  last< reference  point  twice  so  the  program knows you are doneD creating the wire.  When you point to the _u_n_d_o command while< entering  a  wire, the most recently entered reference point< will be deleted from the path.  As  described  earlier,  you< can  set  the  width  of the wire being created by using theF _w_i_d_t_h command.  A wire is displayed in the  color  and  fill pattern of the current layer.   < KIC will constrain the  orientation  of  wire  segments  and< polygon  edges  to multiples of 45 degrees by default.  Thus< at small magnification, you can still easily make horizontalH and  vertical  segments and edges.  To disable _4_5 _l_o_c_k mode, point at the menu selection %                             _4_5_s N To enable the _4_5 _l_o_c_k mode again, point at the  _4_5_s  command again.   To create a polygon, point toy*                            _p_o_l_y_g< Then point to its reference points or vertices:  pointing to< the  last vertex twice so the program knows you are finishedD creating the polygon.  When you point to  the  _u_n_d_o  command< while  entering  a polygon, the most recently entered vertex< is deleted from the path  of  the  polygon.   A  polygon  is< displayed  in  the  color  and  fill  pattern of the current layer.  < To create a round flash, you must  be  in  the  basic  menu. Point to the*                            _f_l_a_s_h< command.  Then point to the center of the flash.   You  will< see  a small diamond displayed to identify the center of the                                  18a                    < flash.  Finally point to the perimeter so as to  define  the< radius  of  the  flash.   A  round flash is displayed in the, color and fill pattern of the current layer.  < To create a doughnut, you must again be in the  basic  menu. Point to the*                            _d_o_n_u_t< command.  Then point to the center  of  the  doughnut.   You< will  see  a small diamond displayed to identify the center.< Next point to identify the inner radius and outer radius  of< the doughnut.  A doughnut is displayed in the color and fill pattern of the current layer.r  < To create an arc, you must also be in the basic menu.  Point to the%                             _a_r_co< command.  Then point to the center of the arc.  You will see< a  small  diamond  displayed  to  identify the center.  Next< point to identify the inner radius and outer radius  of  the< arc.   Finally,  point twice to identify the path of the arc< in a clockwise direction.  An arc is displayed in the  color& and fill pattern of the current layer.   To create a label, point to them*                            _l_a_b_e_l< command.  KIC will ask you to type the label that  you  want< created  (no spaces or nonprintable characters are allowed). Type>                      _T_h_i_s__i_s__a__l_a_b_e_l .< KIC now asks you to point to where you want the  label  with< respect to the lower left hand corner.  After pointing once,< you will see that KIC ask you again to point  to  where  youF want  the label.  Thus, the _l_a_b_e_l command is a mode, and you< may place as many appearances of  that  same  label  as  you need.o  < You may notice that the new labels are not displayed in  the< large  coarse  viewport.  KIC has decided that the window is< sufficiently large that the labels will  obstruct  the  view< mask  detail.   Therefore,  labels are not displayed in this< viewport.  If  you  would  like  to  have  labels  displayed< regardless  of  the  size  of the coarse window, go into the  attributes menu and point to the*                            _l_a_b_e_l< command.  You will immediately  see  that  this  command  isF quite  different  from the _l_a_b_e_l command that you just used.< KIC will tell you that labels will always be displayed.  NowF point  to  the  _r_d_r_a_w  command  to see the labels displayed.F Point again at the _l_a_b_e_l command in the attributes menu, and< KIC will tell you that labels will not be displayed in large windows.   9  ! 9                             19                     7 _1_0.  _S_t_r_e_t_c_h _C_o_m_m_a_n_d_se  < Now that you have created several geometries,  go  into  theF selection  menu  via  the  _s_e_l_e_c  command in the basic menu.< After selecting several boxes using point  selection,  point to the*                            _s_t_b_o_x command and note that the (                             _l_e_f_t and the_%                             _t_o_p < commands are active.  KIC will ask you to point to a  refer-J ence  point.   Point  to the _t_o_p - _l_e_f_t corner of one of the< selected boxes.  Now KIC is asking you to point to where the< selected  boxes  should be stretched.  Point 3 lambda to the< left and 6 lambda below the reference point.  You  will  see< all  selected  boxes  stretched  3  lambda to the left and 6< lambda downward.  If you had a polygon or a  wire  selected,9 the _s_t_b_o_x command would have no effect on them.  D Now point at the _l_e_f_t command, and you will see it  replaced by the*                            _r_i_g_h_tF command.  Point at the _r_i_g_h_t command and  you  will  see  itJ replaced  again by the _l_e_f_t command.  Likewise, the _t_o_p com- mand becomes the*                            _b_o_t_t_m< command.  Try stretching the selected  boxes  while  in  theZ _l_e_f_t  -  _b_o_t_t_o_m  stretching  mode, as well as in the _r_i_g_h_t -X _b_o_t_t_o_m and the _r_i_g_h_t - _t_o_p stretching modes.  Also,  try  to< undo  each  of  the stretch operations, and then try to undo the _u_n_d_o command.u  7 Select at least one wire and polygon.  Now point to the *                            _s_t_p_t_h< command (stretch path command).  KIC will ask you  to  point< to  a  vertex  of one of the selected polygons or wires.  Do< this.  Now KIC is asking you to point to identify where this< vertex  should  be  stretched.  When you point, you will see< that one vertex stretched to exactly where you pointed.  Try< this  command  several  times  with both wires and polygons.N Try to undo a _s_t_p_t_h command with the _u_n_d_o command,  and  the undo the _u_n_d_o command.      , _1_1.  _S_a_v_i_n_g _a _C_e_l_l  7 When you have edited for a while, you should select thed(                             _s_a_v_e< command which is  in  the  basic,  instance,  and  selection< menus.   KIC  will  try to save your cell for you and inform< you whether or not it did.  For example, it will fail if the                                  20                     < file  or  directory in which the cell is to be stored is not< writable by you.  If you don't trust it, try aborting KIC by pointing at the menu selection*                            _a_b_o_r_t< in the basic menu and invoking KIC again  with  one  of  the< cells  you  saved.   You  will see it come up on the screen.< You can also look at the file your cell is stored in with  a< text  editor:   it  is  just a layout file stored in the CIF< format with a few user extension commands  added.   The  CIF format is given in Hon [1980].      h _1_2.  _R_e_f_l_e_c_t_i_o_n _o_n _w_h_a_t _y_o_u _h_a_v_e _l_e_a_r_n_e_d  < You should now be able to create and edit cells.   Design  a< W/L=4 depletion load and save it and layout a W/L=1 enhance-< ment transistor and save it.  We will place these two  cells< together  later  to  make a k=4 inverter.  If you don't know< how to do this, lay out something even if it is just a  lit-; tle block diagram made of boxes, 0-width wires, and labels._      $ _1_3.  _I_n_s_t_a_n_c_e_s   Point to*                            _i_n_s_t_a< in the basic menu.  At this time, you should  be  viewing  aB new command menu: _t_h_e _i_n_s_t_a_n_c_e _m_e_n_u.  ; Instances are best introduced via an example.  Point to the_-                            _m_a_s_t_e_r < command and you will be prompted for the name of the  master< cell  you  are  creating  an  instance  of.  Let's create an< instance of our old friend the Passdown cell, so type  Pass-< down  (or type Passdown.k if you are running KIC under VMS).< Now, point at where in one of the layout viewports you would< like  to  see  a Passdown cell.  The Passdown cell should be* displayed.  If you don't like it, point to(                             _u_n_d_o and it will vanish.t  < When you create an instance, the origin of the  master  cell< is  mapped  to where you point to.  This point is also where< the diamond-shaped instance marker appears when the cell  is< selected,  as  mentioned  earlier.  So, when you create your< own cells to be used as masters, put them close to the  ori-< gin.   One convention is to put the lower left corner of the< cell at the origin.  Another is to center it on the  origin.< When  you  are  just sketching, don't worry about this. When! the layout is stable, you may usen(                             _a_r_e_a                                  21A                    + to select everything in the layout, and the (                             _m_o_v_e< command to drag the center of the layout to  the  origin  or	 wherever.t   Point at*                            _b_a_s_i_c7 You're back on familiar ground.  Point to the selection *                            _i_n_s_t_a< again.  This time, you are  going  to  create  an  array  of< cells.   Notice  that  the  program assumes you are going to< create another instance of Passdown.  If  you  weren't,  you could point to-                            _m_a_s_t_e_ra< again to inform KIC of the  new  master  you'll  be  working with.  Point toe!                              #_x ( Type some small number like 2.  Point to!                              #_yh< Type some small number.  Now point to where in  one  of  the< layout  viewports  you would like to see a #x by #y array of) Passdown cells.  The array should appear.   N You have created a two-level _h_i_e_r_a_r_c_h_y.  At the root is  theH name of the cell you're editing.  Both _l_e_a_v_e_s of the hierar-< chy are arrays of Passdown cells.  One of them is just  a  1 by 1 array.d  < This description of the tree is incomplete.  Associated withX each instance array is a _t_r_a_n_s_f_o_r_m_a_t_i_o_n.  When you create anR instance, you define the _t_r_a_n_s_l_a_t_i_o_n part of  the  transform; when you point at where you want the instance to be placed.   < You can define other parts of the transformation also.   YouZ can  _m_i_r_r_o_r  _a_n_d  _r_o_t_a_t_e  instance arrays by pointing at the< appropriate selections in the instance creation menu.   Play/ with this capability.  For example, pointing ata#                              _m_xe< once adds mirroring about the y axis to the  transformation.9 If you suddenly decide you don't want to add it, point to #                              _m_x @ once more.  This deselects the _m_x transform.  Pointing at it< again later will select it again, etc.  You can also control/ the spacing between instances in an array usinge#                              _d_xl and #                              _d_yo< commands.  dx and dy  can  be  negative  to  cause  adjacent< instances to overlap.  positive values cause instances to be+ separated, and there default value is zero.i   _R_e_c_u_r_s_i_o_n (_a _c_e_l_l _r_e_f_e_r_e_n_c_i_n_g _i_t_s_e_l_f) _i_s _p_r_o_h_i_b_i_t_e_d, because< it  is  not meaningful here:  there is no basis to terminate                                  22                     < the recursion.  So, don't try creating an instance of  Foo.k within Foo.k for example.r  < How do instances interact with selection?  You can point  atN an  instance  when you are in _s_e_l_e_c_t_i_o_n mode and the program< will highlight the instance so you can operate on it just as< if  it was a simple geometry:  moving it or deleting it.  We< did this at the beginning of  the  tutorial  when  you  were< learning  about  contexts  and  traversal.   You selected an% instance of Passdown and then invoked (                             _p_u_s_h  < Note that the instance command menu contains a small  subset< of  the  commands  in the selection menu.  This provides the< user the capability of easily moving or  deleting  instances2 without having to leave the instance command menu.  5 Also, note that there is a new selection command, the *                            _f_l_a_t_n< command  for  flattening  instances.   Select  one  of   the< instances that you have just created.  Again, you should see< the bounding box of the instance highlighted.  Now point  atF the  _f_l_a_t_n menu command, and you should see the bounding box< of the  instance  erased  and  replaced  by  the  geometries< (boxes,  wires,  and  polygons)  that are defined within the cell.a  < Remember the depletion load and enhancement  transistor  youN created  a  while  ago?   Create a cell called _I_n_v_e_r_t_e_r_4 and< place the  load  right  above  the  pulldown.   Connect  the< pulldown's drain to the load's source with a diffusion wire.< Maybe extend the pulldown's gate  and  take  the  inverter's< output off the load's source.  You now have an inverter that! you can use as a logic gate cell.       1 _1_4.  _P_r_o_p_e_r_t_y _L_i_s_t_sa  < You can assign a list of properties to any  object  in  KIC,< and  these  properties  are  preserved  with  the respective< geometries in the KIC cell.  A property in KIC  consists  of< an  identifying  integer  and  a character string extension.< These properties can be useful for marking  and  identifying" geometries or nodes in the layout.  7 While in the basic command menu, begin editing the celln*                            _P_a_d_I_nD or _P_a_d_I_n._k if KIC is running under VMS, and point to the*                            _p_r_p_t_y< command,  and  you  will  see  the  property  command   menu< displayed.   Note  that  the selection commands are present;< property assignment in KIC is performed on objects which are                                  23                     < selected.   Now  select  a few geometries with the selection commands, and then point to then*                            _a_d_p_r_p< command to add a property  to  the  property  lists  of  the< selected  objects.   KIC  will first prompt you for the pro-< perty number; type, for example, the number 123.   KIC  will< next ask you for the property string; type, for example, the sentence;                       _T_h_i_s _i_s _a _t_e_s_t.u   Now point to the(                             _s_h_o_w< command to  display  the  property  lists  of  all  selected< objects.   KIC will display the properties of each object in< the magnifying glass.  The object whose  list  is  currently> displayed  is  identified  by  KIC  drawing an _X through the< object in the layout viewport.  You will see  that  each  of< the  items which you selected has a property 123 with a pro-2 perty string _T_h_i_s _i_s _a _t_e_s_t.   Finally, point to thea*                            _r_m_p_r_p< command to remove a property type from the property lists of< the selected objects.  KIC will prompt you for the number of< the property to be deleted.  Type the number 123  again  andD point to the _s_h_o_w command.  You will see that the properties1 which you added previously have now been removed.y       _1_5.  _R_o_u_t_i_n_g  < The KIC magnifying glass is especially useful  for  routing.< In  fact,  without the magnifying glass, it is almost opera- tionally impossible to route.u  < We will assume you are running KIC on a test cell  and  have< created a box that is to represent a chip around its origin.F Now place an instance of the bonding pad _P_a_d_I_n somewhere  on< the  perimeter  of  your chip.  Create a box near the origin< to be the dummy terminal that you will route out to the pad.< Here  is one way that you can do the routing.  We assume you have KIC in _4_5_s mode.     C     - Get a detail of our dummy terminal with the magnifying glass.r  L     - Select the wire command and point in the magnifying glass to the first3     reference point:  it should touch the terminal.i  K     - Make the wire out of three segments:  a vertical, a horizontal, and a_K     vertical.  It should terminate on the pad's terminal.  If the wire does_I     not properly align itself to the pad's terminal, the stretch commandsu                                  24i                    *     can be used to complete the alignment.  L     - If, further along in the layout procedure, you need to make more spaceM     available in the area of this wire for additional routing, you can simplyhM     do this (assuming that the space exists) by using the stretch commands top,     move the horizontal section of the wire.    2 You might also try routing using 45 degree angles.      * _1_6.  _T_h_e ._K_I_C _F_i_l_e   Point to the*                            _a_t_t_r_i< command in the basic menu.  Again  you  see  the  attributes9 menu displayed in the command viewport.  Now point to the *                            _u_p_d_a_t< command.  You have just  created  a  file  in  your  currentT directory  called ._K_I_C if you are running UNIX or _L_A_Y_E_R_S._K_I_C< if you are running VMS  which  contains  the  current  layer2 attributes (e.g., name, color, fill pattern, etc.)  F Return to the basic menu with the _b_a_s_i_c  command  and  leave KIC by selecting the*                            _a_b_o_r_t< command.  You will return to the UNIX  or  VMS  environment.< Now  edit  the file .KIC with your favorite text editor. For' example, to use _v_i under UNIX, type +                           _v_i ._K_I_Cp  < The .KIC file has a slightly  rigid,  but  readable  format.< KIC  will not run correctly if your .KIC file doesn't adhere to the format.  < If your are running under UNIX, notice that the  first  line looks something like _P_a_t_h? (. ~_c_a_d/_l_i_b/_K_i_c_L_i_b_r_a_r_y/_n_m_o_s ~_c_a_d/_l_i_b/_K_i_c_L_i_b_r_a_r_y/_f_o_n_t_s/_b_o_l_d)a< When you tell KIC a cell name, if the name isn't a full UNIX< path  name, KIC will search the list of directories enclosed< in parentheses left to right.  The first directory name is a5 dot (.) which means to search your current directory.o  < If your are running under VMS,  the  first  line  will  look something likem       _P_a_t_h? ( .  ~._K_I_C._C_E_L_L_S  _D_M_A_1:[_C_A_D._L_I_B._K_I_C_L_I_B] )c< If the first directory name is a dot  (.)  KIC  will  search< your  current  directory  as described above for UNIX.  If a< directory name begins with a tilda (~) KIC will  append  the< directory  name  to  the  name of the user's home directory.< For example, if the above VMS search path appeared in a .KIC< file  that was being used by a user whose home directory was                                  25                     P _D_M_A_0:[_G_I_L_E_S_B], then the second directory in the  VMS  searchK path would be _D_M_A_0:[_G_I_L_E_S_B._K_I_C._C_E_L_L_S] .h  4 The following is a good generalization of this line:  b               _P_a_t_h? (. _L_i_b_r_a_r_y_C_e_l_l_D_i_r_e_c_t_o_r_i_e_s)  < where LibraryCellDirectories is a list  of  directory  names< with  useful  cells in them.  A directory in this list might< be owned by your partner  in  a  team  design  effort.  Your< current  directory  will be searched first, so any cells youB create using the _s_a_v_e command will always be placed there.  < Next in the file, you will see the description of the  layer' menu. Each layer description looks like          LayerName? NIl     Color'sName? yellow      RGB? 255 255 0
     Filled? y_     (Invisible)a     (Blink)S     MinDimensions? 2     Symbolic? n     X where the _B_l_i_n_k and _I_n_v_i_s_i_b_l_e lines are shown in parenthesis< to  indicate  that they are optional.  There is one descrip-< tion like this for each layer. If you want to add  a  layer,< just  add  another  description.   You  may also add another7 layer while running KIC.  This will be discussed later.i  < The layer name may only be one to four characters long.  The< first  character usually indicates the technology:  N is for< nMOS.  The rest indicates the  mask  type:   I  is  for  ion implant.  < The color name isn't interpreted by KIC:  it just serves  to< document what the color described by the three numbers afterB _R_G_B?  really is.  The first number gives  the  intensity  of< red  in the color, the second gives the green intensity, and< the third gives the blue intensity.  So,  0  0  0  indicates< black:  darkness.  255 255 255 indicates white:  full inten-< sity.  140 140 140 would  be  a  gray.   No  number  can  be< greater than 255 or less than 0.  Here are some good colors.         gray 140 140 140     cyan 0 255 255     pink 255 0 200     orange 255 170 0     red 255 60 60_                                  261                         green 100 255 100c     blue 50 50 250     violet 195 0 235     scarlet 195 0 0     J If _y follows _F_i_l_l_e_d?  for a  particular  layer  description,> geometries  on  the  layer  will be filled in.  If _n followsH _F_i_l_l_e_d?  geometries on the layer will be outlined only.   Ifv a  sequence  of  _e_i_g_h_t  _h_e_x_a_d_e_c_i_m_a_l  _n_u_m_b_e_r_s follows _F_i_l_l_e_d?< geometries on the layer will be filled  in  with  a  pattern< defined  by  the sequence.  The pattern is a bit matrix with< eight rows and eight columns.  The first hex number  defines< the first row, the second hex number defines the second row,H etc.  The corresponding bit matrix for the sequence _0_8 _0_4 _0_2% _0_1 _8_0 _4_0 _2_0 _1_0 isr  
             *i               *e                 *                    *.     *e       *t	         *g           *b  2 where * indicates _1 and a blank indicates _0 or       00001000     00000100     00000010     00000001     10000000     01000000     00100000     00010000  ) The pattern is one with diagonal stripes.e  F The _B_l_i_n_k line is optional and will set  the  layer  to  theL _b_l_i_n_k_i_n_g  mode  when  KIC  is invoked.  This only applies to. graphics terminals that allow blinking layers.  V The number following _M_i_n_D_i_m_e_n_s_i_o_n_s?  sets the minimum dimen-! sions of geometries on the layer.o  N If a _y follows _S_y_m_b_o_l_i_c?   the  layer  will  be  a  symbolic> layer.   If  a  _n  follows,  the layer will be a fabrication2 layer.  The differences will be discussed shortly.  < Finally, how is the priority attribute of a  layer  defined?< The first layer description in the .KIC file is for the bot-< tom layer or the  layer  with  least  priority,  the  second                                  27i                    < description  is for the second to the bottom layer, ..., and< the last is for the top layer or the layer with most  prior- ity.  < Now invoke KIC again and begin editing a new cell.   To  add< another layer to the layer menu while running KIC, enter the  attributes menu and point to the*                            _a_d_l_y_r< command.  KIC will ask you the  number  of  the  new  layer.> Type  one  (_1)  if the new layer is to become the left-most,< least priority layer, and so on.  Next KIC will ask you  for< the  name  of  the new layer.  KIC will then ask you for the< RGB color combination of the new layer.  Enter these  values< by  typing  three  integers  between  0  and  255 inclusive.< Finally KIC will ask you whether the new layer is  symbolic.< You  will  see the old layer menu replaced by a new one that< contains the new layer.  Some of the colors of  the  command< menu  or  magnifying glass grid may change when you use this< command.  KIC uses certain colors from  the  layer  menu  to< display  these items, and they may therefore change when you0 change the layer menu.  This is discussed below.  < You may be wondering what will happen if you fill the exist-< ing  layer  menu with new layers.  Try it.  You will see KIC< erase the screen and then do a complete redisplay.  KIC will- have dedicated another row to the layer menu.   3 To remove a layer from the layer menu, point to the1*                            _r_m_o_v_e< command.  KIC will ask you to point  to  the  layer  in  the< layer  menu  that  you  want removed.  Try it on some of the< layers that you just created.  You will see  KIC  erase  the< layer  menu  and  replace it with a new one.  Again, you may< notice that the colors of the command  menu  and  magnifying glass grid have changed.  < To define the colors that KIC will use  for  displaying  the command menu, point to the(                             _m_e_n_u< command.  KIC will first ask you to point to  the  color  of< menu  text.  Point to one of the layers in the layer menu to< identify the color.  Next KIC will ask you to point  to  the< color of selected menu text (the color of the text of a menu< command after you point to that command).  Again, point to a< layer in the layer menu to identify the color.  Finally, KIC< will ask you to point to the color for command  highlighting< (the  color  that surrounds the text of a menu command after< you point to that command).  You will then see  the  command' menu redisplayed with these new colors.   < Now suppose that you want to change the color of the grid in# the magnifying glass.  Point to theo(                             _g_r_i_d                                  28d                    < command.  You will see that this command  is  slightly  moreD complicated  than the _g_r_i_d command in the basic menu.  As in< the basic menu, KIC will ask you for the  number  of  lambda< between  grid lines.  Type some small positive integer.  KIC< will then ask you whether the grid should be displayed aboveF mask  geometry.  Type _y_e_s or _n_o.  KIC will ask you whether a< grid should be displayed in the coarse viewport of  a  split< screen  display  if  the  separation of grid lines is suffi-F ciently large. Type _y_e_s or _n_o.  KIC will ask you to point to< the color of fine grid lines.  Point to one of the layers in< the layer menu to identify the color.  KIC will finally  ask< you  to  point  to  the  color of coarse grid lines.  Again,< point to one of the layers in the layer menu to identify the< color.   You  will see the magnifying glass redrawn with the# grid lines having these new colors.i  < It is possible to change the color of a layer while  running< KIC.  These color commands operate on the currently selected< layer.  You can decrease the intensity of red by pointing at!                              -_ra< Likewise, you can increase the intensity of red by  pointing at!                              +_re< There are similar commands for green  and  blue.   When  you# have the color just right, point toh%                             _r_g_b / The numbers for the color will be shown to you.i  < If you would like to set the background color of KIC,  point to the*                            _b_g_r_n_dN command.  Now the +_r, -_r, +_g, -_g, +_b, -_b, and  _r_g_b  commands< apply  exclusively  to  the background color.  When you have< found the color that is most appealing, point again  to  theP _b_g_r_n_d  command  to deselect it.  Now the +_r, -_r, +_g, -_g, +_b,D -_b, and _r_g_b commands again apply exclusively to the  current layer in the layer menu.  < If you would like to set the highlighting color of KIC  (the< color  that is used to display the coordinate axis, the cur-5 sor, and to highlight selected objects), point to theo*                            _h_l_i_t_eN command.  Now the +_r, -_r, +_g, -_g, +_b, -_b, and  _r_g_b  commands< apply  exclusively to the highlighting color.  When you have< found the color that is best with your new background color,F point  again  to  the _h_l_i_t_e command to deselect it.  Now theN +_r, -_r, +_g,  -_g,  +_b,  -_b,  and  _r_g_b  commands  again  apply3 exclusively to the current layer in the layer menu.o         9  ! 9                             29n                    4 _1_7.  _S_y_m_b_o_l_i_c _L_a_y_o_u_t  < Again, in the .KIC file, you can define layers as being sym-: bolic layers as opposed to plain, old, fabrication layers.  < The layers NL, NDS, NPS, and NMS in the  default  nMOS  .KIC< file  are  symbolic layers.  When you layout a cell, put NDSl rectangles over any diffusion _t_e_r_m_i_n_a_l_s or _c_o_n_n_e_c_t_i_o_n _a_r_e_a_s.R Put NL labels next to them giving their _s_i_g_n_a_l _n_a_m_e_s.  Simi-< larly, use NPS for poly terminals and NMS for  metal  termi- nals.e  P Now, create an instance of your cell with KIC in  _u_n_e_x_p_a_n_d_e_d< mode.   Note  that  all  geometries  and  labels on symbolic< layers are shown along with the outlined  box  labeled  with< the cell's name and its dimensions.  Most of the information< needed in order to use the cell is present,  but  redisplays< are  much  faster  and  the the screen is relatively unclut-< tered, because detailed layout is  hidden  away.   You  just< have to route to the terminals on the right layers such that< routing doesn't break into the outlined box.  Sometimes this< box  is too coarse of a way of showing where it is forbiddenT to route.  You may also want to place symbolic _r_o_u_t_i_n_g _c_h_a_n_-D _n_e_l_s  for  routing  through the cell or a finer picture thanE the outlined box of where it is _f_o_r_b_i_d_d_e_n to route.   N As an example of symbolic layout, edit  the  cell  _S_y_m_b_o_l_i_c_s< which is stored in the KIC nmos library.  This cell consists< of a chain of two nmos  inverters.   Without  expanding  theP cell, you can easily see the forbidden region, or _p_r_o_t_e_c_t_i_o_nF _f_r_a_m_e, for polysilicon and diffusion.  Also, the  input  and. output and power supply terminals are obvious.      1 _1_8.  _K_e_y_b_o_a_r_d _I_n_p_u_to  < By pointing, information is graphically  input.   At  times,/ typing at the keyboard can be more appropriate.c      2 _1_8._1.  _M_e_n_u _C_o_m_m_a_n_d_s  < You may find it painful to have to move the  cursor  out  of< the  layout  viewport  just  to select a command or change a< layer.  So, you can use keyboard input instead of  graphical input for this.o  < You may invoke a menu command by typing its shortest  unique< prefix  which is indicated in the command menu by upper case< letters.  Don't type the return key after typing the prefix.< As  soon  as  you  type the prefix, KIC will color the right                                  30                     < menu selection and any arguments will be asked for.  You may7 tell KIC to forget any previously typed input by typinga%                             _E_S_Ce      W _1_8._2.  _K_e_y_b_o_a_r_d-_S_p_e_c_i_f_i_c _C_o_m_m_a_n_d_so    )     - Abort KIC unconditionally by typingo+                            _c_t_r_l-_a_  )     - You may type a coordinate by typingb+                            _c_t_r_l-_c_O     KIC will prompt you for the coordinate.  If running under VMS, type ctrl-e.   C     - You can change the position of the magnifying glass by typing +                            _c_t_r_l-_fyE     KIC will prompt you for the new position of the magnifying glass.   L     - You can change the position and size of the magnifying glass by typing+                            _c_t_r_l-_g H     KIC will ask you to point to the diagonals of the area that you want     magnified.  2     - You can select a new current layer by typing+                            _c_t_r_l-_ldO     KIC will prompt you for the layer number (layer number one is the left-most +     layer displayed in the layer viewport.)h  .     - You can create a viewport stack with the+                            _c_t_r_l-_n =     command.  This command is described below in more detail.   O     - The orientation of the magnifying glass may be toggled between left-right      and top-bottom by typing+                            _c_t_r_l-_to      If running VMS, type ctrl-v.  #     - You can suspend KIC by typinga+                            _c_t_r_l-_zfF     KIC becomes a suspended job, and your terminal returns to the UNIXI     environment.  This is a convenient way to leave KIC without having toyH     rebuild the database when you want to return.  It is not possible to     suspend a job under VMS.  N     - You can run any system command that does not require user input by usingJ     KIC's shell command.  To do this, you first type an exclamation point.                              !,     Now you type the command to be executed.4     For example, if you are running undir UNIX, type(                             _d_a_t_eQ     You will then see the magnifying glass erased, and the date will be displayedo                                  31                     B     in that viewport.  At the bottom left corner, you see the word(                             _D_o_n_eH     which indicates that the job has completed.  Press the space bar and)     the magnifying glass will be redrawn.e    < The shell command work if you are running under VMS, but you< must  inform  KIC  if you want output to be displayed in theH magnifying glass.  For any VMS command with a /_O_U_T_P_U_T  qual-! ifier, by typing the command withc6                         /_O_U_T_P_U_T=_K_I_C,< output will be displayed in the  magnifying  glass  of  KIC.< For  example, to list a file in the magnifying glass of KIC, you would enter the commandV                ! _T_Y_P_E  /_O_U_T_P_U_T=_K_I_C  _f_i_l_e_n_a_m_eL KIC will then display the contents of _f_i_l_e_n_a_m_e in the magni- fying glass.      1 _1_9.  _O_t_h_e_r _C_o_m_m_a_n_d_se  T The commands _z_o_o_m,  _p_a_n  and  _w_i_n_d_o  can  alter  the  coarse, viewport width and center.  When the command(                             _l_a_s_t< is  selected,  KIC  displays  the  layout  with  the  coarse< viewport  width  and  center  in  use  before they were lastD changed.  When the  _l_a_s_t  command  is  selected  again,  KIC< returns to the newer coarse viewport width and center (i.e.,! _l_a_s_t is its own inverse).r  < It is also possible in KIC to create a stack of up  to  nine/ viewports and access them randomly by using the (                             _l_a_s_tF command.  When you type _c_t_r_l-_n, KIC will prompt you to  name< the  present viewport and will assign that name to the givenD viewport width and center.  When you next  select  the  _l_a_s_t< menu  command,  KIC  will  display a menu of viewport names,F using those names that were assigned via the _c_t_r_l-_n keyboard< command.  The user simply points at the name of the viewport< that he wants to be displayed, and KIC will return  to  that viewport width and center.  > Suppose you have edited a cell named _a and wish to save  the! changes in a cell named _b.  Thea*                            _w_r_i_t_e command will do it.   < As you recall, the name of an instance is  displayed  insideH the bounding box of the cell when KIC is not in _e_x_p_a_n_d mode.< If you do not want these labels displayed in large  windows,
 select the*                            _i_n_s_t_a                                  32b                    < command in the attributes menu.  KIC will then tell you that< instances labels will not be displayed in large windows.  ByF again pointing to the _i_n_s_t_a command in the attributes  menu,< KIC  will  always display instance labels.  You can see thatF this command is similar to the _l_a_b_e_l command in  the  attri- butes menu.n  D KIC  is  interfaced  to  the  _L_Y_R_A  manhattan  layout  rules< checker.   To  use  LYRA,  you  must first inform KIC of the. technology that you are using by selecting the(                             _t_e_c_h< command.  A LYRA process is initiated on a user-defined rec- tangular area by invoking theo(                             _l_y_r_a< command in the basic menu.  See you instructor  or  research< adviser  for  more information, or contact Michael Arnold by mailing to _K_i_m:_m_h_a.       6 _2_0.  _T_h_e ._K_I_C_L_o_g_o _F_i_l_e  < KIC provides a simple procedure that  allows  each  user  to< have  a  personal  KIC  logo.  When KIC is invoked without a< cell name in the argument list, it will first  look  in  theJ present working directory for a file called ._K_I_C_L_o_g_o and use< this file to display a KIC logo.  The contents of this  file< is  a  restricted form of CIF; only boxes and single-segment< wires are allowed.   Also,  the  design  must  be  contained< within   the  first  cartesian  quadrant  in  window  space.< Because the format is  CIF,  a  personal  KIC  logo  may  be  created by using the KIC editor.       _2_1.  _T_r_o_u_b_l_e  F You can always press the _c_t_r_l-_a key to abort KIC if it seems to be in trouble.t  < Also, it is possible to interrupt a  redisplay  by  pressingR the _R_U_B_O_U_T or _B_R_E_A_K key if you are running under UNIX, or byF typing _c_t_r_l-_c if you are running under VMS.  KIC  will  then< redraw  the  command and layer menus, and remind you to type3 _c_t_r_l-_a to abort KIC if there is trouble..T   Don't do any of the following.    ,     - Create recursive instance hierarchies.       - Press function keys. 9  ! 9                             33g                    2 _2_2.  _B_u_g_s _a_n_d _Q_u_i_r_k_s  F The _r_d_r_a_w command simply performs a redisplay in the area of< the  large coarse window.  If the magnifying glass window is< not entirely contained within the large coarse  window,  the< magnifying  glass  will not be completely redisplayed.  This< includes the grid inside  the  magnifying  glass.   If  this< occurs,  you might simply force KIC to redraw the magnifying( glass with the fine-positioning command.  < The minimum window that  contains  all  selected  geometries< will  sometimes  be redrawn regardless of whether it is con-< tained within the large  coarse  window  (i.e.,  it  is  not< clipped  to  the  large  coarse  window).   In any case, you< should never allow selected objects  to  exist  outside  the< large  coarse window; you might forget that it the object is' selected and unintentionally delete it.   < KIC clips  polygons  only  to  rectangular  regions.   If  a< polygon  and the rectangular area to which the polygon is to< be clipped (such as the  magnifying  glass)  intersect  into< several polygons, bogus lines may be displayed.  This occurs< because KIC clips a polygon to  one  and  only  one  polygon< rather  than  the  several polygons which intersect the rec- tangular area of interest.  F KIC will not allow you to use the _s_t_b_o_x command  to  stretch) one edge of a box over its opposite edge.   < Sometimes when the parser is invoked and fails on a  binary,9 executable, or directory file, the database is corrupted.l                                           9  ! 9                             34o                    2                           _C_o_n_t_e_n_t_s< Introduction ..........................................    1< Running KIC ...........................................    2< The Screen Layout .....................................    2< Pointing ..............................................    3< Editing a Cell ........................................    4< Fine Positioning:  The Magnifying Glass ...............    4< Expanding Instances ...................................    5< Traversing the Hierarchy ..............................    6< Grids .................................................    7< Command Line Arguments ................................    7< Coordinate System .....................................    8< Panning and Zooming ...................................    8< The Layer Attributes Menu .............................    9< Selection .............................................   11< Boxes .................................................   14< Polygons ..............................................   15< Wires .................................................   15< Labels ................................................   15< Lines .................................................   16< Arcs ..................................................   16< Doughnuts .............................................   16< Creating a Cell .......................................   17< Stretch Commands ......................................   20< Saving a Cell .........................................   20< Instances .............................................   21< Property Lists ........................................   23< Routing ...............................................   24< The .KIC File .........................................   25< Symbolic Layout .......................................   30< Keyboard Input ........................................   30< Other Commands ........................................   32< The .KICLogo File .....................................   33< Trouble ...............................................   33< Bugs and Quirks .......................................   34    F                       _A_c_k_n_o_w_l_e_d_g_e_m_e_n_t_s  8 Thanks to the following people for making this possible.    8     -  Professors   Newton,   Pederson,   Sproull,   and     Ousterhout.e  8     - The Hertz Foundation, National Semiconductor,  and$     Tektronix for financial support.           9  ! 9                             35                     7                          _R_e_f_e_r_e_n_c_e_sb  n Mead, C. and  L.  Conway.   _I_n_t_r_o_d_u_c_t_i_o_n  _t_o  _V_L_S_I  _S_y_s_t_e_m_s. Addison-Wesley, 1980.l  < Fitzpatrick, Dan.  MS report discussing cifplot and  MEXTRA.7 EECS Dept., University of California at Berkeley, 1981.I  n Hon, R. and C.  Sequin.   _A  _G_u_i_d_e  _t_o  _L_S_I  _I_m_p_l_e_m_e_n_t_a_t_i_o_n.+ Xerox PARC technical report SSL-79-7, 1980.w                                                                                     9  ! 9                             36.      