DRC

Imports

from pathlib import Path
import gdsfactory as gf
import gdsfactoryplus as gfp

pdk = gfp.activate_pdk_by_name("cspdk.si220.cband");
23:24:47 | INFO     | PDK='cspdk.si220.cband'


23:24:47 | INFO     | PROJECT_DIR='/home/runner/work/gdsfactoryplus/gdsfactoryplus'


23:24:47 | INFO     | PDK='cspdk.si220.cband'


23:24:47 | INFO     | PROJECT_DIR='/home/runner/work/gdsfactoryplus/gdsfactoryplus'


23:24:47 | INFO     | Creating new KCL.


23:24:47 | INFO     | len(gf.kcl.tkcells)=0 TKCells in KCL
gfp.get_settings()
Settings(name='gdsfactoryplus', ignore=[], pdk=PdkSettings(name='cspdk.si220.cband'), api=ApiSettings(host='https://prod.gdsfactory.com/', key='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlfa2V5IjoiMTEwMjQxNjYtYzZiZi00YjMzLWJiYjYtZjg4YTBiNzBmMDYwIiwiYXVkIjoiR0RTRmFjdG9yeTphcGkta2V5cyJ9.EvaJEojL-ETEIMeiI73tONXHwjiu-wv0QKHlJPtFFHo'), drc=DrcSettings(timeout=60, host='https://dodeck.gdsfactory.com', process='', pdk=''), sim=SimSettings(wls=Linspace(min=1.5, max=1.6, num=300)), gpt=GptSettings(host='https://doitforme.gdsfactory.com', pdk=''), kweb=KwebSettings(host='localhost', https=False), log=LogSettings(level='INFO', debug_level='DEBUG'), external=ExternalSettings(axiomatic_api_key=''))

Intro

For running this DRC examples you will require to open Klayout and make sure you have klive extension installed.

image.png

as well as gdsfactoryPlus

pip install gdsfactoryplus --upgrade

Then you need to configure your PDK, URLs and Keys to point to the correct deployment.

To do this, ensure you create a config file in ~/.gdsfactory/gdsfactoryplus.toml with the default gdsfactoryplus settings. For example:

[tool.gdsfactoryplus.api]
key = "<your-api-key>"

Note

You can also use this as a template for your own global gdsfactoryplus config or your per-project pyproject.toml file.

A cell with errors

Let's create a GDS with some DRC errors, run DRC on the remote server and review the results locally in your computer.

@gf.cell
def width_min(size=(0.1, 0.1)):
    return gf.components.rectangle(size=size, layer="WG")
c = width_min()
c

png

Check DRC

gdspath = c.write_gds()
lyrdb = gfp.check_drc(gdspath)
lyrdb_path = Path("errors.lyrdb")
lyrdb_path.write_text(lyrdb);
uploading '/tmp/gdsfactory/width_min_S0p1_0p1.gds'...


running DRC... [pdk='cspdk.si220.cband' process='']...


batch job with id 'job_95ad7ab1ac6045e1' started.
RUNNING


SUCCEEDED
job succeeded.
print(lyrdb_path.read_text())
<report-database>
 <description />
 <original-file />
 <generator />
 <top-cell />
 <tags>
 </tags>
 <categories><category>
   <name>Space_Electrodes_LF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Space_HD_n_type_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Space_HD_p_type_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Space_LD_n_type_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Space_LD_p_type_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Space_Label_Etch_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Space_Si_Etch1_DF_70nm</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Space_Si_Etch2_DF_120nm</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Space_Si_Etch2_LF_120nm</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Space_Si_Etch3_LF_100nm_to_BOX</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Space_Vias_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_Electrodes_LF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_HD_n_type_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_HD_p_type_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_LD_n_type_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_LD_p_type_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_Label_Etch_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_Si_Etch1_DF_70nm</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_Si_Etch2_DF_120nm</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_Si_Etch2_LF_120nm</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_Si_Etch3_LF_100nm_to_BOX</name>
   <description />
   <categories>
   </categories>
  </category>
 <category>
   <name>Width_Vias_DF</name>
   <description />
   <categories>
   </categories>
  </category>
 </categories><cells><cell>
   <name>width_min_S0p1_0p1</name>
   <variant />
   <layout-name />
   <references>
   </references>
  </cell>
 </cells><items>
 <item>
   <tags />
   <category>Width_Si_Etch2_LF_120nm</category>
   <cell>width_min_S0p1_0p1</cell>
   <visited>false</visited>
   <multiplicity>1</multiplicity>
   <comment>Min width for Si_Etch2_LF_120nm is 0.35 um</comment>
   <image />
   <values>
    <value>polygon: (0,0;0,0.1;0.1,0.1;0.1,0)</value>
   </values>
  </item>
 </items>
</report-database>

If you have a valid API key you can now browse through the errors in klayout.

On This Page