the fair gds editor MOSISLibrary

mosis

MOSIS Library

MOSIS provides access to fabrication of prototype and low-volume production quantities of integrated circuits for different processes. A scalable CMOS design rule set is provided for all processes. More exact it is a group of different design rule sets. To make it easier to use these design rules with the LayoutEditor, a template for the different MOSIS design rules is shipped with the LayoutEditor. This library will help you to understand the LayoutEditor libraries and help you to get your own CMOS library running. Don't use this library out off the box for a real layout.

Setup

mosis Following setup steps had to be done:

  • edit the 'constants.layout' file and enter your process. (number of metal layers, std cell library file, etc.)
  • there are three basic set of rules in the MOSIS-SCMOS (scmos, subm, deep) copy the required file to 'rules.layout'
  • download and save the std. cell library file and pad library file to the 'mosisSCMOS' folder
  • execute the layer setup macro (mainmenu/utilities/macro/mosisSCMOS)
  • review and extend the library to your requirements.

mosis 3d view

Library

mosis-library.zip

Macros

mosis-macros.zip

3dView.layout

   1 #!/usr/bin/layout
   2 #name=3d view
   3 #help=3d view of all layers until metal 3
   4 
   5 #include "../../../../../library/mosisSCMOS/library.layout"
   6 
   7 int main(){
   8 layout->view3dTool->clearModel();
   9 if (layers::num[45].visible) {
  10         layout->booleanTool->addLayerA(43);  //active
  11         layout->booleanTool->addLayerB(46);  //poly
  12         layout->booleanTool->performAMinusB();
  13         layout->booleanTool->setResultToA();
  14         layout->booleanTool->addLayerB(45);  //n
  15         layout->booleanTool->performAMultiB();
  16         layout->view3dTool->slantBlockToModel(-1,45,-100,0,0,100);//n implant
  17         }
  18 if (layers::num[44].visible) {
  19         layout->booleanTool->addLayerA(43);
  20         layout->booleanTool->addLayerB(46);
  21         layout->booleanTool->performAMinusB();
  22         layout->booleanTool->setResultToA();
  23         layout->booleanTool->addLayerB(44);  //p
  24         layout->booleanTool->performAMultiB();
  25         layout->view3dTool->slantBlockToModel(-1,44,-100,0,0,100);// p implant
  26         }
  27 if (layers::num[48].visible){
  28         layout->booleanTool->addLayerA(43);
  29         layout->booleanTool->addLayerB(48); //con
  30         layout->booleanTool->performAMinusB();
  31         layout->view3dTool->blockToModel(-1,238,0,80); 
  32         layout->booleanTool->addLayerA(48);
  33         layout->booleanTool->addLayerB(43);
  34         layout->booleanTool->performAMultiB();
  35         layout->view3dTool->slantBlockToModel(-1,48,0,1000,-100,-50); // contact
  36         }
  37 if (layers::num[46].visible){
  38         layout->booleanTool->addLayerA(46);
  39         layout->booleanTool->addLayerB(43);
  40         layout->booleanTool->performAMultiB();
  41         layout->view3dTool->slantBlockToModel(-1,46,80,480,-70,0); // poly
  42         layout->booleanTool->addLayerA(46);
  43         layout->booleanTool->addLayerB(43);
  44         layout->booleanTool->performAMinusB();
  45         layout->view3dTool->slantBlockToModel(-1,46,300,700,10,80); //poly
  46         }
  47 
  48 if (layers::num[48].visible) {
  49         layout->booleanTool->addLayerA(10);
  50         layout->booleanTool->addLayerB(46);
  51         layout->booleanTool->performAMultiB();
  52         layout->view3dTool->slantBlockToModel(-1,48,700,1000,-100,-50); //contact
  53         }
  54 if (layers::num[49].visible) layout->view3dTool->slantBlockToModel(49,49,1000,1700,-100,0); //metal1
  55 if (layers::num[50].visible) layout->view3dTool->slantBlockToModel(50,50,1700,2400,-100,0);
  56 if (layers::num[51].visible) layout->view3dTool->slantBlockToModel(51,51,2400,3100,-100,0); //metal2
  57 if (layers::num[61].visible) layout->view3dTool->blockToModel(61,61,3100,3800);
  58 if (layers::num[62].visible) layout->view3dTool->blockToModel(62,62,3800,4800); //metal 3
  59 if ( metalLayer() >3 ) {
  60         if (layers::num[30].visible) layout->view3dTool->blockToModel(30,30,4800,5800);
  61         if (layers::num[31].visible) layout->view3dTool->blockToModel(31,31,5800,7000); //metal 4
  62         }
  63 if ( metalLayer() >4 ) {
  64         if (layers::num[19].visible) layout->view3dTool->blockToModel(18,18,7000,8200);
  65         if (layers::num[19].visible) layout->view3dTool->blockToModel(19,19,8200,9400); //metal 5
  66         }
  67 if ( metalLayer() > 5 ) {
  68         if (layers::num[20].visible) layout->view3dTool->blockToModel(20,20,9400,10600);
  69         if (layers::num[21].visible) layout->view3dTool->blockToModel(21,21,10600,11800); //metal 6
  70         }
  71 layout->view3dTool->trigger3dRenderModel();
  72 }
  73  

drc.layout

   1 #!/usr/bin/layout
   2 #name=DRC (partial)
   3 #help=runs some DRCs checks as example
   4 
   5 #include "../../../../../library/mosisSCMOS/library.layout"
   6 
   7 
   8 int main(){
   9 layout->drcTool->ruleName= "Poly: minimum size (rule 3.1)";
  10 layout->drcTool->minimumSize(rule("3.1"),46,true);
  11 layout->drcTool->ruleName= "Poly: minimum distance (rule 3.2)";
  12 layout->drcTool->minimumElementDistance(rule("3.2"),46,true);
  13 layout->drcTool->ruleName= "Poly extension past active (rule 3.3)";
  14 layout->drcTool->minimumEnclosure(rule("3.3"),46,43);
  15 layout->drcTool->ruleName= "Poly extension past poly on active (rule 3.4)";
  16 layout->drcTool->minimumEnclosure(rule("3.4"),43,46);
  17 
  18 layout->drcTool->ruleName= "Metal1: minimum size (rule 7.1)";
  19 layout->drcTool->minimumSize(rule("7.1"),49,true);
  20 layout->drcTool->ruleName= "Metal1: minimum distance (rule 7.2)";
  21 layout->drcTool->minimumElementDistance(rule("7.2"),49,true);
  22 
  23 }

setProcess.layout

   1 #!/usr/bin/layout
   2 #name=process setup
   3 #help=information on the process setup
   4 
   5 #include "../../../../../library/mosisSCMOS/library.layout"
   6 
   7 int main(){
   8 string s;
   9 s="The setup uses '"+processname()+"'\n\n";
  10 s+="To change the setup edit the file\n";
  11 s+="'mosisSCMOS/constants.layout' and\n";
  12 s+="copy the correct rules file to\n";
  13 s+="'mosisSCMOS/rules.layout\n";
  14 s+="\n";
  15 s+="Attention: \n";
  16 s+="The mosisSCMOS library is an example only!\n";
  17 s+="Don't use it on a real IC design without\n";
  18 s+="adapting it to the process you use!\n";
  19 s+="There is no warranty for this library!\n";
  20 layout->showMessage("Process Info",s);
  21 }

setupLayer.layout

   1 #!/usr/bin/layout
   2 #name=layer setup SCMOS
   3 #help=layer setup macro for mosis scalable cmos processes. set process before calling this macro.
   4 
   5 #include "../../../../../library/mosisSCMOS/library.layout"
   6 
   7 int main(){
   8 setup::defaultTextWidth= 500;
   9 setup::gdsAutoMapDatatypes=false;
  10 setup::oasisAutoMapDatatypes=false;
  11 setup::paintEngine=1;
  12 setup::gdsMapLayer=false;
  13 setup::oasisMapLayer=false;
  14 setup::autoDisableUnusedLayers=false;
  15 layers::disableAllLayer();
  16 layers::num[25].enable();
  17 layers::num[25].name="CONTACT";
  18 layers::num[25].setStyle(7);
  19 layers::num[25].setColor(184,184,184);
  20 layers::num[25].shortkey="c";
  21 layers::num[26].enable();
  22 layers::num[26].name="PADS";
  23 layers::num[26].setStyle(26);
  24 layers::num[26].setColor(38,110,192);
  25 layers::num[26].shortkey="Ctrl+p";
  26 if (useCaps()) layers::num[28].enable();
  27 layers::num[28].name="POLY_CAP1";
  28 layers::num[28].setStyle(8);
  29 layers::num[28].setColor(214,110,19);
  30 layers::num[28].shortkey="a";
  31 if (useCaps()) layers::num[29].enable();
  32 layers::num[29].name="SILICIDE_BLOCK";
  33 layers::num[29].setStyle(0);
  34 layers::num[29].setColor(31,233,159);
  35 layers::num[29].shortkey="0";
  36 if (metalLayer() >3) layers::num[30].enable();
  37 layers::num[30].name="VIA3";
  38 layers::num[30].setStyle(1);
  39 layers::num[30].setColor(197,206,210);
  40 layers::num[30].shortkey="1";
  41 if (metalLayer() >3) layers::num[31].enable();
  42 layers::num[31].name="METAL4";
  43 layers::num[31].setStyle(2);
  44 layers::num[31].setColor(187,130,37);
  45 layers::num[31].shortkey="Ctrl+2";
  46 if (metalLayer() >4) layers::num[32].enable();
  47 layers::num[32].name="VIA4";
  48 layers::num[32].setStyle(3);
  49 layers::num[32].setColor(51,164,10);
  50 layers::num[32].shortkey="2";
  51 if (metalLayer() >4) layers::num[33].enable();
  52 layers::num[33].name="METAL5";
  53 layers::num[33].setStyle(4);
  54 layers::num[33].setColor(37,141,125);
  55 layers::num[33].shortkey="Ctrl+3";
  56 if (useCaps())layers::num[34].enable();
  57 layers::num[34].name="HI_RES_IMPLANT";
  58 layers::num[34].setStyle(5);
  59 layers::num[34].setColor(30,37,228);
  60 layers::num[34].shortkey="3";
  61 if (useCaps()) layers::num[35].enable();
  62 layers::num[35].name="CAP_TOP_METAL";
  63 layers::num[35].setStyle(6);
  64 layers::num[35].setColor(205,182,68);
  65 layers::num[35].shortkey="Ctrl+4";
  66 if (metalLayer() >5) layers::num[36].enable();
  67 layers::num[36].name="VIA5";
  68 layers::num[36].setStyle(7);
  69 layers::num[36].setColor(43,182,36);
  70 layers::num[36].shortkey="4";
  71 if (metalLayer() >5) layers::num[37].enable();
  72 layers::num[37].name="METAL6";
  73 layers::num[37].setStyle(8);
  74 layers::num[37].setColor(10,149,159);
  75 layers::num[37].shortkey="Ctrl+5";
  76 layers::num[38].enable();
  77 layers::num[38].name="DEEP_N_WELL";
  78 layers::num[38].setStyle(9);
  79 layers::num[38].setColor(54,36,136);
  80 layers::num[41].enable();
  81 layers::num[41].name="P_WELL";
  82 layers::num[41].setStyle(1);
  83 layers::num[41].setColor(177,24,44);
  84 layers::num[42].enable();
  85 layers::num[42].name="N_WELL";
  86 layers::num[42].setStyle(1);
  87 layers::num[42].setColor(30,26,154);
  88 layers::num[43].enable();
  89 layers::num[43].name="ACTIVE";
  90 layers::num[43].setStyle(9);
  91 layers::num[43].setColor(77,131,76);
  92 layers::num[44].enable();
  93 layers::num[44].name="P_PLUS_SELECT";
  94 layers::num[44].setStyle(8);
  95 layers::num[44].setColor(162,133,99);
  96 layers::num[45].enable();
  97 layers::num[45].name="N_PLUS_SELECT";
  98 layers::num[45].setStyle(8);
  99 layers::num[45].setColor(214,96,208);
 100 layers::num[46].enable();
 101 layers::num[46].name="POLY";
 102 layers::num[46].setStyle(5);
 103 layers::num[46].setColor(139,63,63);
 104 layers::num[46].shortkey="p";
 105 layers::num[47].enable();
 106 layers::num[47].name="POLY_CONTACT";
 107 layers::num[47].setStyle(5);
 108 layers::num[47].setColor(195,207,204);
 109 layers::num[48].enable();
 110 layers::num[48].name="ACTIVE_CONTACT";
 111 layers::num[48].setStyle(5);
 112 layers::num[48].setColor(218,229,236);
 113 layers::num[49].enable();
 114 layers::num[49].name="METAL1";
 115 layers::num[49].setStyle(8);
 116 layers::num[49].setColor(72,87,213);
 117 layers::num[49].shortkey="a";
 118 layers::num[50].enable();
 119 layers::num[50].name="VIA";
 120 layers::num[50].setStyle(2);
 121 layers::num[50].setColor(178,190,190);
 122 layers::num[50].shortkey="v";
 123 layers::num[51].enable();
 124 layers::num[51].name="METAL2";
 125 layers::num[51].setStyle(7);
 126 layers::num[51].setColor(81,195,212);
 127 layers::num[51].shortkey="Ctrl+2";
 128 layers::num[52].enable();
 129 layers::num[52].name="GLASS";
 130 layers::num[52].setStyle(23);
 131 layers::num[52].setColor(9,144,119);
 132 if (poly2()) layers::num[55].enable();
 133 layers::num[55].name="POLY2_CONTACT";
 134 layers::num[55].setStyle(7);
 135 layers::num[55].setColor(167,185,182);
 136 if (poly2()) layers::num[56].enable();
 137 layers::num[56].name="POLY2";
 138 layers::num[56].setStyle(7);
 139 layers::num[56].setColor(147,162,154);
 140 if (useCaps()) layers::num[58].enable();
 141 layers::num[58].name="PBASE";
 142 layers::num[58].setStyle(5);
 143 layers::num[58].setColor(226,23,209);
 144 if (useCaps()) layers::num[59].enable();
 145 layers::num[59].name="CAP_WELL";
 146 layers::num[59].setStyle(0);
 147 layers::num[59].setColor(132,132,132);
 148 layers::num[60].enable();
 149 layers::num[60].name="THICK_ACTIVE";
 150 layers::num[60].setStyle(2);
 151 layers::num[60].setColor(60,150,180);
 152 layers::num[60].shortkey="b";
 153 layers::num[61].enable();
 154 layers::num[61].name="VIA2";
 155 layers::num[61].setStyle(3);
 156 layers::num[61].setColor(189,198,191);
 157 layers::num[62].enable();
 158 layers::num[62].name="METAL3";
 159 layers::num[62].setStyle(4);
 160 layers::num[62].setColor(172,165,62);
 161 layers::num[64].enable();
 162 layers::num[64].name="Comments";
 163 layers::num[64].setStyle(6);
 164 layers::num[64].setColor(26,118,198);
 165 layout->netlistTool->technologyLayerRemoveAll();
 166 layout->netlistTool->libraryRemoveAll();
 167 layout->netlistTool->technologyLayerAdd(46,2); //poly
 168 layout->netlistTool->technologyLayerSetParameter(46,0,0);
 169 layout->netlistTool->technologyLayerSetParameter(46,1,rule("3.1"));//width
 170 layout->netlistTool->technologyLayerSetParameter(46,2,rule("3.2"));//space
 171 layout->netlistTool->technologyLayerAdd(47,1);  // via
 172 layout->netlistTool->technologyLayerSetParameter(47,0,1);
 173 layout->netlistTool->technologyLayerSetParameter(47,1,rule("5.1"));//via size
 174 layout->netlistTool->technologyLayerSetParameter(47,2,rule("5.3"));//via space
 175 layout->netlistTool->technologyLayerSetParameter(47,3,rule("5.2"));// edge lower
 176 layout->netlistTool->technologyLayerSetParameter(47,4,rule("8.3"));// edge upper
 177 layout->netlistTool->technologyLayerSetParameter(47,5,0);//via shape
 178 layout->netlistTool->technologyLayerAdd(49,2);  //metall 1
 179 layout->netlistTool->technologyLayerSetParameter(49,0,2);
 180 layout->netlistTool->technologyLayerSetParameter(49,1,rule("7.1"));
 181 layout->netlistTool->technologyLayerSetParameter(49,2,rule("7.2"));
 182 layout->netlistTool->technologyLayerAdd(50,1); // via1
 183 layout->netlistTool->technologyLayerSetParameter(50,0,3);
 184 layout->netlistTool->technologyLayerSetParameter(50,1,rule("8.1"));//via size
 185 layout->netlistTool->technologyLayerSetParameter(50,2,rule("8.2"));//via space
 186 layout->netlistTool->technologyLayerSetParameter(50,3,rule("8.3"));// edge lower
 187 layout->netlistTool->technologyLayerSetParameter(50,4,rule("9.3"));// edge upper
 188 layout->netlistTool->technologyLayerSetParameter(50,5,0);//via shape
 189 layout->netlistTool->technologyLayerAdd(51,2); //metall 2
 190 layout->netlistTool->technologyLayerSetParameter(51,0,4);
 191 layout->netlistTool->technologyLayerSetParameter(51,1,rule("9.1"));//width
 192 layout->netlistTool->technologyLayerSetParameter(51,2,rule("9.2"));//space
 193 layout->netlistTool->technologyLayerAdd(61,1);
 194 layout->netlistTool->technologyLayerSetParameter(61,0,5);
 195 layout->netlistTool->technologyLayerSetParameter(61,1,rule("14.1"));//via size
 196 layout->netlistTool->technologyLayerSetParameter(61,2,rule("14.2"));//via space
 197 layout->netlistTool->technologyLayerSetParameter(61,3,rule("14.3"));// edge lower
 198 layout->netlistTool->technologyLayerSetParameter(61,4,rule("15.3"));// edge upper
 199 layout->netlistTool->technologyLayerSetParameter(61,5,0);//via shape
 200 layout->netlistTool->technologyLayerAdd(62,2); //metall 3
 201 layout->netlistTool->technologyLayerSetParameter(62,0,6);
 202 layout->netlistTool->technologyLayerSetParameter(62,1,rule("15.1"));//width
 203 layout->netlistTool->technologyLayerSetParameter(62,2,rule("15.2"));//space
 204 if (metalLayer() >3) {
 205         layout->netlistTool->technologyLayerAdd(30,1);
 206         layout->netlistTool->technologyLayerSetParameter(30,0,7);
 207         layout->netlistTool->technologyLayerSetParameter(30,1,rule("21.1"));//via size
 208         layout->netlistTool->technologyLayerSetParameter(30,2,rule("21.2"));//via space
 209         layout->netlistTool->technologyLayerSetParameter(30,3,rule("21.3"));// edge lower
 210         layout->netlistTool->technologyLayerSetParameter(30,4,rule("22.3"));// edge upper
 211         layout->netlistTool->technologyLayerSetParameter(30,5,0);//via shape
 212         layout->netlistTool->technologyLayerAdd(31,2); //metall 4
 213         layout->netlistTool->technologyLayerSetParameter(31,0,8);
 214         layout->netlistTool->technologyLayerSetParameter(31,1,rule("22.1"));//width
 215         layout->netlistTool->technologyLayerSetParameter(31,2,rule("22.2"));//space
 216 }
 217 if (metalLayer() >4) {
 218         layout->netlistTool->technologyLayerAdd(32,1);
 219         layout->netlistTool->technologyLayerSetParameter(32,0,9);
 220         layout->netlistTool->technologyLayerSetParameter(32,1,rule("25.1"));//via size
 221         layout->netlistTool->technologyLayerSetParameter(32,2,rule("25.2"));//via space
 222         layout->netlistTool->technologyLayerSetParameter(32,3,rule("25.3"));// edge lower
 223         layout->netlistTool->technologyLayerSetParameter(32,4,rule("26.3"));// edge upper
 224         layout->netlistTool->technologyLayerSetParameter(32,5,0);//via shape
 225         layout->netlistTool->technologyLayerAdd(33,2); //metall 5
 226         layout->netlistTool->technologyLayerSetParameter(33,0,10);
 227         layout->netlistTool->technologyLayerSetParameter(33,1,rule("26.1"));//width
 228         layout->netlistTool->technologyLayerSetParameter(33,2,rule("26.2"));//space
 229 }
 230 if (metalLayer() >5) {
 231         layout->netlistTool->technologyLayerAdd(36,1);
 232         layout->netlistTool->technologyLayerSetParameter(36,0,11);
 233         layout->netlistTool->technologyLayerSetParameter(36,1,rule("29.1"));//via size
 234         layout->netlistTool->technologyLayerSetParameter(36,2,rule("29.2"));//via space
 235         layout->netlistTool->technologyLayerSetParameter(36,3,rule("29.3"));// edge lower
 236         layout->netlistTool->technologyLayerSetParameter(36,4,rule("30.3"));// edge upper
 237         layout->netlistTool->technologyLayerSetParameter(36,5,0);//via shape
 238         layout->netlistTool->technologyLayerAdd(37,2); //metall 6
 239         layout->netlistTool->technologyLayerSetParameter(37,0,12);
 240         layout->netlistTool->technologyLayerSetParameter(37,1,rule("30.1"));//width
 241         layout->netlistTool->technologyLayerSetParameter(37,2,rule("30.2"));//space
 242 }
 243 }


CategoryLibrary CategoryMacro


MOSISLibrary (last edited 2010-12-01 14:20:27 by dslb-092-075-140-183)