diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/20_sky130nm_inverter_schematic_to_layout.ipynb b/docs/examples/04a_analogue_circuit_layout_simulation/20_sky130nm_inverter_schematic_to_layout.ipynb new file mode 100644 index 00000000..be387a5f --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/20_sky130nm_inverter_schematic_to_layout.ipynb @@ -0,0 +1,1382 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# SkyWater Inverter Design using GPlugins\n", + "\n", + "The goal of this notebook is to demonstrate the integration of the `sky130nm` electronic PDK within a gdsfactory-based schematic driven layout. Broadly, we will explore:\n", + "\n", + "* A little introduction at setting up the existing open-source electronic EDA development flow with `xschem` using the latest `sky130nm` library\n", + "* Exporting that schematic into a SPICE model, which is used to schematic-driven-layout using gdsfactory.\n", + "* Example inverter design and layout between the toolsets.\n", + "\n", + "## Setting up the required tools: `xschem`, `volare` and the `sky130nm` PDKs\n", + "\n", + "I will say early on, you would benefit from working in a UNIX or Debian Linux environment. Most EDA tools either proprietary or open-source only work within these operating systems or a Docker environment of these operating systems.\n", + "\n", + "There are multiple ways to get started with the environment, you could, for example:\n", + "1. Work within a [IIC-OSIC-TOOLS docker environment](https://github.com/iic-jku/IIC-OSIC-TOOLS). There is also a nice [OSIC-multitool project](https://github.com/iic-jku/osic-multitool) specifically for SKY130nm designs.\n", + "2. Install these tools natively in your operating system. You could follow one of these tutorials, for example:\n", + " * https://www.engineerwikis.com/wikis/installation-of-xschem\n", + " * https://www.youtube.com/watch?v=jXmmxO8WG8s&t=7s\n", + "\n", + "This tutorial assumes the tools have already been installed in a local operating system. We will use some design files generated by these toolsets as guided by this [OSIC-Multitool example](https://github.com/iic-jku/osic-multitool/tree/main/example/ana). Note we recommend cloning the `gplugins` repository." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "1", + "metadata": {}, + "outputs": [], + "source": [ + "import pathlib\n", + "from gplugins.spice import parse_netlist as spice" + ] + }, + { + "cell_type": "markdown", + "id": "2", + "metadata": {}, + "source": [ + "Our example files are under the directory of `gplugins/notebooks/data`, let's extract our SPICE declaration:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3", + "metadata": {}, + "outputs": [], + "source": [ + "def read_file(file_path):\n", + " try:\n", + " with open(file_path, 'r') as file:\n", + " text = file.read()\n", + " return text\n", + " except FileNotFoundError:\n", + " print(\"File not found. Please provide a valid file path.\")\n", + " return None" + ] + }, + { + "cell_type": "markdown", + "id": "4", + "metadata": {}, + "source": [ + "Let's list the files we're going to be reading into:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5", + "metadata": {}, + "outputs": [], + "source": [ + "inverter_spice_file = pathlib.Path(\"data\") / \"sky130nm\" / \"inv.sch\"" + ] + }, + { + "cell_type": "markdown", + "id": "6", + "metadata": {}, + "source": [ + "Let's extract our raw spice netlist. An important aspect to understand is that unfortunately, every SPICE tool developed their own file format. So in this sense, netlist parsing function is implemented according to the type of spice toolset that has generated this netlist.\n", + "\n", + "We aim to support:\n", + "\n", + "- `xschem`\n", + "- `lumerical?`" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'v {xschem version=3.0.0 file_version=1.2 }\\nG {}\\nK {}\\nV {}\\nS {}\\nE {}\\nN 720 -800 720 -760 { lab=VSS}\\nN 720 -1020 720 -980 { lab=VDD}\\nN 720 -950 790 -950 { lab=VDD}\\nN 790 -1020 790 -950 { lab=VDD}\\nN 720 -830 790 -830 { lab=VSS}\\nN 790 -830 790 -760 { lab=VSS}\\nN 720 -890 720 -860 { lab=out}\\nN 660 -950 680 -950 { lab=in}\\nN 660 -890 660 -830 { lab=in}\\nN 660 -830 680 -830 { lab=in}\\nN 720 -890 880 -890 { lab=out}\\nN 720 -1020 790 -1020 { lab=VDD}\\nN 720 -760 790 -760 { lab=VSS}\\nN 660 -950 660 -890 { lab=in}\\nN 720 -920 720 -890 { lab=out}\\nN 560 -760 720 -760 { lab=VSS}\\nN 560 -890 660 -890 { lab=in}\\nN 560 -1020 720 -1020 { lab=VDD}\\nC {devices/ipin.sym} 560 -890 0 0 {name=p1 lab=in}\\nC {devices/opin.sym} 880 -890 0 0 {name=p2 lab=out\\n}\\nC {devices/ipin.sym} 560 -1020 0 0 {name=p3 lab=VDD\\n}\\nC {devices/ipin.sym} 560 -760 0 0 {name=p4 lab=VSS}\\nC {sky130_fd_pr/pfet_g5v0d10v5.sym} 700 -950 0 0 {name=M10\\n\\nL=0.5\\nW=8\\nnf=2 mult=1\\nmodel=pfet_g5v0d10v5\\nspiceprefix=X\\n}\\nC {sky130_fd_pr/nfet_g5v0d10v5.sym} 700 -830 0 0 {name=M9\\n\\nL=0.5\\nW=2\\nnf=1 mult=1\\nmodel=nfet_g5v0d10v5\\nspiceprefix=X\\n}\\n'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inverter_spice_text = read_file(inverter_spice_file)\n", + "inverter_spice_text" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n* Netlist generated with INTERCONNECT on Fri Dec 8 11:06:53 2023\\n\\n*\\n* Component pathname : compound_1\\n*\\n.subckt COMPOUND_1 PORT_1 PORT_2 PORT_3 PORT_4 PORT_5 PORT_6 PORT_7 PORT_8\\n X_dc_1 PORT_1 PORT_2 N$1 N$3 ebeam_dc_te1550 coupling_length=17.5u sch_x=-0.245 sch_y=1.205 sch_r=0 sch_f=f lay_x=0 lay_y=0\\n X_dc_2 N$1 N$3 PORT_3 PORT_4 ebeam_dc_te1550 coupling_length=17.5u sch_x=0.79 sch_y=0.38 sch_r=0 sch_f=f lay_x=0 lay_y=0\\n X_dc_3 PORT_5 PORT_7 N$11 N$13 ebeam_dc_te1550 coupling_length={%test_param1%*1e-6} sch_x=-1.3 sch_y=-1.585 sch_r=0 sch_f=f lay_x=0 lay_y=0\\n X_ebeam_y_1550_1 N$8 N$13 N$11 ebeam_y_1550 sch_x=0.95 sch_y=-1.58 sch_r=180 sch_f=f lay_x=0 lay_y=0\\n X_ebeam_y_1550_2 N$8 PORT_6 PORT_8 ebeam_y_1550 sch_x=1.89 sch_y=-1.58 sch_r=0 sch_f=f lay_x=0 lay_y=0\\n.ends COMPOUND_1\\n\\n*\\n* MAIN CELL: Component pathname : root_element\\n*\\n .MODEL ebeam_dc_te1550 radius=5u gap=0.2u note=\".- The current model only supports \"coupling_length\" as an input parameter..- The other parameters\\n (i.e., \"wg_width\", \"gap\", \"radius\") are now fixed but will be parameterized in the future.\"\\n + wg_width=0.5u library=\"design_kit/ebeam\"\\n .MODEL ebeam_gc_te1550 MC_grid={%MC_grid%} MC_non_uniform={%MC_non_uniform%} MC_resolution_x={%MC_resolution_x%}\\n + MC_resolution_y={%MC_resolution_y%} MC_uniformity_thickness={%MC_uniformity_thickness%} MC_uniformity_width={%MC_uniformity_width%}\\n + library=\"design_kit/ebeam\"\\n .MODEL ebeam_y_1550 Model_Version=\"2016/04/07\" MC_grid={%MC_grid%} MC_non_uniform={%MC_non_uniform%}\\n + MC_resolution_x={%MC_resolution_x%} MC_resolution_y={%MC_resolution_y%} MC_uniformity_thickness={%MC_uniformity_thickness%}\\n + MC_uniformity_width={%MC_uniformity_width%} library=\"design_kit/ebeam\"\\n .MODEL wg_heater wg_length=0.0001 library=\"design_kit/ebeam\"\\n X_COMPOUND_1 N$1 N$2 N$5 N$4 N$7 N$10 N$9 N$8 COMPOUND_1 test_param2=2 test_param1=3 sch_x=0.75 sch_y=0 sch_r=0 sch_f=f lay_x=0 lay_y=0\\n X_ebeam_y_1550_1 N$6 N$1 N$2 ebeam_y_1550 sch_x=-0.22 sch_y=0.005 sch_r=0 sch_f=f lay_x=0 lay_y=0\\n X_ebeam_y_1550_2 N$3 N$4 N$5 ebeam_y_1550 sch_x=2.795 sch_y=1.665 sch_r=180 sch_f=f lay_x=0 lay_y=0\\n X_TE1550_SubGC_neg31_oxide_1 N$17 N$6 ebeam_gc_te1550 sch_x=-2.175 sch_y=-0.05 sch_r=180 sch_f=f lay_x=0 lay_y=0\\n X_TE1550_SubGC_neg31_oxide_2 N$18 N$3 ebeam_gc_te1550 sch_x=4.435 sch_y=2.655 sch_r=0 sch_f=f lay_x=0 lay_y=0\\n X_ebeam_y_1550_3 N$14 N$7 N$9 ebeam_y_1550 sch_x=-1.42 sch_y=-1.31 sch_r=0 sch_f=f lay_x=0 lay_y=0\\n X_ebeam_y_1550_4 N$16 N$8 N$10 ebeam_y_1550 sch_x=4.525 sch_y=-1.395 sch_r=180 sch_f=f lay_x=0 lay_y=0\\n X_wg_heater_1 N$12 N$11 N$13 N$15 wg_heater sch_x=2.11 sch_y=-3.82 sch_r=180 sch_f=f lay_x=0 lay_y=0\\n X_wg_heater_2 N$11 N$12 N$16 N$14 wg_heater sch_x=2.085 sch_y=-2.645 sch_r=180 sch_f=f lay_x=0 lay_y=0\\n X_TE1550_SubGC_neg31_oxide_3 N$19 N$13 ebeam_gc_te1550 sch_x=4.205 sch_y=-3.99 sch_r=0 sch_f=f lay_x=0 lay_y=0\\n X_TE1550_SubGC_neg31_oxide_4 N$20 N$15 ebeam_gc_te1550 sch_x=-4.305 sch_y=-4.13 sch_r=180 sch_f=f lay_x=0 lay_y=0\\n*\\n.end\\n\\n*# ebeam_dc_te1550 opt_1(opt) opt_2(opt) opt_3(opt) opt_4(opt)\\n*# ebeam_gc_te1550 opt_fiber(opt) opt_wg(opt)\\n*# ebeam_y_1550 opt_a1(opt) opt_b1(opt) opt_b(opt)\\n*# wg_heater ele_1(ele) ele_2(ele) opt_1(opt) opt_2(opt)\\n'" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spice.netlist_text" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'type': 'subckt',\n", + " 'name': 'COMPOUND_1',\n", + " 'ports': ['PORT_1',\n", + " 'PORT_2',\n", + " 'PORT_3',\n", + " 'PORT_4',\n", + " 'PORT_5',\n", + " 'PORT_6',\n", + " 'PORT_7',\n", + " 'PORT_8']},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_dc_te1550',\n", + " 'component_type': 'X_dc_1',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'PORT_1'},\n", + " {'from': 'lay_y=0', 'to': 'PORT_2'},\n", + " {'from': 'lay_y=0', 'to': 'N$1'},\n", + " {'from': 'lay_y=0', 'to': 'N$3'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_dc_te1550',\n", + " 'component_type': 'X_dc_2',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$1'},\n", + " {'from': 'lay_y=0', 'to': 'N$3'},\n", + " {'from': 'lay_y=0', 'to': 'PORT_3'},\n", + " {'from': 'lay_y=0', 'to': 'PORT_4'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_dc_te1550',\n", + " 'component_type': 'X_dc_3',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'PORT_5'},\n", + " {'from': 'lay_y=0', 'to': 'PORT_7'},\n", + " {'from': 'lay_y=0', 'to': 'N$11'},\n", + " {'from': 'lay_y=0', 'to': 'N$13'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_y_1550',\n", + " 'component_type': 'X_ebeam_y_1550_1',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$8'},\n", + " {'from': 'lay_y=0', 'to': 'N$13'},\n", + " {'from': 'lay_y=0', 'to': 'N$11'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_y_1550',\n", + " 'component_type': 'X_ebeam_y_1550_2',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$8'},\n", + " {'from': 'lay_y=0', 'to': 'PORT_6'},\n", + " {'from': 'lay_y=0', 'to': 'PORT_8'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'model',\n", + " 'name': 'ebeam_dc_te1550',\n", + " 'params': 'radius=5u gap=0.2u note=\".- The current model only supports \"coupling_length\" as an input parameter..- The other parameters'},\n", + " {'type': 'component',\n", + " 'name': 'future.\"',\n", + " 'component_type': '(i.e.,',\n", + " 'nodes': [{'from': 'future.\"', 'to': '\"wg_width\",'},\n", + " {'from': 'future.\"', 'to': '\"gap\",'},\n", + " {'from': 'future.\"', 'to': '\"radius\")'},\n", + " {'from': 'future.\"', 'to': 'are'},\n", + " {'from': 'future.\"', 'to': 'now'},\n", + " {'from': 'future.\"', 'to': 'fixed'},\n", + " {'from': 'future.\"', 'to': 'but'},\n", + " {'from': 'future.\"', 'to': 'will'},\n", + " {'from': 'future.\"', 'to': 'be'},\n", + " {'from': 'future.\"', 'to': 'parameterized'},\n", + " {'from': 'future.\"', 'to': 'in'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'library=\"design_kit/ebeam\"',\n", + " 'component_type': '+',\n", + " 'nodes': [],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'model',\n", + " 'name': 'ebeam_gc_te1550',\n", + " 'params': 'MC_grid={%MC_grid%} MC_non_uniform={%MC_non_uniform%} MC_resolution_x={%MC_resolution_x%}'},\n", + " {'type': 'component',\n", + " 'name': 'MC_resolution_y={%MC_resolution_y%}',\n", + " 'component_type': '+',\n", + " 'nodes': [],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'library=\"design_kit/ebeam\"',\n", + " 'component_type': '+',\n", + " 'nodes': [],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'model',\n", + " 'name': 'ebeam_y_1550',\n", + " 'params': 'Model_Version=\"2016/04/07\" MC_grid={%MC_grid%} MC_non_uniform={%MC_non_uniform%}'},\n", + " {'type': 'component',\n", + " 'name': 'MC_resolution_x={%MC_resolution_x%}',\n", + " 'component_type': '+',\n", + " 'nodes': [],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'library=\"design_kit/ebeam\"',\n", + " 'component_type': '+',\n", + " 'nodes': [],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'model',\n", + " 'name': 'wg_heater',\n", + " 'params': 'wg_length=0.0001 library=\"design_kit/ebeam\"'},\n", + " {'type': 'component',\n", + " 'name': 'COMPOUND_1',\n", + " 'component_type': 'X_COMPOUND_1',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$1'},\n", + " {'from': 'lay_y=0', 'to': 'N$2'},\n", + " {'from': 'lay_y=0', 'to': 'N$5'},\n", + " {'from': 'lay_y=0', 'to': 'N$4'},\n", + " {'from': 'lay_y=0', 'to': 'N$7'},\n", + " {'from': 'lay_y=0', 'to': 'N$10'},\n", + " {'from': 'lay_y=0', 'to': 'N$9'},\n", + " {'from': 'lay_y=0', 'to': 'N$8'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_y_1550',\n", + " 'component_type': 'X_ebeam_y_1550_1',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$6'},\n", + " {'from': 'lay_y=0', 'to': 'N$1'},\n", + " {'from': 'lay_y=0', 'to': 'N$2'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_y_1550',\n", + " 'component_type': 'X_ebeam_y_1550_2',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$3'},\n", + " {'from': 'lay_y=0', 'to': 'N$4'},\n", + " {'from': 'lay_y=0', 'to': 'N$5'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_gc_te1550',\n", + " 'component_type': 'X_TE1550_SubGC_neg31_oxide_1',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$17'},\n", + " {'from': 'lay_y=0', 'to': 'N$6'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_gc_te1550',\n", + " 'component_type': 'X_TE1550_SubGC_neg31_oxide_2',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$18'},\n", + " {'from': 'lay_y=0', 'to': 'N$3'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_y_1550',\n", + " 'component_type': 'X_ebeam_y_1550_3',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$14'},\n", + " {'from': 'lay_y=0', 'to': 'N$7'},\n", + " {'from': 'lay_y=0', 'to': 'N$9'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_y_1550',\n", + " 'component_type': 'X_ebeam_y_1550_4',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$16'},\n", + " {'from': 'lay_y=0', 'to': 'N$8'},\n", + " {'from': 'lay_y=0', 'to': 'N$10'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'wg_heater',\n", + " 'component_type': 'X_wg_heater_1',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$12'},\n", + " {'from': 'lay_y=0', 'to': 'N$11'},\n", + " {'from': 'lay_y=0', 'to': 'N$13'},\n", + " {'from': 'lay_y=0', 'to': 'N$15'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'wg_heater',\n", + " 'component_type': 'X_wg_heater_2',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$11'},\n", + " {'from': 'lay_y=0', 'to': 'N$12'},\n", + " {'from': 'lay_y=0', 'to': 'N$16'},\n", + " {'from': 'lay_y=0', 'to': 'N$14'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_gc_te1550',\n", + " 'component_type': 'X_TE1550_SubGC_neg31_oxide_3',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$19'},\n", + " {'from': 'lay_y=0', 'to': 'N$13'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': 'ebeam_gc_te1550',\n", + " 'component_type': 'X_TE1550_SubGC_neg31_oxide_4',\n", + " 'nodes': [{'from': 'lay_y=0', 'to': 'N$20'},\n", + " {'from': 'lay_y=0', 'to': 'N$15'}],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]},\n", + " {'type': 'component',\n", + " 'name': '.end',\n", + " 'component_type': '.end',\n", + " 'nodes': [],\n", + " 'settings': [['coupling_length=17.5u',\n", + " 'sch_x=-0.245',\n", + " 'sch_y=1.205',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length=17.5u',\n", + " 'sch_x=0.79',\n", + " 'sch_y=0.38',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['coupling_length={%test_param1%*1e-6}',\n", + " 'sch_x=-1.3',\n", + " 'sch_y=-1.585',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=0.95', 'sch_y=-1.58', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=1.89', 'sch_y=-1.58', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['MC_uniformity_thickness={%MC_uniformity_thickness%}'],\n", + " ['MC_resolution_y={%MC_resolution_y%}'],\n", + " ['test_param2=2',\n", + " 'test_param1=3',\n", + " 'sch_x=0.75',\n", + " 'sch_y=0',\n", + " 'sch_r=0',\n", + " 'sch_f=f',\n", + " 'lay_x=0'],\n", + " ['sch_x=-0.22', 'sch_y=0.005', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.795', 'sch_y=1.665', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-2.175', 'sch_y=-0.05', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.435', 'sch_y=2.655', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-1.42', 'sch_y=-1.31', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.525', 'sch_y=-1.395', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.11', 'sch_y=-3.82', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=2.085', 'sch_y=-2.645', 'sch_r=180', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=4.205', 'sch_y=-3.99', 'sch_r=0', 'sch_f=f', 'lay_x=0'],\n", + " ['sch_x=-4.305', 'sch_y=-4.13', 'sch_r=180', 'sch_f=f', 'lay_x=0']]}]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "elements, _, _ = spice.parse_netlist_and_extract_elements(netlist_text=spice.netlist_text, spice_type=\"lumerical\")\n", + "elements" + ] + }, + { + "cell_type": "markdown", + "id": "10", + "metadata": {}, + "source": [ + "So we can use our `netlist` parsing function to convert this to a compatible netlist for gdsfactory plugins into the extracted elements and the extracted connections:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "11", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Warning: Line skipped due to unexpected format: C {devices/opin.sym} 880 -890 0 0 {name=p2 lab=out\n", + "Warning: Line skipped due to unexpected format: C {devices/ipin.sym} 560 -1020 0 0 {name=p3 lab=VDD\n", + "Warning: Line skipped due to unexpected format: C {sky130_fd_pr/pfet_g5v0d10v5.sym} 700 -950 0 0 {name=M10\n", + "Warning: Line skipped due to unexpected format: C {sky130_fd_pr/nfet_g5v0d10v5.sym} 700 -830 0 0 {name=M9\n" + ] + }, + { + "data": { + "text/plain": [ + "([{'type': 'component',\n", + " 'component_type': 'devices/ipin.sym',\n", + " 'position': {'x': '560', 'y': '-890'},\n", + " 'name': 'p1',\n", + " 'label': 'in',\n", + " 'settings': {'name': 'p1', 'lab': 'in'}},\n", + " {'type': 'component',\n", + " 'component_type': 'devices/ipin.sym',\n", + " 'position': {'x': '560', 'y': '-760'},\n", + " 'name': 'p4',\n", + " 'label': 'VSS',\n", + " 'settings': {'name': 'p4', 'lab': 'VSS'}}],\n", + " [{'start': {'x': '720', 'y': '-800'},\n", + " 'end': {'x': '720', 'y': '-760'},\n", + " 'label': 'VSS'},\n", + " {'start': {'x': '720', 'y': '-1020'},\n", + " 'end': {'x': '720', 'y': '-980'},\n", + " 'label': 'VDD'},\n", + " {'start': {'x': '720', 'y': '-950'},\n", + " 'end': {'x': '790', 'y': '-950'},\n", + " 'label': 'VDD'},\n", + " {'start': {'x': '790', 'y': '-1020'},\n", + " 'end': {'x': '790', 'y': '-950'},\n", + " 'label': 'VDD'},\n", + " {'start': {'x': '720', 'y': '-830'},\n", + " 'end': {'x': '790', 'y': '-830'},\n", + " 'label': 'VSS'},\n", + " {'start': {'x': '790', 'y': '-830'},\n", + " 'end': {'x': '790', 'y': '-760'},\n", + " 'label': 'VSS'},\n", + " {'start': {'x': '720', 'y': '-890'},\n", + " 'end': {'x': '720', 'y': '-860'},\n", + " 'label': 'out'},\n", + " {'start': {'x': '660', 'y': '-950'},\n", + " 'end': {'x': '680', 'y': '-950'},\n", + " 'label': 'in'},\n", + " {'start': {'x': '660', 'y': '-890'},\n", + " 'end': {'x': '660', 'y': '-830'},\n", + " 'label': 'in'},\n", + " {'start': {'x': '660', 'y': '-830'},\n", + " 'end': {'x': '680', 'y': '-830'},\n", + " 'label': 'in'},\n", + " {'start': {'x': '720', 'y': '-890'},\n", + " 'end': {'x': '880', 'y': '-890'},\n", + " 'label': 'out'},\n", + " {'start': {'x': '720', 'y': '-1020'},\n", + " 'end': {'x': '790', 'y': '-1020'},\n", + " 'label': 'VDD'},\n", + " {'start': {'x': '720', 'y': '-760'},\n", + " 'end': {'x': '790', 'y': '-760'},\n", + " 'label': 'VSS'},\n", + " {'start': {'x': '660', 'y': '-950'},\n", + " 'end': {'x': '660', 'y': '-890'},\n", + " 'label': 'in'},\n", + " {'start': {'x': '720', 'y': '-920'},\n", + " 'end': {'x': '720', 'y': '-890'},\n", + " 'label': 'out'},\n", + " {'start': {'x': '560', 'y': '-760'},\n", + " 'end': {'x': '720', 'y': '-760'},\n", + " 'label': 'VSS'},\n", + " {'start': {'x': '560', 'y': '-890'},\n", + " 'end': {'x': '660', 'y': '-890'},\n", + " 'label': 'in'},\n", + " {'start': {'x': '560', 'y': '-1020'},\n", + " 'end': {'x': '720', 'y': '-1020'},\n", + " 'label': 'VDD'}],\n", + " [])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inverter_netlist_elements, inverter_netlist_connections, _ = spice.parse_netlist_and_extract_elements(netlist_text=inverter_spice_text, spice_type=\"xschem\")\n", + "inverter_netlist_elements, inverter_netlist_connections, _" + ] + }, + { + "cell_type": "markdown", + "id": "12", + "metadata": {}, + "source": [ + "### Automated schematic-driven-layout" + ] + }, + { + "cell_type": "markdown", + "id": "13", + "metadata": {}, + "source": [ + "We have now extracted our spice elements and our connectivity. Let's explore what we have there:" + ] + }, + { + "cell_type": "raw", + "id": "14", + "metadata": {}, + "source": [ + "# Current TODOs\n", + "\n", + "1. Update the extraction function to add xschem compatibility.\n", + "2. Create the mapping between the extracted netlist and the corresponding SKY130nm elements." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.mag b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.mag new file mode 100644 index 00000000..a02e00b6 --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.mag @@ -0,0 +1,59 @@ +magic +tech sky130A +magscale 1 2 +timestamp 1640640991 +<< nwell >> +rect 86 1006 122 1120 +rect 402 1006 438 1120 +<< pwell >> +rect 174 -918 208 -806 +<< viali >> +rect 32 1116 492 1152 +rect 118 -954 422 -916 +<< metal1 >> +rect -126 1152 650 1230 +rect -126 1116 32 1152 +rect 492 1116 650 1152 +rect -126 1090 650 1116 +rect 80 992 128 1090 +rect 196 204 206 1002 +rect 322 204 332 1002 +rect 396 992 444 1090 +rect 212 134 304 162 +rect 212 116 316 134 +rect 224 -336 316 116 +rect 300 -420 402 -404 +rect 300 -802 310 -420 +rect 392 -802 402 -420 +rect 168 -898 214 -802 +rect -126 -916 650 -898 +rect -126 -954 118 -916 +rect 422 -954 650 -916 +rect -126 -1038 650 -954 +<< via1 >> +rect 206 204 322 1002 +rect 310 -802 392 -420 +<< metal2 >> +rect 206 1002 322 1012 +rect 322 204 392 348 +rect 206 194 392 204 +rect 310 -420 392 194 +rect 310 -812 392 -802 +use sky130_fd_pr__nfet_g5v0d10v5_H9JWFY sky130_fd_pr__nfet_g5v0d10v5_H9JWFY_0 +timestamp 1639595562 +transform 1 0 270 0 1 -573 +box -278 -427 278 427 +use sky130_fd_pr__pfet_g5v0d10v5_5AEDG4 sky130_fd_pr__pfet_g5v0d10v5_5AEDG4_0 +timestamp 1639595562 +transform -1 0 262 0 1 567 +box -387 -662 387 662 +<< labels >> +rlabel metal1 -126 1152 650 1230 1 VDD +port 3 n default input +rlabel metal1 -126 -1038 650 -954 1 VSS +port 4 n +rlabel metal1 224 -336 316 134 1 in +port 1 n +rlabel metal2 310 -420 392 204 1 out +port 2 n +<< end >> diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.pex.sch b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.pex.sch new file mode 100644 index 00000000..cc207f35 --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.pex.sch @@ -0,0 +1,21 @@ +v {xschem version=3.0.0 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +N 560 -1020 600 -1020 { lab=VDD} +N 560 -890 600 -890 { lab=in} +N 560 -760 600 -760 { lab=VSS} +N 840 -890 880 -890 { lab=out} +C {devices/ipin.sym} 560 -890 0 0 {name=p1 lab=in} +C {devices/opin.sym} 880 -890 0 0 {name=p3 lab=out +} +C {devices/ipin.sym} 560 -1020 0 0 {name=p5 lab=VDD +} +C {devices/ipin.sym} 560 -760 0 0 {name=p6 lab=VSS} +C {devices/noconn.sym} 840 -890 0 0 {name=l1} +C {devices/noconn.sym} 600 -1020 0 1 {name=l2} +C {devices/noconn.sym} 600 -890 0 1 {name=l3} +C {devices/noconn.sym} 600 -760 0 1 {name=l4} +C {devices/code.sym} 660 -930 0 0 {name=s1 only_toplevel=false value=".include inv.pex.spice"} diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.pex.sym b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.pex.sym new file mode 100644 index 00000000..a48c5037 --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.pex.sym @@ -0,0 +1,26 @@ +v {xschem version=3.0.0 file_version=1.2 } +G {} +K {type=subcircuit +format="@name @pinlist @symname" +template="name=x1"} +V {} +S {} +E {} +L 4 -130 -30 130 -30 {} +L 4 -130 30 130 30 {} +L 4 -130 -30 -130 30 {} +L 4 130 -30 130 30 {} +L 4 -150 -20 -130 -20 {} +L 4 -150 0 -130 0 {} +L 4 130 -20 150 -20 {} +L 4 -150 20 -130 20 {} +B 5 -152.5 -22.5 -147.5 -17.5 {name=VDD dir=in } +B 5 -152.5 -2.5 -147.5 2.5 {name=in dir=in } +B 5 147.5 -22.5 152.5 -17.5 {name=out dir=out } +B 5 -152.5 17.5 -147.5 22.5 {name=VSS dir=in } +T {@symname} -72 -6 0 0 0.3 0.3 {} +T {@name} 135 -42 0 0 0.2 0.2 {} +T {VDD} -125 -24 0 0 0.2 0.2 {} +T {in} -125 -4 0 0 0.2 0.2 {} +T {out} 125 -24 0 1 0.2 0.2 {} +T {VSS} -125 16 0 0 0.2 0.2 {} diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.sch b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.sch new file mode 100644 index 00000000..7ff4ae84 --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.sch @@ -0,0 +1,46 @@ +v {xschem version=3.0.0 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +N 720 -800 720 -760 { lab=VSS} +N 720 -1020 720 -980 { lab=VDD} +N 720 -950 790 -950 { lab=VDD} +N 790 -1020 790 -950 { lab=VDD} +N 720 -830 790 -830 { lab=VSS} +N 790 -830 790 -760 { lab=VSS} +N 720 -890 720 -860 { lab=out} +N 660 -950 680 -950 { lab=in} +N 660 -890 660 -830 { lab=in} +N 660 -830 680 -830 { lab=in} +N 720 -890 880 -890 { lab=out} +N 720 -1020 790 -1020 { lab=VDD} +N 720 -760 790 -760 { lab=VSS} +N 660 -950 660 -890 { lab=in} +N 720 -920 720 -890 { lab=out} +N 560 -760 720 -760 { lab=VSS} +N 560 -890 660 -890 { lab=in} +N 560 -1020 720 -1020 { lab=VDD} +C {devices/ipin.sym} 560 -890 0 0 {name=p1 lab=in} +C {devices/opin.sym} 880 -890 0 0 {name=p2 lab=out +} +C {devices/ipin.sym} 560 -1020 0 0 {name=p3 lab=VDD +} +C {devices/ipin.sym} 560 -760 0 0 {name=p4 lab=VSS} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 700 -950 0 0 {name=M10 + +L=0.5 +W=8 +nf=2 mult=1 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 700 -830 0 0 {name=M9 + +L=0.5 +W=2 +nf=1 mult=1 +model=nfet_g5v0d10v5 +spiceprefix=X +} diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.sym b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.sym new file mode 100644 index 00000000..710c1b36 --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/inv.sym @@ -0,0 +1,23 @@ +v {xschem version=3.0.0 file_version=1.2} +K {type=subcircuit +format="@name @pinlist @symname" +template="name=x1" +} +T {@symname} -72 -6 0 0 0.3 0.3 {} +T {@name} 135 -42 0 0 0.2 0.2 {} +L 4 -130 -30 130 -30 {} +L 4 -130 30 130 30 {} +L 4 -130 -30 -130 30 {} +L 4 130 -30 130 30 {} +B 5 -152.5 -22.5 -147.5 -17.5 {name=VDD dir=in } +L 4 -150 -20 -130 -20 {} +T {VDD} -125 -24 0 0 0.2 0.2 {} +B 5 -152.5 -2.5 -147.5 2.5 {name=in dir=in } +L 4 -150 0 -130 0 {} +T {in} -125 -4 0 0 0.2 0.2 {} +B 5 147.5 -22.5 152.5 -17.5 {name=out dir=out } +L 4 130 -20 150 -20 {} +T {out} 125 -24 0 1 0.2 0.2 {} +B 5 -152.5 17.5 -147.5 22.5 {name=VSS dir=in } +L 4 -150 20 -130 20 {} +T {VSS} -125 16 0 0 0.2 0.2 {} diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/sky130_fd_pr__nfet_g5v0d10v5_H9JWFY.mag b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/sky130_fd_pr__nfet_g5v0d10v5_H9JWFY.mag new file mode 100644 index 00000000..817e34d4 --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/sky130_fd_pr__nfet_g5v0d10v5_H9JWFY.mag @@ -0,0 +1,70 @@ +magic +tech sky130A +magscale 1 2 +timestamp 1639595562 +<< pwell >> +rect -278 -427 278 427 +<< mvnmos >> +rect -50 -231 50 169 +<< mvndiff >> +rect -108 157 -50 169 +rect -108 -219 -96 157 +rect -62 -219 -50 157 +rect -108 -231 -50 -219 +rect 50 157 108 169 +rect 50 -219 62 157 +rect 96 -219 108 157 +rect 50 -231 108 -219 +<< mvndiffc >> +rect -96 -219 -62 157 +rect 62 -219 96 157 +<< mvpsubdiff >> +rect -242 333 242 391 +rect -242 -333 -184 333 +rect 184 -333 242 333 +rect -242 -345 242 -333 +rect -242 -379 -134 -345 +rect 134 -379 242 -345 +rect -242 -391 242 -379 +<< mvpsubdiffcont >> +rect -134 -379 134 -345 +<< poly >> +rect -50 241 50 257 +rect -50 207 -34 241 +rect 34 207 50 241 +rect -50 169 50 207 +rect -50 -257 50 -231 +<< polycont >> +rect -34 207 34 241 +<< locali >> +rect -50 207 -34 241 +rect 34 207 50 241 +rect -96 157 -62 173 +rect -96 -235 -62 -219 +rect 62 157 96 173 +rect 62 -235 96 -219 +rect -150 -379 -134 -345 +rect 134 -379 150 -345 +<< viali >> +rect -34 207 34 241 +rect -96 -219 -62 157 +rect 62 -219 96 157 +<< metal1 >> +rect -46 241 46 247 +rect -46 207 -34 241 +rect 34 207 46 241 +rect -46 201 46 207 +rect -102 157 -56 169 +rect -102 -219 -96 157 +rect -62 -219 -56 157 +rect -102 -231 -56 -219 +rect 56 157 102 169 +rect 56 -219 62 157 +rect 96 -219 102 157 +rect 56 -231 102 -219 +<< properties >> +string gencell sky130_fd_pr__nfet_g5v0d10v5 +string FIXED_BBOX -213 -362 213 362 +string parameters w 2 l 0.50 m 1 nf 1 diffcov 100 polycov 100 guard 1 glc 0 grc 0 gtc 0 gbc 1 tbcov 100 rlcov 100 topc 1 botc 0 poverlap 0 doverlap 1 lmin 0.50 wmin 0.42 compatible {sky130_fd_pr__nfet_01v8 sky130_fd_pr__nfet_01v8_lvt sky130_fd_bs_flash__special_sonosfet_star sky130_fd_pr__nfet_g5v0d10v5 sky130_fd_pr__nfet_05v0_nvt sky130_fd_pr__nfet_03v3_nvt} full_metal 0 viasrc 100 viadrn 100 viagate 100 viagb 0 viagr 0 viagl 0 viagt 0 +string library sky130 +<< end >> diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/sky130_fd_pr__pfet_g5v0d10v5_5AEDG4.mag b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/sky130_fd_pr__pfet_g5v0d10v5_5AEDG4.mag new file mode 100644 index 00000000..e87fb0b5 --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/sky130_fd_pr__pfet_g5v0d10v5_5AEDG4.mag @@ -0,0 +1,96 @@ +magic +tech sky130A +magscale 1 2 +timestamp 1639595562 +<< nwell >> +rect -387 -662 387 662 +<< mvpmos >> +rect -129 -364 -29 436 +rect 29 -364 129 436 +<< mvpdiff >> +rect -187 424 -129 436 +rect -187 -352 -175 424 +rect -141 -352 -129 424 +rect -187 -364 -129 -352 +rect -29 424 29 436 +rect -29 -352 -17 424 +rect 17 -352 29 424 +rect -29 -364 29 -352 +rect 129 424 187 436 +rect 129 -352 141 424 +rect 175 -352 187 424 +rect 129 -364 187 -352 +<< mvpdiffc >> +rect -175 -352 -141 424 +rect -17 -352 17 424 +rect 141 -352 175 424 +<< mvnsubdiff >> +rect -321 584 321 596 +rect -321 550 -213 584 +rect 213 550 321 584 +rect -321 538 321 550 +rect -321 -538 -263 538 +rect 263 -538 321 538 +rect -321 -596 321 -538 +<< mvnsubdiffcont >> +rect -213 550 213 584 +<< poly >> +rect -129 436 -29 462 +rect 29 436 129 462 +rect -129 -411 -29 -364 +rect -129 -445 -113 -411 +rect -45 -445 -29 -411 +rect -129 -461 -29 -445 +rect 29 -411 129 -364 +rect 29 -445 45 -411 +rect 113 -445 129 -411 +rect 29 -461 129 -445 +<< polycont >> +rect -113 -445 -45 -411 +rect 45 -445 113 -411 +<< locali >> +rect -229 550 -213 584 +rect 213 550 229 584 +rect -175 424 -141 440 +rect -175 -368 -141 -352 +rect -17 424 17 440 +rect -17 -368 17 -352 +rect 141 424 175 440 +rect 141 -368 175 -352 +rect -129 -445 -113 -411 +rect -45 -445 -29 -411 +rect 29 -445 45 -411 +rect 113 -445 129 -411 +<< viali >> +rect -175 -352 -141 424 +rect -17 -352 17 424 +rect 141 -352 175 424 +rect -113 -445 -45 -411 +rect 45 -445 113 -411 +<< metal1 >> +rect -181 424 -135 436 +rect -181 -352 -175 424 +rect -141 -352 -135 424 +rect -181 -364 -135 -352 +rect -23 424 23 436 +rect -23 -352 -17 424 +rect 17 -352 23 424 +rect -23 -364 23 -352 +rect 135 424 181 436 +rect 135 -352 141 424 +rect 175 -352 181 424 +rect 135 -364 181 -352 +rect -125 -411 -33 -405 +rect -125 -445 -113 -411 +rect -45 -445 -33 -411 +rect -125 -451 -33 -445 +rect 33 -411 125 -405 +rect 33 -445 45 -411 +rect 113 -445 125 -411 +rect 33 -451 125 -445 +<< properties >> +string gencell sky130_fd_pr__pfet_g5v0d10v5 +string FIXED_BBOX -292 -567 292 567 +string parameters w 4 l 0.50 m 1 nf 2 diffcov 100 polycov 100 guard 1 glc 0 grc 0 gtc 1 gbc 0 tbcov 100 rlcov 100 topc 0 botc 1 poverlap 0 doverlap 1 lmin 0.50 wmin 0.42 compatible {sky130_fd_pr__pfet_01v8 sky130_fd_pr__pfet_01v8_lvt sky130_fd_pr__pfet_01v8_hvt sky130_fd_pr__pfet_g5v0d10v5} full_metal 0 viasrc 100 viadrn 100 viagate 100 viagb 0 viagr 0 viagl 0 viagt 0 +string library sky130 +<< end >> diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/tb_inv.sch b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/tb_inv.sch new file mode 100644 index 00000000..f79138c4 --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/tb_inv.sch @@ -0,0 +1,78 @@ +v {xschem version=3.0.0 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +T {(c) 2021 Harald Pretl, JKU, IIC + +Inverter Testbench + +Here a simple inverter (cell "inv") is instantiated as a symbol, and this +can be simulated.} 140 -690 0 0 0.4 0.4 {} +N 240 -100 240 -40 { lab=GND} +N 240 -40 360 -40 { lab=GND} +N 360 -100 360 -40 { lab=GND} +N 360 -200 360 -160 { lab=in} +N 240 -380 240 -160 { lab=vdd_hi} +N 360 -40 600 -40 { lab=GND} +N 360 -200 620 -200 { lab=in} +N 600 -180 620 -180 { lab=GND} +N 600 -180 600 -40 { lab=GND} +N 600 -220 620 -220 { lab=vdd_hi} +N 600 -380 600 -220 { lab=vdd_hi} +N 240 -380 600 -380 { lab=vdd_hi} +N 240 -40 240 -20 { lab=GND} +N 600 -40 1020 -40 { lab=GND} +N 1020 -100 1020 -40 { lab=GND} +N 1020 -220 1020 -160 { lab=out} +N 920 -220 1020 -220 { lab=out} +C {devices/code.sym} -230 -190 0 0 {name=TT_MODELS +only_toplevel=true +format="tcleval( @value )" +value="** manual skywater pdks install (with patches applied) +* .lib \\\\$::SKYWATER_MODELS\\\\/models/sky130.lib.spice tt + +** opencircuitdesign pdks install +.lib \\\\$::SKYWATER_MODELS\\\\/sky130.lib.spice.tt.red tt + +.param mc_mm_switch=0 +.param mc_pr_switch=0 +" +spice_ignore=false} +C {devices/launcher.sym} -150 -30 0 0 {name=h2 +descr="Simulate" +tclcommand="xschem netlist; xschem simulate"} +C {devices/vsource.sym} 240 -130 0 0 {name=V2 value=5 +} +C {devices/lab_wire.sym} 310 -380 0 0 {name=l2 lab=vdd_hi} +C {devices/code_shown.sym} -250 -470 0 0 {name=NGSPICE +only_toplevel=true +value=" +.control +set noaskquit +set filetype=ascii +save all + +op +tran 0.1n 1u + +write tb_inv.raw +exit + +.endc +"} +C {devices/lab_wire.sym} 400 -200 0 0 {name=l3 lab=in} +C {devices/vsource.sym} 360 -130 0 0 {name=V5 +value1="dc 5 " +value="dc 5 pulse 5 0 0 1n 1n 0.05u 0.1u"} +C {inv.sym} 770 -200 0 0 {name=x1} +C {devices/gnd.sym} 240 -20 0 0 {name=l1 lab=GND} +C {devices/capa.sym} 1020 -130 0 0 {name=C1 +m=1 +value=10f + +footprint=1206 +device="ceramic capacitor"} +C {devices/lab_wire.sym} 990 -220 0 0 {name=l4 lab=out +} diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/tb_inv_pex.sch b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/tb_inv_pex.sch new file mode 100644 index 00000000..d1b9c769 --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/tb_inv_pex.sch @@ -0,0 +1,78 @@ +v {xschem version=3.0.0 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +T {(c) 2021 Harald Pretl, JKU, IIC + +Inverter Testbench + +Here a simple inverter (cell "inv") is instantiated as a symbol, and this +can be simulated.} 140 -690 0 0 0.4 0.4 {} +N 240 -100 240 -40 { lab=GND} +N 240 -40 360 -40 { lab=GND} +N 360 -100 360 -40 { lab=GND} +N 360 -200 360 -160 { lab=in} +N 240 -380 240 -160 { lab=vdd_hi} +N 360 -40 600 -40 { lab=GND} +N 360 -200 620 -200 { lab=in} +N 600 -180 620 -180 { lab=GND} +N 600 -180 600 -40 { lab=GND} +N 600 -220 620 -220 { lab=vdd_hi} +N 600 -380 600 -220 { lab=vdd_hi} +N 240 -380 600 -380 { lab=vdd_hi} +N 240 -40 240 -20 { lab=GND} +N 600 -40 1020 -40 { lab=GND} +N 1020 -100 1020 -40 { lab=GND} +N 1020 -220 1020 -160 { lab=out} +N 920 -220 1020 -220 { lab=out} +C {devices/code.sym} -230 -190 0 0 {name=TT_MODELS +only_toplevel=true +format="tcleval( @value )" +value="** manual skywater pdks install (with patches applied) +* .lib \\\\$::SKYWATER_MODELS\\\\/models/sky130.lib.spice tt + +** opencircuitdesign pdks install +.lib \\\\$::SKYWATER_MODELS\\\\/sky130.lib.spice.tt.red tt + +.param mc_mm_switch=0 +.param mc_pr_switch=0 +" +spice_ignore=false} +C {devices/launcher.sym} -150 -30 0 0 {name=h2 +descr="Simulate" +tclcommand="xschem netlist; xschem simulate"} +C {devices/vsource.sym} 240 -130 0 0 {name=V2 value=5 +} +C {devices/lab_wire.sym} 310 -380 0 0 {name=l2 lab=vdd_hi} +C {devices/code_shown.sym} -250 -470 0 0 {name=NGSPICE +only_toplevel=true +value=" +.control +set noaskquit +set filetype=ascii +save all + +op +tran 0.1n 1u + +write tb_inv.raw +exit + +.endc +"} +C {devices/lab_wire.sym} 400 -200 0 0 {name=l3 lab=in} +C {devices/vsource.sym} 360 -130 0 0 {name=V5 +value1="dc 5 " +value="dc 5 pulse 5 0 0 1n 1n 0.05u 0.1u"} +C {inv.pex.sym} 770 -200 0 0 {name=x1} +C {devices/gnd.sym} 240 -20 0 0 {name=l1 lab=GND} +C {devices/capa.sym} 1020 -130 0 0 {name=C1 +m=1 +value=10f + +footprint=1206 +device="ceramic capacitor"} +C {devices/lab_wire.sym} 990 -220 0 0 {name=l4 lab=out +} diff --git a/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/tb_most.sch b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/tb_most.sch new file mode 100644 index 00000000..d2ae00a6 --- /dev/null +++ b/docs/examples/04a_analogue_circuit_layout_simulation/sky130nm/tb_most.sch @@ -0,0 +1,106 @@ +v {xschem version=3.0.0 file_version=1.2 } +G {} +K {} +V {} +S {} +E {} +T {(c) 2021 Harald Pretl, JKU, IIC + +MOSFET Testbench + +Use this to explore the dc and ac behavior of the various MOSFET devices. + +CTRL-click on "Simulate" to create netlist and start the simulation.} 100 -720 0 0 0.4 0.4 {} +N 240 -100 240 -40 { lab=GND} +N 240 -40 560 -40 { lab=GND} +N 120 -100 120 -40 { lab=GND} +N 120 -40 240 -40 { lab=GND} +N 710 -40 900 -40 { lab=GND} +N 560 -200 630 -200 { lab=GND} +N 560 -170 560 -40 { lab=GND} +N 240 -200 240 -160 { lab=vgs} +N 240 -200 520 -200 { lab=vgs} +N 120 -300 120 -160 { lab=vds} +N 120 -300 560 -300 { lab=vds} +N 560 -420 560 -300 { lab=vds} +N 900 -420 900 -380 { lab=vds} +N 560 -40 630 -40 { lab=GND} +N 560 -420 820 -420 { lab=vds} +N 760 -420 760 -380 { lab=vds} +N 630 -40 710 -40 { lab=GND} +N 630 -200 640 -200 { lab=GND} +N 640 -200 640 -40 { lab=GND} +N 760 -320 760 -280 { lab=#net1} +N 760 -280 820 -280 { lab=#net1} +N 820 -350 820 -280 { lab=#net1} +N 820 -350 860 -350 { lab=#net1} +N 820 -420 900 -420 { lab=vds} +N 700 -330 720 -330 { lab=GND} +N 700 -330 700 -40 { lab=GND} +N 400 -370 400 -200 { lab=vgs} +N 400 -370 720 -370 { lab=vgs} +N 900 -350 1000 -350 { lab=vds} +N 1000 -420 1000 -350 { lab=vds} +N 900 -420 1000 -420 { lab=vds} +N 560 -300 560 -290 { lab=vds} +N 900 -260 900 -40 { lab=GND} +C {devices/code.sym} -230 -190 0 0 {name=TT_MODELS +only_toplevel=true +format="tcleval( @value )" +value="** manual skywater pdks install (with patches applied) +* .lib \\\\$::SKYWATER_MODELS\\\\/models/sky130.lib.spice tt + +** opencircuitdesign pdks install +.lib \\\\$::SKYWATER_MODELS\\\\/sky130.lib.spice.tt.red tt + +.param mc_mm_switch=0 +.param mc_pr_switch=0 +" +spice_ignore=false} +C {devices/launcher.sym} -150 -30 0 0 {name=h2 +descr="Simulate" +tclcommand="xschem netlist; xschem simulate"} +C {devices/vsource.sym} 240 -130 0 0 {name=Vg value=5 +} +C {devices/code_shown.sym} -240 -590 0 0 {name=NGSPICE only_toplevel=true value=" +.control + +set noaskquit +set filetype=ascii +save all + +op +dc Vd 0 5 0.01 Vg 0 5 1 + +write tb_most.raw + +plot i(Vnid) +plot i(Vpid) + +* exit + +.endc +"} +C {devices/vsource.sym} 120 -130 0 0 {name=Vd + value=5 +} +C {sky130_fd_pr/nfet_g5v0d10v5.sym} 540 -200 0 0 {name=M1 +L=0.5 +W=5 +nf=1 mult=1 +model=nfet_g5v0d10v5 +spiceprefix=X +} +C {sky130_fd_pr/pfet_g5v0d10v5.sym} 880 -350 0 0 {name=M9 +L=0.5 +W=5 +nf=1 mult=1 +model=pfet_g5v0d10v5 +spiceprefix=X +} +C {devices/lab_wire.sym} 470 -200 0 0 {name=l2 lab=vgs} +C {devices/lab_wire.sym} 470 -300 0 0 {name=l3 lab=vds} +C {devices/vcvs.sym} 760 -350 0 0 {name=E1 value=1} +C {devices/gnd.sym} 160 -40 0 0 {name=l4 lab=GND} +C {devices/ammeter.sym} 900 -290 0 0 {name=Vpid} +C {devices/ammeter.sym} 560 -260 0 0 {name=Vnid}