2023-04-09 23:57:34 +02:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "uINjDJNf39eD"
},
"source": [
2023-04-23 14:52:13 +02:00
"# Semicustom digital design demo using OpenROAD\n",
"\n",
"## Sources\n",
"\n",
2023-04-09 23:57:34 +02:00
"### RTL description (Verilog)\n",
"\n",
2023-04-23 14:52:13 +02:00
"The OpenROAD workflow takes the circuit's RTL description as an input. For instance, it can be a three bits XOR gate.\n",
"\n",
"\n",
"<blockquote><details>\n",
"\n",
"<summary>\n",
" \n",
"#### ↕️ Types in Verilog\n",
"\n",
"</summary>\n",
" \n",
"```verilog\n",
"// Three scalar nets\n",
"wire op_b, op_a, result;\n",
"// One 16-bit net\n",
"wire [15:0] word_bus;\n",
"// 1K-array of 8-bit nets\n",
"wire [7:0] byte_array [0:1023];\n",
"```\n",
" \n",
"</details></blockquote>\n",
"\n",
"<blockquote><details>\n",
"\n",
"<summary>\n",
" \n",
"#### ↕️ Assignation (non-blocking) in Verilog\n",
"\n",
"</summary>\n",
" \n",
"```verilog\n",
"// 16-bit, hexadecimal constant\n",
"assign address = 16'hCAFE;\n",
"// Unsized, decimal constant\n",
"assign counter = 'd42;\n",
"// 1-bit, binary constant\n",
"assign answer = 1'b1;\n",
"\n",
"// Ternary assignation\n",
"assign muxed = which ? source_1 : source_2;\n",
"\n",
"// Concatenation\n",
"assign padded_packet = {5'b00000,body,suffix};\n",
"// Replication\n",
"assign odd_mask = {10{2'b10}};\n",
"\n",
"// Indexing\n",
"assign one_bit = bus[4];\n",
"assign bits = bus[15:12];\n",
"```\n",
" \n",
"</details></blockquote>\n",
"\n",
"<blockquote><details>\n",
"\n",
"<summary>\n",
" \n",
"#### ↕️ Operators in Verilog\n",
"\n",
"</summary>\n",
" \n",
"```verilog\n",
"// Addition, substraction, negation\n",
"assign sum = op_a + op_b; assign sub = op_a + op_b; assign opp = -op_a\n",
"// Multiplication, division, modulo\n",
"assign prod = op_a * op_b; assign div = op_a / op_b; assign rem = op_a & op_b\n",
" \n",
"// Bitwise not, or, and, xor\n",
"assign n = ~m; assign a = b | c; assign d = e & f; assign x = y ^ z\n",
"\n",
"// Logical not, and, or\n",
"assign ans = !v; assign ans = v || w; assign ans = v && w;\n",
"// Logical equality, difference\n",
"assign ans = v == w; assign ans = v != w;\n",
"// Relations (strictly) greater, (strictly) lower than\n",
"assign sg = a > b; assign gt = a >= b; assign sl = a < b; assign lt = a <= b;\n",
" \n",
"// Left, right shift by n bits\n",
"assign l << n; assign r >> n;\n",
"// Left, right arithmetic shift by n bits\n",
"assign l <<< n; assign r >>> n;\n",
"```\n",
" \n",
"</details></blockquote>"
2023-04-09 23:57:34 +02:00
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 1,
2023-04-09 23:57:34 +02:00
"metadata": {
"id": "gpgkIYB739Ii"
},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing v/xor3.v\n"
]
}
],
2023-04-09 23:57:34 +02:00
"source": [
2023-04-23 14:52:13 +02:00
"%%writefile v/xor3.v\n",
"module xor3(\n",
2023-04-09 23:57:34 +02:00
" input wire a,\n",
" input wire b,\n",
" input wire c,\n",
" output wire out\n",
");\n",
" assign out = a ^ b ^ c;\n",
"endmodule"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hp8h5vH8TUXr"
},
"source": [
"### Configuration file (JSON)\n",
"\n",
"A configuration file should be provided. It describes constraints and strategies applied during synthesis and implementation of the circuit."
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 2,
2023-04-09 23:57:34 +02:00
"metadata": {
"id": "rbT-vP0h0enK"
},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing build/config.json\n"
]
}
],
2023-04-09 23:57:34 +02:00
"source": [
2023-04-30 19:18:38 +02:00
"%%writefile build/config.json\n",
2023-04-09 23:57:34 +02:00
"{\n",
2023-04-23 14:52:13 +02:00
" \"DESIGN_NAME\": \"xor3\",\n",
2023-04-30 19:18:38 +02:00
" \"VERILOG_FILES\": \"dir::../v/xor3.v\",\n",
2023-04-09 23:57:34 +02:00
" \"CLOCK_TREE_SYNTH\": false,\n",
" \"CLOCK_PORT\": null,\n",
" \"FP_SIZING\": \"absolute\",\n",
2023-04-30 19:18:38 +02:00
" \"DIE_AREA\": \"0 0 25 35\",\n",
2023-04-09 23:57:34 +02:00
" \"FP_PDN_AUTO_ADJUST\": false,\n",
2023-04-30 19:18:38 +02:00
" \"FP_PDN_VOFFSET\": 0,\n",
" \"FP_PDN_HOFFSET\": 0,\n",
2023-04-09 23:57:34 +02:00
" \"DIODE_INSERTION_STRATEGY\": 3\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Workflow\n",
"The provided `flow.tcl` is a script describing the OpenROAD workflow. A _GDS_ file will be generated using the RTL circuit description, the PDK and the configuration file."
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 3,
2023-04-09 23:57:34 +02:00
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "VP60fdObiP15",
"outputId": "41aa85e4-c663-4778-d448-928dbe474b11"
},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"env: PDK=sky130A\n",
"OpenLane 2023.04.07_0_gcb634fd5-conda\n",
"All rights reserved. (c) 2020-2022 Efabless Corporation and contributors.\n",
"Available under the Apache License, version 2.0. See the LICENSE file for more details.\n",
"\n",
"\u001b[36m[INFO]: Using configuration in 'build/config.json'...\u001b[39m\n",
"\u001b[36m[INFO]: PDK Root: /home/pierre/anaconda3/envs/semicustom/share/pdk\u001b[39m\n",
"\u001b[36m[INFO]: Process Design Kit: sky130A\u001b[39m\n",
"\u001b[36m[INFO]: Standard Cell Library: sky130_fd_sc_hd\u001b[39m\n",
"\u001b[36m[INFO]: Optimization Standard Cell Library: sky130_fd_sc_hd\u001b[39m\n",
"\u001b[33m[WARNING]: DIODE_INSERTION_STRATEGY is now deprecated; use GRT_REPAIR_ANTENNAS, DIODE_ON_PORTS and RUN_HEURISTIC_DIODE_INSERTION instead.\u001b[39m\n",
"\u001b[36m[INFO]: DIODE_INSERTION_STRATEGY set to 3. Setting GRT_REPAIR_ANTENNAS to 1\u001b[39m\n",
"\u001b[36m[INFO]: Run Directory: /home/pierre/Documents/freechips/semicustom/build/runs/RUN_2023.04.30_19.27.15\u001b[39m\n",
"\u001b[36m[INFO]: Preparing LEF files for the nom corner...\u001b[39m\n",
"\u001b[36m[INFO]: Preparing LEF files for the min corner...\u001b[39m\n",
"\u001b[36m[INFO]: Preparing LEF files for the max corner...\u001b[39m\n",
"[STEP 1]\n",
"\u001b[36m[INFO]: Running Synthesis (log: build/runs/RUN_2023.04.30_19.27.15/logs/synthesis/1-synthesis.log)...\u001b[39m\n",
"[STEP 2]\n",
"\u001b[36m[INFO]: Running Single-Corner Static Timing Analysis (log: build/runs/RUN_2023.04.30_19.27.15/logs/synthesis/2-sta.log)...\u001b[39m\n",
"[STEP 3]\n",
"\u001b[36m[INFO]: Running Initial Floorplanning (log: build/runs/RUN_2023.04.30_19.27.15/logs/floorplan/3-initial_fp.log)...\u001b[39m\n",
"\u001b[36m[INFO]: Floorplanned with width 13.8 and height 10.88.\u001b[39m\n",
"[STEP 4]\n",
"\u001b[36m[INFO]: Running IO Placement...\u001b[39m\n",
"[STEP 5]\n",
"\u001b[36m[INFO]: Running Tap/Decap Insertion (log: build/runs/RUN_2023.04.30_19.27.15/logs/floorplan/5-tap.log)...\u001b[39m\n",
"\u001b[36m[INFO]: Power planning with power {VPWR} and ground {VGND}...\u001b[39m\n",
"[STEP 6]\n",
"\u001b[36m[INFO]: Generating PDN (log: build/runs/RUN_2023.04.30_19.27.15/logs/floorplan/6-pdn.log)...\u001b[39m\n",
"[STEP 7]\n",
"\u001b[36m[INFO]: Running Global Placement (log: build/runs/RUN_2023.04.30_19.27.15/logs/placement/7-global.log)...\u001b[39m\n",
"[STEP 8]\n",
"\u001b[36m[INFO]: Running Single-Corner Static Timing Analysis (log: build/runs/RUN_2023.04.30_19.27.15/logs/placement/8-sta-global.log)...\u001b[39m\n",
"[STEP 9]\n",
"\u001b[36m[INFO]: Running Placement Resizer Design Optimizations (log: build/runs/RUN_2023.04.30_19.27.15/logs/placement/9-resizer.log)...\u001b[39m\n",
"[STEP 10]\n",
"\u001b[36m[INFO]: Running Detailed Placement (log: build/runs/RUN_2023.04.30_19.27.15/logs/placement/10-detailed.log)...\u001b[39m\n",
"[STEP 11]\n",
"\u001b[36m[INFO]: Running Single-Corner Static Timing Analysis (log: build/runs/RUN_2023.04.30_19.27.15/logs/placement/11-sta.log)...\u001b[39m\n",
"[STEP 12]\n",
"\u001b[36m[INFO]: Running Placement Resizer Timing Optimizations (log: build/runs/RUN_2023.04.30_19.27.15/logs/cts/12-resizer.log)...\u001b[39m\n",
"[STEP 13]\n",
"\u001b[36m[INFO]: Running Global Routing Resizer Design Optimizations (log: build/runs/RUN_2023.04.30_19.27.15/logs/routing/13-resizer_design.log)...\u001b[39m\n",
"[STEP 14]\n",
"\u001b[36m[INFO]: Running Single-Corner Static Timing Analysis (log: build/runs/RUN_2023.04.30_19.27.15/logs/routing/14-sta-resizer_design.log)...\u001b[39m\n",
"[STEP 15]\n",
"\u001b[36m[INFO]: Running Global Routing Resizer Timing Optimizations (log: build/runs/RUN_2023.04.30_19.27.15/logs/routing/15-resizer_timing.log)...\u001b[39m\n",
"[STEP 16]\n",
"\u001b[36m[INFO]: Running Single-Corner Static Timing Analysis (log: build/runs/RUN_2023.04.30_19.27.15/logs/routing/16-sta-resizer_timing.log)...\u001b[39m\n",
"[STEP 17]\n",
"\u001b[36m[INFO]: Running Global Routing (log: build/runs/RUN_2023.04.30_19.27.15/logs/routing/17-global.log)...\u001b[39m\n",
"\u001b[36m[INFO]: Starting OpenROAD Antenna Repair Iterations...\u001b[39m\n",
"[STEP 18]\n",
"\u001b[36m[INFO]: Writing Verilog (log: build/runs/RUN_2023.04.30_19.27.15/logs/routing/17-global_write_netlist.log)...\u001b[39m\n",
"[STEP 19]\n",
"\u001b[36m[INFO]: Running Single-Corner Static Timing Analysis (log: build/runs/RUN_2023.04.30_19.27.15/logs/routing/19-sta-groute.log)...\u001b[39m\n",
"[STEP 20]\n",
"\u001b[36m[INFO]: Running Fill Insertion (log: build/runs/RUN_2023.04.30_19.27.15/logs/routing/20-fill.log)...\u001b[39m\n",
"[STEP 21]\n",
"\u001b[36m[INFO]: Running Detailed Routing (log: build/runs/RUN_2023.04.30_19.27.15/logs/routing/21-detailed.log)...\u001b[39m\n",
"\u001b[36m[INFO]: No DRC violations after detailed routing.\u001b[39m\n",
"[STEP 22]\n",
"\u001b[36m[INFO]: Checking Wire Lengths (log: build/runs/RUN_2023.04.30_19.27.15/logs/routing/22-wire_lengths.log)...\u001b[39m\n",
"[STEP 23]\n",
"\u001b[36m[INFO]: Running SPEF Extraction at the min process corner (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/23-parasitics_extraction.min.log)...\u001b[39m\n",
"[STEP 24]\n",
"\u001b[36m[INFO]: Running Multi-Corner Static Timing Analysis at the min process corner (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/24-rcx_mcsta.min.log)...\u001b[39m\n",
"[STEP 25]\n",
"\u001b[36m[INFO]: Running SPEF Extraction at the max process corner (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/25-parasitics_extraction.max.log)...\u001b[39m\n",
"[STEP 26]\n",
"\u001b[36m[INFO]: Running Multi-Corner Static Timing Analysis at the max process corner (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/26-rcx_mcsta.max.log)...\u001b[39m\n",
"[STEP 27]\n",
"\u001b[36m[INFO]: Running SPEF Extraction at the nom process corner (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/27-parasitics_extraction.nom.log)...\u001b[39m\n",
"[STEP 28]\n",
"\u001b[36m[INFO]: Running Multi-Corner Static Timing Analysis at the nom process corner (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/28-rcx_mcsta.nom.log)...\u001b[39m\n",
"[STEP 29]\n",
"\u001b[36m[INFO]: Running Single-Corner Static Timing Analysis at the nom process corner (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/29-rcx_sta.log)...\u001b[39m\n",
"\u001b[33m[WARNING]: Module sky130_ef_sc_hd__decap_12 blackboxed during sta\u001b[39m\n",
"\u001b[33m[WARNING]: Module sky130_fd_sc_hd__fill_1 blackboxed during sta\u001b[39m\n",
"\u001b[33m[WARNING]: Module sky130_fd_sc_hd__fill_2 blackboxed during sta\u001b[39m\n",
"[STEP 30]\n",
"\u001b[36m[INFO]: Creating IR Drop Report (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/30-irdrop.log)...\u001b[39m\n",
"[STEP 31]\n",
"\u001b[36m[INFO]: Running Magic to generate various views...\u001b[39m\n",
"\u001b[36m[INFO]: Streaming out GDSII with Magic (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/31-gdsii.log)...\u001b[39m\n",
"\u001b[36m[INFO]: Generating MAGLEF views...\u001b[39m\n",
"[STEP 32]\n",
"\u001b[36m[INFO]: Streaming out GDSII with KLayout (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/32-gdsii-klayout.log)...\u001b[39m\n",
"[STEP 33]\n",
"\u001b[36m[INFO]: Running XOR on the layouts using KLayout (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/33-xor.log)...\u001b[39m\n",
"\u001b[36m[INFO]: No XOR differences between KLayout and Magic gds.\u001b[39m\n",
"[STEP 34]\n",
"\u001b[36m[INFO]: Running Magic Spice Export from LEF (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/34-spice.log)...\u001b[39m\n",
"[STEP 35]\n",
"\u001b[36m[INFO]: Writing Powered Verilog (logs: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/35-write_powered_def.log, build/runs/RUN_2023.04.30_19.27.15/logs/signoff/35-write_powered_verilog.log)...\u001b[39m\n",
"[STEP 36]\n",
"\u001b[36m[INFO]: Writing Verilog (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/35-write_powered_verilog.log)...\u001b[39m\n",
"[STEP 37]\n",
"\u001b[36m[INFO]: Running LVS (log: build/runs/RUN_2023.04.30_19.27.15/logs/signoff/37-lvs.lef.log)...\u001b[39m\n",
"\u001b[31m[ERROR]: There are LVS errors in the design: See 'build/runs/RUN_2023.04.30_19.27.15/reports/signoff/37-xor3.lvs.rpt' for a summary and 'build/runs/RUN_2023.04.30_19.27.15/logs/signoff/37-lvs.lef.log' for details.\u001b[39m\n",
"\u001b[31m[ERROR]: Step(37:lvs) failed with error:\n",
"-code 1 -level 0 -errorstack {INNER {invokeStk1 throw_error} CALL {quit_on_lvs_error -rpt /home/pierre/Documents/freechips/semicustom/build/runs/RUN_2023.04.30_19.27.15/reports/signoff/37-xor3.lvs.rpt -log /home/pierre/Documents/freechips/semicustom/build/runs/RUN_2023.04.30_19.27.15/logs/signoff/37-lvs.lef.log} CALL run_lvs CALL run_lvs_step CALL {run_non_interactive_mode -design build}} -errorcode NONE -errorinfo {\n",
" while executing\n",
"\"throw_error\"\n",
" (procedure \"quit_on_lvs_error\" line 13)\n",
" invoked from within\n",
"\"quit_on_lvs_error -rpt $count_lvs_rpt -log $log\"\n",
" (procedure \"run_lvs\" line 76)\n",
" invoked from within\n",
"\"run_lvs\"\n",
" (procedure \"run_lvs_step\" line 10)\n",
" invoked from within\n",
"\"run_lvs_step\"} -errorline 1\u001b[39m\n",
"\u001b[36m[INFO]: Saving current set of views in 'build/runs/RUN_2023.04.30_19.27.15/results/final'...\u001b[39m\n",
"\u001b[36m[INFO]: Generating final set of reports...\u001b[39m\n",
"\u001b[36m[INFO]: Created manufacturability report at 'build/runs/RUN_2023.04.30_19.27.15/reports/manufacturability.rpt'.\u001b[39m\n",
"\u001b[36m[INFO]: Created metrics report at 'build/runs/RUN_2023.04.30_19.27.15/reports/metrics.csv'.\u001b[39m\n",
"\u001b[36m[INFO]: Saving runtime environment...\u001b[39m\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[31m[ERROR]: Flow failed.\u001b[39m\r",
"\r\n",
"\u001b[36m[INFO]: The failure may have been because of the following warnings:\u001b[39m\r",
"\r\n",
"[WARNING]: Module sky130_ef_sc_hd__decap_12 blackboxed during sta\r",
"\r\n",
"[WARNING]: Module sky130_fd_sc_hd__fill_1 blackboxed during sta\r",
"\r\n",
"[WARNING]: Module sky130_fd_sc_hd__fill_2 blackboxed during sta\r",
"\r\n",
"\r",
"\r\n"
]
}
],
2023-04-09 23:57:34 +02:00
"source": [
"%env PDK=sky130A\n",
2023-04-30 19:18:38 +02:00
"!flow.tcl -design build"
2023-04-09 23:57:34 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "luguFgZ43AeL"
},
"source": [
2023-04-23 14:52:13 +02:00
"## Output products\n",
"\n",
2023-04-09 23:57:34 +02:00
"### Display layout\n",
"\n",
"The implemented layout can be retrieved as follows:"
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 4,
2023-04-09 23:57:34 +02:00
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 650
},
"id": "WOnhdtp3ivRi",
"outputId": "b4bd26f8-d3da-47b7-e321-99272b0591ef",
"scrolled": false
},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"data": {
"image/svg+xml": [
"<svg height=\"385\" viewBox=\"-17.5 -367.5 285 385\" width=\"285\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<defs>\n",
"<style type=\"text/css\">\n",
".l235d4 {stroke: #0067A5; fill: #0067A5; fill-opacity: 0.5;}\n",
".l67d44 {stroke: #875692; fill: #875692; fill-opacity: 0.5;}\n",
".l69d44 {stroke: #A1CAF1; fill: #A1CAF1; fill-opacity: 0.5;}\n",
".l122d16 {stroke: #F6A600; fill: #F6A600; fill-opacity: 0.5;}\n",
".l93d44 {stroke: #008856; fill: #008856; fill-opacity: 0.5;}\n",
".l78d44 {stroke: #F6A600; fill: #F6A600; fill-opacity: 0.5;}\n",
".l236d0 {stroke: #E25822; fill: #E25822; fill-opacity: 0.5;}\n",
".l66d44 {stroke: #F3C300; fill: #F3C300; fill-opacity: 0.5;}\n",
".l68d44 {stroke: #F38400; fill: #F38400; fill-opacity: 0.5;}\n",
".l95d20 {stroke: #654522; fill: #654522; fill-opacity: 0.5;}\n",
".l70d44 {stroke: #BE0032; fill: #BE0032; fill-opacity: 0.5;}\n",
".l69d16 {stroke: #2B3D26; fill: #2B3D26; fill-opacity: 0.5;}\n",
".l68d16 {stroke: #E25822; fill: #E25822; fill-opacity: 0.5;}\n",
".l67d20 {stroke: #0067A5; fill: #0067A5; fill-opacity: 0.5;}\n",
".l71d16 {stroke: #875692; fill: #875692; fill-opacity: 0.5;}\n",
".l69d20 {stroke: #604E97; fill: #604E97; fill-opacity: 0.5;}\n",
".l68d20 {stroke: #F99379; fill: #F99379; fill-opacity: 0.5;}\n",
".l71d20 {stroke: #B3446C; fill: #B3446C; fill-opacity: 0.5;}\n",
".l70d20 {stroke: #F6A600; fill: #F6A600; fill-opacity: 0.5;}\n",
".l70d16 {stroke: #F3C300; fill: #F3C300; fill-opacity: 0.5;}\n",
".l64d16 {stroke: #DCD300; fill: #DCD300; fill-opacity: 0.5;}\n",
".l81d4 {stroke: #882D17; fill: #882D17; fill-opacity: 0.5;}\n",
".l65d20 {stroke: #008856; fill: #008856; fill-opacity: 0.5;}\n",
".l64d20 {stroke: #848482; fill: #848482; fill-opacity: 0.5;}\n",
".l94d20 {stroke: #8DB600; fill: #8DB600; fill-opacity: 0.5;}\n",
".l66d20 {stroke: #E68FAC; fill: #E68FAC; fill-opacity: 0.5;}\n",
".l67d16 {stroke: #654522; fill: #654522; fill-opacity: 0.5;}\n",
".l64t59 {stroke: none; fill: #B3446C;}\n",
".l64t5 {stroke: none; fill: #604E97;}\n",
".l67t5 {stroke: none; fill: #DCD300;}\n",
".l68t5 {stroke: none; fill: #882D17;}\n",
".l69t5 {stroke: none; fill: #8DB600;}\n",
".l70t5 {stroke: none; fill: #654522;}\n",
".l71t5 {stroke: none; fill: #E25822;}\n",
".l83t44 {stroke: none; fill: #654522;}\n",
"</style>\n",
"<g id=\"sky130_fd_sc_hd__decap_8\">\n",
"<polygon class=\"l236d0\" id=\"0x1f68fe0\" points=\"0,0 36.8,0 36.8,27.2 0,27.2\"/>\n",
"<polygon class=\"l68d16\" id=\"0x1f69050\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l68d16\" id=\"0x1fcfdf0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l64d16\" id=\"0x1fcfec0\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l122d16\" id=\"0x1dd0c80\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x20a6540\" points=\"36.8,0.85 35.95,0.85 35.95,8.55 17.35,8.55 17.35,13.75 0.85,13.75 0.85,0.85 0,0.85 0,-0.85 36.8,-0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x20bb660\" points=\"36.8,28.05 0,28.05 0,26.35 0.85,26.35 0.85,15.45 19.05,15.45 19.05,10.25 35.95,10.25 35.95,26.35 36.8,26.35\"/>\n",
"<polygon class=\"l81d4\" id=\"0x230bda0\" points=\"0,0 36.8,0 36.8,27.2 0,27.2\"/>\n",
"<polygon class=\"l65d20\" id=\"0x230be70\" points=\"1.35,16.15 35.45,16.15 35.45,24.85 1.35,24.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x234c8a0\" points=\"1.35,2.35 35.45,2.35 35.45,7.85 1.35,7.85\"/>\n",
"<polygon class=\"l78d44\" id=\"0x234c910\" points=\"0,12.5 36.8,12.5 36.8,27.2 0,27.2\"/>\n",
"<polygon class=\"l93d44\" id=\"0x2352750\" points=\"0,-1.9 36.8,-1.9 36.8,10.15 0,10.15\"/>\n",
"<polygon class=\"l64d20\" id=\"0x2352820\" points=\"-1.9,13.05 38.7,13.05 38.7,29.1 -1.9,29.1\"/>\n",
"<polygon class=\"l94d20\" id=\"0x23ac350\" points=\"0,14.85 36.8,14.85 36.8,29.1 0,29.1\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2401800\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x24018d0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x24032d0\" points=\"6.05,26.35 7.75,26.35 7.75,28.05 6.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x233c370\" points=\"6.05,-0.85 7.75,-0.85 7.75,0.85 6.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x242f0b0\" points=\"10.65,26.35 12.35,26.35 12.35,28.05 10.65,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x24ea400\" points=\"10.65,-0.85 12.35,-0.85 12.35,0.85 10.65,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x24ea4d0\" points=\"15.25,26.35 16.95,26.35 16.95,28.05 15.25,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x25171a0\" points=\"15.25,-0.85 16.95,-0.85 16.95,0.85 15.25,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x26b8e50\" points=\"19.85,26.35 21.55,26.35 21.55,28.05 19.85,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x26b8f20\" points=\"19.85,-0.85 21.55,-0.85 21.55,0.85 19.85,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2787040\" points=\"24.45,26.35 26.15,26.35 26.15,28.05 24.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x27bb830\" points=\"24.45,-0.85 26.15,-0.85 26.15,0.85 24.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x27bb900\" points=\"29.05,26.35 30.75,26.35 30.75,28.05 29.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2907150\" points=\"29.05,-0.85 30.75,-0.85 30.75,0.85 29.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x200dc00\" points=\"33.65,26.35 35.35,26.35 35.35,28.05 33.65,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x200dcd0\" points=\"33.65,-0.85 35.35,-0.85 35.35,0.85 33.65,0.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x20cd600\" points=\"32.85,26.15 3.95,26.15 3.95,11.25 17.15,11.25 17.15,14.85 32.85,14.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x20cb050\" points=\"32.85,12.75 19.25,12.75 19.25,9.15 3.95,9.15 3.95,1.05 32.85,1.05\"/>\n",
"<polygon class=\"l66d44\" id=\"0x20cb140\" points=\"1.75,22.55 3.45,22.55 3.45,24.25 1.75,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23ff080\" points=\"1.75,17.45 3.45,17.45 3.45,19.15 1.75,19.15\"/>\n",
"<polygon class=\"l66d44\" id=\"0x220b4c0\" points=\"1.75,3.9 3.45,3.9 3.45,5.6 1.75,5.6\"/>\n",
"<polygon class=\"l66d44\" id=\"0x220b590\" points=\"4.75,12.05 6.45,12.05 6.45,13.75 4.75,13.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2215a60\" points=\"9.7,12.05 11.4,12.05 11.4,13.75 9.7,13.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x237fe70\" points=\"14.65,12.05 16.35,12.05 16.35,13.75 14.65,13.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x237ff40\" points=\"33.35,3.9 35.05,3.9 35.05,5.6 33.35,5.6\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2430b40\" points=\"20.05,10.25 21.75,10.25 21.75,11.95 20.05,11.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2464750\" points=\"25.2,10.25 26.9,10.25 26.9,11.95 25.2,11.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2464820\" points=\"30.35,10.25 32.05,10.25 32.05,11.95 30.35,11.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x266cdb0\" points=\"33.35,22.55 35.05,22.55 35.05,24.25 33.35,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x26c0320\" points=\"33.35,17.45 35.05,17.45 35.05,19.15 33.35,19.15\"/>\n",
"<polygon class=\"l95d20\" id=\"0x26c03f0\" points=\"36.8,13.45 17.35,13.45 17.35,14.75 0,14.75 0,9.75 19.05,9.75 19.05,9.25 36.8,9.25\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,29.6 0,24.8 36.8,24.8 36.8,29.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,2.4 0,-2.4 36.8,-2.4 36.8,2.4\"/>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x20efe70\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x20eff00\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VGND</text>\n",
"<text class=\"l64t5\" dominant-baseline=\"central\" id=\"0x2228310\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPB</text>\n",
"<text class=\"l64t59\" dominant-baseline=\"central\" id=\"0x22283a0\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VNB</text>\n",
"<text class=\"l83t44\" dominant-baseline=\"text-before-edge\" id=\"0x27796e0\" text-anchor=\"start\" transform=\"translate(0 0) rotate(90) scale(0.1) scale(1 -1)\">decap_8</text>\n",
"</g>\n",
"<g id=\"sky130_fd_sc_hd__xnor2_1\">\n",
"<polygon class=\"l236d0\" id=\"0x232cfb0\" points=\"0,0 32.2,0 32.2,27.2 0,27.2\"/>\n",
"<polygon class=\"l68d16\" id=\"0x23655e0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l68d16\" id=\"0x23de660\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l64d16\" id=\"0x245c4c0\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l122d16\" id=\"0x23fab00\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x246c760\" points=\"31.35,19.55 26.45,19.55 26.45,22.95 22.65,22.95 22.65,21.25 24.75,21.25 24.75,17.55 29.65,17.55 29.65,8.25 28.15,8.25 28.15,3.45 31.35,3.45\"/>\n",
"<polygon class=\"l67d20\" id=\"0x246c7d0\" points=\"27.95,15.85 23.05,15.85 23.05,19.55 8.85,19.55 8.85,24.65 5.55,24.65 5.55,19.55 0.85,19.55 0.85,2.8 5.5,2.8 5.5,8.25 2.55,8.25 2.55,17.85 21.35,17.85 21.35,14.15 26.25,14.15 26.25,9.95 27.95,9.95\"/>\n",
"<polygon class=\"l67d20\" id=\"0x24c9b10\" points=\"26.45,8.25 23.05,8.25 23.05,9.05 13.95,9.05 13.95,2.55 17.25,2.55 17.25,7.35 21.35,7.35 21.35,6.55 24.15,6.55 24.15,2.55 26.45,2.55\"/>\n",
"<polygon class=\"l67d20\" id=\"0x24c9b80\" points=\"23.95,12.45 19.65,12.45 19.65,16.15 4.25,16.15 4.25,9.95 6.7,9.95 6.7,14.45 17.95,14.45 17.95,10.75 23.95,10.75\"/>\n",
"<polygon class=\"l67d20\" id=\"0x250e830\" points=\"9.3,10.75 16.25,10.75 16.25,12.75 9.3,12.75\"/>\n",
"<polygon class=\"l67d20\" id=\"0x25976f0\" points=\"32.2,28.05 0,28.05 0,26.35 0.85,26.35 0.85,21.25 3.85,21.25 3.85,26.35 10.55,26.35 10.55,21.25 16.85,21.25 16.85,26.35 28.15,26.35 28.15,21.25 31.15,21.25 31.15,26.35 32.2,26.35\"/>\n",
"<polygon class=\"l67d20\" id=\"0x25d67d0\" points=\"32.2,0.85 22.45,0.85 22.45,4.75 18.95,4.75 18.95,0.85 12.25,0.85 12.25,9.05 10.55,9.05 10.55,0.85 0,0.85 0,-0.85 32.2,-0.85\"/>\n",
"<polygon class=\"l95d20\" id=\"0x25d6840\" points=\"0,9.75 32.2,9.75 32.2,13.45 0,13.45\"/>\n",
"<polygon class=\"l78d44\" id=\"0x2685e30\" points=\"0,12.5 32.2,12.5 32.2,27.2 0,27.2\"/>\n",
"<polygon class=\"l93d44\" id=\"0x26b71f0\" points=\"0,-1.9 32.2,-1.9 32.2,10.15 0,10.15\"/>\n",
"<polygon class=\"l64d20\" id=\"0x26be6c0\" points=\"-1.9,13.05 34.1,13.05 34.1,29.1 -1.9,29.1\"/>\n",
"<polygon class=\"l94d20\" id=\"0x2847590\" points=\"0,13.55 32.2,13.55 32.2,29.1 0,29.1\"/>\n",
"<polygon class=\"l81d4\" id=\"0x2860130\" points=\"0,0 32.2,0 32.2,27.2 0,27.2\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f171b0\" points=\"29.05,-0.85 30.75,-0.85 30.75,0.85 29.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f388b0\" points=\"29.05,26.35 30.75,26.35 30.75,28.05 29.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f69cc0\" points=\"24.45,-0.85 26.15,-0.85 26.15,0.85 24.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f77c90\" points=\"24.45,26.35 26.15,26.35 26.15,28.05 24.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1fb5310\" points=\"19.85,-0.85 21.55,-0.85 21.55,0.85 19.85,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x200f0c0\" points=\"19.85,26.35 21.55,26.35 21.55,28.05 19.85,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1ee5500\" points=\"15.25,-0.85 16.95,-0.85 16.95,0.85 15.25,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x203ef10\" points=\"15.25,26.35 16.95,26.35 16.95,28.05 15.25,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x208b1f0\" points=\"10.65,-0.85 12.35,-0.85 12.35,0.85 10.65,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2046750\" points=\"10.65,26.35 12.35,26.35 12.35,28.05 10.65,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2058710\" points=\"6.05,-0.85 7.75,-0.85 7.75,0.85 6.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x20b7120\" points=\"6.05,26.35 7.75,26.35 7.75,28.05 6.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x20cbde0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x211f580\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l67d16\" id=\"0x211d6f0\" points=\"6.05,14.45 7.75,14.45 7.75,16.15 6.05,16.15\"/>\n",
"<polygon class=\"l67d16\" id=\"0x1f9da90\" points=\"10.65,11.05 12.35,11.05 12.35,12.75 10.65,12.75\"/>\n",
"<polygon class=\"l67d16\" id=\"0x200b160\" points=\"29.05,17.85 30.75,17.85 30.75,19.55 29.05,19.55\"/>\n",
"<polygon class=\"l65d20\" id=\"0x2141950\" points=\"19.55,2.35 30.85,2.35 30.85,8.85 19.55,8.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x203e4c0\" points=\"1.35,14.85 30.85,14.85 30.85,24.85 1.35,24.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x21742e0\" points=\"2.35,2.35 16.85,2.35 16.85,8.85 2.35,8.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x20ff3e0\" points=\"28.45,13.25 27.25,13.25 27.25,26.15 25.75,26.15 25.75,9.95 26.35,9.95 26.35,1.05 27.85,1.05 27.85,9.95 28.45,9.95\"/>\n",
"<polygon class=\"l66d20\" id=\"0x20ff450\" points=\"23.65,13.25 22.45,13.25 22.45,26.15 20.95,26.15 20.95,9.95 22.15,9.95 22.15,1.05 23.65,1.05\"/>\n",
"<polygon class=\"l66d20\" id=\"0x222b600\" points=\"18.85,26.15 17.35,26.15 17.35,13.25 10.05,13.25 10.05,26.15 8.55,26.15 8.55,1.05 10.05,1.05 10.05,9.95 12.75,9.95 12.75,1.05 14.25,1.05 14.25,9.95 18.85,9.95\"/>\n",
"<polygon class=\"l66d20\" id=\"0x222b670\" points=\"6.45,13.25 5.85,13.25 5.85,26.15 4.35,26.15 4.35,13.25 3.75,13.25 3.75,9.95 4.95,9.95 4.95,1.05 6.45,1.05\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2336ba0\" points=\"28.75,4.7 30.45,4.7 30.45,6.4 28.75,6.4\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2336080\" points=\"28.15,22.05 29.85,22.05 29.85,23.75 28.15,23.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23472e0\" points=\"26.25,10.75 27.95,10.75 27.95,12.45 26.25,12.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x238ed60\" points=\"24.15,4.7 25.85,4.7 25.85,6.4 24.15,6.4\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23967c0\" points=\"23.55,21.25 25.25,21.25 25.25,22.95 23.55,22.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23ad060\" points=\"21.45,10.75 23.15,10.75 23.15,12.45 21.45,12.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x24f4970\" points=\"19.95,3.05 21.65,3.05 21.65,4.75 19.95,4.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x24a2400\" points=\"15.15,22.05 16.85,22.05 16.85,23.75 15.15,23.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2512f00\" points=\"14.75,3.05 16.45,3.05 16.45,4.75 14.75,4.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x25b7ca0\" points=\"14.75,6.45 16.45,6.45 16.45,8.15 14.75,8.15\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23e0cc0\" points=\"13.5,10.75 15.2,10.75 15.2,12.45 13.5,12.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23eb570\" points=\"10.55,3.05 12.25,3.05 12.25,4.75 10.55,4.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x25da560\" points=\"10.55,6.45 12.25,6.45 12.25,8.15 10.55,8.15\"/>\n",
"<polygon class=\"l66d44\" id=\"0x25db020\" points=\"10.55,22.05 12.25,22.05 12.25,23.75 10.55,23.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23e59f0\" points=\"10.1,10.75 11.8,10.75 11.8,12.45 10.1,12.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2634c20\" points=\"6.35,18.75 8.05,18.75 8.05,20.45 6.35,20.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2635890\" points=\"6.35,22.15 8.05,22.15 8.05,23.85 6.35,23.85\"/>\n",
"<polygon class=\"l66d44\" id=\"0x26336e0\" points=\"4.25,10.75 5.95,10.75 5.95,12.45 4.25,12.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1d87500\" points=\"2.75,3.05 4.45,3.05 4.45,4.75 2.75,4.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1d4d730\" points=\"2.75,6.45 4.45,6.45 4.45,8.15 2.75,8.15\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1d10e40\" points=\"2.15,22.55 3.85,22.55 3.85,24.25 2.15,24.25\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,2.4 0,-2.4 32.2,-2.4 32.2,2.4\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,29.6 0,24.8 32.2,24.8 32.2,29.6\"/>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x26cba70\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VGND</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x26f3100\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x277e540\" text-anchor=\"middle\" transform=\"translate(6.9 15.3) scale(0.1) scale(1 -1)\">B</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x276ba30\" text-anchor=\"middle\" transform=\"translate(29.9 18.7) scale(0.1) scale(1 -1)\">Y</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x276c630\" text-anchor=\"middle\" transform=\"translate(11.5 11.9) scale(0.1) scale(1 -1)\">A</text>\n",
"<text class=\"l64t5\" dominant-baseline=\"central\" id=\"0x27e12b0\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPB</text>\n",
"<text class=\"l64t59\" dominant-baseline=\"central\" id=\"0x27ef000\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VNB</text>\n",
"<text class=\"l83t44\" dominant-baseline=\"text-before-edge\" id=\"0x28d8860\" text-anchor=\"start\" transform=\"translate(0 0) rotate(90) scale(0.1) scale(1 -1)\">xnor2_1</text>\n",
"</g>\n",
"<g id=\"sky130_ef_sc_hd__decap_12\">\n",
"<polygon class=\"l236d0\" id=\"0x2193d30\" points=\"0,0 55.2,0 55.2,27.2 0,27.2\"/>\n",
"<polygon class=\"l68d16\" id=\"0x21f72e0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l68d16\" id=\"0x1f770f0\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l64d16\" id=\"0x222f2c0\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l122d16\" id=\"0x2359480\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x25056a0\" points=\"1.35,16.15 53.85,16.15 53.85,24.85 1.35,24.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x262fea0\" points=\"1.35,2.35 53.85,2.35 53.85,7.85 1.35,7.85\"/>\n",
"<polygon class=\"l78d44\" id=\"0x1ed40a0\" points=\"0,12.5 55.2,12.5 55.2,27.2 0,27.2\"/>\n",
"<polygon class=\"l93d44\" id=\"0x1ee7730\" points=\"0,-1.9 55.2,-1.9 55.2,10.15 0,10.15\"/>\n",
"<polygon class=\"l64d20\" id=\"0x1efb7e0\" points=\"-1.9,13.05 57.1,13.05 57.1,29.1 -1.9,29.1\"/>\n",
"<polygon class=\"l94d20\" id=\"0x1ef41e0\" points=\"0,14.85 55.2,14.85 55.2,29.1 0,29.1\"/>\n",
"<polygon class=\"l81d4\" id=\"0x1f28990\" points=\"0,0 55.2,0 55.2,27.2 0,27.2\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f651e0\" points=\"24.45,-0.85 26.15,-0.85 26.15,0.85 24.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f706a0\" points=\"29.05,26.35 30.75,26.35 30.75,28.05 29.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f8bf70\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f47d00\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f99160\" points=\"6.05,26.35 7.75,26.35 7.75,28.05 6.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2010d60\" points=\"6.05,-0.85 7.75,-0.85 7.75,0.85 6.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x20013d0\" points=\"10.65,26.35 12.35,26.35 12.35,28.05 10.65,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2027870\" points=\"10.65,-0.85 12.35,-0.85 12.35,0.85 10.65,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f917c0\" points=\"15.25,26.35 16.95,26.35 16.95,28.05 15.25,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x20634d0\" points=\"15.25,-0.85 16.95,-0.85 16.95,0.85 15.25,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x20a92e0\" points=\"19.85,26.35 21.55,26.35 21.55,28.05 19.85,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x20bfa40\" points=\"19.85,-0.85 21.55,-0.85 21.55,0.85 19.85,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x20db050\" points=\"24.45,26.35 26.15,26.35 26.15,28.05 24.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x20def50\" points=\"29.05,-0.85 30.75,-0.85 30.75,0.85 29.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x20f0370\" points=\"33.65,26.35 35.35,26.35 35.35,28.05 33.65,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x21565e0\" points=\"33.65,-0.85 35.35,-0.85 35.35,0.85 33.65,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x216c5c0\" points=\"38.25,26.35 39.95,26.35 39.95,28.05 38.25,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x21843a0\" points=\"38.25,-0.85 39.95,-0.85 39.95,0.85 38.25,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x218dd10\" points=\"42.85,26.35 44.55,26.35 44.55,28.05 42.85,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x219c550\" points=\"42.85,-0.85 44.55,-0.85 44.55,0.85 42.85,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x217fe50\" points=\"47.45,26.35 49.15,26.35 49.15,28.05 47.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x21bf450\" points=\"47.45,-0.85 49.15,-0.85 49.15,0.85 47.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x21b52e0\" points=\"52.05,26.35 53.75,26.35 53.75,28.05 52.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x21f6170\" points=\"52.05,-0.85 53.75,-0.85 53.75,0.85 52.05,0.85\"/>\n",
"<polygon class=\"l95d20\" id=\"0x2228680\" points=\"0,9.25 55.2,9.25 55.2,14.75 0,14.75\"/>\n",
"<polygon class=\"l66d20\" id=\"0x222edb0\" points=\"51.25,26.15 3.95,26.15 3.95,11.25 26.45,11.25 26.45,14.85 51.25,14.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x2235140\" points=\"51.25,12.75 28.55,12.75 28.55,9.15 3.95,9.15 3.95,1.05 51.25,1.05\"/>\n",
"<polygon class=\"l67d20\" id=\"0x231c430\" points=\"16.7,6.3 20.1,6.3 20.1,14.6 16.7,14.6\"/>\n",
"<polygon class=\"l67d20\" id=\"0x231db10\" points=\"0,26.35 55.2,26.35 55.2,28.05 0,28.05\"/>\n",
"<polygon class=\"l67d20\" id=\"0x2350840\" points=\"0.85,22 54.3,22 54.3,26.35 0.85,26.35\"/>\n",
"<polygon class=\"l67d20\" id=\"0x236fc20\" points=\"0,-0.85 55.2,-0.85 55.2,0.85 0,0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x2387f90\" points=\"34.9,9.5 38.4,9.5 38.4,22 34.9,22\"/>\n",
"<polygon class=\"l67d20\" id=\"0x2393590\" points=\"0.85,0.85 54.3,0.85 54.3,6.3 0.85,6.3\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23a9680\" points=\"1.75,22.55 3.45,22.55 3.45,24.25 1.75,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23b3f20\" points=\"51.75,22.55 53.45,22.55 53.45,24.25 51.75,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23c92b0\" points=\"51.75,3.9 53.45,3.9 53.45,5.6 51.75,5.6\"/>\n",
"<polygon class=\"l66d44\" id=\"0x23ecd40\" points=\"35.75,10.25 37.45,10.25 37.45,11.95 35.75,11.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x249edf0\" points=\"1.75,3.9 3.45,3.9 3.45,5.6 1.75,5.6\"/>\n",
"<polygon class=\"l66d44\" id=\"0x24e44d0\" points=\"17.55,12.05 19.25,12.05 19.25,13.75 17.55,13.75\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,29.6 0,24.8 55.2,24.8 55.2,29.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,2.4 0,-2.4 55.2,-2.4 55.2,2.4\"/>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x26741e0\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VGND</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x267c7c0\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l64t5\" dominant-baseline=\"central\" id=\"0x1ebafc0\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPB</text>\n",
"<text class=\"l64t59\" dominant-baseline=\"central\" id=\"0x1ebc680\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VNB</text>\n",
"<text class=\"l83t44\" dominant-baseline=\"text-before-edge\" id=\"0x24e3e20\" text-anchor=\"start\" transform=\"translate(0 0) rotate(90) scale(0.1) scale(1 -1)\">decap_12</text>\n",
"</g>\n",
"<g id=\"sky130_fd_sc_hd__decap_4\">\n",
"<polygon class=\"l236d0\" id=\"0x23e3cf0\" points=\"0,0 18.4,0 18.4,27.2 0,27.2\"/>\n",
"<polygon class=\"l68d16\" id=\"0x26750e0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l68d16\" id=\"0x26751b0\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l64d16\" id=\"0x26716f0\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l122d16\" id=\"0x26717c0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l81d4\" id=\"0x26b5430\" points=\"0,0 18.4,0 18.4,27.2 0,27.2\"/>\n",
"<polygon class=\"l78d44\" id=\"0x2773e80\" points=\"0,12.5 18.4,12.5 18.4,27.2 0,27.2\"/>\n",
"<polygon class=\"l93d44\" id=\"0x266c840\" points=\"0,-1.9 18.4,-1.9 18.4,10.15 0,10.15\"/>\n",
"<polygon class=\"l64d20\" id=\"0x266c910\" points=\"-1.9,13.05 20.3,13.05 20.3,29.1 -1.9,29.1\"/>\n",
"<polygon class=\"l94d20\" id=\"0x266c980\" points=\"0,14.85 18.4,14.85 18.4,29.1 0,29.1\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1bc77d0\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1c2bdd0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1c2bea0\" points=\"6.05,26.35 7.75,26.35 7.75,28.05 6.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1c1f4b0\" points=\"6.05,-0.85 7.75,-0.85 7.75,0.85 6.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1c1f580\" points=\"10.65,26.35 12.35,26.35 12.35,28.05 10.65,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1d3ded0\" points=\"10.65,-0.85 12.35,-0.85 12.35,0.85 10.65,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1d3dfa0\" points=\"15.25,26.35 16.95,26.35 16.95,28.05 15.25,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1ed12c0\" points=\"15.25,-0.85 16.95,-0.85 16.95,0.85 15.25,0.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x2066050\" points=\"1.35,16.15 17.05,16.15 17.05,24.85 1.35,24.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x2066120\" points=\"1.35,2.35 17.05,2.35 17.05,7.85 1.35,7.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x2087b60\" points=\"14.45,26.15 3.95,26.15 3.95,14.55 1.05,14.55 1.05,11.25 8.15,11.25 8.15,14.85 14.45,14.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x20c4060\" points=\"17.35,12.75 10.25,12.75 10.25,9.15 3.95,9.15 3.95,1.05 14.45,1.05 14.45,9.45 17.35,9.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x20c4170\" points=\"14.95,4.25 16.65,4.25 16.65,5.95 14.95,5.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x22a7930\" points=\"1.75,22.55 3.45,22.55 3.45,24.25 1.75,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x22a7a00\" points=\"1.75,17.45 3.45,17.45 3.45,19.15 1.75,19.15\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2202610\" points=\"1.75,4.25 3.45,4.25 3.45,5.95 1.75,5.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x22026e0\" points=\"1.85,12.05 3.55,12.05 3.55,13.75 1.85,13.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1f598c0\" points=\"14.85,10.25 16.55,10.25 16.55,11.95 14.85,11.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1f59990\" points=\"14.95,22.55 16.65,22.55 16.65,24.25 14.95,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x24783f0\" points=\"14.95,17.45 16.65,17.45 16.65,19.15 14.95,19.15\"/>\n",
"<polygon class=\"l67d20\" id=\"0x24784c0\" points=\"18.4,28.05 0,28.05 0,26.35 0.85,26.35 0.85,15.45 10.05,15.45 10.05,10.25 17.55,10.25 17.55,26.35 18.4,26.35\"/>\n",
"<polygon class=\"l67d20\" id=\"0x251a3f0\" points=\"18.4,0.85 17.55,0.85 17.55,8.55 8.35,8.55 8.35,13.75 0.85,13.75 0.85,0.85 0,0.85 0,-0.85 18.4,-0.85\"/>\n",
"<polygon class=\"l95d20\" id=\"0x25e6ca0\" points=\"18.4,13.45 4.55,13.45 4.55,14.75 0,14.75 0,9.75 13.85,9.75 13.85,9.25 18.4,9.25\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,29.6 0,24.8 18.4,24.8 18.4,29.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,2.4 0,-2.4 18.4,-2.4 18.4,2.4\"/>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x26b5500\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VGND</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x2773d50\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l64t5\" dominant-baseline=\"central\" id=\"0x27eb550\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPB</text>\n",
"<text class=\"l64t59\" dominant-baseline=\"central\" id=\"0x27eb5e0\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VNB</text>\n",
"<text class=\"l83t44\" dominant-baseline=\"text-before-edge\" id=\"0x251a460\" text-anchor=\"start\" transform=\"translate(0 0) rotate(90) scale(0.1) scale(1 -1)\">decap_4</text>\n",
"</g>\n",
"<g id=\"sky130_fd_sc_hd__fill_2\">\n",
"<polygon class=\"l122d16\" id=\"0x27a3cb0\" points=\"1.55,-0.5 3.15,-0.5 3.15,0.6 1.55,0.6\"/>\n",
"<polygon class=\"l64d16\" id=\"0x27a3d80\" points=\"1.4,26.75 3.1,26.75 3.1,27.65 1.4,27.65\"/>\n",
"<polygon class=\"l68d16\" id=\"0x27fda20\" points=\"1,-0.7 3.65,-0.7 3.65,0.9 1,0.9\"/>\n",
"<polygon class=\"l68d16\" id=\"0x28de070\" points=\"1.05,26.5 3.65,26.5 3.65,28.05 1.05,28.05\"/>\n",
"<polygon class=\"l78d44\" id=\"0x28f2f50\" points=\"0,12.5 9.2,12.5 9.2,27.2 0,27.2\"/>\n",
"<polygon class=\"l93d44\" id=\"0x21a7f70\" points=\"0,-1.9 9.2,-1.9 9.2,10.15 0,10.15\"/>\n",
"<polygon class=\"l64d20\" id=\"0x21a8040\" points=\"-1.9,13.05 11.1,13.05 11.1,29.1 -1.9,29.1\"/>\n",
"<polygon class=\"l94d20\" id=\"0x2261fa0\" points=\"0,13.55 9.2,13.55 9.2,29.1 0,29.1\"/>\n",
"<polygon class=\"l81d4\" id=\"0x267b6f0\" points=\"0,0 9.2,0 9.2,27.2 0,27.2\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1eee3d0\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1eee4a0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2044150\" points=\"6.05,-0.85 7.75,-0.85 7.75,0.85 6.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x204ad90\" points=\"6.05,26.35 7.75,26.35 7.75,28.05 6.05,28.05\"/>\n",
"<polygon class=\"l67d20\" id=\"0x213d710\" points=\"0,0.85 0,-0.85 9.2,-0.85 9.2,0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x213d710\" points=\"0,28.05 0,26.35 9.2,26.35 9.2,28.05\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,29.6 0,24.8 9.2,24.8 9.2,29.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,2.4 0,-2.4 9.2,-2.4 9.2,2.4\"/>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x28de140\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VGND</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x28f2ec0\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l64t5\" dominant-baseline=\"central\" id=\"0x204ae00\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPB</text>\n",
"<text class=\"l64t59\" dominant-baseline=\"central\" id=\"0x204ae90\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VNB</text>\n",
"<text class=\"l83t44\" dominant-baseline=\"text-before-edge\" id=\"0x2134080\" text-anchor=\"start\" transform=\"translate(0 0) rotate(90) scale(0.1) scale(1 -1)\">fill_2</text>\n",
"</g>\n",
"<g id=\"sky130_fd_sc_hd__decap_6\">\n",
"<polygon class=\"l236d0\" id=\"0x24fc770\" points=\"0,0 27.6,0 27.6,27.2 0,27.2\"/>\n",
"<polygon class=\"l68d16\" id=\"0x2502030\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l68d16\" id=\"0x254ebc0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l64d16\" id=\"0x25a31d0\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l122d16\" id=\"0x25babc0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x25d1f20\" points=\"1.35,16.15 26.25,16.15 26.25,24.85 1.35,24.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x2604ab0\" points=\"1.35,2.35 26.25,2.35 26.25,7.85 1.35,7.85\"/>\n",
"<polygon class=\"l81d4\" id=\"0x28c8260\" points=\"0,0 27.6,0 27.6,27.2 0,27.2\"/>\n",
"<polygon class=\"l78d44\" id=\"0x28ce2b0\" points=\"0,12.5 27.6,12.5 27.6,27.2 0,27.2\"/>\n",
"<polygon class=\"l93d44\" id=\"0x2377f50\" points=\"0,-1.9 27.6,-1.9 27.6,10.15 0,10.15\"/>\n",
"<polygon class=\"l64d20\" id=\"0x2425dc0\" points=\"-1.9,13.05 29.5,13.05 29.5,29.1 -1.9,29.1\"/>\n",
"<polygon class=\"l94d20\" id=\"0x25a66d0\" points=\"0,14.85 27.6,14.85 27.6,29.1 0,29.1\"/>\n",
"<polygon class=\"l67d44\" id=\"0x25c1760\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x26c9b90\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x27e21f0\" points=\"6.05,26.35 7.75,26.35 7.75,28.05 6.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1e24b60\" points=\"6.05,-0.85 7.75,-0.85 7.75,0.85 6.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f1c070\" points=\"10.65,26.35 12.35,26.35 12.35,28.05 10.65,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2013240\" points=\"10.65,-0.85 12.35,-0.85 12.35,0.85 10.65,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x20e40c0\" points=\"15.25,26.35 16.95,26.35 16.95,28.05 15.25,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2188210\" points=\"15.25,-0.85 16.95,-0.85 16.95,0.85 15.25,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2296370\" points=\"19.85,26.35 21.55,26.35 21.55,28.05 19.85,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2211930\" points=\"19.85,-0.85 21.55,-0.85 21.55,0.85 19.85,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x23261f0\" points=\"24.45,26.35 26.15,26.35 26.15,28.05 24.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2386fe0\" points=\"24.45,-0.85 26.15,-0.85 26.15,0.85 24.45,0.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x1fadee0\" points=\"23.65,26.15 3.95,26.15 3.95,11.25 12.75,11.25 12.75,14.85 23.65,14.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x251f470\" points=\"23.65,12.75 14.85,12.75 14.85,9.15 3.95,9.15 3.95,1.05 23.65,1.05\"/>\n",
"<polygon class=\"l67d20\" id=\"0x27be5d0\" points=\"27.6,0.85 26.75,0.85 26.75,8.55 12.95,8.55 12.95,13.75 0.85,13.75 0.85,0.85 0,0.85 0,-0.85 27.6,-0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x291d2b0\" points=\"27.6,28.05 0,28.05 0,26.35 0.85,26.35 0.85,15.45 14.65,15.45 14.65,10.25 26.75,10.25 26.75,26.35 27.6,26.35\"/>\n",
"<polygon class=\"l95d20\" id=\"0x1f61080\" points=\"27.6,13.45 12.95,13.45 12.95,14.75 0,14.75 0,9.75 14.65,9.75 14.65,9.25 27.6,9.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1f610f0\" points=\"1.75,22.55 3.45,22.55 3.45,24.25 1.75,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1f94ad0\" points=\"24.15,3.9 25.85,3.9 25.85,5.6 24.15,5.6\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1f94b40\" points=\"24.15,22.55 25.85,22.55 25.85,24.25 24.15,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1f9b320\" points=\"24.15,17.45 25.85,17.45 25.85,19.15 24.15,19.15\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2007db0\" points=\"1.75,17.45 3.45,17.45 3.45,19.15 1.75,19.15\"/>\n",
"<polygon class=\"l66d44\" id=\"0x20383f0\" points=\"1.75,3.9 3.45,3.9 3.45,5.6 1.75,5.6\"/>\n",
"<polygon class=\"l66d44\" id=\"0x20408a0\" points=\"4.75,12.05 6.45,12.05 6.45,13.75 4.75,13.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2080990\" points=\"10.25,12.05 11.95,12.05 11.95,13.75 10.25,13.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x20c2fb0\" points=\"15.65,10.25 17.35,10.25 17.35,11.95 15.65,11.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x20ba5a0\" points=\"21.15,10.25 22.85,10.25 22.85,11.95 21.15,11.95\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,29.6 0,24.8 27.6,24.8 27.6,29.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,2.4 0,-2.4 27.6,-2.4 27.6,2.4\"/>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x27748d0\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x277ad90\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VGND</text>\n",
"<text class=\"l64t5\" dominant-baseline=\"central\" id=\"0x28be740\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPB</text>\n",
"<text class=\"l64t59\" dominant-baseline=\"central\" id=\"0x290faf0\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VNB</text>\n",
"<text class=\"l83t44\" dominant-baseline=\"text-before-edge\" id=\"0x20e6b60\" text-anchor=\"start\" transform=\"translate(0 0) rotate(90) scale(0.1) scale(1 -1)\">decap_6</text>\n",
"</g>\n",
"<g id=\"sky130_fd_sc_hd__decap_3\">\n",
"<polygon class=\"l236d0\" id=\"0x215ead0\" points=\"0,0 13.8,0 13.8,27.2 0,27.2\"/>\n",
"<polygon class=\"l68d16\" id=\"0x215eb40\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l68d16\" id=\"0x2173b10\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l64d16\" id=\"0x21acc40\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l122d16\" id=\"0x222a290\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x2329110\" points=\"1.35,2.35 12.45,2.35 12.45,7.85 1.35,7.85\"/>\n",
"<polygon class=\"l65d20\" id=\"0x22ffb30\" points=\"1.35,16.15 12.45,16.15 12.45,24.85 1.35,24.85\"/>\n",
"<polygon class=\"l78d44\" id=\"0x2341650\" points=\"0,12.5 13.8,12.5 13.8,27.2 0,27.2\"/>\n",
"<polygon class=\"l64d20\" id=\"0x23416c0\" points=\"-1.9,13.05 15.7,13.05 15.7,29.1 -1.9,29.1\"/>\n",
"<polygon class=\"l94d20\" id=\"0x26611c0\" points=\"0,14.85 13.8,14.85 13.8,29.1 0,29.1\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2661230\" points=\"10.65,-0.85 12.35,-0.85 12.35,0.85 10.65,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2770500\" points=\"10.65,26.35 12.35,26.35 12.35,28.05 10.65,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2770570\" points=\"6.05,-0.85 7.75,-0.85 7.75,0.85 6.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x277bb80\" points=\"6.05,26.35 7.75,26.35 7.75,28.05 6.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x277bbf0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x280fe90\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l81d4\" id=\"0x2864020\" points=\"0,0 13.8,0 13.8,27.2 0,27.2\"/>\n",
"<polygon class=\"l93d44\" id=\"0x28d5310\" points=\"0,-1.9 13.8,-1.9 13.8,10.15 0,10.15\"/>\n",
"<polygon class=\"l95d20\" id=\"0x1f23000\" points=\"13.8,13.45 6.05,13.45 6.05,14.75 0,14.75 0,9.75 7.75,9.75 7.75,9.05 13.8,9.05\"/>\n",
"<polygon class=\"l67d20\" id=\"0x1e19030\" points=\"13.8,28.05 0,28.05 0,26.35 0.85,26.35 0.85,15.45 7.75,15.45 7.75,10.05 12.95,10.05 12.95,26.35 13.8,26.35\"/>\n",
"<polygon class=\"l67d20\" id=\"0x1e190a0\" points=\"13.8,0.85 12.95,0.85 12.95,8.35 6.05,8.35 6.05,13.75 0.85,13.75 0.85,0.85 0,0.85 0,-0.85 13.8,-0.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x1f888c0\" points=\"11.25,12.55 7.95,12.55 7.95,9.15 3.95,9.15 3.95,1.05 9.85,1.05 9.85,9.25 11.25,9.25\"/>\n",
"<polygon class=\"l66d20\" id=\"0x1f88930\" points=\"9.85,26.15 3.95,26.15 3.95,14.55 2.55,14.55 2.55,11.25 5.85,11.25 5.85,14.65 9.85,14.65\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1fb10f0\" points=\"10.35,4 12.05,4 12.05,5.7 10.35,5.7\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1ff5f50\" points=\"10.35,17.8 12.05,17.8 12.05,19.5 10.35,19.5\"/>\n",
"<polygon class=\"l66d44\" id=\"0x20232a0\" points=\"10.35,22.55 12.05,22.55 12.05,24.25 10.35,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2046000\" points=\"8.75,10.05 10.45,10.05 10.45,11.75 8.75,11.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2002570\" points=\"3.35,12.05 5.05,12.05 5.05,13.75 3.35,13.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x22076c0\" points=\"1.75,4 3.45,4 3.45,5.7 1.75,5.7\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2323e50\" points=\"1.75,17.8 3.45,17.8 3.45,19.5 1.75,19.5\"/>\n",
"<polygon class=\"l66d44\" id=\"0x232ea30\" points=\"1.75,22.55 3.45,22.55 3.45,24.25 1.75,24.25\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,29.6 0,24.8 13.8,24.8 13.8,29.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,2.4 0,-2.4 13.8,-2.4 13.8,2.4\"/>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x2050270\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x23a1a20\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VGND</text>\n",
"<text class=\"l64t5\" dominant-baseline=\"central\" id=\"0x25b5ef0\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPB</text>\n",
"<text class=\"l64t59\" dominant-baseline=\"central\" id=\"0x2340ca0\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VNB</text>\n",
"<text class=\"l83t44\" dominant-baseline=\"text-before-edge\" id=\"0x232cf20\" text-anchor=\"start\" transform=\"translate(0 0) rotate(90) scale(0.1) scale(1 -1)\">decap_3</text>\n",
"</g>\n",
"<g id=\"sky130_fd_sc_hd__clkbuf_4\">\n",
"<polygon class=\"l236d0\" id=\"0x213d7a0\" points=\"0,0 27.6,0 27.6,27.2 0,27.2\"/>\n",
"<polygon class=\"l68d16\" id=\"0x213d810\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l68d16\" id=\"0x23c8840\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l64d16\" id=\"0x282cf40\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l122d16\" id=\"0x282cfb0\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x291f270\" points=\"24.45,-0.85 26.15,-0.85 26.15,0.85 24.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1d70320\" points=\"24.45,26.35 26.15,26.35 26.15,28.05 24.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1ec51a0\" points=\"19.85,-0.85 21.55,-0.85 21.55,0.85 19.85,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1ce1cb0\" points=\"19.85,26.35 21.55,26.35 21.55,28.05 19.85,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f46b30\" points=\"15.25,-0.85 16.95,-0.85 16.95,0.85 15.25,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f5b760\" points=\"15.25,26.35 16.95,26.35 16.95,28.05 15.25,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1f5b830\" points=\"10.65,-0.85 12.35,-0.85 12.35,0.85 10.65,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x233d860\" points=\"10.65,26.35 12.35,26.35 12.35,28.05 10.65,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x233d930\" points=\"6.05,-0.85 7.75,-0.85 7.75,0.85 6.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x25ad470\" points=\"6.05,26.35 7.75,26.35 7.75,28.05 6.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x25ad540\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x206f3b0\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l94d20\" id=\"0x1f46a40\" points=\"0,13.55 27.6,13.55 27.6,29.1 0,29.1\"/>\n",
"<polygon class=\"l64d20\" id=\"0x206f480\" points=\"-1.9,13.05 29.5,13.05 29.5,29.1 -1.9,29.1\"/>\n",
"<polygon class=\"l93d44\" id=\"0x266c140\" points=\"0,-1.9 27.6,-1.9 27.6,10.15 0,10.15\"/>\n",
"<polygon class=\"l78d44\" id=\"0x266c210\" points=\"0,12.5 27.6,12.5 27.6,27.2 0,27.2\"/>\n",
"<polygon class=\"l95d20\" id=\"0x269aac0\" points=\"0,9.75 27.6,9.75 27.6,13.45 0,13.45\"/>\n",
"<polygon class=\"l81d4\" id=\"0x269ab90\" points=\"0,0 27.6,0 27.6,27.2 0,27.2\"/>\n",
"<polygon class=\"l67d20\" id=\"0x277edb0\" points=\"4.25,7.55 7.75,7.55 7.75,13.25 4.25,13.25\"/>\n",
"<polygon class=\"l67d20\" id=\"0x277ee80\" points=\"27.6,0.85 26.15,0.85 26.15,5.65 23.35,5.65 23.35,0.85 17.3,0.85 17.3,5.65 14.75,5.65 14.75,0.85 8.3,0.85 8.3,5.65 5.55,5.65 5.55,0.85 0,0.85 0,-0.85 27.6,-0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x1c4d800\" points=\"26.6,15.85 21.65,15.85 21.65,24.65 19.05,24.65 19.05,20.05 13.05,20.05 13.05,24.65 10.45,24.65 10.45,18.35 19.05,18.35 19.05,14.15 22.55,14.15 22.55,9.05 10.1,9.05 10.1,3.45 13.05,3.45 13.05,7.35 19.05,7.35 19.05,3.45 21.65,3.45 21.65,7.35 26.6,7.35\"/>\n",
"<polygon class=\"l67d20\" id=\"0x1c4d870\" points=\"20.85,12.45 11.15,12.45 11.15,16.65 3.95,16.65 3.95,24.65 0.85,24.65 0.85,2.55 3.85,2.55 3.85,5.85 2.55,5.85 2.55,14.95 9.45,14.95 9.45,10.75 20.85,10.75\"/>\n",
"<polygon class=\"l67d20\" id=\"0x1c4d8e0\" points=\"27.6,28.05 0,28.05 0,26.35 5.65,26.35 5.65,18.35 8.75,18.35 8.75,26.35 14.75,26.35 14.75,21.75 17.3,21.75 17.3,26.35 23.35,26.35 23.35,17.65 26.2,17.65 26.2,26.35 27.6,26.35\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1cfcda0\" points=\"15.2,3.15 16.9,3.15 16.9,4.85 15.2,4.85\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1cfce10\" points=\"18.35,10.75 20.05,10.75 20.05,12.45 18.35,12.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1cfcee0\" points=\"19.45,18.75 21.15,18.75 21.15,20.45 19.45,20.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1e435c0\" points=\"6.05,19.15 7.75,19.15 7.75,20.85 6.05,20.85\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1e43690\" points=\"19.45,15.35 21.15,15.35 21.15,17.05 19.45,17.05\"/>\n",
"<polygon class=\"l66d44\" id=\"0x262e260\" points=\"1.75,22.15 3.45,22.15 3.45,23.85 1.75,23.85\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1e48a50\" points=\"4.25,10.75 5.95,10.75 5.95,12.45 4.25,12.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1e48b20\" points=\"1.75,16.05 3.45,16.05 3.45,17.75 1.75,17.75\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1d0df10\" points=\"1.75,3.35 3.45,3.35 3.45,5.05 1.75,5.05\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1d0dfe0\" points=\"6.05,22.55 7.75,22.55 7.75,24.25 6.05,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1ef03a0\" points=\"23.75,18.45 25.45,18.45 25.45,20.15 23.75,20.15\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1ef0470\" points=\"6.05,3.15 7.75,3.15 7.75,4.85 6.05,4.85\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1f04300\" points=\"10.85,20.8 12.55,20.8 12.55,22.5 10.85,22.5\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1f043d0\" points=\"10.9,4.25 12.6,4.25 12.6,5.95 10.9,5.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1f7b080\" points=\"11.55,10.75 13.25,10.75 13.25,12.45 11.55,12.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1f7b150\" points=\"14.95,10.75 16.65,10.75 16.65,12.45 14.95,12.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1fd5380\" points=\"15.15,22.55 16.85,22.55 16.85,24.25 15.15,24.25\"/>\n",
"<polygon class=\"l66d44\" id=\"0x1fd5450\" points=\"19.45,22.15 21.15,22.15 21.15,23.85 19.45,23.85\"/>\n",
"<polygon class=\"l66d44\" id=\"0x20031b0\" points=\"19.5,4.25 21.2,4.25 21.2,5.95 19.5,5.95\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2003280\" points=\"23.75,21.85 25.45,21.85 25.45,23.55 23.75,23.55\"/>\n",
"<polygon class=\"l66d44\" id=\"0x22acde0\" points=\"23.8,3.15 25.5,3.15 25.5,4.85 23.8,4.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x22aceb0\" points=\"23.25,11.85 23.2,11.85 23.2,26.15 21.7,26.15 21.7,12.95 18.9,12.95 18.9,26.15 17.4,26.15 17.4,12.95 14.6,12.95 14.6,26.15 13.1,26.15 13.1,12.95 10.3,12.95 10.3,26.15 8.8,26.15 8.8,10.5 8.85,10.5 8.85,1.05 10.35,1.05 10.35,10.2 13.15,10.2 13.15,1.05 14.65,1.05 14.65,10.2 17.45,10.2 17.45,1.05 18.95,1.05 18.95,10.2 21.75,10.2 21.75,1.05 23.25,1.05\"/>\n",
"<polygon class=\"l66d20\" id=\"0x1e13360\" points=\"6.45,13.25 5.5,13.25 5.5,26.15 4,26.15 4,13.25 3.45,13.25 3.45,9.95 4,9.95 4,1.05 5.5,1.05 5.5,9.95 6.45,9.95\"/>\n",
"<polygon class=\"l65d20\" id=\"0x1e133d0\" points=\"1.35,2.35 26.15,2.35 26.15,6.55 1.35,6.55\"/>\n",
"<polygon class=\"l65d20\" id=\"0x1e134a0\" points=\"1.35,14.85 26.2,14.85 26.2,24.85 1.35,24.85\"/>\n",
"<polygon class=\"l67d16\" id=\"0x2372740\" points=\"6.05,11.05 7.75,11.05 7.75,12.75 6.05,12.75\"/>\n",
"<polygon class=\"l67d16\" id=\"0x2372810\" points=\"6.05,7.65 7.75,7.65 7.75,9.35 6.05,9.35\"/>\n",
"<polygon class=\"l67d16\" id=\"0x239be80\" points=\"19.85,14.45 21.55,14.45 21.55,16.15 19.85,16.15\"/>\n",
"<polygon class=\"l67d16\" id=\"0x239bf50\" points=\"24.45,11.05 26.15,11.05 26.15,12.75 24.45,12.75\"/>\n",
"<polygon class=\"l67d16\" id=\"0x23e3c20\" points=\"24.45,7.65 26.15,7.65 26.15,9.35 24.45,9.35\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,2.4 0,-2.4 27.6,-2.4 27.6,2.4\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,29.6 0,24.8 27.6,24.8 27.6,29.6\"/>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x291f150\" text-anchor=\"middle\" transform=\"translate(20.7 15.3) scale(0.1) scale(1 -1)\">X</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x291f1e0\" text-anchor=\"middle\" transform=\"translate(6.9 8.5) scale(0.1) scale(1 -1)\">A</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x1bd2540\" text-anchor=\"middle\" transform=\"translate(25.3 8.5) scale(0.1) scale(1 -1)\">X</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x1bd25d0\" text-anchor=\"middle\" transform=\"translate(6.9 11.9) scale(0.1) scale(1 -1)\">A</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x1ce1b90\" text-anchor=\"middle\" transform=\"translate(25.3 11.9) scale(0.1) scale(1 -1)\">X</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x1ce1c20\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VGND</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x1d701f0\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l64t5\" dominant-baseline=\"central\" id=\"0x24a27d0\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPB</text>\n",
"<text class=\"l64t59\" dominant-baseline=\"central\" id=\"0x24a2860\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VNB</text>\n",
"<text class=\"l83t44\" dominant-baseline=\"text-before-edge\" id=\"0x266d930\" text-anchor=\"start\" transform=\"translate(0 0) rotate(90) scale(0.1) scale(1 -1)\">clkbuf_4</text>\n",
"</g>\n",
"<g id=\"sky130_fd_sc_hd__clkbuf_1\">\n",
"<polygon class=\"l236d0\" id=\"0x1ccaf50\" points=\"0,0 13.8,0 13.8,27.2 0,27.2\"/>\n",
"<polygon class=\"l68d16\" id=\"0x2925df0\" points=\"10.65,-0.85 12.35,-0.85 12.35,0.85 10.65,0.85\"/>\n",
"<polygon class=\"l68d16\" id=\"0x1eb7060\" points=\"10.65,26.35 12.35,26.35 12.35,28.05 10.65,28.05\"/>\n",
"<polygon class=\"l64d16\" id=\"0x26f3190\" points=\"10.65,26.35 12.35,26.35 12.35,28.05 10.65,28.05\"/>\n",
"<polygon class=\"l122d16\" id=\"0x276bac0\" points=\"10.65,-0.85 12.35,-0.85 12.35,0.85 10.65,0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x27e1340\" points=\"0.85,24.65 3.55,24.65 3.55,15.6 2.55,15.6 2.55,7.6 3.45,7.6 3.45,2.55 0.85,2.55\"/>\n",
"<polygon class=\"l67d20\" id=\"0x27ef090\" points=\"0,0.85 5.25,0.85 5.25,4.65 8.55,4.65 8.55,0.85 13.8,0.85 13.8,-0.85 0,-0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x28d88f0\" points=\"4.25,13.9 5.4,13.9 5.4,17.05 10.35,17.05 10.35,24.65 12.05,24.65 12.05,15.35 7.1,15.35 7.1,8.05 12.05,8.05 12.05,2.55 10.35,2.55 10.35,6.35 5.4,6.35 5.4,10.6 4.25,10.6\"/>\n",
"<polygon class=\"l67d20\" id=\"0x1d92b20\" points=\"9.45,9.85 12.75,9.85 12.75,13.55 9.45,13.55\"/>\n",
"<polygon class=\"l67d20\" id=\"0x1f12460\" points=\"0,28.05 13.8,28.05 13.8,26.35 8.55,26.35 8.55,18.75 5.25,18.75 5.25,26.35 0,26.35\"/>\n",
"<polygon class=\"l95d20\" id=\"0x23666a0\" points=\"0,9.75 13.8,9.75 13.8,14.1 0,14.1\"/>\n",
"<polygon class=\"l78d44\" id=\"0x24e6220\" points=\"0,12.5 13.8,12.5 13.8,27.2 0,27.2\"/>\n",
"<polygon class=\"l93d44\" id=\"0x250ec90\" points=\"0,-1.9 13.8,-1.9 13.8,10.15 0,10.15\"/>\n",
"<polygon class=\"l64d20\" id=\"0x237e820\" points=\"-1.9,13.05 15.7,13.05 15.7,29.1 -1.9,29.1\"/>\n",
"<polygon class=\"l94d20\" id=\"0x266fb40\" points=\"0,14.2 13.8,14.2 13.8,29.1 0,29.1\"/>\n",
"<polygon class=\"l81d4\" id=\"0x26d5d70\" points=\"0,0 13.8,0 13.8,27.2 0,27.2\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2744e30\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x27fc090\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x28e6270\" points=\"6.05,-0.85 7.75,-0.85 7.75,0.85 6.05,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1e2e000\" points=\"6.05,26.35 7.75,26.35 7.75,28.05 6.05,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1ef6930\" points=\"10.65,-0.85 12.35,-0.85 12.35,0.85 10.65,0.85\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1fc5350\" points=\"10.65,26.35 12.35,26.35 12.35,28.05 10.65,28.05\"/>\n",
"<polygon class=\"l67d16\" id=\"0x1fc53c0\" points=\"1.45,4.25 3.15,4.25 3.15,5.95 1.45,5.95\"/>\n",
"<polygon class=\"l67d16\" id=\"0x2058d10\" points=\"1.45,17.85 3.15,17.85 3.15,19.55 1.45,19.55\"/>\n",
"<polygon class=\"l67d16\" id=\"0x20cf770\" points=\"1.45,21.25 3.15,21.25 3.15,22.95 1.45,22.95\"/>\n",
"<polygon class=\"l67d16\" id=\"0x2373410\" points=\"10.65,11.05 12.35,11.05 12.35,12.75 10.65,12.75\"/>\n",
"<polygon class=\"l65d20\" id=\"0x2373480\" points=\"1.35,2.35 12.45,2.35 12.45,7.55 1.35,7.55\"/>\n",
"<polygon class=\"l65d20\" id=\"0x2448530\" points=\"1.35,16.95 12.45,16.95 12.45,24.85 1.35,24.85\"/>\n",
"<polygon class=\"l66d44\" id=\"0x250a170\" points=\"1.75,4.45 3.45,4.45 3.45,6.15 1.75,6.15\"/>\n",
"<polygon class=\"l66d44\" id=\"0x25a11c0\" points=\"1.75,18.1 3.45,18.1 3.45,19.8 1.75,19.8\"/>\n",
"<polygon class=\"l66d44\" id=\"0x25a1230\" points=\"1.75,22.15 3.45,22.15 3.45,23.85 1.75,23.85\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2127880\" points=\"4.25,11.4 5.95,11.4 5.95,13.1 4.25,13.1\"/>\n",
"<polygon class=\"l66d44\" id=\"0x2655040\" points=\"6.05,2.95 7.75,2.95 7.75,4.65 6.05,4.65\"/>\n",
"<polygon class=\"l66d44\" id=\"0x268c390\" points=\"6.05,18.75 7.75,18.75 7.75,20.45 6.05,20.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x268c400\" points=\"6.05,22.15 7.75,22.15 7.75,23.85 6.05,23.85\"/>\n",
"<polygon class=\"l66d44\" id=\"0x26763c0\" points=\"10.25,10.75 11.95,10.75 11.95,12.45 10.25,12.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x266fc20\" points=\"10.35,3.6 12.05,3.6 12.05,5.3 10.35,5.3\"/>\n",
"<polygon class=\"l66d44\" id=\"0x278fd20\" points=\"10.35,18.75 12.05,18.75 12.05,20.45 10.35,20.45\"/>\n",
"<polygon class=\"l66d44\" id=\"0x278fd90\" points=\"10.35,22.15 12.05,22.15 12.05,23.85 10.35,23.85\"/>\n",
"<polygon class=\"l66d20\" id=\"0x28612a0\" points=\"3.75,13.9 3.95,13.9 3.95,26.15 5.45,26.15 5.45,13.9 6.45,13.9 6.45,10.6 5.45,10.6 5.45,1.05 3.95,1.05 3.95,10.6 3.75,10.6\"/>\n",
"<polygon class=\"l66d20\" id=\"0x2683290\" points=\"12.45,13.25 10.15,13.25 10.15,16.2 9.85,16.2 9.85,26.15 8.35,26.15 8.35,15 8.65,15 8.65,9.5 8.35,9.5 8.35,1.05 9.85,1.05 9.85,8.3 10.15,8.3 10.15,9.95 12.45,9.95\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"13.8,-2.4 13.8,2.4 0,2.4 0,-2.4\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"13.8,24.8 13.8,29.6 0,29.6 0,24.8\"/>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x2791e90\" text-anchor=\"middle\" transform=\"translate(11.5 0) rotate(180) scale(1 -1) scale(0.1) scale(1 -1)\">VGND</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x279e420\" text-anchor=\"middle\" transform=\"translate(11.5 27.2) rotate(180) scale(1 -1) scale(0.1) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x279e4b0\" text-anchor=\"middle\" transform=\"translate(2.3 5.1) rotate(180) scale(1 -1) scale(0.1) scale(1 -1)\">X</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x2841d40\" text-anchor=\"middle\" transform=\"translate(2.3 18.7) rotate(180) scale(1 -1) scale(0.1) scale(1 -1)\">X</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x2841dd0\" text-anchor=\"middle\" transform=\"translate(2.3 22.1) rotate(180) scale(1 -1) scale(0.1) scale(1 -1)\">X</text>\n",
"<text class=\"l67t5\" dominant-baseline=\"central\" id=\"0x1e94220\" text-anchor=\"middle\" transform=\"translate(11.5 11.9) rotate(180) scale(1 -1) scale(0.1) scale(1 -1)\">A</text>\n",
"<text class=\"l64t5\" dominant-baseline=\"central\" id=\"0x1e942b0\" text-anchor=\"middle\" transform=\"translate(11.5 27.2) rotate(180) scale(1 -1) scale(0.1) scale(1 -1)\">VPB</text>\n",
"<text class=\"l64t59\" dominant-baseline=\"central\" id=\"0x1eeed70\" text-anchor=\"middle\" transform=\"translate(11.5 0) rotate(180) scale(1 -1) scale(0.1) scale(1 -1)\">VNB</text>\n",
"<text class=\"l83t44\" dominant-baseline=\"text-before-edge\" id=\"0x1eeee20\" text-anchor=\"start\" transform=\"translate(0 0) rotate(90) scale(0.1) scale(1 -1)\">clkbuf_1</text>\n",
"</g>\n",
"<g id=\"sky130_fd_sc_hd__fill_1\">\n",
"<polygon class=\"l64d16\" id=\"0x2126bf0\" points=\"1.55,26.7 2.55,26.7 2.55,27.55 1.55,27.55\"/>\n",
"<polygon class=\"l122d16\" id=\"0x21a04d0\" points=\"1.4,-0.55 2.6,-0.55 2.6,0.55 1.4,0.55\"/>\n",
"<polygon class=\"l68d16\" id=\"0x21d2800\" points=\"1.1,26.35 2.9,26.35 2.9,27.85 1.1,27.85\"/>\n",
"<polygon class=\"l68d16\" id=\"0x2322000\" points=\"1.1,-0.65 2.9,-0.65 2.9,0.8 1.1,0.8\"/>\n",
"<polygon class=\"l81d4\" id=\"0x232d0a0\" points=\"0,0 4.6,0 4.6,27.2 0,27.2\"/>\n",
"<polygon class=\"l78d44\" id=\"0x232ebb0\" points=\"0,12.5 4.6,12.5 4.6,27.2 0,27.2\"/>\n",
"<polygon class=\"l93d44\" id=\"0x2340e10\" points=\"0,-1.9 4.6,-1.9 4.6,10.15 0,10.15\"/>\n",
"<polygon class=\"l64d20\" id=\"0x244e830\" points=\"-1.9,13.05 6.5,13.05 6.5,29.1 -1.9,29.1\"/>\n",
"<polygon class=\"l94d20\" id=\"0x23ea060\" points=\"0,13.55 4.6,13.55 4.6,29.1 0,29.1\"/>\n",
"<polygon class=\"l67d44\" id=\"0x291c810\" points=\"1.45,26.35 3.15,26.35 3.15,28.05 1.45,28.05\"/>\n",
"<polygon class=\"l67d44\" id=\"0x1e84760\" points=\"1.45,-0.85 3.15,-0.85 3.15,0.85 1.45,0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x213d710\" points=\"0,0.85 0,-0.85 4.6,-0.85 4.6,0.85\"/>\n",
"<polygon class=\"l67d20\" id=\"0x213d710\" points=\"0,28.05 0,26.35 4.6,26.35 4.6,28.05\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,29.6 0,24.8 4.6,24.8 4.6,29.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x213d710\" points=\"0,2.4 0,-2.4 4.6,-2.4 4.6,2.4\"/>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x1edd6c0\" text-anchor=\"middle\" transform=\"translate(2.05 27.2) scale(0.125) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"central\" id=\"0x1e17390\" text-anchor=\"middle\" transform=\"translate(2.05 0) scale(0.125) scale(1 -1)\">VGND</text>\n",
"<text class=\"l64t5\" dominant-baseline=\"central\" id=\"0x1f99940\" text-anchor=\"middle\" transform=\"translate(2.3 27.2) scale(0.1) scale(1 -1)\">VPB</text>\n",
"<text class=\"l64t59\" dominant-baseline=\"central\" id=\"0x204c5e0\" text-anchor=\"middle\" transform=\"translate(2.3 0) scale(0.1) scale(1 -1)\">VNB</text>\n",
"<text class=\"l83t44\" dominant-baseline=\"text-before-edge\" id=\"0x20ae080\" text-anchor=\"start\" transform=\"translate(0 0) rotate(90) scale(0.1) scale(1 -1)\">fill_1</text>\n",
"</g>\n",
"</defs>\n",
"<rect fill=\"#222222\" height=\"385\" stroke=\"none\" width=\"285\" x=\"-17.5\" y=\"-367.5\"/>\n",
"<g id=\"xor3\" transform=\"scale(1 -1)\">\n",
"<polygon class=\"l235d4\" id=\"0x1ed1250\" points=\"0,0 250,0 250,350 0,350\"/>\n",
"<polygon class=\"l67d20\" id=\"0x28c2870\" points=\"70.45,204.85 72.15,204.85 72.15,206.55 70.45,206.55\"/>\n",
"<polygon class=\"l67d20\" id=\"0x1ee8590\" points=\"176.25,204.85 177.95,204.85 177.95,206.55 176.25,206.55\"/>\n",
"<polygon class=\"l67d20\" id=\"0x21816c0\" points=\"79.65,198.05 81.35,198.05 81.35,199.75 79.65,199.75\"/>\n",
"<polygon class=\"l67d20\" id=\"0x2181730\" points=\"167.05,194.65 168.75,194.65 168.75,196.35 167.05,196.35\"/>\n",
"<polygon class=\"l67d20\" id=\"0x21817a0\" points=\"88.85,177.65 90.55,177.65 90.55,179.35 88.85,179.35\"/>\n",
"<polygon class=\"l67d20\" id=\"0x2181810\" points=\"84.25,174.25 85.95,174.25 85.95,175.95 84.25,175.95\"/>\n",
"<polygon class=\"l67d20\" id=\"0x237a8d0\" points=\"102.65,167.45 104.35,167.45 104.35,169.15 102.65,169.15\"/>\n",
"<polygon class=\"l67d20\" id=\"0x237a9a0\" points=\"111.85,150.45 113.55,150.45 113.55,152.15 111.85,152.15\"/>\n",
"<polygon class=\"l67d20\" id=\"0x24765b0\" points=\"107.25,147.05 108.95,147.05 108.95,148.75 107.25,148.75\"/>\n",
"<polygon class=\"l67d20\" id=\"0x2476680\" points=\"130.25,143.65 131.95,143.65 131.95,145.35 130.25,145.35\"/>\n",
"<polygon class=\"l67d20\" id=\"0x248c650\" points=\"79.65,130.05 81.35,130.05 81.35,131.75 79.65,131.75\"/>\n",
"<polygon class=\"l67d20\" id=\"0x248c720\" points=\"70.45,119.85 72.15,119.85 72.15,121.55 70.45,121.55\"/>\n",
"<polygon class=\"l67d20\" id=\"0x251abe0\" points=\"157.85,119.85 159.55,119.85 159.55,121.55 157.85,121.55\"/>\n",
"<polygon class=\"l67d20\" id=\"0x251acb0\" points=\"176.25,116.45 177.95,116.45 177.95,118.15 176.25,118.15\"/>\n",
"<polygon class=\"l67d44\" id=\"0x259e8f0\" points=\"70.45,204.85 72.15,204.85 72.15,206.55 70.45,206.55\"/>\n",
"<polygon class=\"l67d44\" id=\"0x259e9c0\" points=\"176.25,204.85 177.95,204.85 177.95,206.55 176.25,206.55\"/>\n",
"<polygon class=\"l67d44\" id=\"0x268f070\" points=\"79.65,198.05 81.35,198.05 81.35,199.75 79.65,199.75\"/>\n",
"<polygon class=\"l67d44\" id=\"0x26d6fa0\" points=\"167.05,194.65 168.75,194.65 168.75,196.35 167.05,196.35\"/>\n",
"<polygon class=\"l67d44\" id=\"0x26d7070\" points=\"88.85,177.65 90.55,177.65 90.55,179.35 88.85,179.35\"/>\n",
"<polygon class=\"l67d44\" id=\"0x27b1f90\" points=\"84.25,174.25 85.95,174.25 85.95,175.95 84.25,175.95\"/>\n",
"<polygon class=\"l67d44\" id=\"0x27b2060\" points=\"102.65,167.45 104.35,167.45 104.35,169.15 102.65,169.15\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2910130\" points=\"111.85,150.45 113.55,150.45 113.55,152.15 111.85,152.15\"/>\n",
"<polygon class=\"l67d44\" id=\"0x2910200\" points=\"107.25,147.05 108.95,147.05 108.95,148.75 107.25,148.75\"/>\n",
"<polygon class=\"l67d44\" id=\"0x28f8b00\" points=\"130.25,143.65 131.95,143.65 131.95,145.35 130.25,145.35\"/>\n",
"<polygon class=\"l67d44\" id=\"0x28f8bd0\" points=\"79.65,130.05 81.35,130.05 81.35,131.75 79.65,131.75\"/>\n",
"<polygon class=\"l67d44\" id=\"0x212ecc0\" points=\"70.45,119.85 72.15,119.85 72.15,121.55 70.45,121.55\"/>\n",
"<polygon class=\"l67d44\" id=\"0x212ed90\" points=\"157.85,119.85 159.55,119.85 159.55,121.55 157.85,121.55\"/>\n",
"<polygon class=\"l67d44\" id=\"0x21ad070\" points=\"176.25,116.45 177.95,116.45 177.95,118.15 176.25,118.15\"/>\n",
"<polygon class=\"l68d20\" id=\"0x21ad140\" points=\"55.2,215.2 193.2,215.2 193.2,220 55.2,220\"/>\n",
"<polygon class=\"l68d20\" id=\"0x2236c70\" points=\"69.7,204.4 72.9,204.4 72.9,207 69.7,207\"/>\n",
"<polygon class=\"l68d20\" id=\"0x2236d40\" points=\"175.65,206.4 178.55,206.4 178.55,206.85 175.65,206.85\"/>\n",
"<polygon class=\"l68d20\" id=\"0x23997b0\" points=\"226.1,206.4 229.3,206.4 229.3,207 226.1,207\"/>\n",
"<polygon class=\"l68d20\" id=\"0x268ef60\" points=\"175.65,205 229.3,205 229.3,206.4 175.65,206.4\"/>\n",
"<polygon class=\"l68d20\" id=\"0x2399880\" points=\"175.65,204.55 178.55,204.55 178.55,205 175.65,205\"/>\n",
"<polygon class=\"l68d20\" id=\"0x2398260\" points=\"226.1,204.4 229.3,204.4 229.3,205 226.1,205\"/>\n",
"<polygon class=\"l68d20\" id=\"0x2398330\" points=\"79.05,199.6 81.95,199.6 81.95,200.05 79.05,200.05\"/>\n",
"<polygon class=\"l68d20\" id=\"0x26095d0\" points=\"111.1,199.6 114.3,199.6 114.3,200.2 111.1,200.2\"/>\n",
"<polygon class=\"l68d20\" id=\"0x26096a0\" points=\"79.05,198.2 114.3,198.2 114.3,199.6 79.05,199.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x2045a60\" points=\"79.05,197.75 81.95,197.75 81.95,198.2 79.05,198.2\"/>\n",
"<polygon class=\"l68d20\" id=\"0x2045b30\" points=\"111.1,197.6 114.3,197.6 114.3,198.2 111.1,198.2\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1bcc1a0\" points=\"88.1,196.2 91.3,196.2 91.3,196.8 88.1,196.8\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1bcc270\" points=\"166.45,196.2 169.35,196.2 169.35,196.65 166.45,196.65\"/>\n",
"<polygon class=\"l68d20\" id=\"0x26781b0\" points=\"88.1,194.8 169.35,194.8 169.35,196.2 88.1,196.2\"/>\n",
"<polygon class=\"l68d20\" id=\"0x2678280\" points=\"88.1,194.2 91.3,194.2 91.3,194.8 88.1,194.8\"/>\n",
"<polygon class=\"l68d20\" id=\"0x27234d0\" points=\"166.45,194.35 169.35,194.35 169.35,194.8 166.45,194.8\"/>\n",
"<polygon class=\"l68d20\" id=\"0x27235a0\" points=\"47.2,188 193.2,188 193.2,192.8 47.2,192.8\"/>\n",
"<polygon class=\"l68d20\" id=\"0x2744b80\" points=\"88.1,177.2 91.3,177.2 91.3,179.8 88.1,179.8\"/>\n",
"<polygon class=\"l68d20\" id=\"0x2744c50\" points=\"74.3,175.8 77.5,175.8 77.5,176.4 74.3,176.4\"/>\n",
"<polygon class=\"l68d20\" id=\"0x27bf560\" points=\"83.65,175.8 86.55,175.8 86.55,176.25 83.65,176.25\"/>\n",
"<polygon class=\"l68d20\" id=\"0x27bf630\" points=\"74.3,174.4 86.55,174.4 86.55,175.8 74.3,175.8\"/>\n",
"<polygon class=\"l68d20\" id=\"0x27b0320\" points=\"74.3,173.8 77.5,173.8 77.5,174.4 74.3,174.4\"/>\n",
"<polygon class=\"l68d20\" id=\"0x27b03f0\" points=\"83.65,173.95 86.55,173.95 86.55,174.4 83.65,174.4\"/>\n",
"<polygon class=\"l68d20\" id=\"0x283fc10\" points=\"102.05,169 104.95,169 104.95,169.45 102.05,169.45\"/>\n",
"<polygon class=\"l68d20\" id=\"0x283fce0\" points=\"106.5,169 109.7,169 109.7,169.6 106.5,169.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x290e520\" points=\"102.05,167.6 109.7,167.6 109.7,169 102.05,169\"/>\n",
"<polygon class=\"l68d20\" id=\"0x290e5f0\" points=\"102.05,167.15 104.95,167.15 104.95,167.6 102.05,167.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1e95590\" points=\"106.5,167 109.7,167 109.7,167.6 106.5,167.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1e95660\" points=\"55.2,160.8 193.2,160.8 193.2,165.6 55.2,165.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1ee8d90\" points=\"111.1,150 114.3,150 114.3,152.6 111.1,152.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1ee8e00\" points=\"106.5,146.6 109.7,146.6 109.7,149.2 106.5,149.2\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1ee8ed0\" points=\"129.65,145.2 132.55,145.2 132.55,145.65 129.65,145.65\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1ef82f0\" points=\"157.1,145.2 160.3,145.2 160.3,145.8 157.1,145.8\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1ef83c0\" points=\"129.65,143.8 160.3,143.8 160.3,145.2 129.65,145.2\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1f07bb0\" points=\"129.65,143.35 132.55,143.35 132.55,143.8 129.65,143.8\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1f07c80\" points=\"157.1,143.2 160.3,143.2 160.3,143.8 157.1,143.8\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1f4f3c0\" points=\"47.2,133.6 193.2,133.6 193.2,138.4 47.2,138.4\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1f4f430\" points=\"74.3,131.6 77.5,131.6 77.5,132.2 74.3,132.2\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1f4f500\" points=\"79.05,131.6 81.95,131.6 81.95,132.05 79.05,132.05\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1f6cc30\" points=\"74.3,130.2 81.95,130.2 81.95,131.6 74.3,131.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1f6cd00\" points=\"74.3,129.6 77.5,129.6 77.5,130.2 74.3,130.2\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1f83630\" points=\"79.05,129.75 81.95,129.75 81.95,130.2 79.05,130.2\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1f83700\" points=\"0.7,121.4 3.9,121.4 3.9,122 0.7,122\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1fa8960\" points=\"69.85,121.4 72.75,121.4 72.75,121.85 69.85,121.85\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1fa89d0\" points=\"0.7,120 72.75,120 72.75,121.4 0.7,121.4\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1fa8aa0\" points=\"0.7,119.4 3.9,119.4 3.9,120 0.7,120\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1fcc9d0\" points=\"69.85,119.55 72.75,119.55 72.75,120 69.85,120\"/>\n",
"<polygon class=\"l68d20\" id=\"0x1fccaa0\" points=\"157.1,119.4 160.3,119.4 160.3,122 157.1,122\"/>\n",
"<polygon class=\"l68d20\" id=\"0x233f730\" points=\"175.5,116 178.7,116 178.7,118.6 175.5,118.6\"/>\n",
"<polygon class=\"l68d20\" id=\"0x233f800\" points=\"55.2,106.4 193.2,106.4 193.2,111.2 55.2,111.2\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2414c00\" points=\"81.05,216.85 82.55,216.85 82.55,218.35 81.05,218.35\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2414c70\" points=\"84.25,216.85 85.75,216.85 85.75,218.35 84.25,218.35\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2414d40\" points=\"87.45,216.85 88.95,216.85 88.95,218.35 87.45,218.35\"/>\n",
"<polygon class=\"l68d44\" id=\"0x25ab7f0\" points=\"90.65,216.85 92.15,216.85 92.15,218.35 90.65,218.35\"/>\n",
"<polygon class=\"l68d44\" id=\"0x25ab8c0\" points=\"93.85,216.85 95.35,216.85 95.35,218.35 93.85,218.35\"/>\n",
"<polygon class=\"l68d44\" id=\"0x25dc540\" points=\"70.55,204.95 72.05,204.95 72.05,206.45 70.55,206.45\"/>\n",
"<polygon class=\"l68d44\" id=\"0x25dc610\" points=\"226.95,204.95 228.45,204.95 228.45,206.45 226.95,206.45\"/>\n",
"<polygon class=\"l68d44\" id=\"0x25e0680\" points=\"111.95,198.15 113.45,198.15 113.45,199.65 111.95,199.65\"/>\n",
"<polygon class=\"l68d44\" id=\"0x25e06f0\" points=\"88.95,194.75 90.45,194.75 90.45,196.25 88.95,196.25\"/>\n",
"<polygon class=\"l68d44\" id=\"0x25e07c0\" points=\"48.05,189.65 49.55,189.65 49.55,191.15 48.05,191.15\"/>\n",
"<polygon class=\"l68d44\" id=\"0x25e9df0\" points=\"51.25,189.65 52.75,189.65 52.75,191.15 51.25,191.15\"/>\n",
"<polygon class=\"l68d44\" id=\"0x25e9ec0\" points=\"54.45,189.65 55.95,189.65 55.95,191.15 54.45,191.15\"/>\n",
"<polygon class=\"l68d44\" id=\"0x1c13120\" points=\"57.65,189.65 59.15,189.65 59.15,191.15 57.65,191.15\"/>\n",
"<polygon class=\"l68d44\" id=\"0x1c131f0\" points=\"60.85,189.65 62.35,189.65 62.35,191.15 60.85,191.15\"/>\n",
"<polygon class=\"l68d44\" id=\"0x267d930\" points=\"88.95,177.75 90.45,177.75 90.45,179.25 88.95,179.25\"/>\n",
"<polygon class=\"l68d44\" id=\"0x267d9a0\" points=\"75.15,174.35 76.65,174.35 76.65,175.85 75.15,175.85\"/>\n",
"<polygon class=\"l68d44\" id=\"0x267da70\" points=\"107.35,167.55 108.85,167.55 108.85,169.05 107.35,169.05\"/>\n",
"<polygon class=\"l68d44\" id=\"0x273e630\" points=\"81.05,162.45 82.55,162.45 82.55,163.95 81.05,163.95\"/>\n",
"<polygon class=\"l68d44\" id=\"0x273e700\" points=\"84.25,162.45 85.75,162.45 85.75,163.95 84.25,163.95\"/>\n",
"<polygon class=\"l68d44\" id=\"0x282da30\" points=\"87.45,162.45 88.95,162.45 88.95,163.95 87.45,163.95\"/>\n",
"<polygon class=\"l68d44\" id=\"0x282db00\" points=\"90.65,162.45 92.15,162.45 92.15,163.95 90.65,163.95\"/>\n",
"<polygon class=\"l68d44\" id=\"0x29308e0\" points=\"93.85,162.45 95.35,162.45 95.35,163.95 93.85,163.95\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2930950\" points=\"111.95,150.55 113.45,150.55 113.45,152.05 111.95,152.05\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2930a20\" points=\"107.35,147.15 108.85,147.15 108.85,148.65 107.35,148.65\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2930af0\" points=\"157.95,143.75 159.45,143.75 159.45,145.25 157.95,145.25\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2930bc0\" points=\"48.05,135.25 49.55,135.25 49.55,136.75 48.05,136.75\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2930c90\" points=\"51.25,135.25 52.75,135.25 52.75,136.75 51.25,136.75\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2930d60\" points=\"54.45,135.25 55.95,135.25 55.95,136.75 54.45,136.75\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2930e30\" points=\"57.65,135.25 59.15,135.25 59.15,136.75 57.65,136.75\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2930f00\" points=\"60.85,135.25 62.35,135.25 62.35,136.75 60.85,136.75\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2930fd0\" points=\"75.15,130.15 76.65,130.15 76.65,131.65 75.15,131.65\"/>\n",
"<polygon class=\"l68d44\" id=\"0x29310a0\" points=\"1.55,119.95 3.05,119.95 3.05,121.45 1.55,121.45\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2931170\" points=\"157.95,119.95 159.45,119.95 159.45,121.45 157.95,121.45\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2931240\" points=\"176.35,116.55 177.85,116.55 177.85,118.05 176.35,118.05\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2931310\" points=\"81.05,108.05 82.55,108.05 82.55,109.55 81.05,109.55\"/>\n",
"<polygon class=\"l68d44\" id=\"0x29313e0\" points=\"84.25,108.05 85.75,108.05 85.75,109.55 84.25,109.55\"/>\n",
"<polygon class=\"l68d44\" id=\"0x29314b0\" points=\"87.45,108.05 88.95,108.05 88.95,109.55 87.45,109.55\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2931580\" points=\"90.65,108.05 92.15,108.05 92.15,109.55 90.65,109.55\"/>\n",
"<polygon class=\"l68d44\" id=\"0x2931650\" points=\"93.85,108.05 95.35,108.05 95.35,109.55 93.85,109.55\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2931720\" points=\"69.9,307.55 72.7,307.55 72.7,311.25 69.9,311.25\"/>\n",
"<polygon class=\"l69d20\" id=\"0x29317f0\" points=\"226.3,310 229.1,310 229.1,350 226.3,350\"/>\n",
"<polygon class=\"l69d20\" id=\"0x29318c0\" points=\"70.6,207.3 72,207.3 72,307.55 70.6,307.55\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2931990\" points=\"80.5,215.75 95.9,215.75 95.9,219.45 80.5,219.45\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2931a60\" points=\"227,207.3 228.4,207.3 228.4,310 227,310\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2931b30\" points=\"70,204.1 72.6,204.1 72.6,207.3 70,207.3\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2931c00\" points=\"226.4,204.1 229,204.1 229,207.3 226.4,207.3\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2931cd0\" points=\"111.4,197.3 114,197.3 114,200.5 111.4,200.5\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2931da0\" points=\"88.4,193.9 91,193.9 91,197.1 88.4,197.1\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2931e70\" points=\"47.5,188.55 62.9,188.55 62.9,192.25 47.5,192.25\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2932750\" points=\"89,180.1 90.4,180.1 90.4,193.9 89,193.9\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2932820\" points=\"88.4,176.9 91,176.9 91,180.1 88.4,180.1\"/>\n",
"<polygon class=\"l69d20\" id=\"0x29328f0\" points=\"74.6,173.5 77.2,173.5 77.2,176.7 74.6,176.7\"/>\n",
"<polygon class=\"l69d20\" id=\"0x29329c0\" points=\"47.5,134.15 62.9,134.15 62.9,137.85 47.5,137.85\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2932a90\" points=\"75.2,132.5 76.6,132.5 76.6,173.5 75.2,173.5\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2932b60\" points=\"106.8,166.7 109.4,166.7 109.4,169.9 106.8,169.9\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2932c30\" points=\"80.5,161.35 95.9,161.35 95.9,165.05 80.5,165.05\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2932d00\" points=\"107.4,149.5 108.8,149.5 108.8,166.7 107.4,166.7\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2932dd0\" points=\"112,152.9 113.4,152.9 113.4,197.3 112,197.3\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2932ea0\" points=\"111.4,149.7 114,149.7 114,152.9 111.4,152.9\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2932f70\" points=\"106.8,146.3 109.4,146.3 109.4,149.5 106.8,149.5\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2933040\" points=\"157.4,142.9 160,142.9 160,146.1 157.4,146.1\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2933110\" points=\"74.6,129.3 77.2,129.3 77.2,132.5 74.6,132.5\"/>\n",
"<polygon class=\"l69d20\" id=\"0x29331e0\" points=\"158,122.3 159.4,122.3 159.4,142.9 158,142.9\"/>\n",
"<polygon class=\"l69d20\" id=\"0x29332b0\" points=\"1,119.1 3.6,119.1 3.6,122.3 1,122.3\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2933380\" points=\"157.4,119.1 160,119.1 160,122.3 157.4,122.3\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2933450\" points=\"1.6,40 3,40 3,119.1 1.6,119.1\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2933520\" points=\"175.8,115.7 178.4,115.7 178.4,118.9 175.8,118.9\"/>\n",
"<polygon class=\"l69d20\" id=\"0x29335f0\" points=\"80.5,106.95 95.9,106.95 95.9,110.65 80.5,110.65\"/>\n",
"<polygon class=\"l69d20\" id=\"0x29336c0\" points=\"0.9,0 3.7,0 3.7,40 0.9,40\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2933790\" points=\"176.4,39.25 177.8,39.25 177.8,115.7 176.4,115.7\"/>\n",
"<polygon class=\"l69d20\" id=\"0x2933860\" points=\"175.7,35.55 178.5,35.55 178.5,39.25 175.7,39.25\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2933930\" points=\"70.3,308.4 72.3,308.4 72.3,310.4 70.3,310.4\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2933a00\" points=\"81.2,216.6 83.2,216.6 83.2,218.6 81.2,218.6\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2933ad0\" points=\"85.2,216.6 87.2,216.6 87.2,218.6 85.2,218.6\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2933ba0\" points=\"89.2,216.6 91.2,216.6 91.2,218.6 89.2,218.6\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2933c70\" points=\"93.2,216.6 95.2,216.6 95.2,218.6 93.2,218.6\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2933d40\" points=\"48.2,189.4 50.2,189.4 50.2,191.4 48.2,191.4\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2933e10\" points=\"52.2,189.4 54.2,189.4 54.2,191.4 52.2,191.4\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2933ee0\" points=\"56.2,189.4 58.2,189.4 58.2,191.4 56.2,191.4\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2933fb0\" points=\"60.2,189.4 62.2,189.4 62.2,191.4 60.2,191.4\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2934080\" points=\"81.2,162.2 83.2,162.2 83.2,164.2 81.2,164.2\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2934150\" points=\"85.2,162.2 87.2,162.2 87.2,164.2 85.2,164.2\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2934220\" points=\"89.2,162.2 91.2,162.2 91.2,164.2 89.2,164.2\"/>\n",
"<polygon class=\"l69d44\" id=\"0x29342f0\" points=\"93.2,162.2 95.2,162.2 95.2,164.2 93.2,164.2\"/>\n",
"<polygon class=\"l69d44\" id=\"0x29343c0\" points=\"48.2,135 50.2,135 50.2,137 48.2,137\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2934490\" points=\"52.2,135 54.2,135 54.2,137 52.2,137\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2934560\" points=\"56.2,135 58.2,135 58.2,137 56.2,137\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2934630\" points=\"60.2,135 62.2,135 62.2,137 60.2,137\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2934700\" points=\"81.2,107.8 83.2,107.8 83.2,109.8 81.2,109.8\"/>\n",
"<polygon class=\"l69d44\" id=\"0x29347d0\" points=\"85.2,107.8 87.2,107.8 87.2,109.8 85.2,109.8\"/>\n",
"<polygon class=\"l69d44\" id=\"0x29348a0\" points=\"89.2,107.8 91.2,107.8 91.2,109.8 89.2,109.8\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2934970\" points=\"93.2,107.8 95.2,107.8 95.2,109.8 93.2,109.8\"/>\n",
"<polygon class=\"l69d44\" id=\"0x2934a40\" points=\"176.1,36.4 178.1,36.4 178.1,38.4 176.1,38.4\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2934b10\" points=\"0,310.9 40,310.9 40,312.4 0,312.4\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2934be0\" points=\"69.65,310.9 72.95,310.9 72.95,311.05 69.65,311.05\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2934cb0\" points=\"0,307.9 72.95,307.9 72.95,310.9 0,310.9\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2934d80\" points=\"0,306.4 40,306.4 40,307.9 0,307.9\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2934e50\" points=\"69.65,307.75 72.95,307.75 72.95,307.9 69.65,307.9\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2934f20\" points=\"80.3,215.95 96.1,215.95 96.1,219.25 80.3,219.25\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2934ff0\" points=\"47.3,188.75 63.1,188.75 63.1,192.05 47.3,192.05\"/>\n",
"<polygon class=\"l70d20\" id=\"0x29350c0\" points=\"80.3,161.55 96.1,161.55 96.1,164.85 80.3,164.85\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2935190\" points=\"47.3,134.35 63.1,134.35 63.1,137.65 47.3,137.65\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2935260\" points=\"80.3,107.15 96.1,107.15 96.1,110.45 80.3,110.45\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2935330\" points=\"175.45,38.9 178.75,38.9 178.75,39.05 175.45,39.05\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2935400\" points=\"210,38.9 250,38.9 250,40.4 210,40.4\"/>\n",
"<polygon class=\"l70d20\" id=\"0x29354d0\" points=\"175.45,35.9 250,35.9 250,38.9 175.45,38.9\"/>\n",
"<polygon class=\"l70d20\" id=\"0x29355a0\" points=\"175.45,35.75 178.75,35.75 178.75,35.9 175.45,35.9\"/>\n",
"<polygon class=\"l70d20\" id=\"0x2935670\" points=\"210,34.4 250,34.4 250,35.9 210,35.9\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2935740\" points=\"81.2,216.6 83.2,216.6 83.2,218.6 81.2,218.6\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2935810\" points=\"85.2,216.6 87.2,216.6 87.2,218.6 85.2,218.6\"/>\n",
"<polygon class=\"l70d44\" id=\"0x29358e0\" points=\"89.2,216.6 91.2,216.6 91.2,218.6 89.2,218.6\"/>\n",
"<polygon class=\"l70d44\" id=\"0x29359b0\" points=\"93.2,216.6 95.2,216.6 95.2,218.6 93.2,218.6\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2935a80\" points=\"48.2,189.4 50.2,189.4 50.2,191.4 48.2,191.4\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2935b50\" points=\"52.2,189.4 54.2,189.4 54.2,191.4 52.2,191.4\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2935c20\" points=\"56.2,189.4 58.2,189.4 58.2,191.4 56.2,191.4\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2935cf0\" points=\"60.2,189.4 62.2,189.4 62.2,191.4 60.2,191.4\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2935dc0\" points=\"81.2,162.2 83.2,162.2 83.2,164.2 81.2,164.2\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2935e90\" points=\"85.2,162.2 87.2,162.2 87.2,164.2 85.2,164.2\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2935f60\" points=\"89.2,162.2 91.2,162.2 91.2,164.2 89.2,164.2\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2936030\" points=\"93.2,162.2 95.2,162.2 95.2,164.2 93.2,164.2\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2936100\" points=\"48.2,135 50.2,135 50.2,137 48.2,137\"/>\n",
"<polygon class=\"l70d44\" id=\"0x29361d0\" points=\"52.2,135 54.2,135 54.2,137 52.2,137\"/>\n",
"<polygon class=\"l70d44\" id=\"0x29362a0\" points=\"56.2,135 58.2,135 58.2,137 56.2,137\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2936370\" points=\"60.2,135 62.2,135 62.2,137 60.2,137\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2936440\" points=\"81.2,107.8 83.2,107.8 83.2,109.8 81.2,109.8\"/>\n",
"<polygon class=\"l70d44\" id=\"0x2936510\" points=\"85.2,107.8 87.2,107.8 87.2,109.8 85.2,109.8\"/>\n",
"<polygon class=\"l70d44\" id=\"0x29365e0\" points=\"89.2,107.8 91.2,107.8 91.2,109.8 89.2,109.8\"/>\n",
"<polygon class=\"l70d44\" id=\"0x29366b0\" points=\"93.2,107.8 95.2,107.8 95.2,109.8 93.2,109.8\"/>\n",
"<polygon class=\"l71d20\" id=\"0x2936780\" points=\"47.2,100.8 63.2,100.8 63.2,220 47.2,220\"/>\n",
"<polygon class=\"l71d20\" id=\"0x2936850\" points=\"80.2,106.4 96.2,106.4 96.2,220 80.2,220\"/>\n",
"<polygon class=\"l71d16\" id=\"0x2937070\" points=\"80.2,106.4 96.2,106.4 96.2,220 80.2,220\"/>\n",
"<polygon class=\"l71d16\" id=\"0x29371d0\" points=\"47.2,100.8 63.2,100.8 63.2,220 47.2,220\"/>\n",
"<polygon class=\"l69d16\" id=\"0x2937330\" points=\"0.9,0 3.7,0 3.7,40 0.9,40\"/>\n",
"<polygon class=\"l70d16\" id=\"0x2937490\" points=\"0,306.4 40,306.4 40,312.4 0,312.4\"/>\n",
"<polygon class=\"l69d16\" id=\"0x29375f0\" points=\"226.3,310 229.1,310 229.1,350 226.3,350\"/>\n",
"<polygon class=\"l70d16\" id=\"0x2936e30\" points=\"210,34.4 250,34.4 250,40.4 210,40.4\"/>\n",
"<use transform=\"translate(82.8 108.8)\" xlink:href=\"#sky130_ef_sc_hd__decap_12\"/>\n",
"<use transform=\"translate(69 163.2) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__decap_6\"/>\n",
"<use transform=\"translate(96.6 163.2) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__fill_1\"/>\n",
"<use transform=\"translate(55.2 108.8)\" xlink:href=\"#sky130_fd_sc_hd__decap_3\"/>\n",
"<use transform=\"translate(55.2 163.2) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__decap_3\"/>\n",
"<use transform=\"translate(101.2 163.2) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__xnor2_1\"/>\n",
"<use transform=\"translate(82.8 108.8) rotate(180) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__clkbuf_1\"/>\n",
"<use transform=\"translate(138 108.8)\" xlink:href=\"#sky130_fd_sc_hd__decap_3\"/>\n",
"<use transform=\"translate(133.4 163.2) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__decap_8\"/>\n",
"<use transform=\"translate(170.2 163.2) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__fill_2\"/>\n",
"<use transform=\"translate(151.8 108.8)\" xlink:href=\"#sky130_fd_sc_hd__clkbuf_4\"/>\n",
"<use transform=\"translate(193.2 108.8) rotate(180) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__decap_3\"/>\n",
"<use transform=\"translate(193.2 163.2) rotate(180)\" xlink:href=\"#sky130_fd_sc_hd__decap_3\"/>\n",
"<use transform=\"translate(105.8 163.2)\" xlink:href=\"#sky130_ef_sc_hd__decap_12\"/>\n",
"<use transform=\"translate(69 163.2)\" xlink:href=\"#sky130_fd_sc_hd__fill_1\"/>\n",
"<use transform=\"translate(55.2 163.2)\" xlink:href=\"#sky130_fd_sc_hd__decap_3\"/>\n",
"<use transform=\"translate(73.6 163.2)\" xlink:href=\"#sky130_fd_sc_hd__xnor2_1\"/>\n",
"<use transform=\"translate(161 163.2)\" xlink:href=\"#sky130_fd_sc_hd__decap_4\"/>\n",
"<use transform=\"translate(193.2 163.2) rotate(180) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__decap_3\"/>\n",
"<use transform=\"translate(82.8 217.6) scale(1 -1)\" xlink:href=\"#sky130_ef_sc_hd__decap_12\"/>\n",
"<use transform=\"translate(55.2 217.6) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__decap_3\"/>\n",
"<use transform=\"translate(82.8 217.6) rotate(180)\" xlink:href=\"#sky130_fd_sc_hd__clkbuf_1\"/>\n",
"<use transform=\"translate(138 217.6) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__decap_6\"/>\n",
"<use transform=\"translate(165.6 217.6) scale(1 -1)\" xlink:href=\"#sky130_fd_sc_hd__clkbuf_1\"/>\n",
"<use transform=\"translate(193.2 217.6) rotate(180)\" xlink:href=\"#sky130_fd_sc_hd__decap_3\"/>\n",
"<text class=\"l68t5\" dominant-baseline=\"text-before-edge\" id=\"0x2936920\" text-anchor=\"start\" transform=\"translate(124.2 217.6) scale(1 -1)\">VGND</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"text-before-edge\" id=\"0x29369b0\" text-anchor=\"start\" transform=\"translate(120.2 190.4) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l69t5\" dominant-baseline=\"text-before-edge\" id=\"0x2936a40\" text-anchor=\"start\" transform=\"translate(108.1 158.1) scale(1 -1)\">_0_</text>\n",
"<text class=\"l69t5\" dominant-baseline=\"text-before-edge\" id=\"0x2936ad0\" text-anchor=\"start\" transform=\"translate(2.3 79.4) scale(1 -1)\">a</text>\n",
"<text class=\"l70t5\" dominant-baseline=\"text-before-edge\" id=\"0x2936b60\" text-anchor=\"start\" transform=\"translate(52.5 309.4) scale(1 -1)\">b</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"text-before-edge\" id=\"0x2936bf0\" text-anchor=\"start\" transform=\"translate(202.4 205.7) scale(1 -1)\">c</text>\n",
"<text class=\"l68t5\" dominant-baseline=\"text-before-edge\" id=\"0x2936c80\" text-anchor=\"start\" transform=\"translate(78.2 130.9) scale(1 -1)\">net1</text>\n",
"<text class=\"l69t5\" dominant-baseline=\"text-before-edge\" id=\"0x2936d10\" text-anchor=\"start\" transform=\"translate(112.7 175.1) scale(1 -1)\">net2</text>\n",
"<text class=\"l69t5\" dominant-baseline=\"text-before-edge\" id=\"0x2936da0\" text-anchor=\"start\" transform=\"translate(89.7 187) scale(1 -1)\">net3</text>\n",
"<text class=\"l69t5\" dominant-baseline=\"text-before-edge\" id=\"0x2936ec0\" text-anchor=\"start\" transform=\"translate(158.7 132.6) scale(1 -1)\">net4</text>\n",
"<text class=\"l69t5\" dominant-baseline=\"text-before-edge\" id=\"0x2936f50\" text-anchor=\"start\" transform=\"translate(177.1 77.35) scale(1 -1)\">out</text>\n",
"<text class=\"l71t5\" dominant-baseline=\"central\" id=\"0x2936fe0\" text-anchor=\"middle\" transform=\"translate(88.2 163.2) rotate(90) scale(1.2) scale(1 -1)\">VGND</text>\n",
"<text class=\"l71t5\" dominant-baseline=\"central\" id=\"0x2937140\" text-anchor=\"middle\" transform=\"translate(55.2 160.4) rotate(90) scale(1.2) scale(1 -1)\">VPWR</text>\n",
"<text class=\"l69t5\" dominant-baseline=\"central\" id=\"0x29372a0\" text-anchor=\"middle\" transform=\"translate(2.3 20) rotate(90) scale(0.14) scale(1 -1)\">a</text>\n",
"<text class=\"l70t5\" dominant-baseline=\"central\" id=\"0x2937400\" text-anchor=\"middle\" transform=\"translate(20 309.4) scale(0.3) scale(1 -1)\">b</text>\n",
"<text class=\"l69t5\" dominant-baseline=\"central\" id=\"0x2937560\" text-anchor=\"middle\" transform=\"translate(227.7 330) rotate(90) scale(0.14) scale(1 -1)\">c</text>\n",
"<text class=\"l70t5\" dominant-baseline=\"central\" id=\"0x29376c0\" text-anchor=\"middle\" transform=\"translate(230 37.4) scale(0.3) scale(1 -1)\">out</text>\n",
"</g>\n",
"</svg>"
],
"text/plain": [
"<IPython.core.display.SVG object>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
2023-04-09 23:57:34 +02:00
"source": [
"import glob\n",
"import gdstk\n",
"import IPython.display\n",
"\n",
2023-04-30 19:18:38 +02:00
"gdsii = sorted(glob.glob(\"./build/runs/*/results/final/gds/*.gds\"))[-1]\n",
2023-04-09 23:57:34 +02:00
"top = gdstk.read_gds(gdsii).top_level()\n",
2023-04-17 23:17:56 +02:00
"top[0].write_svg('svg/inverter.svg')\n",
"IPython.display.SVG('svg/inverter.svg')"
2023-04-09 23:57:34 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NW_7YdgTZYQK"
},
"source": [
"### Reporting\n",
"\n",
"Many reports are available under:\n",
"\n",
"```\n",
"freeechips/semicustom/runs/RUN_YYYY.MM.DD_HH.MM.SS/reports/.\n",
"```\n",
"\n",
"An overview of the main figures can be retrieved as well:"
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 5,
2023-04-09 23:57:34 +02:00
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "OWAwQI3fZC4W",
"outputId": "d50dcf9f-30cd-42a3-dab5-12992bc9dca2",
2023-04-30 19:18:38 +02:00
"scrolled": true
2023-04-09 23:57:34 +02:00
},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>design</th>\n",
" <td>/home/pierre/Documents/freechips/semicustom/build</td>\n",
" </tr>\n",
" <tr>\n",
" <th>design_name</th>\n",
" <td>xor3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>config</th>\n",
" <td>RUN_2023.04.30_19.27.15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>flow_status</th>\n",
" <td>flow failed</td>\n",
" </tr>\n",
" <tr>\n",
" <th>total_runtime</th>\n",
" <td>0h0m17s0ms</td>\n",
" </tr>\n",
" <tr>\n",
" <th>routed_runtime</th>\n",
" <td>0h0m10s0ms</td>\n",
" </tr>\n",
" <tr>\n",
" <th>(Cell/mm^2)/Core_Util</th>\n",
" <td>13714.285714</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DIEAREA_mm^2</th>\n",
" <td>0.000875</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CellPer_mm^2</th>\n",
" <td>6857.142857</td>\n",
" </tr>\n",
" <tr>\n",
" <th>OpenDP_Util</th>\n",
" <td>27.08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Final_Util</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Peak_Memory_Usage_MB</th>\n",
" <td>469.18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>synth_cell_count</th>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>tritonRoute_violations</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Short_violations</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MetSpc_violations</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>OffGrid_violations</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MinHole_violations</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Other_violations</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Magic_violations</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pin_antenna_violations</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>net_antenna_violations</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>lvs_total_errors</th>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>cvc_total_errors</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>klayout_violations</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>wire_length</th>\n",
" <td>88</td>\n",
" </tr>\n",
" <tr>\n",
" <th>vias</th>\n",
" <td>30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>wns</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pl_wns</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>optimized_wns</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>fastroute_wns</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>spef_wns</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>tns</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pl_tns</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>optimized_tns</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>fastroute_tns</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>spef_tns</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>HPWL</th>\n",
" <td>98756.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>routing_layer1_pct</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>routing_layer2_pct</th>\n",
" <td>4.41</td>\n",
" </tr>\n",
" <tr>\n",
" <th>routing_layer3_pct</th>\n",
" <td>4.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>routing_layer4_pct</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>routing_layer5_pct</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>routing_layer6_pct</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>wires_count</th>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>wire_bits</th>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>public_wires_count</th>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>public_wire_bits</th>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>memories_count</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>memory_bits</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>processes_count</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>cells_pre_abc</th>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>AND</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DFF</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NAND</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NOR</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>OR</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>XOR</th>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>XNOR</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>MUX</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>inputs</th>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>outputs</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>level</th>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DecapCells</th>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>WelltapCells</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>DiodeCells</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>FillCells</th>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>NonPhysCells</th>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>TotalCells</th>\n",
" <td>25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CoreArea_um^2</th>\n",
" <td>150.144</td>\n",
" </tr>\n",
" <tr>\n",
" <th>power_slowest_internal_uW</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>power_slowest_switching_uW</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>power_slowest_leakage_uW</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>power_typical_internal_uW</th>\n",
" <td>0.000001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>power_typical_switching_uW</th>\n",
" <td>0.000002</td>\n",
" </tr>\n",
" <tr>\n",
" <th>power_typical_leakage_uW</th>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>power_fastest_internal_uW</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>power_fastest_switching_uW</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>power_fastest_leakage_uW</th>\n",
" <td>-1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>critical_path_ns</th>\n",
" <td>0.64</td>\n",
" </tr>\n",
" <tr>\n",
" <th>suggested_clock_period</th>\n",
" <td>10.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>suggested_clock_frequency</th>\n",
" <td>100.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CLOCK_PERIOD</th>\n",
" <td>10.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>FP_ASPECT_RATIO</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>FP_CORE_UTIL</th>\n",
" <td>50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>FP_PDN_HPITCH</th>\n",
" <td>153.18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>FP_PDN_VPITCH</th>\n",
" <td>153.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>GRT_ADJUSTMENT</th>\n",
" <td>0.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>GRT_REPAIR_ANTENNAS</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>PL_TARGET_DENSITY</th>\n",
" <td>0.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>RUN_HEURISTIC_DIODE_INSERTION</th>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>STD_CELL_LIBRARY</th>\n",
" <td>sky130_fd_sc_hd</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SYNTH_MAX_FANOUT</th>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>SYNTH_STRATEGY</th>\n",
" <td>AREA 0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0\n",
"design /home/pierre/Documents/freechips/semicustom/build\n",
"design_name xor3\n",
"config RUN_2023.04.30_19.27.15\n",
"flow_status flow failed\n",
"total_runtime 0h0m17s0ms\n",
"routed_runtime 0h0m10s0ms\n",
"(Cell/mm^2)/Core_Util 13714.285714\n",
"DIEAREA_mm^2 0.000875\n",
"CellPer_mm^2 6857.142857\n",
"OpenDP_Util 27.08\n",
"Final_Util -1\n",
"Peak_Memory_Usage_MB 469.18\n",
"synth_cell_count 2\n",
"tritonRoute_violations 0\n",
"Short_violations 0\n",
"MetSpc_violations 0\n",
"OffGrid_violations 0\n",
"MinHole_violations 0\n",
"Other_violations 0\n",
"Magic_violations -1\n",
"pin_antenna_violations -1\n",
"net_antenna_violations -1\n",
"lvs_total_errors 17\n",
"cvc_total_errors -1\n",
"klayout_violations -1\n",
"wire_length 88\n",
"vias 30\n",
"wns 0.0\n",
"pl_wns -1\n",
"optimized_wns -1\n",
"fastroute_wns -1\n",
"spef_wns 0.0\n",
"tns 0.0\n",
"pl_tns -1\n",
"optimized_tns -1\n",
"fastroute_tns -1\n",
"spef_tns 0.0\n",
"HPWL 98756.0\n",
"routing_layer1_pct 0.0\n",
"routing_layer2_pct 4.41\n",
"routing_layer3_pct 4.6\n",
"routing_layer4_pct 0.0\n",
"routing_layer5_pct 0.0\n",
"routing_layer6_pct 0.0\n",
"wires_count 5\n",
"wire_bits 5\n",
"public_wires_count 4\n",
"public_wire_bits 4\n",
"memories_count 0\n",
"memory_bits 0\n",
"processes_count 0\n",
"cells_pre_abc 2\n",
"AND 0\n",
"DFF 0\n",
"NAND 0\n",
"NOR 0\n",
"OR 0\n",
"XOR 2\n",
"XNOR 0\n",
"MUX 0\n",
"inputs 3\n",
"outputs 1\n",
"level 2\n",
"DecapCells 16\n",
"WelltapCells 0\n",
"DiodeCells 0\n",
"FillCells 3\n",
"NonPhysCells 6\n",
"TotalCells 25\n",
"CoreArea_um^2 150.144\n",
"power_slowest_internal_uW -1\n",
"power_slowest_switching_uW -1\n",
"power_slowest_leakage_uW -1\n",
"power_typical_internal_uW 0.000001\n",
"power_typical_switching_uW 0.000002\n",
"power_typical_leakage_uW 0.0\n",
"power_fastest_internal_uW -1\n",
"power_fastest_switching_uW -1\n",
"power_fastest_leakage_uW -1\n",
"critical_path_ns 0.64\n",
"suggested_clock_period 10.0\n",
"suggested_clock_frequency 100.0\n",
"CLOCK_PERIOD 10.0\n",
"FP_ASPECT_RATIO 1\n",
"FP_CORE_UTIL 50\n",
"FP_PDN_HPITCH 153.18\n",
"FP_PDN_VPITCH 153.6\n",
"GRT_ADJUSTMENT 0.3\n",
"GRT_REPAIR_ANTENNAS 1\n",
"PL_TARGET_DENSITY 0.6\n",
"RUN_HEURISTIC_DIODE_INSERTION 0\n",
"STD_CELL_LIBRARY sky130_fd_sc_hd\n",
"SYNTH_MAX_FANOUT 10\n",
"SYNTH_STRATEGY AREA 0"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
2023-04-09 23:57:34 +02:00
"source": [
"import glob\n",
"import pandas as pd\n",
2023-04-30 19:18:38 +02:00
"pd.options.display.max_rows = None\n",
2023-04-09 23:57:34 +02:00
"\n",
2023-04-30 19:18:38 +02:00
"pd.read_csv(sorted(glob.glob(\"./build/runs/*/reports/metrics.csv\"))[-1]).T"
2023-04-09 23:57:34 +02:00
]
2023-04-10 10:16:36 +02:00
},
2023-04-17 23:17:56 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# To have fun going further...\n",
"\n",
2023-04-23 14:52:13 +02:00
"## Sequential circuits in Verilog\n",
"\n",
"The tutorial above focuses on combinational circuits. Sequential circuits can obviously be described in Verilog as well. Sequential blocks feature an `always` block. Refer to the vendor's reference to get the sensitivity list's syntax (e.g. to determine if reset is synchronous or asynchronous).\n",
"\n",
"<blockquote><details>\n",
"\n",
"<summary>\n",
" \n",
"#### ↕️ Sequential structures in Verilog\n",
"\n",
"</summary>\n",
"\n",
2023-04-30 19:18:38 +02:00
"Nets which store data are declared as `reg`s:\n",
" \n",
"```verilog\n",
"// Three scalar register\n",
"reg op_b, op_a, result;\n",
"// One 16-bit register\n",
"reg [15:0] word_bus;\n",
"// 1K-array of 8-bit registers\n",
"reg [7:0] byte_array [0:1023];\n",
"```\n",
"\n",
"The following structure updates the memory points:\n",
" \n",
2023-04-23 14:52:13 +02:00
"```verilog\n",
"always @(posedge clk or negedge rst) begin\n",
2023-04-30 19:18:38 +02:00
" if (!rst) begin \n",
2023-04-23 14:52:13 +02:00
" counter <= 0;\n",
" end else begin\n",
" counter <= counter + 1;\n",
" end\n",
"end\n",
"```\n",
" \n",
"</details></blockquote>\n",
"\n",
"Advanced structures like the `case` structure can be used to describe finite state machines. FSM decoders can be described in an abstract way using `always` blocks in a fully combinational way:\n",
"\n",
"<blockquote><details>\n",
"\n",
"<summary>\n",
" \n",
"#### ↕️ Advanced structures in Verilog\n",
"\n",
"</summary>\n",
"\n",
"```verilog\n",
" \n",
"/*\n",
" * Case structure\n",
" */\n",
" \n",
"case (state)\n",
"\n",
" 3'b000: idle_led <= 1'b1;\n",
" \n",
" 3'b001,\n",
" 3'b010: work_led <= 1'b1;\n",
" \n",
" 3'b011: begin\n",
" muxed <= spi_1;\n",
" work_led <= 1'b1;\n",
" end\n",
" \n",
" default: begin\n",
" muxed <= 0;\n",
" work_led <= 1'b0; \n",
" idle_led <= 1'b1;\n",
" end\n",
"\n",
"endcase\n",
"\n",
"/*\n",
" * Combinational always structure\n",
" * To describe priorities in a procedural fashion,\n",
" * use blocking `<=` assignations instead of\n",
" * non-blocking `=` assignations.\n",
" */\n",
" \n",
"always @( * ) begin\n",
" flag <= 1'b0;\n",
" if (error) begin \n",
" flag <= 1'b1;\n",
" end\n",
"end\n",
"```\n",
"\n",
"</details></blockquote>\n",
2023-04-30 19:18:38 +02:00
" \n",
"The counter example can be synthetized:"
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 6,
2023-04-30 19:18:38 +02:00
"metadata": {},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing v/cnt.v\n"
]
}
],
2023-04-30 19:18:38 +02:00
"source": [
"%%writefile v/cnt.v\n",
"module cnt(\n",
" input wire clk,\n",
" input wire rst,\n",
" output wire [7:0] count\n",
");\n",
2023-04-23 14:52:13 +02:00
"\n",
2023-04-30 19:18:38 +02:00
" reg [7:0] counter;\n",
" assign count = counter;\n",
"\n",
" always @(posedge clk or negedge rst) begin\n",
" if (!rst) begin \n",
" counter <= 0;\n",
" end else begin\n",
" counter <= counter + 1;\n",
" end\n",
" end\n",
"\n",
"endmodule"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For sequential circuits, one must specify to synthesize the clock tree as well:"
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 7,
2023-04-30 19:18:38 +02:00
"metadata": {},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting build/config.json\n"
]
}
],
2023-04-30 19:18:38 +02:00
"source": [
"%%writefile build/config.json\n",
"{\n",
" \"DESIGN_NAME\": \"cnt\",\n",
" \"VERILOG_FILES\": \"dir::v/cnt.v\",\n",
" \"CLOCK_TREE_SYNTH\": true,\n",
" \"CLOCK_PORT\": \"clk\",\n",
" \"FP_SIZING\": \"absolute\",\n",
" \"DIE_AREA\": \"0 0 40 50\",\n",
" \"FP_PDN_AUTO_ADJUST\": false,\n",
" \"FP_PDN_VOFFSET\": 0,\n",
" \"FP_PDN_HOFFSET\": 0,\n",
" \"DIODE_INSERTION_STRATEGY\": 3\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The flow can be started:"
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 9,
2023-04-30 19:18:38 +02:00
"metadata": {
"scrolled": true
},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"env: PDK=sky130A\n",
"OpenLane 2023.04.07_0_gcb634fd5-conda\n",
"All rights reserved. (c) 2020-2022 Efabless Corporation and contributors.\n",
"Available under the Apache License, version 2.0. See the LICENSE file for more details.\n",
"\n",
"\u001b[36m[INFO]: Using configuration in 'build/config.json'...\u001b[39m\n",
"\u001b[36m[INFO]: PDK Root: /home/pierre/anaconda3/envs/semicustom/share/pdk\u001b[39m\n",
"\u001b[36m[INFO]: Process Design Kit: sky130A\u001b[39m\n",
"\u001b[36m[INFO]: Standard Cell Library: sky130_fd_sc_hd\u001b[39m\n",
"\u001b[36m[INFO]: Optimization Standard Cell Library: sky130_fd_sc_hd\u001b[39m\n",
"\u001b[33m[WARNING]: DIODE_INSERTION_STRATEGY is now deprecated; use GRT_REPAIR_ANTENNAS, DIODE_ON_PORTS and RUN_HEURISTIC_DIODE_INSERTION instead.\u001b[39m\n",
"\u001b[36m[INFO]: DIODE_INSERTION_STRATEGY set to 3. Setting GRT_REPAIR_ANTENNAS to 1\u001b[39m\n",
"\u001b[36m[INFO]: Run Directory: /home/pierre/Documents/freechips/semicustom/build/runs/RUN_2023.04.30_19.28.02\u001b[39m\n",
"\u001b[36m[INFO]: Preparing LEF files for the nom corner...\u001b[39m\n",
"\u001b[36m[INFO]: Preparing LEF files for the min corner...\u001b[39m\n",
"\u001b[36m[INFO]: Preparing LEF files for the max corner...\u001b[39m\n",
"[STEP 1]\n",
"\u001b[36m[INFO]: Running Synthesis (log: build/runs/RUN_2023.04.30_19.28.02/logs/synthesis/1-synthesis.log)...\u001b[39m\n",
"\u001b[31m[ERROR]: during executing yosys script /home/pierre/anaconda3/envs/semicustom/share/openlane/scripts/yosys/synth.tcl\u001b[39m\n",
"\u001b[31m[ERROR]: Log: build/runs/RUN_2023.04.30_19.28.02/logs/synthesis/1-synthesis.log\u001b[39m\n",
"\u001b[31m[ERROR]: Last 10 lines:\n",
" Yosys 0.27+30 (git sha1 e56dad56c, x86_64-conda-linux-gnu-cc 11.2.0 -fvisibility-inlines-hidden -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -fdebug-prefix-map=/root/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1681341442694/work=/usr/local/src/conda/yosys-0.27_33_ge56dad56c -fdebug-prefix-map=/home/pierre/anaconda3/envs/semicustom=/usr/local/src/conda-prefix -fPIC -Os -fno-merge-constants)\n",
"\n",
"[TCL: yosys -import] Command name collision: found pre-existing command `cd' -> skip.\n",
"[TCL: yosys -import] Command name collision: found pre-existing command `eval' -> skip.\n",
"[TCL: yosys -import] Command name collision: found pre-existing command `exec' -> skip.\n",
"[TCL: yosys -import] Command name collision: found pre-existing command `read' -> skip.\n",
"[TCL: yosys -import] Command name collision: found pre-existing command `trace' -> skip.\n",
"ERROR: Can't open input file `/home/pierre/Documents/freechips/semicustom/build/v/cnt.v' for reading: No such file or directory\n",
"ERROR: TCL interpreter returned an error: Yosys command produced an error\n",
"child process exited abnormally\n",
"\u001b[39m\n",
"\u001b[31m[ERROR]: Creating issue reproducible...\u001b[39m\n",
"\u001b[36m[INFO]: Saving runtime environment...\u001b[39m\n",
"OpenLane TCL Issue Packager\n",
"\n",
"EFABLESS CORPORATION AND ALL AUTHORS OF THE OPENLANE PROJECT SHALL NOT BE HELD\n",
"LIABLE FOR ANY LEAKS THAT MAY OCCUR TO ANY PROPRIETARY DATA AS A RESULT OF USING\n",
"THIS SCRIPT. THIS SCRIPT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n",
"CONDITIONS OF ANY KIND.\n",
"\n",
"BY USING THIS SCRIPT, YOU ACKNOWLEDGE THAT YOU FULLY UNDERSTAND THIS DISCLAIMER\n",
"AND ALL IT ENTAILS.\n",
"\n",
"Parsing config file(s)…\n",
"Setting up /home/pierre/Documents/freechips/semicustom/build/runs/RUN_2023.04.30_19.28.02/issue_reproducible…\n",
"Done.\n",
"\u001b[36m[INFO]: Reproducible packaged: Please tarball and upload 'build/runs/RUN_2023.04.30_19.28.02/issue_reproducible' if you're going to submit an issue.\u001b[39m\n",
"\u001b[31m[ERROR]: Step(1:synthesis) failed with error:\n",
"-code 1 -level 0 -errorstack {INNER {invokeStk1 throw_error} CALL {run_tcl_script -tool yosys -no_consume /home/pierre/anaconda3/envs/semicustom/share/openlane/scripts/yosys/synth.tcl -indexed_log /home/pierre/Documents/freechips/semicustom/build/runs/RUN_2023.04.30_19.28.02/logs/synthesis/1-synthesis.log} CALL {run_yosys_script /home/pierre/anaconda3/envs/semicustom/share/openlane/scripts/yosys/synth.tcl -indexed_log /home/pierre/Documents/freechips/semicustom/build/runs/RUN_2023.04.30_19.28.02/logs/synthesis/1-synthesis.log} CALL {run_yosys -indexed_log /home/pierre/Documents/freechips/semicustom/build/runs/RUN_2023.04.30_19.28.02/logs/synthesis/1-synthesis.log} CALL run_synthesis CALL {run_non_interactive_mode -design build}} -errorcode NONE -errorinfo {\n",
" while executing\n",
"\"throw_error\"\n",
" (procedure \"run_tcl_script\" line 219)\n",
" invoked from within\n",
"\"run_tcl_script -tool yosys -no_consume {*}$args\"\n",
" (procedure \"run_yosys_script\" line 2)\n",
" invoked from within\n",
"\"run_yosys_script $::env(SYNTH_SCRIPT) -indexed_log $arg_values(-indexed_log)\"\n",
" (procedure \"run_yosys\" line 44)\n",
" invoked from within\n",
"\"run_yosys -indexed_log $log\"\n",
" (procedure \"run_synthesis\" line 13)\n",
" invoked from within\n",
"\"run_synthesis\"} -errorline 1\u001b[39m\n",
"\u001b[36m[INFO]: Saving current set of views in 'build/runs/RUN_2023.04.30_19.28.02/results/final'...\u001b[39m\n",
"\u001b[36m[INFO]: Generating final set of reports...\u001b[39m\n",
"\u001b[36m[INFO]: Created manufacturability report at 'build/runs/RUN_2023.04.30_19.28.02/reports/manufacturability.rpt'.\u001b[39m\n",
"\u001b[36m[INFO]: Created metrics report at 'build/runs/RUN_2023.04.30_19.28.02/reports/metrics.csv'.\u001b[39m\n",
"\u001b[36m[INFO]: Saving runtime environment...\u001b[39m\n",
"\u001b[31m[ERROR]: Flow failed.\u001b[39m\n"
]
}
],
2023-04-30 19:18:38 +02:00
"source": [
"%env PDK=sky130A\n",
2023-04-30 19:29:52 +02:00
"!flow.tcl -design build"
2023-04-30 19:18:38 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The cell above can be reused to display the lyaout."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2023-04-17 23:17:56 +02:00
"## High-Level Synthesis (HLS)\n",
"\n",
"RTL description of circuits does not follow an imperative programming paradigm. It is a description language that produces highly parallelized designs.\n",
"\n",
"High-Level Synthesis provides an imperative language and a compiler that synthesizes the imperative instructions into RTL. For instance, _XLS_ provides a _Rust_-like language:"
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 10,
2023-04-17 23:17:56 +02:00
"metadata": {},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Writing xls/x/find_max.x\n"
]
}
],
2023-04-17 23:17:56 +02:00
"source": [
2023-04-30 19:18:38 +02:00
"%%writefile xls/x/find_max.x\n",
"\n",
"//\n",
"// Input: an array of 32-bit unsigned integers (u32) of parametrized length N\n",
"// Output: the largest element of the array\n",
"//\n",
"pub fn find_max<N: u32>(array: u32[N]) -> u32 {\n",
" let max: u32 = u32:0;\n",
" for (i, max): (u32, u32) in range(u32:0,N) {\n",
" if (array[i] > max) {array[i]} else {max}\n",
" }(max)\n",
2023-04-17 23:17:56 +02:00
"}\n",
"\n",
2023-04-30 19:18:38 +02:00
"//\n",
"// Input: an array of 32-bit unsigned integers (u32) of parametrized length 4\n",
"// Output: the largest element of the array\n",
"//\n",
"pub fn find_max_impl(array: u32[4]) -> u32 {\n",
" find_max<u32:4>(array)\n",
"}\n",
" \n",
2023-04-17 23:17:56 +02:00
"#[test]\n",
2023-04-30 19:18:38 +02:00
"fn find_max_impl_test() {\n",
" let _= assert_eq(find_max_impl(u32[4]:[45,3,15,6]), u32:45);\n",
" let _= assert_eq(find_max_impl(u32[4]:[3,45,15,6]), u32:45);\n",
" let _= assert_eq(find_max_impl(u32[4]:[15,3,45,6]), u32:45);\n",
" let _= assert_eq(find_max_impl(u32[4]:[6,3,15,45]), u32:45);\n",
"}\n",
"\n",
"#[test]\n",
"fn find_max_test() {\n",
" let _= assert_eq(find_max<u32:1>(u32[1]:[39]), u32:39);\n",
" let _= assert_eq(find_max<u32:2>(u32[2]:[4,90]), u32:90);\n",
" let _= assert_eq(find_max<u32:3>(u32[3]:[7,21,15]), u32:21);\n",
" let _= assert_eq(find_max<u32:8>(u32[8]:[1,3,45,1,5,56,0,34]), u32:56);\n",
2023-04-17 23:17:56 +02:00
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Testing, parsing and linting can be performed prior to RTL synhesis:"
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 11,
2023-04-17 23:17:56 +02:00
"metadata": {
"scrolled": true
},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ RUN UNITTEST ] find_max_impl_test\r\n",
"[ OK ]\r\n",
"[ RUN UNITTEST ] find_max_test\r\n",
"[ OK ]\r\n",
"[===============] 2 test(s) ran; 0 failed; 0 skipped.\r\n"
]
}
],
2023-04-17 23:17:56 +02:00
"source": [
2023-04-30 19:18:38 +02:00
"!interpreter_main xls/x/find_max.x"
2023-04-17 23:17:56 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2023-04-23 14:52:13 +02:00
"Now that the imperative instructions are tested, the RTL design can be synthesized by _XLS_:"
2023-04-17 23:17:56 +02:00
]
},
{
"cell_type": "code",
2023-04-30 19:29:52 +02:00
"execution_count": 12,
2023-04-17 23:17:56 +02:00
"metadata": {},
2023-04-30 19:29:52 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"module __find_max__find_max_impl(\r\n",
" input wire [127:0] array,\r\n",
" output wire [31:0] out\r\n",
");\r\n",
" wire [31:0] array_unflattened[4];\r\n",
" assign array_unflattened[0] = array[31:0];\r\n",
" assign array_unflattened[1] = array[63:32];\r\n",
" assign array_unflattened[2] = array[95:64];\r\n",
" assign array_unflattened[3] = array[127:96];\r\n",
" wire [31:0] array_index_74;\r\n",
" wire [31:0] array_index_75;\r\n",
" wire [31:0] array_index_78;\r\n",
" wire [31:0] sel_79;\r\n",
" wire [31:0] array_index_82;\r\n",
" wire [31:0] sel_83;\r\n",
" assign array_index_74 = array_unflattened[2'h1];\r\n",
" assign array_index_75 = array_unflattened[2'h0];\r\n",
" assign array_index_78 = array_unflattened[2'h2];\r\n",
" assign sel_79 = array_index_74 > array_index_75 ? array_index_74 : array_index_75;\r\n",
" assign array_index_82 = array_unflattened[2'h3];\r\n",
" assign sel_83 = array_index_78 > sel_79 ? array_index_78 : sel_79;\r\n",
" assign out = array_index_82 > sel_83 ? array_index_82 : sel_83;\r\n",
"endmodule\r\n"
]
}
],
2023-04-17 23:17:56 +02:00
"source": [
2023-04-30 19:18:38 +02:00
"XLS_DESIGN_NAME = 'find_max_impl'\n",
"XLS_DESIGN_FILE = 'find_max'\n",
"!ir_converter_main --top={XLS_DESIGN_NAME} xls/x/{XLS_DESIGN_FILE}.x > xls/ir/{XLS_DESIGN_FILE}.ir\n",
"!opt_main xls/ir/{XLS_DESIGN_FILE}.ir > xls/ir/{XLS_DESIGN_FILE}_opt.ir\n",
"!codegen_main --generator=combinational xls/ir/{XLS_DESIGN_FILE}_opt.ir > v/{XLS_DESIGN_FILE}.v\n",
"!cat v/{XLS_DESIGN_FILE}.v"
2023-04-17 23:17:56 +02:00
]
},
2023-04-24 01:31:28 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Verilog simulation\n",
"\n",
2023-04-30 19:18:38 +02:00
"A test bench can be written to simulate the `xor3` circuit described above:"
2023-04-24 01:31:28 +02:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%writefile tb/xor3_tb.v\n",
"module xor3_tb;\n",
"\n",
" wire value;\n",
" reg w1, w2, w3;\n",
" initial begin\n",
" $dumpfile(\"tb/xor3_tb.vcd\");\n",
" $dumpvars(0,xor3_tb);\n",
" # 0 w1 = 0; w2 = 0; w3 = 0;\n",
" # 5 w1 = 0; w2 = 0; w3 = 1;\n",
" # 5 w1 = 0; w2 = 1; w3 = 0;\n",
" # 5 w1 = 0; w2 = 1; w3 = 1;\n",
" # 5 w1 = 1; w2 = 0; w3 = 0;\n",
" # 5 w1 = 1; w2 = 0; w3 = 1;\n",
" # 5 w1 = 1; w2 = 1; w3 = 0;\n",
" # 5 w1 = 1; w2 = 1; w3 = 1;\n",
" # 5 $finish;\n",
" end\n",
"\n",
" xor3 xor3_i (w1, w2, w3, value);\n",
"\n",
" initial\n",
" $monitor(\"At time %t, value = %h (%0d)\",\n",
" $time, value, value);\n",
"endmodule"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The simulation can then be performed using _Icarus Verilog_:"
]
},
{
"cell_type": "code",
"execution_count": null,
2023-04-30 19:18:38 +02:00
"metadata": {
"scrolled": true
},
2023-04-24 01:31:28 +02:00
"outputs": [],
"source": [
"!iverilog -o tb/xor3_tb tb/xor3_tb.v v/xor3.v\n",
"!vvp tb/xor3_tb"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The waveforms are dumped in a `.vcd` file, located under:\n",
"\n",
"```\n",
"tb/xor3_tb.vcd\n",
"```\n",
"\n",
"It can be opened with https://vc.drom.io/ for instance."
]
},
2023-04-30 19:18:38 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Some ideas...\n",
"\n",
"Here are a couple ideas to spend a good time exploring those beautiful pieces of software:\n",
"\n",
" * Play with RTL2GDS configuration parameters and observe the impact on the layout.\n",
" * Simulate the `cnt` sequential circuit.\n",
" * Simulate the `find_max_impl` circuit synthesized using HLS.\n",
" * Try to make _Klayout_ GUI work (no warranty).\n",
"\n",
" **Do not start from scratch! Use the provided examples, examples you can find on the internet and the documentation to adapt from them!**\n",
" \n",
" > Good luck and read the docs. 😉\n",
" \n",
"## More food for the brain\n",
"\n",
" * GDS2RTL flow configuration parameters: https://armleo-openlane.readthedocs.io/en/latest/docs/source/configuration.html\n",
" * DSLX language reference: https://google.github.io/xls/dslx_reference/"
]
},
2023-04-10 10:16:36 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# References\n",
"Inspired from:\n",
"“Silicon Notebooks.” CHIPS Alliance, Apr. 08, 2023. Accessed: Apr. 10, 2023. [Online]. Available: https://github.com/chipsalliance/silicon-notebooks/blob/b65134a43b01ae31423f7ee87110740b2257ac42/digital-inverter-openlane.ipynb (Apache License 2.0)"
]
2023-04-09 23:57:34 +02:00
}
],
"metadata": {
"colab": {
"name": "digital-inverter-openlane.ipynb",
"provenance": []
},
"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",
2023-04-17 23:17:56 +02:00
"version": "3.7.16"
2023-04-09 23:57:34 +02:00
}
},
"nbformat": 4,
"nbformat_minor": 1
}