├── .github ├── FUNDING.yml └── workflows │ └── regression.yaml ├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── calculations.py ├── docs ├── divider8 │ ├── divider.v │ ├── netlist.dot │ ├── opensta.min_max.rpt │ └── yosys_2.stat.rpt └── multiplier8 │ ├── multiplier.v │ ├── netlist.dot │ ├── opensta.min_max.rpt │ └── yosys_2.stat.rpt ├── edge_detect.gtkw ├── fpga ├── icebreaker.pcf └── icebreaker_1.0e.pcf ├── frequency_counter.gtkw ├── segments.txt ├── seven_segment.gtkw ├── src ├── edge_detect.v ├── frequency_counter.v └── seven_segment.v ├── states.txt ├── test ├── __init__.py ├── dump_edge_detect.v ├── dump_frequency_counter.v ├── dump_seven_segment.v ├── test_edge_detect.py ├── test_frequency_counter.py └── test_seven_segment.py └── verible.rules /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | custom: ['https://zerotoasiccourse.com'] 4 | -------------------------------------------------------------------------------- /.github/workflows/regression.yaml: -------------------------------------------------------------------------------- 1 | name: Monthly Check 2 | 3 | on: 4 | push: 5 | schedule: 6 | - cron: '0 8 1 * *' # Run at 08:00 UTC on the 1st of every month 7 | workflow_dispatch: 8 | 9 | jobs: 10 | simulate: 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: mattvenn/z2a-course-regressions@main 15 | with: 16 | repo: mattvenn/frequency_counter 17 | ref: main 18 | command: make test_frequency_counter test_frequency_counter_with_period test_seven_segment test_edge_detect 19 | artifact_file: frequency_counter.vcd 20 | 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *swp 2 | *vcd 3 | *log 4 | *bin 5 | __pycache__ 6 | sim_build 7 | results.xml 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # FPGA variables 2 | PROJECT = fpga/frequency_counter 3 | SOURCES= src/frequency_counter.v src/seven_segment.v src/edge_detect.v 4 | ICEBREAKER_DEVICE = up5k 5 | ICEBREAKER_PIN_DEF = fpga/icebreaker.pcf 6 | ICEBREAKER_PACKAGE = sg48 7 | SEED = 1 8 | 9 | # COCOTB variables 10 | export COCOTB_REDUCED_LOG_FMT=1 11 | export PYTHONPATH := test:$(PYTHONPATH) 12 | export LIBPYTHON_LOC=$(shell cocotb-config --libpython) 13 | 14 | all: test_frequency_counter test_seven_segment 15 | 16 | # if you run rules with NOASSERT=1 it will set PYTHONOPTIMIZE, which turns off assertions in the tests 17 | test_edge_detect: 18 | rm -rf sim_build/ 19 | mkdir sim_build/ 20 | iverilog -o sim_build/sim.vvp -s edge_detect -s dump -g2012 src/edge_detect.v test/dump_edge_detect.v 21 | PYTHONOPTIMIZE=${NOASSERT} MODULE=test.test_edge_detect vvp -M $$(cocotb-config --prefix)/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp 22 | ! grep failure results.xml 23 | 24 | test_frequency_counter: 25 | rm -rf sim_build/ 26 | mkdir sim_build/ 27 | iverilog -o sim_build/sim.vvp -s frequency_counter -s dump -g2012 src/frequency_counter.v src/edge_detect.v src/seven_segment.v test/dump_frequency_counter.v 28 | PYTHONOPTIMIZE=${NOASSERT} TESTCASE=test_all MODULE=test.test_frequency_counter vvp -M $$(cocotb-config --prefix)/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp 29 | ! grep failure results.xml 30 | 31 | test_frequency_counter_with_period: 32 | rm -rf sim_build/ 33 | mkdir sim_build/ 34 | iverilog -o sim_build/sim.vvp -s frequency_counter -s dump -g2012 src/frequency_counter.v src/edge_detect.v src/seven_segment.v test/dump_frequency_counter.v 35 | PYTHONOPTIMIZE=${NOASSERT} MODULE=test.test_frequency_counter vvp -M $$(cocotb-config --prefix)/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp 36 | ! grep failure results.xml 37 | 38 | test_seven_segment: 39 | rm -rf sim_build/ 40 | mkdir sim_build/ 41 | iverilog -o sim_build/sim.vvp -s seven_segment -s dump -g2012 src/seven_segment.v test/dump_seven_segment.v 42 | PYTHONOPTIMIZE=${NOASSERT} MODULE=test.test_seven_segment vvp -M $$(cocotb-config --prefix)/cocotb/libs -m libcocotbvpi_icarus sim_build/sim.vvp 43 | ! grep failure results.xml 44 | 45 | show_%: %.vcd %.gtkw 46 | gtkwave $^ 47 | 48 | # FPGA recipes 49 | 50 | show_synth_%: src/%.v 51 | yosys -p "read_verilog $<; proc; opt; show -colors 2 -width -signed" 52 | 53 | %.json: $(SOURCES) 54 | yosys -l fpga/yosys.log -p 'synth_ice40 -top frequency_counter -json $(PROJECT).json' $(SOURCES) 55 | 56 | %.asc: %.json $(ICEBREAKER_PIN_DEF) 57 | nextpnr-ice40 -l fpga/nextpnr.log --seed $(SEED) --freq 20 --package $(ICEBREAKER_PACKAGE) --$(ICEBREAKER_DEVICE) --asc $@ --pcf $(ICEBREAKER_PIN_DEF) --json $< 58 | 59 | %.bin: %.asc 60 | icepack $< $@ 61 | 62 | prog: $(PROJECT).bin 63 | iceprog $< 64 | 65 | # general recipes 66 | 67 | lint: 68 | verible-verilog-lint src/*v --rules_config verible.rules 69 | 70 | clean: 71 | rm -rf *vcd sim_build fpga/*log fpga/*bin test/__pycache__ 72 | 73 | .PHONY: clean 74 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Frequency counter 2 | 3 | This repository is a template for project 2.2 that takes you through: 4 | 5 | * Building an edge detector 6 | * Building a seven segment driver 7 | * Counting edges 8 | * State machines 9 | 10 | # License 11 | 12 | This repo is part of the [Zero to ASIC course](https://zerotoasiccourse.com) and licensed with [Apache 2](LICENSE). 13 | 14 | # Resources 15 | 16 | * Verilog cheatsheet: https://marceluda.github.io/rp_dummy/EEOF2018/Verilog_Cheat_Sheet.pdf 17 | * Clock domain crossing: http://www.sunburst-design.com/papers/CummingsSNUG2008Boston_CDC.pdf 18 | * Flip flops and metastability: https://www.youtube.com/watch?v=5PRuPVIjEcs 19 | * VHDL resources: https://docs.google.com/document/d/1RAQWjmxpJndlEJdLWXK8irIqWuYTstqu7pU3tOIFccc/edit 20 | * Charles Eric LaForest design elements guide: http://fpgacpu.ca/fpga/index.html 21 | -------------------------------------------------------------------------------- /calculations.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | import pint, math 3 | ureg = pint.UnitRegistry() 4 | 5 | clock_freq = 12 * ureg.MHz 6 | clock_period = 1/clock_freq 7 | 8 | clocks_per_period = 1200 9 | bits_needed = math.ceil(math.log(clocks_per_period)/math.log(2)) 10 | 11 | print("bits needed for clocks per period %d = %d" % (clocks_per_period, bits_needed)) 12 | print("max clocks in %d bits = %d" % (bits_needed, 2 ** bits_needed)) 13 | 14 | count_period = clocks_per_period * clock_period.to(ureg.us) 15 | print("count period is %s" % count_period) 16 | print("period frequency is %s" % (1/count_period).to(ureg.kHz)) 17 | 18 | for i in range(1,100): 19 | print("%02d = %s = %s" % (i, (i/count_period).to(ureg.MHz), (count_period/i).to(ureg.us))) 20 | -------------------------------------------------------------------------------- /docs/divider8/divider.v: -------------------------------------------------------------------------------- 1 | `default_nettype none 2 | module divider ( 3 | input wire clk, 4 | input [7:0] a, 5 | input [7:0] b, 6 | output reg [7:0] c 7 | ); 8 | always @(posedge clk) 9 | c <= a / b; 10 | endmodule 11 | -------------------------------------------------------------------------------- /docs/divider8/netlist.dot: -------------------------------------------------------------------------------- 1 | digraph "divider" { 2 | label="divider"; 3 | rankdir="LR"; 4 | remincross=true; 5 | n246 [ shape=octagon, label="a", color="black", fontcolor="black" ]; 6 | n247 [ shape=octagon, label="b", color="black", fontcolor="black" ]; 7 | n248 [ shape=octagon, label="c", color="black", fontcolor="black" ]; 8 | n249 [ shape=octagon, label="clk", color="black", fontcolor="black" ]; 9 | c252 [ shape=record, label="{{ A}|$3755\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 10 | x0 [ shape=record, style=rounded, label=" 1:1 - 0:0 " ]; 11 | x0:e -> c252:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 12 | c254 [ shape=record, label="{{ A}|$3756\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 13 | c255 [ shape=record, label="{{ A}|$3757\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 14 | x1 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 15 | x1:e -> c255:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 16 | c256 [ shape=record, label="{{ A}|$3758\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 17 | c257 [ shape=record, label="{{ A}|$3759\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 18 | c259 [ shape=record, label="{{ A| B}|$3760\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 19 | x2 [ shape=record, style=rounded, label=" 1:1 - 0:0 " ]; 20 | x2:e -> c259:p258:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 21 | c260 [ shape=record, label="{{ A}|$3761\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 22 | c264 [ shape=record, label="{{ A1| A2| B1}|$3762\nsky130_fd_sc_hd__a21o_4|{ X}}" ]; 23 | x3 [ shape=record, style=rounded, label=" 1:1 - 0:0 " ]; 24 | x3:e -> c264:p262:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 25 | c265 [ shape=record, label="{{ A}|$3763\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 26 | x4 [ shape=record, style=rounded, label=" 7:7 - 0:0 " ]; 27 | x4:e -> c265:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 28 | c266 [ shape=record, label="{{ A}|$3764\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 29 | x5 [ shape=record, style=rounded, label=" 5:5 - 0:0 " ]; 30 | x5:e -> c266:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 31 | c267 [ shape=record, label="{{ A}|$3765\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 32 | x6 [ shape=record, style=rounded, label=" 6:6 - 0:0 " ]; 33 | x6:e -> c267:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 34 | c269 [ shape=record, label="{{ A| B| C}|$3766\nsky130_fd_sc_hd__or3_4|{ X}}" ]; 35 | x7 [ shape=record, style=rounded, label=" 5:5 - 0:0 " ]; 36 | x7:e -> c269:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 37 | x8 [ shape=record, style=rounded, label=" 6:6 - 0:0 " ]; 38 | x8:e -> c269:p258:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 39 | x9 [ shape=record, style=rounded, label=" 7:7 - 0:0 " ]; 40 | x9:e -> c269:p268:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 41 | c270 [ shape=record, label="{{ A}|$3767\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 42 | x10 [ shape=record, style=rounded, label=" 4:4 - 0:0 " ]; 43 | x10:e -> c270:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 44 | c271 [ shape=record, label="{{ A}|$3768\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 45 | x11 [ shape=record, style=rounded, label=" 3:3 - 0:0 " ]; 46 | x11:e -> c271:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 47 | c272 [ shape=record, label="{{ A}|$3769\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 48 | x12 [ shape=record, style=rounded, label=" 2:2 - 0:0 " ]; 49 | x12:e -> c272:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 50 | c273 [ shape=record, label="{{ A| B| C}|$3770\nsky130_fd_sc_hd__or3_4|{ X}}" ]; 51 | x13 [ shape=record, style=rounded, label=" 4:4 - 0:0 " ]; 52 | x13:e -> c273:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 53 | x14 [ shape=record, style=rounded, label=" 3:3 - 0:0 " ]; 54 | x14:e -> c273:p258:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 55 | c274 [ shape=record, label="{{ A| B}|$3771\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 56 | x15 [ shape=record, style=rounded, label=" 7:7 - 0:0 " ]; 57 | x15:e -> c274:p258:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 58 | c276 [ shape=record, label="{{ A| B| C| D}|$3772\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 59 | x16 [ shape=record, style=rounded, label=" 2:2 - 0:0 " ]; 60 | x16:e -> c276:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 61 | x17 [ shape=record, style=rounded, label=" 1:1 - 0:0 " ]; 62 | x17:e -> c276:p258:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 63 | c277 [ shape=record, label="{{ A1| A2| B1}|$3773\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 64 | x18 [ shape=record, style=rounded, label=" 7:7 - 0:0 " ]; 65 | x18:e -> c277:p263:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 66 | c278 [ shape=record, label="{{ A}|$3774\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 67 | c279 [ shape=record, label="{{ A}|$3775\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 68 | x19 [ shape=record, style=rounded, label=" 6:6 - 0:0 " ]; 69 | x19:e -> c279:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 70 | c280 [ shape=record, label="{{ A| B}|$3776\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 71 | x20 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 72 | x20:e -> c280:p258:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 73 | c281 [ shape=record, label="{{ A| B}|$3777\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 74 | c282 [ shape=record, label="{{ A1| A2| B1}|$3778\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 75 | c283 [ shape=record, label="{{ A| B| C| D}|$3779\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 76 | x21 [ shape=record, style=rounded, label=" 2:2 - 0:0 " ]; 77 | x21:e -> c283:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 78 | c284 [ shape=record, label="{{ A1| A2| B1}|$3780\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 79 | c285 [ shape=record, label="{{ A}|$3781\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 80 | c286 [ shape=record, label="{{ A}|$3782\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 81 | x22 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 82 | x22:e -> c286:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 83 | c287 [ shape=record, label="{{ A}|$3783\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 84 | c288 [ shape=record, label="{{ A| B}|$3784\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 85 | c291 [ shape=record, label="{{ A1| A2| A3| B1| B2}|$3785\nsky130_fd_sc_hd__a32o_4|{ X}}" ]; 86 | x23 [ shape=record, style=rounded, label=" 6:6 - 0:0 " ]; 87 | x23:e -> c291:p289:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 88 | c292 [ shape=record, label="{{ A| B}|$3786\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 89 | c293 [ shape=record, label="{{ A}|$3787\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 90 | x24 [ shape=record, style=rounded, label=" 5:5 - 0:0 " ]; 91 | x24:e -> c293:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 92 | c294 [ shape=record, label="{{ A| B}|$3788\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 93 | c295 [ shape=record, label="{{ A}|$3789\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 94 | c296 [ shape=record, label="{{ A| B}|$3790\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 95 | c297 [ shape=record, label="{{ A1| A2| B1}|$3791\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 96 | c298 [ shape=record, label="{{ A1| A2| B1}|$3792\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 97 | c300 [ shape=record, label="{{ A1| A2| B1| C1}|$3793\nsky130_fd_sc_hd__a211o_4|{ X}}" ]; 98 | c301 [ shape=record, label="{{ A}|$3794\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 99 | c302 [ shape=record, label="{{ A| B}|$3795\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 100 | c305 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3796\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 101 | c306 [ shape=record, label="{{ A}|$3797\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 102 | c307 [ shape=record, label="{{ A}|$3798\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 103 | c308 [ shape=record, label="{{ A1| A2| B1| B2}|$3799\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 104 | c309 [ shape=record, label="{{ A| B}|$3800\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 105 | c310 [ shape=record, label="{{ A}|$3801\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 106 | c311 [ shape=record, label="{{ A1| A2| B1}|$3802\nsky130_fd_sc_hd__a21oi_4|{ Y}}" ]; 107 | x25 [ shape=record, style=rounded, label=" 5:5 - 0:0 " ]; 108 | x25:e -> c311:p261:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 109 | c312 [ shape=record, label="{{ A1| A2| B1| B2}|$3803\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 110 | c313 [ shape=record, label="{{ A| B}|$3804\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 111 | c314 [ shape=record, label="{{ A| B}|$3805\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 112 | x26 [ shape=record, style=rounded, label=" 4:4 - 0:0 " ]; 113 | x26:e -> c314:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 114 | c315 [ shape=record, label="{{ A}|$3806\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 115 | c316 [ shape=record, label="{{ A| B}|$3807\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 116 | c317 [ shape=record, label="{{ A1| A2| B1}|$3808\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 117 | c318 [ shape=record, label="{{ A| B}|$3809\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 118 | c319 [ shape=record, label="{{ A1| A2| B1}|$3810\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 119 | c320 [ shape=record, label="{{ A1| A2| B1| C1}|$3811\nsky130_fd_sc_hd__a211o_4|{ X}}" ]; 120 | c321 [ shape=record, label="{{ A| B}|$3812\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 121 | c322 [ shape=record, label="{{ A}|$3813\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 122 | c323 [ shape=record, label="{{ A| B}|$3814\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 123 | c324 [ shape=record, label="{{ A1| A2| B1}|$3815\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 124 | c325 [ shape=record, label="{{ A1| A2| B1}|$3816\nsky130_fd_sc_hd__o21ai_4|{ Y}}" ]; 125 | c326 [ shape=record, label="{{ A| B}|$3817\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 126 | c327 [ shape=record, label="{{ A}|$3818\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 127 | c328 [ shape=record, label="{{ A1| A2| B1}|$3819\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 128 | c329 [ shape=record, label="{{ A}|$3820\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 129 | c330 [ shape=record, label="{{ A}|$3821\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 130 | c331 [ shape=record, label="{{ A| B}|$3822\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 131 | c332 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3823\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 132 | c333 [ shape=record, label="{{ A}|$3824\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 133 | c334 [ shape=record, label="{{ A1| A2| B1| B2}|$3825\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 134 | c335 [ shape=record, label="{{ A| B}|$3826\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 135 | c336 [ shape=record, label="{{ A| B}|$3827\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 136 | c337 [ shape=record, label="{{ A| B}|$3828\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 137 | c339 [ shape=record, label="{{ A1| A2| B1_N}|$3829\nsky130_fd_sc_hd__a21bo_4|{ X}}" ]; 138 | c340 [ shape=record, label="{{ A}|$3830\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 139 | c341 [ shape=record, label="{{ A| B}|$3831\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 140 | c342 [ shape=record, label="{{ A}|$3832\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 141 | c343 [ shape=record, label="{{ A| B}|$3833\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 142 | c344 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3834\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 143 | c345 [ shape=record, label="{{ A1| A2| B1| B2}|$3835\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 144 | c346 [ shape=record, label="{{ A| B}|$3836\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 145 | c347 [ shape=record, label="{{ A}|$3837\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 146 | x27 [ shape=record, style=rounded, label=" 4:4 - 0:0 " ]; 147 | x27:e -> c347:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 148 | c348 [ shape=record, label="{{ A1| A2| B1}|$3838\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 149 | c349 [ shape=record, label="{{ A1| A2| B1| B2}|$3839\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 150 | c350 [ shape=record, label="{{ A| B}|$3840\nsky130_fd_sc_hd__nand2_4|{ Y}}" ]; 151 | c351 [ shape=record, label="{{ A| B}|$3841\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 152 | x28 [ shape=record, style=rounded, label=" 3:3 - 0:0 " ]; 153 | x28:e -> c351:p258:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 154 | c352 [ shape=record, label="{{ A| B}|$3842\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 155 | c353 [ shape=record, label="{{ A1| A2| B1_N}|$3843\nsky130_fd_sc_hd__a21bo_4|{ X}}" ]; 156 | c354 [ shape=record, label="{{ A}|$3844\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 157 | c355 [ shape=record, label="{{ A| B}|$3845\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 158 | c356 [ shape=record, label="{{ A1| A2| B1}|$3846\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 159 | c357 [ shape=record, label="{{ A| B| C}|$3847\nsky130_fd_sc_hd__or3_4|{ X}}" ]; 160 | c358 [ shape=record, label="{{ A| B| C}|$3848\nsky130_fd_sc_hd__and3_4|{ X}}" ]; 161 | c359 [ shape=record, label="{{ A| B}|$3849\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 162 | c360 [ shape=record, label="{{ A}|$3850\nsky130_fd_sc_hd__inv_4|{ Y}}" ]; 163 | c361 [ shape=record, label="{{ A}|$3851\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 164 | c362 [ shape=record, label="{{ A1| A2| B1}|$3852\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 165 | c363 [ shape=record, label="{{ A| B}|$3853\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 166 | c364 [ shape=record, label="{{ A| B}|$3854\nsky130_fd_sc_hd__nand2_4|{ Y}}" ]; 167 | c365 [ shape=record, label="{{ A}|$3855\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 168 | c366 [ shape=record, label="{{ A1| A2| A3| B1| B2}|$3856\nsky130_fd_sc_hd__a32o_4|{ X}}" ]; 169 | c367 [ shape=record, label="{{ A| B}|$3857\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 170 | c368 [ shape=record, label="{{ A| B}|$3858\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 171 | x29 [ shape=record, style=rounded, label=" 5:5 - 0:0 " ]; 172 | x29:e -> c368:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 173 | c369 [ shape=record, label="{{ A| B}|$3859\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 174 | c370 [ shape=record, label="{{ A}|$3860\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 175 | c371 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3861\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 176 | c372 [ shape=record, label="{{ A}|$3862\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 177 | c373 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3863\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 178 | c374 [ shape=record, label="{{ A| B}|$3864\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 179 | c375 [ shape=record, label="{{ A}|$3865\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 180 | c376 [ shape=record, label="{{ A1| A2| B1}|$3866\nsky130_fd_sc_hd__a21o_4|{ X}}" ]; 181 | c377 [ shape=record, label="{{ A}|$3867\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 182 | c378 [ shape=record, label="{{ A}|$3868\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 183 | c379 [ shape=record, label="{{ A| B}|$3869\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 184 | c380 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3870\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 185 | c381 [ shape=record, label="{{ A1| A2| B1| B2}|$3871\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 186 | c382 [ shape=record, label="{{ A| B}|$3872\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 187 | c383 [ shape=record, label="{{ A| B}|$3873\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 188 | c384 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3874\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 189 | c385 [ shape=record, label="{{ A1| A2| B1| B2}|$3875\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 190 | c386 [ shape=record, label="{{ A| B}|$3876\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 191 | c387 [ shape=record, label="{{ A| B}|$3877\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 192 | c388 [ shape=record, label="{{ A}|$3878\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 193 | c389 [ shape=record, label="{{ A1| A2| B1}|$3879\nsky130_fd_sc_hd__a21o_4|{ X}}" ]; 194 | c390 [ shape=record, label="{{ A}|$3880\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 195 | c391 [ shape=record, label="{{ A}|$3881\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 196 | x30 [ shape=record, style=rounded, label=" 3:3 - 0:0 " ]; 197 | x30:e -> c391:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 198 | c392 [ shape=record, label="{{ A1| A2| B1}|$3882\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 199 | c393 [ shape=record, label="{{ A1| A2| B1| B2}|$3883\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 200 | c394 [ shape=record, label="{{ A}|$3884\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 201 | x31 [ shape=record, style=rounded, label=" 2:2 - 0:0 " ]; 202 | x31:e -> c394:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 203 | c395 [ shape=record, label="{{ A| B}|$3885\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 204 | c396 [ shape=record, label="{{ A}|$3886\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 205 | c397 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3887\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 206 | c398 [ shape=record, label="{{ A1| A2| B1| B2}|$3888\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 207 | c399 [ shape=record, label="{{ A| B}|$3889\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 208 | c400 [ shape=record, label="{{ A| B| C}|$3890\nsky130_fd_sc_hd__or3_4|{ X}}" ]; 209 | c401 [ shape=record, label="{{ A}|$3891\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 210 | c402 [ shape=record, label="{{ A| B}|$3892\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 211 | c403 [ shape=record, label="{{ A| B}|$3893\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 212 | c404 [ shape=record, label="{{ A1| A2| A3| B1| B2}|$3894\nsky130_fd_sc_hd__o32a_4|{ X}}" ]; 213 | c405 [ shape=record, label="{{ A| B| C}|$3895\nsky130_fd_sc_hd__or3_4|{ X}}" ]; 214 | c406 [ shape=record, label="{{ A}|$3896\nsky130_fd_sc_hd__buf_8|{ X}}" ]; 215 | c407 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3897\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 216 | c408 [ shape=record, label="{{ A}|$3898\nsky130_fd_sc_hd__inv_4|{ Y}}" ]; 217 | c409 [ shape=record, label="{{ A1| A2| B1| B2}|$3899\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 218 | c410 [ shape=record, label="{{ A| B}|$3900\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 219 | c411 [ shape=record, label="{{ A}|$3901\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 220 | c412 [ shape=record, label="{{ A1| A2| B1}|$3902\nsky130_fd_sc_hd__a21o_4|{ X}}" ]; 221 | c413 [ shape=record, label="{{ A}|$3903\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 222 | c414 [ shape=record, label="{{ A1| A2| B1}|$3904\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 223 | c415 [ shape=record, label="{{ A| B}|$3905\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 224 | c416 [ shape=record, label="{{ A| B}|$3906\nsky130_fd_sc_hd__nand2_4|{ Y}}" ]; 225 | c417 [ shape=record, label="{{ A1| A2| A3| B1| B2}|$3907\nsky130_fd_sc_hd__a32o_4|{ X}}" ]; 226 | c418 [ shape=record, label="{{ A| B}|$3908\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 227 | c419 [ shape=record, label="{{ A| B}|$3909\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 228 | c420 [ shape=record, label="{{ A| B}|$3910\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 229 | c421 [ shape=record, label="{{ A| B}|$3911\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 230 | c422 [ shape=record, label="{{ A}|$3912\nsky130_fd_sc_hd__buf_8|{ X}}" ]; 231 | c423 [ shape=record, label="{{ A1| A2| B1}|$3913\nsky130_fd_sc_hd__a21oi_4|{ Y}}" ]; 232 | c424 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3914\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 233 | c425 [ shape=record, label="{{ A| B}|$3915\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 234 | c426 [ shape=record, label="{{ A1| A2| B1_N}|$3916\nsky130_fd_sc_hd__a21bo_4|{ X}}" ]; 235 | c427 [ shape=record, label="{{ A| B}|$3917\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 236 | c428 [ shape=record, label="{{ A| B}|$3918\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 237 | c429 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3919\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 238 | c430 [ shape=record, label="{{ A1| A2| B1| B2}|$3920\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 239 | c431 [ shape=record, label="{{ A| B}|$3921\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 240 | c432 [ shape=record, label="{{ A}|$3922\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 241 | c433 [ shape=record, label="{{ A| B}|$3923\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 242 | c434 [ shape=record, label="{{ A| B}|$3924\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 243 | c435 [ shape=record, label="{{ A| B}|$3925\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 244 | c436 [ shape=record, label="{{ A| B}|$3926\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 245 | c437 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3927\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 246 | c438 [ shape=record, label="{{ A}|$3928\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 247 | c439 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3929\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 248 | c440 [ shape=record, label="{{ A| B}|$3930\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 249 | c441 [ shape=record, label="{{ A1| A2| B1}|$3931\nsky130_fd_sc_hd__a21oi_4|{ Y}}" ]; 250 | x32 [ shape=record, style=rounded, label=" 2:2 - 0:0 " ]; 251 | x32:e -> c441:p262:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 252 | c442 [ shape=record, label="{{ A1| A2| B1| B2}|$3932\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 253 | c443 [ shape=record, label="{{ A| B}|$3933\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 254 | c444 [ shape=record, label="{{ A| B}|$3934\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 255 | c445 [ shape=record, label="{{ A1| A2| B1}|$3935\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 256 | c446 [ shape=record, label="{{ A| B}|$3936\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 257 | c447 [ shape=record, label="{{ A1| A2| B1}|$3937\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 258 | c448 [ shape=record, label="{{ A1| A2| B1}|$3938\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 259 | c449 [ shape=record, label="{{ A| B}|$3939\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 260 | c450 [ shape=record, label="{{ A1| A2| B1| B2}|$3940\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 261 | c451 [ shape=record, label="{{ A1| A2| B1}|$3941\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 262 | c452 [ shape=record, label="{{ A}|$3942\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 263 | c453 [ shape=record, label="{{ A| B}|$3943\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 264 | c454 [ shape=record, label="{{ A| B| C}|$3944\nsky130_fd_sc_hd__or3_4|{ X}}" ]; 265 | x33 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 266 | x33:e -> c454:p250:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 267 | c455 [ shape=record, label="{{ A}|$3945\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 268 | c456 [ shape=record, label="{{ A| B}|$3946\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 269 | c457 [ shape=record, label="{{ A| B| C| D}|$3947\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 270 | c458 [ shape=record, label="{{ A1| A2| B1}|$3948\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 271 | c459 [ shape=record, label="{{ A}|$3949\nsky130_fd_sc_hd__buf_8|{ X}}" ]; 272 | c460 [ shape=record, label="{{ A}|$3950\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 273 | c461 [ shape=record, label="{{ A}|$3951\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 274 | c462 [ shape=record, label="{{ A1| A2| B1| B2}|$3952\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 275 | x34 [ shape=record, style=rounded, label=" 1:1 - 0:0 " ]; 276 | x34:e -> c462:p263:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 277 | c463 [ shape=record, label="{{ A| B}|$3953\nsky130_fd_sc_hd__nand2_4|{ Y}}" ]; 278 | c464 [ shape=record, label="{{ A1| A2| B1}|$3954\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 279 | x35 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 280 | x35:e -> c464:p262:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 281 | c465 [ shape=record, label="{{ A1| A2| B1}|$3955\nsky130_fd_sc_hd__o21ai_4|{ Y}}" ]; 282 | c466 [ shape=record, label="{{ A| B}|$3956\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 283 | x36 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 284 | x36:e -> c466:p258:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 285 | c467 [ shape=record, label="{{ A}|$3957\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 286 | c468 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3958\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 287 | c469 [ shape=record, label="{{ A1| A2| B1| B2}|$3959\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 288 | c470 [ shape=record, label="{{ A}|$3960\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 289 | c471 [ shape=record, label="{{ A| B}|$3961\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 290 | c472 [ shape=record, label="{{ A}|$3962\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 291 | c473 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3963\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 292 | c474 [ shape=record, label="{{ A1| A2| B1| B2}|$3964\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 293 | c475 [ shape=record, label="{{ A| B}|$3965\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 294 | c476 [ shape=record, label="{{ A| B}|$3966\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 295 | c477 [ shape=record, label="{{ A}|$3967\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 296 | c478 [ shape=record, label="{{ A| B}|$3968\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 297 | c479 [ shape=record, label="{{ A| B| C| D}|$3969\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 298 | c480 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3970\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 299 | c481 [ shape=record, label="{{ A1| A2| B1| B2}|$3971\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 300 | c482 [ shape=record, label="{{ A1| A2| B1}|$3972\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 301 | c483 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3973\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 302 | c484 [ shape=record, label="{{ A1| A2| B1| B2}|$3974\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 303 | c485 [ shape=record, label="{{ A1| A2| B1| B2}|$3975\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 304 | c486 [ shape=record, label="{{ A}|$3976\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 305 | c487 [ shape=record, label="{{ A1| A2| B1}|$3977\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 306 | c488 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$3978\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 307 | c489 [ shape=record, label="{{ A1| A2| B1| B2}|$3979\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 308 | c490 [ shape=record, label="{{ A| B}|$3980\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 309 | c491 [ shape=record, label="{{ A1| A2| B1}|$3981\nsky130_fd_sc_hd__a21o_4|{ X}}" ]; 310 | c492 [ shape=record, label="{{ A1| A2| B1}|$3982\nsky130_fd_sc_hd__a21o_4|{ X}}" ]; 311 | c493 [ shape=record, label="{{ A}|$3983\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 312 | c494 [ shape=record, label="{{ A1| A2| B1}|$3984\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 313 | c495 [ shape=record, label="{{ A| B}|$3985\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 314 | c496 [ shape=record, label="{{ A| B}|$3986\nsky130_fd_sc_hd__nand2_4|{ Y}}" ]; 315 | c497 [ shape=record, label="{{ A1| A2| A3| B1| B2}|$3987\nsky130_fd_sc_hd__a32o_4|{ X}}" ]; 316 | c498 [ shape=record, label="{{ A| B}|$3988\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 317 | c499 [ shape=record, label="{{ A1| A2| B1| B2}|$3989\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 318 | c500 [ shape=record, label="{{ A}|$3990\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 319 | c501 [ shape=record, label="{{ A| B| C| D}|$3991\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 320 | c502 [ shape=record, label="{{ A| B| C| D}|$3992\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 321 | c503 [ shape=record, label="{{ A1| A2| B1}|$3993\nsky130_fd_sc_hd__a21oi_4|{ Y}}" ]; 322 | c504 [ shape=record, label="{{ A1| A2| B1| C1}|$3994\nsky130_fd_sc_hd__a211o_4|{ X}}" ]; 323 | c505 [ shape=record, label="{{ A}|$3995\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 324 | c506 [ shape=record, label="{{ A1| A2| B1}|$3996\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 325 | c507 [ shape=record, label="{{ A1| A2| B1| B2}|$3997\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 326 | c508 [ shape=record, label="{{ A| B}|$3998\nsky130_fd_sc_hd__nand2_4|{ Y}}" ]; 327 | c509 [ shape=record, label="{{ A}|$3999\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 328 | c512 [ shape=record, label="{{ CLK| D}|$75\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 329 | x37 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 330 | c512:p511:e -> x37:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 331 | c513 [ shape=record, label="{{ CLK| D}|$76\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 332 | x38 [ shape=record, style=rounded, label=" 0:0 - 1:1 " ]; 333 | c513:p511:e -> x38:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 334 | c514 [ shape=record, label="{{ CLK| D}|$77\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 335 | x39 [ shape=record, style=rounded, label=" 0:0 - 2:2 " ]; 336 | c514:p511:e -> x39:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 337 | c515 [ shape=record, label="{{ CLK| D}|$78\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 338 | x40 [ shape=record, style=rounded, label=" 0:0 - 3:3 " ]; 339 | c515:p511:e -> x40:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 340 | c516 [ shape=record, label="{{ CLK| D}|$79\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 341 | x41 [ shape=record, style=rounded, label=" 0:0 - 4:4 " ]; 342 | c516:p511:e -> x41:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 343 | c517 [ shape=record, label="{{ CLK| D}|$80\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 344 | x42 [ shape=record, style=rounded, label=" 0:0 - 5:5 " ]; 345 | c517:p511:e -> x42:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 346 | c518 [ shape=record, label="{{ CLK| D}|$81\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 347 | x43 [ shape=record, style=rounded, label=" 0:0 - 6:6 " ]; 348 | c518:p511:e -> x43:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 349 | c519 [ shape=record, label="{{ CLK| D}|$82\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 350 | x44 [ shape=record, style=rounded, label=" 0:0 - 7:7 " ]; 351 | c519:p511:e -> x44:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 352 | c508:p253:e -> c512:p275:w [color="black", label=""]; 353 | n10 [ shape=point ]; 354 | c341:p251:e -> n10:w [color="black", label=""]; 355 | n10:e -> c357:p258:w [color="black", label=""]; 356 | n10:e -> c361:p250:w [color="black", label=""]; 357 | n100 [ shape=point ]; 358 | c433:p251:e -> n100:w [color="black", label=""]; 359 | n100:e -> c434:p258:w [color="black", label=""]; 360 | n100:e -> c448:p262:w [color="black", label=""]; 361 | n101 [ shape=point ]; 362 | c434:p251:e -> n101:w [color="black", label=""]; 363 | n101:e -> c435:p258:w [color="black", label=""]; 364 | n101:e -> c483:p263:w [color="black", label=""]; 365 | n101:e -> c483:p303:w [color="black", label=""]; 366 | n102 [ shape=point ]; 367 | c435:p251:e -> n102:w [color="black", label=""]; 368 | n102:e -> c436:p258:w [color="black", label=""]; 369 | n102:e -> c487:p261:w [color="black", label=""]; 370 | n103 [ shape=point ]; 371 | c436:p251:e -> n103:w [color="black", label=""]; 372 | n103:e -> c451:p261:w [color="black", label=""]; 373 | n103:e -> c457:p275:w [color="black", label=""]; 374 | c437:p251:e -> c438:p250:w [color="black", label=""]; 375 | c438:p253:e -> c439:p304:w [color="black", label=""]; 376 | n106 [ shape=point ]; 377 | c439:p251:e -> n106:w [color="black", label=""]; 378 | n106:e -> c440:p258:w [color="black", label=""]; 379 | n106:e -> c446:p258:w [color="black", label=""]; 380 | n106:e -> c469:p261:w [color="black", label=""]; 381 | n107 [ shape=point ]; 382 | c440:p251:e -> n107:w [color="black", label=""]; 383 | n107:e -> c447:p261:w [color="black", label=""]; 384 | n107:e -> c456:p258:w [color="black", label=""]; 385 | c441:p253:e -> c442:p262:w [color="black", label=""]; 386 | n109 [ shape=point ]; 387 | c442:p251:e -> n109:w [color="black", label=""]; 388 | n109:e -> c443:p258:w [color="black", label=""]; 389 | n109:e -> c444:p258:w [color="black", label=""]; 390 | n109:e -> c474:p261:w [color="black", label=""]; 391 | c342:p253:e -> c343:p258:w [color="black", label=""]; 392 | n110 [ shape=point ]; 393 | c443:p251:e -> n110:w [color="black", label=""]; 394 | n110:e -> c445:p261:w [color="black", label=""]; 395 | n110:e -> c453:p258:w [color="black", label=""]; 396 | n111 [ shape=point ]; 397 | c444:p251:e -> n111:w [color="black", label=""]; 398 | n111:e -> c445:p263:w [color="black", label=""]; 399 | n111:e -> c452:p250:w [color="black", label=""]; 400 | n112 [ shape=point ]; 401 | c445:p251:e -> n112:w [color="black", label=""]; 402 | n112:e -> c447:p262:w [color="black", label=""]; 403 | n112:e -> c468:p263:w [color="black", label=""]; 404 | n112:e -> c468:p303:w [color="black", label=""]; 405 | n113 [ shape=point ]; 406 | c446:p251:e -> n113:w [color="black", label=""]; 407 | n113:e -> c447:p263:w [color="black", label=""]; 408 | n113:e -> c455:p250:w [color="black", label=""]; 409 | n114 [ shape=point ]; 410 | c447:p251:e -> n114:w [color="black", label=""]; 411 | n114:e -> c451:p262:w [color="black", label=""]; 412 | n114:e -> c480:p290:w [color="black", label=""]; 413 | n114:e -> c480:p304:w [color="black", label=""]; 414 | n114:e -> c482:p262:w [color="black", label=""]; 415 | n114:e -> c487:p262:w [color="black", label=""]; 416 | n115 [ shape=point ]; 417 | c448:p251:e -> n115:w [color="black", label=""]; 418 | n115:e -> c450:p262:w [color="black", label=""]; 419 | n115:e -> c487:p263:w [color="black", label=""]; 420 | c449:p253:e -> c450:p290:w [color="black", label=""]; 421 | c450:p251:e -> c451:p263:w [color="black", label=""]; 422 | c451:p251:e -> c458:p262:w [color="black", label=""]; 423 | c452:p253:e -> c453:p250:w [color="black", label=""]; 424 | n12 [ shape=point ]; 425 | c343:p251:e -> n12:w [color="black", label=""]; 426 | n12:e -> c344:p290:w [color="black", label=""]; 427 | n12:e -> c344:p304:w [color="black", label=""]; 428 | n120 [ shape=point ]; 429 | c453:p251:e -> n120:w [color="black", label=""]; 430 | n120:e -> c457:p250:w [color="black", label=""]; 431 | n120:e -> c472:p250:w [color="black", label=""]; 432 | c454:p251:e -> c457:p258:w [color="black", label=""]; 433 | c455:p253:e -> c456:p250:w [color="black", label=""]; 434 | n123 [ shape=point ]; 435 | c456:p251:e -> n123:w [color="black", label=""]; 436 | n123:e -> c457:p268:w [color="black", label=""]; 437 | n123:e -> c468:p290:w [color="black", label=""]; 438 | n123:e -> c468:p304:w [color="black", label=""]; 439 | c457:p251:e -> c458:p263:w [color="black", label=""]; 440 | n125 [ shape=point ]; 441 | c458:p251:e -> n125:w [color="black", label=""]; 442 | n125:e -> c459:p250:w [color="black", label=""]; 443 | n125:e -> c460:p250:w [color="black", label=""]; 444 | n125:e -> c469:p263:w [color="black", label=""]; 445 | n125:e -> c474:p263:w [color="black", label=""]; 446 | n126 [ shape=point ]; 447 | c459:p251:e -> n126:w [color="black", label=""]; 448 | n126:e -> c462:p262:w [color="black", label=""]; 449 | n126:e -> c481:p261:w [color="black", label=""]; 450 | n126:e -> c484:p263:w [color="black", label=""]; 451 | n126:e -> c489:p263:w [color="black", label=""]; 452 | n126:e -> c497:p290:w [color="black", label=""]; 453 | n127 [ shape=point ]; 454 | c460:p253:e -> n127:w [color="black", label=""]; 455 | n127:e -> c461:p250:w [color="black", label=""]; 456 | n127:e -> c469:p262:w [color="black", label=""]; 457 | n127:e -> c474:p262:w [color="black", label=""]; 458 | n127:e -> c489:p262:w [color="black", label=""]; 459 | n128 [ shape=point ]; 460 | c462:p251:e -> n128:w [color="black", label=""]; 461 | n128:e -> c463:p258:w [color="black", label=""]; 462 | n128:e -> c465:p262:w [color="black", label=""]; 463 | n129 [ shape=point ]; 464 | c463:p253:e -> n129:w [color="black", label=""]; 465 | n129:e -> c464:p263:w [color="black", label=""]; 466 | n129:e -> c503:p261:w [color="black", label=""]; 467 | c344:p251:e -> c345:p290:w [color="black", label=""]; 468 | c464:p251:e -> c465:p263:w [color="black", label=""]; 469 | n131 [ shape=point ]; 470 | c465:p253:e -> n131:w [color="black", label=""]; 471 | n131:e -> c502:p250:w [color="black", label=""]; 472 | n131:e -> c503:p262:w [color="black", label=""]; 473 | c466:p251:e -> c502:p258:w [color="black", label=""]; 474 | n133 [ shape=point ]; 475 | c467:p253:e -> n133:w [color="black", label=""]; 476 | n133:e -> c471:p250:w [color="black", label=""]; 477 | n133:e -> c476:p250:w [color="black", label=""]; 478 | c468:p251:e -> c469:p290:w [color="black", label=""]; 479 | c469:p251:e -> c470:p250:w [color="black", label=""]; 480 | n136 [ shape=point ]; 481 | c470:p253:e -> n136:w [color="black", label=""]; 482 | n136:e -> c471:p258:w [color="black", label=""]; 483 | n136:e -> c476:p258:w [color="black", label=""]; 484 | n137 [ shape=point ]; 485 | c471:p251:e -> n137:w [color="black", label=""]; 486 | n137:e -> c479:p250:w [color="black", label=""]; 487 | n137:e -> c504:p263:w [color="black", label=""]; 488 | n138 [ shape=point ]; 489 | c472:p253:e -> n138:w [color="black", label=""]; 490 | n138:e -> c473:p290:w [color="black", label=""]; 491 | n138:e -> c473:p304:w [color="black", label=""]; 492 | c473:p251:e -> c474:p290:w [color="black", label=""]; 493 | n14 [ shape=point ]; 494 | c345:p251:e -> n14:w [color="black", label=""]; 495 | n14:e -> c346:p258:w [color="black", label=""]; 496 | n14:e -> c355:p258:w [color="black", label=""]; 497 | n14:e -> c381:p261:w [color="black", label=""]; 498 | n140 [ shape=point ]; 499 | c474:p251:e -> n140:w [color="black", label=""]; 500 | n140:e -> c475:p258:w [color="black", label=""]; 501 | n140:e -> c478:p258:w [color="black", label=""]; 502 | c475:p251:e -> c479:p258:w [color="black", label=""]; 503 | n142 [ shape=point ]; 504 | c476:p251:e -> n142:w [color="black", label=""]; 505 | n142:e -> c477:p250:w [color="black", label=""]; 506 | n142:e -> c504:p261:w [color="black", label=""]; 507 | c477:p253:e -> c479:p268:w [color="black", label=""]; 508 | n144 [ shape=point ]; 509 | c478:p253:e -> n144:w [color="black", label=""]; 510 | n144:e -> c479:p275:w [color="black", label=""]; 511 | n144:e -> c504:p262:w [color="black", label=""]; 512 | n145 [ shape=point ]; 513 | c479:p251:e -> n145:w [color="black", label=""]; 514 | n145:e -> c502:p268:w [color="black", label=""]; 515 | n145:e -> c503:p263:w [color="black", label=""]; 516 | c480:p251:e -> c481:p262:w [color="black", label=""]; 517 | n147 [ shape=point ]; 518 | c481:p251:e -> n147:w [color="black", label=""]; 519 | n147:e -> c485:p262:w [color="black", label=""]; 520 | n147:e -> c492:p262:w [color="black", label=""]; 521 | n148 [ shape=point ]; 522 | c482:p251:e -> n148:w [color="black", label=""]; 523 | n148:e -> c483:p290:w [color="black", label=""]; 524 | n148:e -> c483:p304:w [color="black", label=""]; 525 | c483:p251:e -> c484:p290:w [color="black", label=""]; 526 | n15 [ shape=point ]; 527 | c346:p251:e -> n15:w [color="black", label=""]; 528 | n15:e -> c356:p261:w [color="black", label=""]; 529 | n15:e -> c378:p250:w [color="black", label=""]; 530 | n150 [ shape=point ]; 531 | c484:p251:e -> n150:w [color="black", label=""]; 532 | n150:e -> c485:p290:w [color="black", label=""]; 533 | n150:e -> c491:p262:w [color="black", label=""]; 534 | n151 [ shape=point ]; 535 | c485:p251:e -> n151:w [color="black", label=""]; 536 | n151:e -> c486:p250:w [color="black", label=""]; 537 | n151:e -> c506:p261:w [color="black", label=""]; 538 | c486:p253:e -> c501:p250:w [color="black", label=""]; 539 | n153 [ shape=point ]; 540 | c487:p251:e -> n153:w [color="black", label=""]; 541 | n153:e -> c488:p290:w [color="black", label=""]; 542 | n153:e -> c488:p304:w [color="black", label=""]; 543 | n153:e -> c494:p262:w [color="black", label=""]; 544 | c488:p251:e -> c489:p290:w [color="black", label=""]; 545 | n155 [ shape=point ]; 546 | c489:p251:e -> n155:w [color="black", label=""]; 547 | n155:e -> c490:p258:w [color="black", label=""]; 548 | n155:e -> c499:p290:w [color="black", label=""]; 549 | c490:p251:e -> c491:p263:w [color="black", label=""]; 550 | n157 [ shape=point ]; 551 | c491:p251:e -> n157:w [color="black", label=""]; 552 | n157:e -> c492:p263:w [color="black", label=""]; 553 | n157:e -> c506:p262:w [color="black", label=""]; 554 | c492:p251:e -> c501:p258:w [color="black", label=""]; 555 | n159 [ shape=point ]; 556 | c493:p253:e -> n159:w [color="black", label=""]; 557 | n159:e -> c495:p250:w [color="black", label=""]; 558 | n159:e -> c496:p250:w [color="black", label=""]; 559 | n16 [ shape=point ]; 560 | c347:p253:e -> n16:w [color="black", label=""]; 561 | n16:e -> c348:p261:w [color="black", label=""]; 562 | n16:e -> c349:p263:w [color="black", label=""]; 563 | n160 [ shape=point ]; 564 | c494:p251:e -> n160:w [color="black", label=""]; 565 | n160:e -> c495:p258:w [color="black", label=""]; 566 | n160:e -> c496:p258:w [color="black", label=""]; 567 | c495:p251:e -> c497:p262:w [color="black", label=""]; 568 | c496:p253:e -> c497:p289:w [color="black", label=""]; 569 | n163 [ shape=point ]; 570 | c497:p251:e -> n163:w [color="black", label=""]; 571 | n163:e -> c498:p258:w [color="black", label=""]; 572 | n163:e -> c499:p262:w [color="black", label=""]; 573 | n164 [ shape=point ]; 574 | c498:p251:e -> n164:w [color="black", label=""]; 575 | n164:e -> c501:p268:w [color="black", label=""]; 576 | n164:e -> c507:p263:w [color="black", label=""]; 577 | n165 [ shape=point ]; 578 | c499:p251:e -> n165:w [color="black", label=""]; 579 | n165:e -> c500:p250:w [color="black", label=""]; 580 | n165:e -> c506:p263:w [color="black", label=""]; 581 | n166 [ shape=point ]; 582 | c252:p251:e -> n166:w [color="black", label=""]; 583 | n166:e -> c254:p250:w [color="black", label=""]; 584 | n166:e -> c282:p263:w [color="black", label=""]; 585 | n166:e -> c292:p250:w [color="black", label=""]; 586 | n166:e -> c296:p250:w [color="black", label=""]; 587 | n166:e -> c310:p250:w [color="black", label=""]; 588 | c500:p253:e -> c501:p275:w [color="black", label=""]; 589 | n168 [ shape=point ]; 590 | c501:p251:e -> n168:w [color="black", label=""]; 591 | n168:e -> c502:p275:w [color="black", label=""]; 592 | n168:e -> c507:p261:w [color="black", label=""]; 593 | c502:p251:e -> c508:p250:w [color="black", label=""]; 594 | c348:p251:e -> c349:p262:w [color="black", label=""]; 595 | c503:p253:e -> c504:p299:w [color="black", label=""]; 596 | c504:p251:e -> c505:p250:w [color="black", label=""]; 597 | c505:p253:e -> c507:p262:w [color="black", label=""]; 598 | c506:p251:e -> c507:p290:w [color="black", label=""]; 599 | c507:p251:e -> c508:p258:w [color="black", label=""]; 600 | n175 [ shape=point ]; 601 | c254:p253:e -> n175:w [color="black", label=""]; 602 | n175:e -> c284:p261:w [color="black", label=""]; 603 | n175:e -> c463:p250:w [color="black", label=""]; 604 | n175:e -> c465:p261:w [color="black", label=""]; 605 | n176 [ shape=point ]; 606 | c255:p253:e -> n176:w [color="black", label=""]; 607 | n176:e -> c256:p250:w [color="black", label=""]; 608 | n176:e -> c274:p250:w [color="black", label=""]; 609 | n176:e -> c277:p261:w [color="black", label=""]; 610 | n177 [ shape=point ]; 611 | c256:p251:e -> n177:w [color="black", label=""]; 612 | n177:e -> c257:p250:w [color="black", label=""]; 613 | n177:e -> c288:p250:w [color="black", label=""]; 614 | n177:e -> c311:p262:w [color="black", label=""]; 615 | n177:e -> c314:p258:w [color="black", label=""]; 616 | n177:e -> c351:p250:w [color="black", label=""]; 617 | n178 [ shape=point ]; 618 | c257:p251:e -> n178:w [color="black", label=""]; 619 | n178:e -> c259:p250:w [color="black", label=""]; 620 | n178:e -> c264:p261:w [color="black", label=""]; 621 | n178:e -> c441:p261:w [color="black", label=""]; 622 | n178:e -> c464:p261:w [color="black", label=""]; 623 | n178:e -> c466:p250:w [color="black", label=""]; 624 | n179 [ shape=point ]; 625 | c259:p251:e -> n179:w [color="black", label=""]; 626 | n179:e -> c260:p250:w [color="black", label=""]; 627 | n179:e -> c473:p263:w [color="black", label=""]; 628 | n179:e -> c473:p303:w [color="black", label=""]; 629 | n18 [ shape=point ]; 630 | c349:p251:e -> n18:w [color="black", label=""]; 631 | n18:e -> c350:p258:w [color="black", label=""]; 632 | n18:e -> c352:p258:w [color="black", label=""]; 633 | n18:e -> c385:p261:w [color="black", label=""]; 634 | n180 [ shape=point ]; 635 | c260:p253:e -> n180:w [color="black", label=""]; 636 | n180:e -> c264:p263:w [color="black", label=""]; 637 | n180:e -> c445:p262:w [color="black", label=""]; 638 | n181 [ shape=point ]; 639 | c264:p251:e -> n181:w [color="black", label=""]; 640 | n181:e -> c454:p268:w [color="black", label=""]; 641 | n181:e -> c462:p261:w [color="black", label=""]; 642 | n182 [ shape=point ]; 643 | c265:p251:e -> n182:w [color="black", label=""]; 644 | n182:e -> c405:p258:w [color="black", label=""]; 645 | n182:e -> c454:p258:w [color="black", label=""]; 646 | n182:e -> c458:p261:w [color="black", label=""]; 647 | n182:e -> c498:p250:w [color="black", label=""]; 648 | n182:e -> c499:p261:w [color="black", label=""]; 649 | n183 [ shape=point ]; 650 | c266:p251:e -> n183:w [color="black", label=""]; 651 | n183:e -> c367:p250:w [color="black", label=""]; 652 | n183:e -> c410:p250:w [color="black", label=""]; 653 | n183:e -> c412:p261:w [color="black", label=""]; 654 | n183:e -> c485:p263:w [color="black", label=""]; 655 | n183:e -> c491:p261:w [color="black", label=""]; 656 | n184 [ shape=point ]; 657 | c267:p251:e -> n184:w [color="black", label=""]; 658 | n184:e -> c405:p250:w [color="black", label=""]; 659 | n184:e -> c418:p250:w [color="black", label=""]; 660 | n184:e -> c419:p250:w [color="black", label=""]; 661 | n184:e -> c490:p250:w [color="black", label=""]; 662 | n184:e -> c499:p263:w [color="black", label=""]; 663 | n185 [ shape=point ]; 664 | c269:p251:e -> n185:w [color="black", label=""]; 665 | n185:e -> c273:p268:w [color="black", label=""]; 666 | n185:e -> c320:p299:w [color="black", label=""]; 667 | n185:e -> c359:p250:w [color="black", label=""]; 668 | n186 [ shape=point ]; 669 | c270:p251:e -> n186:w [color="black", label=""]; 670 | n186:e -> c320:p263:w [color="black", label=""]; 671 | n186:e -> c326:p250:w [color="black", label=""]; 672 | n186:e -> c336:p250:w [color="black", label=""]; 673 | n186:e -> c370:p250:w [color="black", label=""]; 674 | n186:e -> c374:p250:w [color="black", label=""]; 675 | n187 [ shape=point ]; 676 | c271:p251:e -> n187:w [color="black", label=""]; 677 | n187:e -> c320:p261:w [color="black", label=""]; 678 | n187:e -> c321:p250:w [color="black", label=""]; 679 | n187:e -> c335:p250:w [color="black", label=""]; 680 | n187:e -> c339:p261:w [color="black", label=""]; 681 | n187:e -> c377:p250:w [color="black", label=""]; 682 | n188 [ shape=point ]; 683 | c272:p251:e -> n188:w [color="black", label=""]; 684 | n188:e -> c298:p261:w [color="black", label=""]; 685 | n188:e -> c300:p261:w [color="black", label=""]; 686 | n188:e -> c309:p250:w [color="black", label=""]; 687 | n188:e -> c318:p250:w [color="black", label=""]; 688 | n188:e -> c322:p250:w [color="black", label=""]; 689 | n189 [ shape=point ]; 690 | c273:p251:e -> n189:w [color="black", label=""]; 691 | n189:e -> c276:p275:w [color="black", label=""]; 692 | n189:e -> c283:p258:w [color="black", label=""]; 693 | n189:e -> c300:p263:w [color="black", label=""]; 694 | n19 [ shape=point ]; 695 | c350:p253:e -> n19:w [color="black", label=""]; 696 | n19:e -> c353:p261:w [color="black", label=""]; 697 | n19:e -> c383:p258:w [color="black", label=""]; 698 | c274:p253:e -> c276:p268:w [color="black", label=""]; 699 | n191 [ shape=point ]; 700 | c276:p251:e -> n191:w [color="black", label=""]; 701 | n191:e -> c277:p262:w [color="black", label=""]; 702 | n191:e -> c509:p250:w [color="black", label=""]; 703 | n192 [ shape=point ]; 704 | c277:p251:e -> n192:w [color="black", label=""]; 705 | n192:e -> c278:p250:w [color="black", label=""]; 706 | n192:e -> c284:p263:w [color="black", label=""]; 707 | n193 [ shape=point ]; 708 | c278:p253:e -> n193:w [color="black", label=""]; 709 | n193:e -> c281:p250:w [color="black", label=""]; 710 | n193:e -> c282:p261:w [color="black", label=""]; 711 | n194 [ shape=point ]; 712 | c279:p253:e -> n194:w [color="black", label=""]; 713 | n194:e -> c280:p250:w [color="black", label=""]; 714 | n194:e -> c291:p263:w [color="black", label=""]; 715 | n195 [ shape=point ]; 716 | c280:p251:e -> n195:w [color="black", label=""]; 717 | n195:e -> c281:p258:w [color="black", label=""]; 718 | n195:e -> c282:p262:w [color="black", label=""]; 719 | c281:p251:e -> c283:p268:w [color="black", label=""]; 720 | c282:p251:e -> c283:p275:w [color="black", label=""]; 721 | n198 [ shape=point ]; 722 | c283:p251:e -> n198:w [color="black", label=""]; 723 | n198:e -> c284:p262:w [color="black", label=""]; 724 | n198:e -> c287:p250:w [color="black", label=""]; 725 | n198:e -> c288:p258:w [color="black", label=""]; 726 | n199 [ shape=point ]; 727 | c284:p251:e -> n199:w [color="black", label=""]; 728 | n199:e -> c285:p250:w [color="black", label=""]; 729 | n199:e -> c324:p263:w [color="black", label=""]; 730 | n2 [ shape=point ]; 731 | c461:p251:e -> n2:w [color="black", label=""]; 732 | n2:e -> c462:p290:w [color="black", label=""]; 733 | n2:e -> c481:p290:w [color="black", label=""]; 734 | n2:e -> c484:p262:w [color="black", label=""]; 735 | n2:e -> c497:p261:w [color="black", label=""]; 736 | n2:e -> c513:p275:w [color="black", label=""]; 737 | n20 [ shape=point ]; 738 | c351:p251:e -> n20:w [color="black", label=""]; 739 | n20:e -> c353:p262:w [color="black", label=""]; 740 | n20:e -> c384:p263:w [color="black", label=""]; 741 | n20:e -> c384:p303:w [color="black", label=""]; 742 | n20:e -> c392:p263:w [color="black", label=""]; 743 | n200 [ shape=point ]; 744 | c285:p253:e -> n200:w [color="black", label=""]; 745 | n200:e -> c298:p262:w [color="black", label=""]; 746 | n200:e -> c300:p262:w [color="black", label=""]; 747 | n201 [ shape=point ]; 748 | c286:p251:e -> n201:w [color="black", label=""]; 749 | n201:e -> c291:p261:w [color="black", label=""]; 750 | n201:e -> c294:p258:w [color="black", label=""]; 751 | n201:e -> c348:p262:w [color="black", label=""]; 752 | n201:e -> c392:p261:w [color="black", label=""]; 753 | n201:e -> c395:p250:w [color="black", label=""]; 754 | c288:p251:e -> c291:p290:w [color="black", label=""]; 755 | n203 [ shape=point ]; 756 | c291:p251:e -> n203:w [color="black", label=""]; 757 | n203:e -> c292:p258:w [color="black", label=""]; 758 | n203:e -> c296:p258:w [color="black", label=""]; 759 | n203:e -> c308:p263:w [color="black", label=""]; 760 | n204 [ shape=point ]; 761 | c292:p251:e -> n204:w [color="black", label=""]; 762 | n204:e -> c297:p261:w [color="black", label=""]; 763 | n204:e -> c301:p250:w [color="black", label=""]; 764 | n205 [ shape=point ]; 765 | c293:p253:e -> n205:w [color="black", label=""]; 766 | n205:e -> c294:p250:w [color="black", label=""]; 767 | n205:e -> c312:p263:w [color="black", label=""]; 768 | c294:p251:e -> c295:p250:w [color="black", label=""]; 769 | n207 [ shape=point ]; 770 | c295:p251:e -> n207:w [color="black", label=""]; 771 | n207:e -> c297:p262:w [color="black", label=""]; 772 | n207:e -> c305:p263:w [color="black", label=""]; 773 | n207:e -> c305:p303:w [color="black", label=""]; 774 | n207:e -> c311:p263:w [color="black", label=""]; 775 | n208 [ shape=point ]; 776 | c296:p251:e -> n208:w [color="black", label=""]; 777 | n208:e -> c297:p263:w [color="black", label=""]; 778 | n208:e -> c302:p250:w [color="black", label=""]; 779 | n209 [ shape=point ]; 780 | c297:p251:e -> n209:w [color="black", label=""]; 781 | n209:e -> c298:p263:w [color="black", label=""]; 782 | n209:e -> c323:p258:w [color="black", label=""]; 783 | n21 [ shape=point ]; 784 | c352:p251:e -> n21:w [color="black", label=""]; 785 | n21:e -> c353:p338:w [color="black", label=""]; 786 | n21:e -> c383:p250:w [color="black", label=""]; 787 | c298:p251:e -> c300:p299:w [color="black", label=""]; 788 | n211 [ shape=point ]; 789 | c300:p251:e -> n211:w [color="black", label=""]; 790 | n211:e -> c307:p250:w [color="black", label=""]; 791 | n211:e -> c308:p261:w [color="black", label=""]; 792 | n211:e -> c312:p261:w [color="black", label=""]; 793 | n211:e -> c324:p261:w [color="black", label=""]; 794 | c301:p253:e -> c302:p258:w [color="black", label=""]; 795 | n213 [ shape=point ]; 796 | c302:p251:e -> n213:w [color="black", label=""]; 797 | n213:e -> c305:p290:w [color="black", label=""]; 798 | n213:e -> c305:p304:w [color="black", label=""]; 799 | c305:p251:e -> c306:p250:w [color="black", label=""]; 800 | c306:p253:e -> c308:p262:w [color="black", label=""]; 801 | n216 [ shape=point ]; 802 | c308:p251:e -> n216:w [color="black", label=""]; 803 | n216:e -> c309:p258:w [color="black", label=""]; 804 | n216:e -> c318:p258:w [color="black", label=""]; 805 | n216:e -> c334:p263:w [color="black", label=""]; 806 | n217 [ shape=point ]; 807 | c309:p251:e -> n217:w [color="black", label=""]; 808 | n217:e -> c319:p261:w [color="black", label=""]; 809 | n217:e -> c330:p250:w [color="black", label=""]; 810 | n218 [ shape=point ]; 811 | c310:p251:e -> n218:w [color="black", label=""]; 812 | n218:e -> c313:p250:w [color="black", label=""]; 813 | n218:e -> c316:p250:w [color="black", label=""]; 814 | n218:e -> c350:p250:w [color="black", label=""]; 815 | n218:e -> c352:p250:w [color="black", label=""]; 816 | n218:e -> c390:p250:w [color="black", label=""]; 817 | c311:p253:e -> c312:p262:w [color="black", label=""]; 818 | n22 [ shape=point ]; 819 | c353:p251:e -> n22:w [color="black", label=""]; 820 | n22:e -> c354:p250:w [color="black", label=""]; 821 | n22:e -> c380:p263:w [color="black", label=""]; 822 | n22:e -> c380:p303:w [color="black", label=""]; 823 | n220 [ shape=point ]; 824 | c312:p251:e -> n220:w [color="black", label=""]; 825 | n220:e -> c313:p258:w [color="black", label=""]; 826 | n220:e -> c316:p258:w [color="black", label=""]; 827 | n220:e -> c345:p261:w [color="black", label=""]; 828 | n221 [ shape=point ]; 829 | c313:p251:e -> n221:w [color="black", label=""]; 830 | n221:e -> c317:p261:w [color="black", label=""]; 831 | n221:e -> c342:p250:w [color="black", label=""]; 832 | n222 [ shape=point ]; 833 | c314:p251:e -> n222:w [color="black", label=""]; 834 | n222:e -> c315:p250:w [color="black", label=""]; 835 | n222:e -> c344:p263:w [color="black", label=""]; 836 | n222:e -> c344:p303:w [color="black", label=""]; 837 | n222:e -> c348:p263:w [color="black", label=""]; 838 | c315:p253:e -> c317:p262:w [color="black", label=""]; 839 | n224 [ shape=point ]; 840 | c316:p251:e -> n224:w [color="black", label=""]; 841 | n224:e -> c317:p263:w [color="black", label=""]; 842 | n224:e -> c343:p250:w [color="black", label=""]; 843 | n225 [ shape=point ]; 844 | c317:p251:e -> n225:w [color="black", label=""]; 845 | n225:e -> c319:p262:w [color="black", label=""]; 846 | n225:e -> c332:p263:w [color="black", label=""]; 847 | n225:e -> c332:p303:w [color="black", label=""]; 848 | n226 [ shape=point ]; 849 | c318:p251:e -> n226:w [color="black", label=""]; 850 | n226:e -> c319:p263:w [color="black", label=""]; 851 | n226:e -> c331:p250:w [color="black", label=""]; 852 | n227 [ shape=point ]; 853 | c319:p251:e -> n227:w [color="black", label=""]; 854 | n227:e -> c320:p262:w [color="black", label=""]; 855 | n227:e -> c321:p258:w [color="black", label=""]; 856 | n228 [ shape=point ]; 857 | c320:p251:e -> n228:w [color="black", label=""]; 858 | n228:e -> c325:p261:w [color="black", label=""]; 859 | n228:e -> c327:p250:w [color="black", label=""]; 860 | n229 [ shape=point ]; 861 | c321:p253:e -> n229:w [color="black", label=""]; 862 | n229:e -> c325:p262:w [color="black", label=""]; 863 | n229:e -> c328:p262:w [color="black", label=""]; 864 | c354:p253:e -> c356:p262:w [color="black", label=""]; 865 | n230 [ shape=point ]; 866 | c322:p251:e -> n230:w [color="black", label=""]; 867 | n230:e -> c323:p250:w [color="black", label=""]; 868 | n230:e -> c346:p250:w [color="black", label=""]; 869 | n230:e -> c355:p250:w [color="black", label=""]; 870 | n230:e -> c386:p250:w [color="black", label=""]; 871 | n230:e -> c388:p250:w [color="black", label=""]; 872 | c323:p253:e -> c324:p262:w [color="black", label=""]; 873 | n232 [ shape=point ]; 874 | c324:p251:e -> n232:w [color="black", label=""]; 875 | n232:e -> c325:p263:w [color="black", label=""]; 876 | n232:e -> c328:p261:w [color="black", label=""]; 877 | n233 [ shape=point ]; 878 | c325:p253:e -> n233:w [color="black", label=""]; 879 | n233:e -> c326:p258:w [color="black", label=""]; 880 | n233:e -> c336:p258:w [color="black", label=""]; 881 | n233:e -> c366:p263:w [color="black", label=""]; 882 | n234 [ shape=point ]; 883 | c326:p251:e -> n234:w [color="black", label=""]; 884 | n234:e -> c340:p250:w [color="black", label=""]; 885 | n234:e -> c358:p250:w [color="black", label=""]; 886 | c327:p253:e -> c328:p263:w [color="black", label=""]; 887 | n236 [ shape=point ]; 888 | c329:p253:e -> n236:w [color="black", label=""]; 889 | n236:e -> c334:p261:w [color="black", label=""]; 890 | n236:e -> c345:p263:w [color="black", label=""]; 891 | n236:e -> c349:p261:w [color="black", label=""]; 892 | c330:p253:e -> c331:p258:w [color="black", label=""]; 893 | n238 [ shape=point ]; 894 | c331:p251:e -> n238:w [color="black", label=""]; 895 | n238:e -> c332:p290:w [color="black", label=""]; 896 | n238:e -> c332:p304:w [color="black", label=""]; 897 | c332:p251:e -> c333:p250:w [color="black", label=""]; 898 | n24 [ shape=point ]; 899 | c355:p251:e -> n24:w [color="black", label=""]; 900 | n24:e -> c356:p263:w [color="black", label=""]; 901 | n24:e -> c379:p250:w [color="black", label=""]; 902 | c333:p253:e -> c334:p262:w [color="black", label=""]; 903 | n241 [ shape=point ]; 904 | c334:p251:e -> n241:w [color="black", label=""]; 905 | n241:e -> c335:p258:w [color="black", label=""]; 906 | n241:e -> c339:p262:w [color="black", label=""]; 907 | n241:e -> c373:p263:w [color="black", label=""]; 908 | n242 [ shape=point ]; 909 | c335:p251:e -> n242:w [color="black", label=""]; 910 | n242:e -> c337:p250:w [color="black", label=""]; 911 | n242:e -> c339:p338:w [color="black", label=""]; 912 | n242:e -> c362:p263:w [color="black", label=""]; 913 | n243 [ shape=point ]; 914 | c336:p251:e -> n243:w [color="black", label=""]; 915 | n243:e -> c337:p258:w [color="black", label=""]; 916 | n243:e -> c341:p258:w [color="black", label=""]; 917 | c337:p251:e -> c358:p258:w [color="black", label=""]; 918 | n245 [ shape=point ]; 919 | c339:p251:e -> n245:w [color="black", label=""]; 920 | n245:e -> c357:p250:w [color="black", label=""]; 921 | n245:e -> c362:p262:w [color="black", label=""]; 922 | n245:e -> c371:p290:w [color="black", label=""]; 923 | n245:e -> c371:p304:w [color="black", label=""]; 924 | n246:e -> x15:s0:w [color="black", label=""]; 925 | n246:e -> x18:s0:w [color="black", label=""]; 926 | n246:e -> x19:s0:w [color="black", label=""]; 927 | n246:e -> x23:s0:w [color="black", label=""]; 928 | n246:e -> x24:s0:w [color="black", label=""]; 929 | n246:e -> x25:s0:w [color="black", label=""]; 930 | n246:e -> x26:s0:w [color="black", label=""]; 931 | n246:e -> x27:s0:w [color="black", label=""]; 932 | n246:e -> x28:s0:w [color="black", label=""]; 933 | n246:e -> x2:s0:w [color="black", label=""]; 934 | n246:e -> x30:s0:w [color="black", label=""]; 935 | n246:e -> x31:s0:w [color="black", label=""]; 936 | n246:e -> x32:s0:w [color="black", label=""]; 937 | n246:e -> x33:s0:w [color="black", label=""]; 938 | n246:e -> x34:s0:w [color="black", label=""]; 939 | n246:e -> x35:s0:w [color="black", label=""]; 940 | n246:e -> x36:s0:w [color="black", label=""]; 941 | n246:e -> x3:s0:w [color="black", label=""]; 942 | n247:e -> x0:s0:w [color="black", label=""]; 943 | n247:e -> x10:s0:w [color="black", label=""]; 944 | n247:e -> x11:s0:w [color="black", label=""]; 945 | n247:e -> x12:s0:w [color="black", label=""]; 946 | n247:e -> x13:s0:w [color="black", label=""]; 947 | n247:e -> x14:s0:w [color="black", label=""]; 948 | n247:e -> x16:s0:w [color="black", label=""]; 949 | n247:e -> x17:s0:w [color="black", label=""]; 950 | n247:e -> x1:s0:w [color="black", label=""]; 951 | n247:e -> x20:s0:w [color="black", label=""]; 952 | n247:e -> x21:s0:w [color="black", label=""]; 953 | n247:e -> x22:s0:w [color="black", label=""]; 954 | n247:e -> x29:s0:w [color="black", label=""]; 955 | n247:e -> x4:s0:w [color="black", label=""]; 956 | n247:e -> x5:s0:w [color="black", label=""]; 957 | n247:e -> x6:s0:w [color="black", label=""]; 958 | n247:e -> x7:s0:w [color="black", label=""]; 959 | n247:e -> x8:s0:w [color="black", label=""]; 960 | n247:e -> x9:s0:w [color="black", label=""]; 961 | x37:s0:e -> n248:w [color="black", label=""]; 962 | x38:s0:e -> n248:w [color="black", label=""]; 963 | x39:s0:e -> n248:w [color="black", label=""]; 964 | x40:s0:e -> n248:w [color="black", label=""]; 965 | x41:s0:e -> n248:w [color="black", label=""]; 966 | x42:s0:e -> n248:w [color="black", label=""]; 967 | x43:s0:e -> n248:w [color="black", label=""]; 968 | x44:s0:e -> n248:w [color="black", label=""]; 969 | n249:e -> c512:p510:w [color="black", label=""]; 970 | n249:e -> c513:p510:w [color="black", label=""]; 971 | n249:e -> c514:p510:w [color="black", label=""]; 972 | n249:e -> c515:p510:w [color="black", label=""]; 973 | n249:e -> c516:p510:w [color="black", label=""]; 974 | n249:e -> c517:p510:w [color="black", label=""]; 975 | n249:e -> c518:p510:w [color="black", label=""]; 976 | n249:e -> c519:p510:w [color="black", label=""]; 977 | n25 [ shape=point ]; 978 | c356:p251:e -> n25:w [color="black", label=""]; 979 | n25:e -> c357:p268:w [color="black", label=""]; 980 | n25:e -> c362:p261:w [color="black", label=""]; 981 | n25:e -> c371:p263:w [color="black", label=""]; 982 | n25:e -> c371:p303:w [color="black", label=""]; 983 | c357:p251:e -> c358:p268:w [color="black", label=""]; 984 | c358:p251:e -> c359:p258:w [color="black", label=""]; 985 | n28 [ shape=point ]; 986 | c359:p251:e -> n28:w [color="black", label=""]; 987 | n28:e -> c360:p250:w [color="black", label=""]; 988 | n28:e -> c365:p250:w [color="black", label=""]; 989 | n28:e -> c393:p261:w [color="black", label=""]; 990 | n29 [ shape=point ]; 991 | c361:p253:e -> n29:w [color="black", label=""]; 992 | n29:e -> c363:p250:w [color="black", label=""]; 993 | n29:e -> c364:p250:w [color="black", label=""]; 994 | n3 [ shape=point ]; 995 | c408:p253:e -> n3:w [color="black", label=""]; 996 | n3:e -> c409:p290:w [color="black", label=""]; 997 | n3:e -> c417:p261:w [color="black", label=""]; 998 | n3:e -> c430:p262:w [color="black", label=""]; 999 | n3:e -> c442:p290:w [color="black", label=""]; 1000 | n3:e -> c514:p275:w [color="black", label=""]; 1001 | n30 [ shape=point ]; 1002 | c362:p251:e -> n30:w [color="black", label=""]; 1003 | n30:e -> c363:p258:w [color="black", label=""]; 1004 | n30:e -> c364:p258:w [color="black", label=""]; 1005 | c363:p251:e -> c366:p262:w [color="black", label=""]; 1006 | c364:p253:e -> c366:p289:w [color="black", label=""]; 1007 | n33 [ shape=point ]; 1008 | c365:p251:e -> n33:w [color="black", label=""]; 1009 | n33:e -> c366:p290:w [color="black", label=""]; 1010 | n33:e -> c373:p290:w [color="black", label=""]; 1011 | n33:e -> c373:p303:w [color="black", label=""]; 1012 | n33:e -> c381:p263:w [color="black", label=""]; 1013 | n33:e -> c385:p263:w [color="black", label=""]; 1014 | n34 [ shape=point ]; 1015 | c366:p251:e -> n34:w [color="black", label=""]; 1016 | n34:e -> c367:p258:w [color="black", label=""]; 1017 | n34:e -> c368:p258:w [color="black", label=""]; 1018 | n34:e -> c417:p263:w [color="black", label=""]; 1019 | n35 [ shape=point ]; 1020 | c367:p253:e -> n35:w [color="black", label=""]; 1021 | n35:e -> c369:p250:w [color="black", label=""]; 1022 | n35:e -> c403:p250:w [color="black", label=""]; 1023 | n36 [ shape=point ]; 1024 | c368:p251:e -> n36:w [color="black", label=""]; 1025 | n36:e -> c369:p258:w [color="black", label=""]; 1026 | n36:e -> c404:p263:w [color="black", label=""]; 1027 | n37 [ shape=point ]; 1028 | c369:p251:e -> n37:w [color="black", label=""]; 1029 | n37:e -> c404:p261:w [color="black", label=""]; 1030 | n37:e -> c413:p250:w [color="black", label=""]; 1031 | n38 [ shape=point ]; 1032 | c370:p251:e -> n38:w [color="black", label=""]; 1033 | n38:e -> c376:p261:w [color="black", label=""]; 1034 | n38:e -> c431:p250:w [color="black", label=""]; 1035 | n38:e -> c433:p250:w [color="black", label=""]; 1036 | n38:e -> c485:p261:w [color="black", label=""]; 1037 | n38:e -> c492:p261:w [color="black", label=""]; 1038 | c371:p251:e -> c372:p250:w [color="black", label=""]; 1039 | n4 [ shape=point ]; 1040 | c360:p253:e -> n4:w [color="black", label=""]; 1041 | n4:e -> c366:p261:w [color="black", label=""]; 1042 | n4:e -> c381:p262:w [color="black", label=""]; 1043 | n4:e -> c385:p262:w [color="black", label=""]; 1044 | n4:e -> c393:p290:w [color="black", label=""]; 1045 | n4:e -> c515:p275:w [color="black", label=""]; 1046 | c372:p253:e -> c373:p304:w [color="black", label=""]; 1047 | n41 [ shape=point ]; 1048 | c373:p251:e -> n41:w [color="black", label=""]; 1049 | n41:e -> c374:p258:w [color="black", label=""]; 1050 | n41:e -> c376:p262:w [color="black", label=""]; 1051 | n41:e -> c409:p263:w [color="black", label=""]; 1052 | n42 [ shape=point ]; 1053 | c374:p251:e -> n42:w [color="black", label=""]; 1054 | n42:e -> c375:p250:w [color="black", label=""]; 1055 | n42:e -> c414:p263:w [color="black", label=""]; 1056 | n43 [ shape=point ]; 1057 | c375:p253:e -> n43:w [color="black", label=""]; 1058 | n43:e -> c376:p263:w [color="black", label=""]; 1059 | n43:e -> c403:p258:w [color="black", label=""]; 1060 | n44 [ shape=point ]; 1061 | c376:p251:e -> n44:w [color="black", label=""]; 1062 | n44:e -> c404:p262:w [color="black", label=""]; 1063 | n44:e -> c407:p290:w [color="black", label=""]; 1064 | n44:e -> c407:p304:w [color="black", label=""]; 1065 | n44:e -> c414:p262:w [color="black", label=""]; 1066 | n45 [ shape=point ]; 1067 | c377:p251:e -> n45:w [color="black", label=""]; 1068 | n45:e -> c382:p250:w [color="black", label=""]; 1069 | n45:e -> c387:p250:w [color="black", label=""]; 1070 | n45:e -> c425:p250:w [color="black", label=""]; 1071 | n45:e -> c426:p261:w [color="black", label=""]; 1072 | n45:e -> c467:p250:w [color="black", label=""]; 1073 | c378:p253:e -> c379:p258:w [color="black", label=""]; 1074 | n47 [ shape=point ]; 1075 | c379:p251:e -> n47:w [color="black", label=""]; 1076 | n47:e -> c380:p290:w [color="black", label=""]; 1077 | n47:e -> c380:p304:w [color="black", label=""]; 1078 | c380:p251:e -> c381:p290:w [color="black", label=""]; 1079 | n49 [ shape=point ]; 1080 | c381:p251:e -> n49:w [color="black", label=""]; 1081 | n49:e -> c382:p258:w [color="black", label=""]; 1082 | n49:e -> c387:p258:w [color="black", label=""]; 1083 | n49:e -> c430:p261:w [color="black", label=""]; 1084 | n5 [ shape=point ]; 1085 | c328:p251:e -> n5:w [color="black", label=""]; 1086 | n5:e -> c329:p250:w [color="black", label=""]; 1087 | n5:e -> c334:p290:w [color="black", label=""]; 1088 | n5:e -> c345:p262:w [color="black", label=""]; 1089 | n5:e -> c349:p290:w [color="black", label=""]; 1090 | n5:e -> c516:p275:w [color="black", label=""]; 1091 | n50 [ shape=point ]; 1092 | c382:p251:e -> n50:w [color="black", label=""]; 1093 | n50:e -> c402:p250:w [color="black", label=""]; 1094 | n50:e -> c427:p250:w [color="black", label=""]; 1095 | n51 [ shape=point ]; 1096 | c383:p251:e -> n51:w [color="black", label=""]; 1097 | n51:e -> c384:p290:w [color="black", label=""]; 1098 | n51:e -> c384:p304:w [color="black", label=""]; 1099 | c384:p251:e -> c385:p290:w [color="black", label=""]; 1100 | n53 [ shape=point ]; 1101 | c385:p251:e -> n53:w [color="black", label=""]; 1102 | n53:e -> c386:p258:w [color="black", label=""]; 1103 | n53:e -> c389:p262:w [color="black", label=""]; 1104 | n53:e -> c424:p263:w [color="black", label=""]; 1105 | n54 [ shape=point ]; 1106 | c386:p253:e -> n54:w [color="black", label=""]; 1107 | n54:e -> c389:p263:w [color="black", label=""]; 1108 | n54:e -> c400:p250:w [color="black", label=""]; 1109 | n54:e -> c428:p250:w [color="black", label=""]; 1110 | n55 [ shape=point ]; 1111 | c387:p253:e -> n55:w [color="black", label=""]; 1112 | n55:e -> c400:p258:w [color="black", label=""]; 1113 | n55:e -> c427:p258:w [color="black", label=""]; 1114 | n56 [ shape=point ]; 1115 | c388:p251:e -> n56:w [color="black", label=""]; 1116 | n56:e -> c389:p261:w [color="black", label=""]; 1117 | n56:e -> c440:p250:w [color="black", label=""]; 1118 | n56:e -> c446:p250:w [color="black", label=""]; 1119 | n56:e -> c475:p250:w [color="black", label=""]; 1120 | n56:e -> c478:p250:w [color="black", label=""]; 1121 | n57 [ shape=point ]; 1122 | c389:p251:e -> n57:w [color="black", label=""]; 1123 | n57:e -> c399:p250:w [color="black", label=""]; 1124 | n57:e -> c423:p261:w [color="black", label=""]; 1125 | n58 [ shape=point ]; 1126 | c390:p251:e -> n58:w [color="black", label=""]; 1127 | n58:e -> c397:p263:w [color="black", label=""]; 1128 | n58:e -> c397:p303:w [color="black", label=""]; 1129 | n58:e -> c398:p261:w [color="black", label=""]; 1130 | n58:e -> c443:p250:w [color="black", label=""]; 1131 | n58:e -> c444:p250:w [color="black", label=""]; 1132 | n59 [ shape=point ]; 1133 | c391:p253:e -> n59:w [color="black", label=""]; 1134 | n59:e -> c392:p262:w [color="black", label=""]; 1135 | n59:e -> c393:p263:w [color="black", label=""]; 1136 | n6 [ shape=point ]; 1137 | c307:p253:e -> n6:w [color="black", label=""]; 1138 | n6:e -> c308:p290:w [color="black", label=""]; 1139 | n6:e -> c312:p290:w [color="black", label=""]; 1140 | n6:e -> c517:p275:w [color="black", label=""]; 1141 | c392:p251:e -> c393:p262:w [color="black", label=""]; 1142 | n61 [ shape=point ]; 1143 | c393:p251:e -> n61:w [color="black", label=""]; 1144 | n61:e -> c397:p290:w [color="black", label=""]; 1145 | n61:e -> c397:p304:w [color="black", label=""]; 1146 | n61:e -> c398:p262:w [color="black", label=""]; 1147 | n61:e -> c439:p263:w [color="black", label=""]; 1148 | n62 [ shape=point ]; 1149 | c394:p253:e -> n62:w [color="black", label=""]; 1150 | n62:e -> c395:p258:w [color="black", label=""]; 1151 | n62:e -> c442:p263:w [color="black", label=""]; 1152 | c395:p251:e -> c396:p250:w [color="black", label=""]; 1153 | n64 [ shape=point ]; 1154 | c396:p251:e -> n64:w [color="black", label=""]; 1155 | n64:e -> c398:p263:w [color="black", label=""]; 1156 | n64:e -> c437:p263:w [color="black", label=""]; 1157 | n64:e -> c437:p303:w [color="black", label=""]; 1158 | n64:e -> c441:p263:w [color="black", label=""]; 1159 | n65 [ shape=point ]; 1160 | c397:p251:e -> n65:w [color="black", label=""]; 1161 | n65:e -> c398:p290:w [color="black", label=""]; 1162 | n65:e -> c437:p290:w [color="black", label=""]; 1163 | n65:e -> c437:p304:w [color="black", label=""]; 1164 | n66 [ shape=point ]; 1165 | c398:p251:e -> n66:w [color="black", label=""]; 1166 | n66:e -> c399:p258:w [color="black", label=""]; 1167 | n66:e -> c423:p262:w [color="black", label=""]; 1168 | n67 [ shape=point ]; 1169 | c399:p253:e -> n67:w [color="black", label=""]; 1170 | n67:e -> c400:p268:w [color="black", label=""]; 1171 | n67:e -> c423:p263:w [color="black", label=""]; 1172 | n67:e -> c428:p258:w [color="black", label=""]; 1173 | c400:p251:e -> c401:p250:w [color="black", label=""]; 1174 | c401:p253:e -> c402:p258:w [color="black", label=""]; 1175 | n7 [ shape=point ]; 1176 | c287:p253:e -> n7:w [color="black", label=""]; 1177 | n7:e -> c291:p262:w [color="black", label=""]; 1178 | n7:e -> c518:p275:w [color="black", label=""]; 1179 | n70 [ shape=point ]; 1180 | c402:p251:e -> n70:w [color="black", label=""]; 1181 | n70:e -> c404:p289:w [color="black", label=""]; 1182 | n70:e -> c407:p263:w [color="black", label=""]; 1183 | n70:e -> c407:p303:w [color="black", label=""]; 1184 | n70:e -> c414:p261:w [color="black", label=""]; 1185 | c403:p253:e -> c404:p290:w [color="black", label=""]; 1186 | c404:p251:e -> c405:p268:w [color="black", label=""]; 1187 | c405:p251:e -> c406:p250:w [color="black", label=""]; 1188 | n74 [ shape=point ]; 1189 | c406:p251:e -> n74:w [color="black", label=""]; 1190 | n74:e -> c408:p250:w [color="black", label=""]; 1191 | n74:e -> c409:p261:w [color="black", label=""]; 1192 | n74:e -> c417:p290:w [color="black", label=""]; 1193 | n74:e -> c422:p250:w [color="black", label=""]; 1194 | n74:e -> c430:p263:w [color="black", label=""]; 1195 | c407:p251:e -> c409:p262:w [color="black", label=""]; 1196 | n76 [ shape=point ]; 1197 | c409:p251:e -> n76:w [color="black", label=""]; 1198 | n76:e -> c410:p258:w [color="black", label=""]; 1199 | n76:e -> c412:p262:w [color="black", label=""]; 1200 | n76:e -> c489:p261:w [color="black", label=""]; 1201 | n77 [ shape=point ]; 1202 | c410:p251:e -> n77:w [color="black", label=""]; 1203 | n77:e -> c411:p250:w [color="black", label=""]; 1204 | n77:e -> c494:p263:w [color="black", label=""]; 1205 | n78 [ shape=point ]; 1206 | c411:p253:e -> n78:w [color="black", label=""]; 1207 | n78:e -> c412:p263:w [color="black", label=""]; 1208 | n78:e -> c449:p250:w [color="black", label=""]; 1209 | n79 [ shape=point ]; 1210 | c412:p251:e -> n79:w [color="black", label=""]; 1211 | n79:e -> c421:p250:w [color="black", label=""]; 1212 | n79:e -> c488:p263:w [color="black", label=""]; 1213 | n79:e -> c488:p303:w [color="black", label=""]; 1214 | n79:e -> c494:p261:w [color="black", label=""]; 1215 | c509:p253:e -> c519:p275:w [color="black", label=""]; 1216 | n80 [ shape=point ]; 1217 | c413:p253:e -> n80:w [color="black", label=""]; 1218 | n80:e -> c415:p250:w [color="black", label=""]; 1219 | n80:e -> c416:p250:w [color="black", label=""]; 1220 | n81 [ shape=point ]; 1221 | c414:p251:e -> n81:w [color="black", label=""]; 1222 | n81:e -> c415:p258:w [color="black", label=""]; 1223 | n81:e -> c416:p258:w [color="black", label=""]; 1224 | c415:p251:e -> c417:p262:w [color="black", label=""]; 1225 | c416:p253:e -> c417:p289:w [color="black", label=""]; 1226 | n84 [ shape=point ]; 1227 | c417:p251:e -> n84:w [color="black", label=""]; 1228 | n84:e -> c418:p258:w [color="black", label=""]; 1229 | n84:e -> c419:p258:w [color="black", label=""]; 1230 | n84:e -> c497:p263:w [color="black", label=""]; 1231 | n85 [ shape=point ]; 1232 | c418:p251:e -> n85:w [color="black", label=""]; 1233 | n85:e -> c420:p250:w [color="black", label=""]; 1234 | n85:e -> c450:p263:w [color="black", label=""]; 1235 | n86 [ shape=point ]; 1236 | c419:p253:e -> n86:w [color="black", label=""]; 1237 | n86:e -> c420:p258:w [color="black", label=""]; 1238 | n86:e -> c449:p258:w [color="black", label=""]; 1239 | n87 [ shape=point ]; 1240 | c420:p251:e -> n87:w [color="black", label=""]; 1241 | n87:e -> c421:p258:w [color="black", label=""]; 1242 | n87:e -> c493:p250:w [color="black", label=""]; 1243 | n88 [ shape=point ]; 1244 | c421:p251:e -> n88:w [color="black", label=""]; 1245 | n88:e -> c436:p250:w [color="black", label=""]; 1246 | n88:e -> c450:p261:w [color="black", label=""]; 1247 | n89 [ shape=point ]; 1248 | c422:p251:e -> n89:w [color="black", label=""]; 1249 | n89:e -> c424:p290:w [color="black", label=""]; 1250 | n89:e -> c424:p303:w [color="black", label=""]; 1251 | n89:e -> c439:p290:w [color="black", label=""]; 1252 | n89:e -> c439:p303:w [color="black", label=""]; 1253 | n89:e -> c442:p261:w [color="black", label=""]; 1254 | c340:p253:e -> c341:p250:w [color="black", label=""]; 1255 | c423:p253:e -> c424:p304:w [color="black", label=""]; 1256 | n91 [ shape=point ]; 1257 | c424:p251:e -> n91:w [color="black", label=""]; 1258 | n91:e -> c425:p258:w [color="black", label=""]; 1259 | n91:e -> c426:p262:w [color="black", label=""]; 1260 | n91:e -> c481:p263:w [color="black", label=""]; 1261 | n92 [ shape=point ]; 1262 | c425:p251:e -> n92:w [color="black", label=""]; 1263 | n92:e -> c426:p338:w [color="black", label=""]; 1264 | n92:e -> c448:p261:w [color="black", label=""]; 1265 | n92:e -> c482:p263:w [color="black", label=""]; 1266 | n93 [ shape=point ]; 1267 | c426:p251:e -> n93:w [color="black", label=""]; 1268 | n93:e -> c435:p250:w [color="black", label=""]; 1269 | n93:e -> c480:p263:w [color="black", label=""]; 1270 | n93:e -> c480:p303:w [color="black", label=""]; 1271 | n93:e -> c482:p261:w [color="black", label=""]; 1272 | n94 [ shape=point ]; 1273 | c427:p253:e -> n94:w [color="black", label=""]; 1274 | n94:e -> c429:p263:w [color="black", label=""]; 1275 | n94:e -> c429:p303:w [color="black", label=""]; 1276 | n95 [ shape=point ]; 1277 | c428:p251:e -> n95:w [color="black", label=""]; 1278 | n95:e -> c429:p290:w [color="black", label=""]; 1279 | n95:e -> c429:p304:w [color="black", label=""]; 1280 | c429:p251:e -> c430:p290:w [color="black", label=""]; 1281 | n97 [ shape=point ]; 1282 | c430:p251:e -> n97:w [color="black", label=""]; 1283 | n97:e -> c431:p258:w [color="black", label=""]; 1284 | n97:e -> c433:p258:w [color="black", label=""]; 1285 | n97:e -> c484:p261:w [color="black", label=""]; 1286 | n98 [ shape=point ]; 1287 | c431:p251:e -> n98:w [color="black", label=""]; 1288 | n98:e -> c432:p250:w [color="black", label=""]; 1289 | n98:e -> c448:p263:w [color="black", label=""]; 1290 | c432:p253:e -> c434:p250:w [color="black", label=""]; 1291 | } 1292 | -------------------------------------------------------------------------------- /docs/divider8/opensta.min_max.rpt: -------------------------------------------------------------------------------- 1 | Startpoint: b[1] (input port clocked by clk) 2 | Endpoint: _497_ (rising edge-triggered flip-flop clocked by clk) 3 | Path Group: clk 4 | Path Type: min 5 | 6 | Delay Time Description 7 | --------------------------------------------------------- 8 | 0.00 0.00 clock clk (rise edge) 9 | 0.00 0.00 clock network delay (ideal) 10 | 2.00 2.00 ^ input external delay 11 | 0.00 2.00 ^ b[1] (in) 12 | 0.08 2.08 ^ _262_/X (sky130_fd_sc_hd__or4_4) 13 | 0.01 2.09 v _489_/Y (sky130_fd_sc_hd__inv_2) 14 | 0.00 2.09 v _497_/D (sky130_fd_sc_hd__dfxtp_4) 15 | 2.09 data arrival time 16 | 17 | 0.00 0.00 clock clk (rise edge) 18 | 0.00 0.00 clock network delay (ideal) 19 | 0.00 0.00 clock reconvergence pessimism 20 | 0.00 ^ _497_/CLK (sky130_fd_sc_hd__dfxtp_4) 21 | -0.03 -0.03 library hold time 22 | -0.03 data required time 23 | --------------------------------------------------------- 24 | -0.03 data required time 25 | -2.09 data arrival time 26 | --------------------------------------------------------- 27 | 2.12 slack (MET) 28 | 29 | 30 | Startpoint: b[5] (input port clocked by clk) 31 | Endpoint: _490_ (rising edge-triggered flip-flop clocked by clk) 32 | Path Group: clk 33 | Path Type: max 34 | 35 | Delay Time Description 36 | --------------------------------------------------------- 37 | 0.00 0.00 clock clk (rise edge) 38 | 0.00 0.00 clock network delay (ideal) 39 | 2.00 2.00 v input external delay 40 | 0.01 2.01 v b[5] (in) 41 | 0.75 2.75 v _256_/X (sky130_fd_sc_hd__or3_4) 42 | 0.69 3.45 v _260_/X (sky130_fd_sc_hd__or3_4) 43 | 0.88 4.33 v _262_/X (sky130_fd_sc_hd__or4_4) 44 | 0.41 4.74 v _263_/X (sky130_fd_sc_hd__o21a_4) 45 | 0.09 4.84 ^ _264_/Y (sky130_fd_sc_hd__inv_2) 46 | 0.25 5.09 ^ _267_/X (sky130_fd_sc_hd__and2_4) 47 | 0.23 5.32 ^ _269_/X (sky130_fd_sc_hd__or4_4) 48 | 0.07 5.39 v _273_/Y (sky130_fd_sc_hd__inv_2) 49 | 0.52 5.91 v _275_/X (sky130_fd_sc_hd__a32o_4) 50 | 0.30 6.21 v _276_/X (sky130_fd_sc_hd__and2_4) 51 | 0.41 6.62 v _281_/X (sky130_fd_sc_hd__o21a_4) 52 | 0.21 6.82 v _282_/X (sky130_fd_sc_hd__o21a_4) 53 | 0.53 7.35 v _283_/X (sky130_fd_sc_hd__a211o_4) 54 | 0.47 7.82 v _293_/X (sky130_fd_sc_hd__o22a_4) 55 | 0.30 8.12 v _294_/X (sky130_fd_sc_hd__and2_4) 56 | 0.41 8.53 v _298_/X (sky130_fd_sc_hd__o21a_4) 57 | 0.39 8.92 v _300_/X (sky130_fd_sc_hd__o21a_4) 58 | 0.62 9.54 v _301_/X (sky130_fd_sc_hd__a211o_4) 59 | 0.09 9.63 ^ _308_/Y (sky130_fd_sc_hd__inv_2) 60 | 0.28 9.91 ^ _309_/X (sky130_fd_sc_hd__o21a_4) 61 | 0.11 10.02 v _310_/Y (sky130_fd_sc_hd__inv_2) 62 | 0.47 10.50 v _329_/X (sky130_fd_sc_hd__o22a_4) 63 | 0.45 10.94 v _332_/X (sky130_fd_sc_hd__or2_4) 64 | 0.34 11.29 ^ _333_/X (sky130_fd_sc_hd__a21bo_4) 65 | 0.07 11.36 v _334_/Y (sky130_fd_sc_hd__inv_2) 66 | 0.38 11.74 v _336_/X (sky130_fd_sc_hd__o21a_4) 67 | 0.63 12.37 v _337_/X (sky130_fd_sc_hd__or3_4) 68 | 0.33 12.70 v _338_/X (sky130_fd_sc_hd__and3_4) 69 | 0.47 13.17 v _339_/X (sky130_fd_sc_hd__or2_4) 70 | 0.50 13.66 v _373_/X (sky130_fd_sc_hd__o22a_4) 71 | 0.41 14.07 v _377_/X (sky130_fd_sc_hd__a2bb2o_4) 72 | 0.40 14.48 v _378_/X (sky130_fd_sc_hd__o22a_4) 73 | 0.21 14.69 ^ _379_/Y (sky130_fd_sc_hd__nor2_4) 74 | 0.26 14.94 ^ _380_/X (sky130_fd_sc_hd__or3_4) 75 | 0.05 14.99 v _381_/Y (sky130_fd_sc_hd__inv_2) 76 | 0.47 15.46 v _382_/X (sky130_fd_sc_hd__or2_4) 77 | 0.54 15.99 v _384_/X (sky130_fd_sc_hd__o32a_4) 78 | 0.67 16.66 v _385_/X (sky130_fd_sc_hd__or3_4) 79 | 0.26 16.92 v _386_/X (sky130_fd_sc_hd__buf_8) 80 | 0.22 17.14 v _402_/X (sky130_fd_sc_hd__buf_8) 81 | 0.41 17.55 ^ _404_/X (sky130_fd_sc_hd__a2bb2o_4) 82 | 0.23 17.78 ^ _405_/X (sky130_fd_sc_hd__or2_4) 83 | 0.45 18.23 v _406_/X (sky130_fd_sc_hd__a21bo_4) 84 | 0.49 18.72 v _415_/X (sky130_fd_sc_hd__or2_4) 85 | 0.45 19.17 v _416_/X (sky130_fd_sc_hd__or2_4) 86 | 0.84 20.01 v _437_/X (sky130_fd_sc_hd__or4_4) 87 | 0.29 20.30 v _438_/X (sky130_fd_sc_hd__o21a_4) 88 | 0.24 20.54 v _439_/X (sky130_fd_sc_hd__buf_8) 89 | 0.39 20.93 v _469_/X (sky130_fd_sc_hd__o22a_4) 90 | 0.28 21.21 v _470_/X (sky130_fd_sc_hd__and2_4) 91 | 0.34 21.55 v _471_/X (sky130_fd_sc_hd__a21o_4) 92 | 0.32 21.87 v _472_/X (sky130_fd_sc_hd__a21o_4) 93 | 1.02 22.88 v _481_/X (sky130_fd_sc_hd__or4_4) 94 | 0.89 23.78 v _482_/X (sky130_fd_sc_hd__or4_4) 95 | 0.11 23.88 ^ _488_/Y (sky130_fd_sc_hd__nand2_4) 96 | 0.00 23.88 ^ _490_/D (sky130_fd_sc_hd__dfxtp_4) 97 | 23.88 data arrival time 98 | 99 | 10.00 10.00 clock clk (rise edge) 100 | 0.00 10.00 clock network delay (ideal) 101 | 0.00 10.00 clock reconvergence pessimism 102 | 10.00 ^ _490_/CLK (sky130_fd_sc_hd__dfxtp_4) 103 | -0.15 9.85 library setup time 104 | 9.85 data required time 105 | --------------------------------------------------------- 106 | 9.85 data required time 107 | -23.88 data arrival time 108 | --------------------------------------------------------- 109 | -14.03 slack (VIOLATED) 110 | 111 | 112 | -------------------------------------------------------------------------------- /docs/divider8/yosys_2.stat.rpt: -------------------------------------------------------------------------------- 1 | 2 | 22. Printing statistics. 3 | 4 | === divider === 5 | 6 | Number of wires: 249 7 | Number of wire bits: 270 8 | Number of public wires: 4 9 | Number of public wire bits: 25 10 | Number of memories: 0 11 | Number of memory bits: 0 12 | Number of processes: 0 13 | Number of cells: 253 14 | sky130_fd_sc_hd__a211o_4 3 15 | sky130_fd_sc_hd__a21bo_4 3 16 | sky130_fd_sc_hd__a21o_4 6 17 | sky130_fd_sc_hd__a21oi_4 4 18 | sky130_fd_sc_hd__a2bb2o_4 18 19 | sky130_fd_sc_hd__a32o_4 4 20 | sky130_fd_sc_hd__and2_4 25 21 | sky130_fd_sc_hd__and3_4 1 22 | sky130_fd_sc_hd__buf_2 20 23 | sky130_fd_sc_hd__buf_8 3 24 | sky130_fd_sc_hd__dfxtp_4 8 25 | sky130_fd_sc_hd__inv_2 43 26 | sky130_fd_sc_hd__inv_4 2 27 | sky130_fd_sc_hd__nand2_4 6 28 | sky130_fd_sc_hd__nor2_4 12 29 | sky130_fd_sc_hd__o21a_4 24 30 | sky130_fd_sc_hd__o21ai_4 2 31 | sky130_fd_sc_hd__o22a_4 22 32 | sky130_fd_sc_hd__o32a_4 1 33 | sky130_fd_sc_hd__or2_4 34 34 | sky130_fd_sc_hd__or3_4 6 35 | sky130_fd_sc_hd__or4_4 6 36 | 37 | Chip area for module '\divider': 2877.760000 38 | 39 | -------------------------------------------------------------------------------- /docs/multiplier8/multiplier.v: -------------------------------------------------------------------------------- 1 | `default_nettype none 2 | module multiplier ( 3 | input wire clk, 4 | input [7:0] a, 5 | input [7:0] b, 6 | output reg [7:0] c 7 | ); 8 | always @(posedge clk) 9 | c <= a * b; 10 | endmodule 11 | -------------------------------------------------------------------------------- /docs/multiplier8/netlist.dot: -------------------------------------------------------------------------------- 1 | digraph "multiplier" { 2 | label="multiplier"; 3 | rankdir="LR"; 4 | remincross=true; 5 | n164 [ shape=octagon, label="a", color="black", fontcolor="black" ]; 6 | n165 [ shape=octagon, label="b", color="black", fontcolor="black" ]; 7 | n166 [ shape=octagon, label="c", color="black", fontcolor="black" ]; 8 | n167 [ shape=octagon, label="clk", color="black", fontcolor="black" ]; 9 | c170 [ shape=record, label="{{ A}|$705\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 10 | x0 [ shape=record, style=rounded, label=" 1:1 - 0:0 " ]; 11 | x0:e -> c170:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 12 | c172 [ shape=record, label="{{ A}|$706\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 13 | c173 [ shape=record, label="{{ A}|$707\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 14 | c174 [ shape=record, label="{{ A}|$708\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 15 | x1 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 16 | x1:e -> c174:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 17 | c175 [ shape=record, label="{{ A}|$709\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 18 | c176 [ shape=record, label="{{ A}|$710\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 19 | c181 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$711\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 20 | x2 [ shape=record, style=rounded, label=" 1:1 - 0:0 " ]; 21 | x2:e -> c181:p179:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 22 | x3 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 23 | x3:e -> c181:p180:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 24 | c182 [ shape=record, label="{{ A}|$712\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 25 | x4 [ shape=record, style=rounded, label=" 1:1 - 0:0 " ]; 26 | x4:e -> c182:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 27 | c183 [ shape=record, label="{{ A}|$713\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 28 | c184 [ shape=record, label="{{ A}|$714\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 29 | c185 [ shape=record, label="{{ A}|$715\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 30 | x5 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 31 | x5:e -> c185:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 32 | c186 [ shape=record, label="{{ A}|$716\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 33 | c190 [ shape=record, label="{{ A| B| C| D}|$717\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 34 | c191 [ shape=record, label="{{ A| B}|$718\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 35 | c192 [ shape=record, label="{{ A}|$719\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 36 | x6 [ shape=record, style=rounded, label=" 2:2 - 0:0 " ]; 37 | x6:e -> c192:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 38 | c193 [ shape=record, label="{{ A}|$720\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 39 | c194 [ shape=record, label="{{ A| B}|$721\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 40 | c195 [ shape=record, label="{{ A}|$722\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 41 | x7 [ shape=record, style=rounded, label=" 2:2 - 0:0 " ]; 42 | x7:e -> c195:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 43 | c196 [ shape=record, label="{{ A}|$723\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 44 | c199 [ shape=record, label="{{ A1| A2| B1| B2}|$724\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 45 | c200 [ shape=record, label="{{ A| B| C| D}|$725\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 46 | c201 [ shape=record, label="{{ A}|$726\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 47 | c202 [ shape=record, label="{{ A| B}|$727\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 48 | c203 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$728\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 49 | c204 [ shape=record, label="{{ A| B}|$729\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 50 | c206 [ shape=record, label="{{ A1| A2| B1_N}|$730\nsky130_fd_sc_hd__a21boi_4|{ Y}}" ]; 51 | c207 [ shape=record, label="{{ A}|$731\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 52 | x8 [ shape=record, style=rounded, label=" 3:3 - 0:0 " ]; 53 | x8:e -> c207:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 54 | c208 [ shape=record, label="{{ A}|$732\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 55 | c209 [ shape=record, label="{{ A| B}|$733\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 56 | c210 [ shape=record, label="{{ A| B}|$734\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 57 | c211 [ shape=record, label="{{ A}|$735\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 58 | x9 [ shape=record, style=rounded, label=" 3:3 - 0:0 " ]; 59 | x9:e -> c211:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 60 | c212 [ shape=record, label="{{ A}|$736\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 61 | c213 [ shape=record, label="{{ A1| A2| B1| B2}|$737\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 62 | c214 [ shape=record, label="{{ A}|$738\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 63 | c215 [ shape=record, label="{{ A| B| C| D}|$739\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 64 | c216 [ shape=record, label="{{ A}|$740\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 65 | c217 [ shape=record, label="{{ A| B}|$741\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 66 | c218 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$742\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 67 | c219 [ shape=record, label="{{ A1| A2| B1}|$743\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 68 | c220 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$744\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 69 | c221 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$745\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 70 | c222 [ shape=record, label="{{ A| B}|$746\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 71 | c223 [ shape=record, label="{{ A1| A2| B1_N}|$747\nsky130_fd_sc_hd__a21boi_4|{ Y}}" ]; 72 | c224 [ shape=record, label="{{ A1| A2| B1| B2}|$748\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 73 | c225 [ shape=record, label="{{ A}|$749\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 74 | x10 [ shape=record, style=rounded, label=" 4:4 - 0:0 " ]; 75 | x10:e -> c225:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 76 | c226 [ shape=record, label="{{ A}|$750\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 77 | c227 [ shape=record, label="{{ A1| A2| B1| B2}|$751\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 78 | c228 [ shape=record, label="{{ A| B| C| D}|$752\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 79 | c229 [ shape=record, label="{{ A}|$753\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 80 | c230 [ shape=record, label="{{ A| B}|$754\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 81 | c231 [ shape=record, label="{{ A| B}|$755\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 82 | c232 [ shape=record, label="{{ A}|$756\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 83 | x11 [ shape=record, style=rounded, label=" 4:4 - 0:0 " ]; 84 | x11:e -> c232:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 85 | c233 [ shape=record, label="{{ A}|$757\nsky130_fd_sc_hd__buf_2|{ X}}" ]; 86 | c234 [ shape=record, label="{{ A1| A2| B1| B2}|$758\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 87 | c235 [ shape=record, label="{{ A| B| C| D}|$759\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 88 | c236 [ shape=record, label="{{ A}|$760\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 89 | c237 [ shape=record, label="{{ A| B}|$761\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 90 | c238 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$762\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 91 | c239 [ shape=record, label="{{ A1| A2| B1}|$763\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 92 | c240 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$764\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 93 | c241 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$765\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 94 | c242 [ shape=record, label="{{ A| B}|$766\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 95 | c243 [ shape=record, label="{{ A}|$767\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 96 | c244 [ shape=record, label="{{ A1| A2| B1}|$768\nsky130_fd_sc_hd__a21o_4|{ X}}" ]; 97 | c245 [ shape=record, label="{{ A| B}|$769\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 98 | c246 [ shape=record, label="{{ A}|$770\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 99 | c247 [ shape=record, label="{{ A1| A2| B1}|$771\nsky130_fd_sc_hd__a21oi_4|{ Y}}" ]; 100 | c248 [ shape=record, label="{{ A1| A2| B1| B2}|$772\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 101 | c249 [ shape=record, label="{{ A1| A2| B1}|$773\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 102 | c250 [ shape=record, label="{{ A| B}|$774\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 103 | c251 [ shape=record, label="{{ A}|$775\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 104 | x12 [ shape=record, style=rounded, label=" 5:5 - 0:0 " ]; 105 | x12:e -> c251:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 106 | c252 [ shape=record, label="{{ A1| A2| B1| B2}|$776\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 107 | c253 [ shape=record, label="{{ A| B| C| D}|$777\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 108 | c254 [ shape=record, label="{{ A}|$778\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 109 | c255 [ shape=record, label="{{ A| B}|$779\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 110 | c256 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$780\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 111 | c257 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$781\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 112 | c258 [ shape=record, label="{{ A}|$782\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 113 | x13 [ shape=record, style=rounded, label=" 5:5 - 0:0 " ]; 114 | x13:e -> c258:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 115 | c259 [ shape=record, label="{{ A| B}|$783\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 116 | c260 [ shape=record, label="{{ A1| A2| B1| B2}|$784\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 117 | c261 [ shape=record, label="{{ A| B| C| D}|$785\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 118 | c262 [ shape=record, label="{{ A}|$786\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 119 | c263 [ shape=record, label="{{ A| B}|$787\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 120 | c264 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$788\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 121 | c265 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$789\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 122 | c266 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$790\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 123 | c267 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$791\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 124 | c268 [ shape=record, label="{{ A| B}|$792\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 125 | c269 [ shape=record, label="{{ A1| A2| B1| B2}|$793\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 126 | c270 [ shape=record, label="{{ A}|$794\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 127 | x14 [ shape=record, style=rounded, label=" 6:6 - 0:0 " ]; 128 | x14:e -> c270:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 129 | c271 [ shape=record, label="{{ A1| A2| B1}|$795\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 130 | c272 [ shape=record, label="{{ A1| A2| B1}|$796\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 131 | c273 [ shape=record, label="{{ A| B| C}|$797\nsky130_fd_sc_hd__or3_4|{ X}}" ]; 132 | c274 [ shape=record, label="{{ A}|$798\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 133 | c275 [ shape=record, label="{{ A| B}|$799\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 134 | c276 [ shape=record, label="{{ A| B}|$800\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 135 | c277 [ shape=record, label="{{ A1| A2| B1| B2}|$801\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 136 | c278 [ shape=record, label="{{ A| B| C| D}|$802\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 137 | c279 [ shape=record, label="{{ A}|$803\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 138 | c280 [ shape=record, label="{{ A| B}|$804\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 139 | c281 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$805\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 140 | c282 [ shape=record, label="{{ A| B}|$806\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 141 | c283 [ shape=record, label="{{ A}|$807\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 142 | x15 [ shape=record, style=rounded, label=" 6:6 - 0:0 " ]; 143 | x15:e -> c283:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 144 | c284 [ shape=record, label="{{ A1| A2| B1| B2}|$808\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 145 | c285 [ shape=record, label="{{ A| B| C| D}|$809\nsky130_fd_sc_hd__or4_4|{ X}}" ]; 146 | c286 [ shape=record, label="{{ A}|$810\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 147 | c287 [ shape=record, label="{{ A| B}|$811\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 148 | c288 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$812\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 149 | c289 [ shape=record, label="{{ A1| A2| B1}|$813\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 150 | c290 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$814\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 151 | c291 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$815\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 152 | c292 [ shape=record, label="{{ A1| A2| B1| B2}|$816\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 153 | c293 [ shape=record, label="{{ A| B}|$817\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 154 | c294 [ shape=record, label="{{ A1| A2| B1_N}|$818\nsky130_fd_sc_hd__a21bo_4|{ X}}" ]; 155 | c295 [ shape=record, label="{{ A| B}|$819\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 156 | c296 [ shape=record, label="{{ A1| A2| B1}|$820\nsky130_fd_sc_hd__a21o_4|{ X}}" ]; 157 | c297 [ shape=record, label="{{ A| B}|$821\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 158 | c298 [ shape=record, label="{{ A1| A2| B1_N}|$822\nsky130_fd_sc_hd__a21bo_4|{ X}}" ]; 159 | c299 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$823\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 160 | c300 [ shape=record, label="{{ A| B}|$824\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 161 | c301 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$825\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 162 | c302 [ shape=record, label="{{ A}|$826\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 163 | c303 [ shape=record, label="{{ A1| A2| B1| B2}|$827\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 164 | c304 [ shape=record, label="{{ A}|$828\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 165 | c305 [ shape=record, label="{{ A| B}|$829\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 166 | c306 [ shape=record, label="{{ A| B}|$830\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 167 | c307 [ shape=record, label="{{ A| B}|$831\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 168 | c308 [ shape=record, label="{{ A}|$832\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 169 | c309 [ shape=record, label="{{ A}|$833\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 170 | c310 [ shape=record, label="{{ A1| A2| B1| B2}|$834\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 171 | c311 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$835\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 172 | c312 [ shape=record, label="{{ A1| A2| B1| B2}|$836\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 173 | c313 [ shape=record, label="{{ A| B}|$837\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 174 | c314 [ shape=record, label="{{ A1| A2| B1}|$838\nsky130_fd_sc_hd__o21ai_4|{ Y}}" ]; 175 | c315 [ shape=record, label="{{ A| B}|$839\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 176 | c316 [ shape=record, label="{{ A}|$840\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 177 | c317 [ shape=record, label="{{ A| B}|$841\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 178 | x16 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 179 | x16:e -> c317:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 180 | x17 [ shape=record, style=rounded, label=" 7:7 - 0:0 " ]; 181 | x17:e -> c317:p187:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 182 | c318 [ shape=record, label="{{ A}|$842\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 183 | c319 [ shape=record, label="{{ A1| A2| B1| B2}|$843\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 184 | c320 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$844\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 185 | c321 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$845\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 186 | c322 [ shape=record, label="{{ A| B}|$846\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 187 | c323 [ shape=record, label="{{ A1| A2| B1_N}|$847\nsky130_fd_sc_hd__a21bo_4|{ X}}" ]; 188 | c324 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$848\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 189 | c325 [ shape=record, label="{{ A| B}|$849\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 190 | x18 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 191 | x18:e -> c325:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 192 | x19 [ shape=record, style=rounded, label=" 7:7 - 0:0 " ]; 193 | x19:e -> c325:p187:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 194 | c326 [ shape=record, label="{{ A}|$850\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 195 | c327 [ shape=record, label="{{ A| B}|$851\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 196 | c328 [ shape=record, label="{{ A1| A2| B1}|$852\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 197 | c329 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$853\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 198 | c330 [ shape=record, label="{{ A}|$854\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 199 | c331 [ shape=record, label="{{ A1| A2| B1| B2}|$855\nsky130_fd_sc_hd__o22a_4|{ X}}" ]; 200 | c332 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$856\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 201 | c333 [ shape=record, label="{{ A1| A2| B1}|$857\nsky130_fd_sc_hd__o21ai_4|{ Y}}" ]; 202 | c334 [ shape=record, label="{{ A1| A2| B1}|$858\nsky130_fd_sc_hd__o21a_4|{ X}}" ]; 203 | c335 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$859\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 204 | c336 [ shape=record, label="{{ A}|$860\nsky130_fd_sc_hd__inv_2|{ Y}}" ]; 205 | c337 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$861\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 206 | c338 [ shape=record, label="{{ A| B}|$862\nsky130_fd_sc_hd__nor2_4|{ Y}}" ]; 207 | c339 [ shape=record, label="{{ A| B}|$863\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 208 | c340 [ shape=record, label="{{ A| B}|$864\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 209 | c341 [ shape=record, label="{{ A| B}|$865\nsky130_fd_sc_hd__or2_4|{ X}}" ]; 210 | c342 [ shape=record, label="{{ A1_N| A2_N| B1| B2}|$866\nsky130_fd_sc_hd__a2bb2o_4|{ X}}" ]; 211 | c343 [ shape=record, label="{{ A| B}|$867\nsky130_fd_sc_hd__and2_4|{ X}}" ]; 212 | x20 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 213 | x20:e -> c343:p168:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 214 | x21 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 215 | x21:e -> c343:p187:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 216 | c346 [ shape=record, label="{{ CLK| D}|$114\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 217 | x22 [ shape=record, style=rounded, label=" 0:0 - 0:0 " ]; 218 | c346:p345:e -> x22:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 219 | c347 [ shape=record, label="{{ CLK| D}|$115\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 220 | x23 [ shape=record, style=rounded, label=" 0:0 - 1:1 " ]; 221 | c347:p345:e -> x23:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 222 | c348 [ shape=record, label="{{ CLK| D}|$116\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 223 | x24 [ shape=record, style=rounded, label=" 0:0 - 2:2 " ]; 224 | c348:p345:e -> x24:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 225 | c349 [ shape=record, label="{{ CLK| D}|$117\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 226 | x25 [ shape=record, style=rounded, label=" 0:0 - 3:3 " ]; 227 | c349:p345:e -> x25:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 228 | c350 [ shape=record, label="{{ CLK| D}|$118\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 229 | x26 [ shape=record, style=rounded, label=" 0:0 - 4:4 " ]; 230 | c350:p345:e -> x26:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 231 | c351 [ shape=record, label="{{ CLK| D}|$119\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 232 | x27 [ shape=record, style=rounded, label=" 0:0 - 5:5 " ]; 233 | c351:p345:e -> x27:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 234 | c352 [ shape=record, label="{{ CLK| D}|$120\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 235 | x28 [ shape=record, style=rounded, label=" 0:0 - 6:6 " ]; 236 | c352:p345:e -> x28:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 237 | c353 [ shape=record, label="{{ CLK| D}|$121\nsky130_fd_sc_hd__dfxtp_4|{ Q}}" ]; 238 | x29 [ shape=record, style=rounded, label=" 0:0 - 7:7 " ]; 239 | c353:p345:e -> x29:w [arrowhead=odiamond, arrowtail=odiamond, dir=both, color="black", label=""]; 240 | c343:p171:e -> c346:p189:w [color="black", label=""]; 241 | n10 [ shape=point ]; 242 | c257:p171:e -> n10:w [color="black", label=""]; 243 | n10:e -> c265:p177:w [color="black", label=""]; 244 | n10:e -> c265:p179:w [color="black", label=""]; 245 | n10:e -> c292:p179:w [color="black", label=""]; 246 | n100 [ shape=point ]; 247 | c182:p169:e -> n100:w [color="black", label=""]; 248 | n100:e -> c183:p168:w [color="black", label=""]; 249 | n100:e -> c235:p168:w [color="black", label=""]; 250 | n100:e -> c253:p168:w [color="black", label=""]; 251 | n100:e -> c285:p168:w [color="black", label=""]; 252 | n101 [ shape=point ]; 253 | c183:p171:e -> n101:w [color="black", label=""]; 254 | n101:e -> c184:p168:w [color="black", label=""]; 255 | n101:e -> c215:p168:w [color="black", label=""]; 256 | n101:e -> c234:p197:w [color="black", label=""]; 257 | n101:e -> c252:p197:w [color="black", label=""]; 258 | n101:e -> c284:p197:w [color="black", label=""]; 259 | n102 [ shape=point ]; 260 | c184:p171:e -> n102:w [color="black", label=""]; 261 | n102:e -> c190:p188:w [color="black", label=""]; 262 | n102:e -> c199:p198:w [color="black", label=""]; 263 | n102:e -> c200:p187:w [color="black", label=""]; 264 | n102:e -> c213:p197:w [color="black", label=""]; 265 | n102:e -> c315:p168:w [color="black", label=""]; 266 | n103 [ shape=point ]; 267 | c185:p169:e -> n103:w [color="black", label=""]; 268 | n103:e -> c186:p168:w [color="black", label=""]; 269 | n103:e -> c194:p168:w [color="black", label=""]; 270 | n103:e -> c228:p188:w [color="black", label=""]; 271 | n103:e -> c259:p168:w [color="black", label=""]; 272 | n104 [ shape=point ]; 273 | c186:p171:e -> n104:w [color="black", label=""]; 274 | n104:e -> c190:p189:w [color="black", label=""]; 275 | n104:e -> c209:p168:w [color="black", label=""]; 276 | n104:e -> c227:p179:w [color="black", label=""]; 277 | n104:e -> c272:p197:w [color="black", label=""]; 278 | n104:e -> c273:p168:w [color="black", label=""]; 279 | n105 [ shape=point ]; 280 | c190:p171:e -> n105:w [color="black", label=""]; 281 | n105:e -> c191:p187:w [color="black", label=""]; 282 | n105:e -> c204:p168:w [color="black", label=""]; 283 | n105:e -> c206:p197:w [color="black", label=""]; 284 | n106 [ shape=point ]; 285 | c192:p169:e -> n106:w [color="black", label=""]; 286 | n106:e -> c193:p168:w [color="black", label=""]; 287 | n106:e -> c231:p187:w [color="black", label=""]; 288 | n107 [ shape=point ]; 289 | c193:p171:e -> n107:w [color="black", label=""]; 290 | n107:e -> c194:p187:w [color="black", label=""]; 291 | n107:e -> c210:p187:w [color="black", label=""]; 292 | n107:e -> c250:p168:w [color="black", label=""]; 293 | n107:e -> c282:p168:w [color="black", label=""]; 294 | n107:e -> c313:p168:w [color="black", label=""]; 295 | n108 [ shape=point ]; 296 | c194:p171:e -> n108:w [color="black", label=""]; 297 | n108:e -> c203:p177:w [color="black", label=""]; 298 | n108:e -> c203:p179:w [color="black", label=""]; 299 | n108:e -> c219:p197:w [color="black", label=""]; 300 | n109 [ shape=point ]; 301 | c195:p169:e -> n109:w [color="black", label=""]; 302 | n109:e -> c196:p168:w [color="black", label=""]; 303 | n109:e -> c214:p168:w [color="black", label=""]; 304 | n11 [ shape=point ]; 305 | c258:p169:e -> n11:w [color="black", label=""]; 306 | n11:e -> c259:p187:w [color="black", label=""]; 307 | n11:e -> c276:p187:w [color="black", label=""]; 308 | n11:e -> c305:p187:w [color="black", label=""]; 309 | n110 [ shape=point ]; 310 | c196:p171:e -> n110:w [color="black", label=""]; 311 | n110:e -> c199:p180:w [color="black", label=""]; 312 | n110:e -> c200:p189:w [color="black", label=""]; 313 | n110:e -> c213:p198:w [color="black", label=""]; 314 | n110:e -> c260:p179:w [color="black", label=""]; 315 | n110:e -> c305:p168:w [color="black", label=""]; 316 | c199:p171:e -> c202:p168:w [color="black", label=""]; 317 | n112 [ shape=point ]; 318 | c200:p171:e -> n112:w [color="black", label=""]; 319 | n112:e -> c201:p168:w [color="black", label=""]; 320 | n112:e -> c219:p179:w [color="black", label=""]; 321 | c201:p169:e -> c202:p187:w [color="black", label=""]; 322 | n114 [ shape=point ]; 323 | c202:p171:e -> n114:w [color="black", label=""]; 324 | n114:e -> c203:p178:w [color="black", label=""]; 325 | n114:e -> c203:p180:w [color="black", label=""]; 326 | n114:e -> c219:p198:w [color="black", label=""]; 327 | n115 [ shape=point ]; 328 | c203:p171:e -> n115:w [color="black", label=""]; 329 | n115:e -> c204:p187:w [color="black", label=""]; 330 | n115:e -> c206:p198:w [color="black", label=""]; 331 | n116 [ shape=point ]; 332 | c204:p171:e -> n116:w [color="black", label=""]; 333 | n116:e -> c206:p205:w [color="black", label=""]; 334 | n116:e -> c222:p168:w [color="black", label=""]; 335 | n116:e -> c223:p197:w [color="black", label=""]; 336 | n117 [ shape=point ]; 337 | c207:p169:e -> n117:w [color="black", label=""]; 338 | n117:e -> c208:p168:w [color="black", label=""]; 339 | n117:e -> c261:p189:w [color="black", label=""]; 340 | n117:e -> c277:p180:w [color="black", label=""]; 341 | n117:e -> c278:p189:w [color="black", label=""]; 342 | n118 [ shape=point ]; 343 | c208:p171:e -> n118:w [color="black", label=""]; 344 | n118:e -> c209:p187:w [color="black", label=""]; 345 | n118:e -> c227:p198:w [color="black", label=""]; 346 | n118:e -> c228:p187:w [color="black", label=""]; 347 | n118:e -> c260:p180:w [color="black", label=""]; 348 | n118:e -> c307:p168:w [color="black", label=""]; 349 | n119 [ shape=point ]; 350 | c209:p171:e -> n119:w [color="black", label=""]; 351 | n119:e -> c221:p177:w [color="black", label=""]; 352 | n119:e -> c221:p179:w [color="black", label=""]; 353 | n119:e -> c224:p179:w [color="black", label=""]; 354 | n12 [ shape=point ]; 355 | c259:p171:e -> n12:w [color="black", label=""]; 356 | n12:e -> c264:p177:w [color="black", label=""]; 357 | n12:e -> c264:p179:w [color="black", label=""]; 358 | n12:e -> c271:p197:w [color="black", label=""]; 359 | n120 [ shape=point ]; 360 | c210:p171:e -> n120:w [color="black", label=""]; 361 | n120:e -> c218:p177:w [color="black", label=""]; 362 | n120:e -> c218:p179:w [color="black", label=""]; 363 | n120:e -> c239:p197:w [color="black", label=""]; 364 | n121 [ shape=point ]; 365 | c211:p169:e -> n121:w [color="black", label=""]; 366 | n121:e -> c212:p168:w [color="black", label=""]; 367 | n121:e -> c234:p198:w [color="black", label=""]; 368 | n121:e -> c235:p187:w [color="black", label=""]; 369 | n121:e -> c278:p188:w [color="black", label=""]; 370 | n122 [ shape=point ]; 371 | c212:p171:e -> n122:w [color="black", label=""]; 372 | n122:e -> c213:p180:w [color="black", label=""]; 373 | n122:e -> c215:p189:w [color="black", label=""]; 374 | n122:e -> c250:p187:w [color="black", label=""]; 375 | n122:e -> c277:p179:w [color="black", label=""]; 376 | n122:e -> c306:p168:w [color="black", label=""]; 377 | c213:p171:e -> c217:p168:w [color="black", label=""]; 378 | n124 [ shape=point ]; 379 | c214:p171:e -> n124:w [color="black", label=""]; 380 | n124:e -> c215:p187:w [color="black", label=""]; 381 | n124:e -> c231:p168:w [color="black", label=""]; 382 | n124:e -> c261:p188:w [color="black", label=""]; 383 | n124:e -> c277:p197:w [color="black", label=""]; 384 | n124:e -> c278:p168:w [color="black", label=""]; 385 | n125 [ shape=point ]; 386 | c215:p171:e -> n125:w [color="black", label=""]; 387 | n125:e -> c216:p168:w [color="black", label=""]; 388 | n125:e -> c239:p179:w [color="black", label=""]; 389 | c216:p169:e -> c217:p187:w [color="black", label=""]; 390 | n127 [ shape=point ]; 391 | c217:p171:e -> n127:w [color="black", label=""]; 392 | n127:e -> c218:p178:w [color="black", label=""]; 393 | n127:e -> c218:p180:w [color="black", label=""]; 394 | n127:e -> c239:p198:w [color="black", label=""]; 395 | n128 [ shape=point ]; 396 | c218:p171:e -> n128:w [color="black", label=""]; 397 | n128:e -> c220:p177:w [color="black", label=""]; 398 | n128:e -> c220:p179:w [color="black", label=""]; 399 | n128:e -> c224:p197:w [color="black", label=""]; 400 | n129 [ shape=point ]; 401 | c219:p171:e -> n129:w [color="black", label=""]; 402 | n129:e -> c220:p178:w [color="black", label=""]; 403 | n129:e -> c220:p180:w [color="black", label=""]; 404 | n129:e -> c224:p198:w [color="black", label=""]; 405 | c260:p171:e -> c263:p168:w [color="black", label=""]; 406 | n130 [ shape=point ]; 407 | c220:p171:e -> n130:w [color="black", label=""]; 408 | n130:e -> c221:p178:w [color="black", label=""]; 409 | n130:e -> c221:p180:w [color="black", label=""]; 410 | n130:e -> c224:p180:w [color="black", label=""]; 411 | n131 [ shape=point ]; 412 | c221:p171:e -> n131:w [color="black", label=""]; 413 | n131:e -> c222:p187:w [color="black", label=""]; 414 | n131:e -> c223:p198:w [color="black", label=""]; 415 | n132 [ shape=point ]; 416 | c222:p171:e -> n132:w [color="black", label=""]; 417 | n132:e -> c223:p205:w [color="black", label=""]; 418 | n132:e -> c245:p168:w [color="black", label=""]; 419 | n132:e -> c247:p197:w [color="black", label=""]; 420 | n133 [ shape=point ]; 421 | c224:p171:e -> n133:w [color="black", label=""]; 422 | n133:e -> c242:p168:w [color="black", label=""]; 423 | n133:e -> c244:p197:w [color="black", label=""]; 424 | n134 [ shape=point ]; 425 | c225:p169:e -> n134:w [color="black", label=""]; 426 | n134:e -> c226:p168:w [color="black", label=""]; 427 | n134:e -> c261:p187:w [color="black", label=""]; 428 | n134:e -> c278:p187:w [color="black", label=""]; 429 | n135 [ shape=point ]; 430 | c226:p171:e -> n135:w [color="black", label=""]; 431 | n135:e -> c227:p180:w [color="black", label=""]; 432 | n135:e -> c228:p189:w [color="black", label=""]; 433 | n135:e -> c260:p198:w [color="black", label=""]; 434 | n135:e -> c277:p198:w [color="black", label=""]; 435 | n135:e -> c306:p187:w [color="black", label=""]; 436 | c227:p171:e -> c230:p168:w [color="black", label=""]; 437 | n137 [ shape=point ]; 438 | c228:p171:e -> n137:w [color="black", label=""]; 439 | n137:e -> c229:p168:w [color="black", label=""]; 440 | n137:e -> c267:p177:w [color="black", label=""]; 441 | n137:e -> c267:p179:w [color="black", label=""]; 442 | n137:e -> c269:p179:w [color="black", label=""]; 443 | c229:p169:e -> c230:p187:w [color="black", label=""]; 444 | n139 [ shape=point ]; 445 | c230:p171:e -> n139:w [color="black", label=""]; 446 | n139:e -> c241:p177:w [color="black", label=""]; 447 | n139:e -> c241:p179:w [color="black", label=""]; 448 | n139:e -> c248:p179:w [color="black", label=""]; 449 | n14 [ shape=point ]; 450 | c261:p171:e -> n14:w [color="black", label=""]; 451 | n14:e -> c262:p168:w [color="black", label=""]; 452 | n14:e -> c271:p179:w [color="black", label=""]; 453 | n140 [ shape=point ]; 454 | c231:p171:e -> n140:w [color="black", label=""]; 455 | n140:e -> c238:p177:w [color="black", label=""]; 456 | n140:e -> c238:p179:w [color="black", label=""]; 457 | n140:e -> c249:p197:w [color="black", label=""]; 458 | n141 [ shape=point ]; 459 | c232:p169:e -> n141:w [color="black", label=""]; 460 | n141:e -> c233:p168:w [color="black", label=""]; 461 | n141:e -> c253:p187:w [color="black", label=""]; 462 | n142 [ shape=point ]; 463 | c233:p171:e -> n142:w [color="black", label=""]; 464 | n142:e -> c234:p180:w [color="black", label=""]; 465 | n142:e -> c235:p189:w [color="black", label=""]; 466 | n142:e -> c252:p198:w [color="black", label=""]; 467 | n142:e -> c282:p187:w [color="black", label=""]; 468 | n142:e -> c307:p187:w [color="black", label=""]; 469 | c234:p171:e -> c237:p168:w [color="black", label=""]; 470 | n144 [ shape=point ]; 471 | c235:p171:e -> n144:w [color="black", label=""]; 472 | n144:e -> c236:p168:w [color="black", label=""]; 473 | n144:e -> c249:p179:w [color="black", label=""]; 474 | c236:p169:e -> c237:p187:w [color="black", label=""]; 475 | n146 [ shape=point ]; 476 | c237:p171:e -> n146:w [color="black", label=""]; 477 | n146:e -> c238:p178:w [color="black", label=""]; 478 | n146:e -> c238:p180:w [color="black", label=""]; 479 | n146:e -> c249:p198:w [color="black", label=""]; 480 | n147 [ shape=point ]; 481 | c238:p171:e -> n147:w [color="black", label=""]; 482 | n147:e -> c240:p177:w [color="black", label=""]; 483 | n147:e -> c240:p179:w [color="black", label=""]; 484 | n147:e -> c248:p197:w [color="black", label=""]; 485 | n148 [ shape=point ]; 486 | c239:p171:e -> n148:w [color="black", label=""]; 487 | n148:e -> c240:p178:w [color="black", label=""]; 488 | n148:e -> c240:p180:w [color="black", label=""]; 489 | n148:e -> c248:p198:w [color="black", label=""]; 490 | n149 [ shape=point ]; 491 | c240:p171:e -> n149:w [color="black", label=""]; 492 | n149:e -> c241:p178:w [color="black", label=""]; 493 | n149:e -> c241:p180:w [color="black", label=""]; 494 | n149:e -> c248:p180:w [color="black", label=""]; 495 | c262:p169:e -> c263:p187:w [color="black", label=""]; 496 | n150 [ shape=point ]; 497 | c241:p171:e -> n150:w [color="black", label=""]; 498 | n150:e -> c242:p187:w [color="black", label=""]; 499 | n150:e -> c244:p198:w [color="black", label=""]; 500 | n151 [ shape=point ]; 501 | c242:p171:e -> n151:w [color="black", label=""]; 502 | n151:e -> c243:p168:w [color="black", label=""]; 503 | n151:e -> c268:p168:w [color="black", label=""]; 504 | n152 [ shape=point ]; 505 | c243:p169:e -> n152:w [color="black", label=""]; 506 | n152:e -> c244:p179:w [color="black", label=""]; 507 | n152:e -> c341:p168:w [color="black", label=""]; 508 | n153 [ shape=point ]; 509 | c244:p171:e -> n153:w [color="black", label=""]; 510 | n153:e -> c245:p187:w [color="black", label=""]; 511 | n153:e -> c247:p198:w [color="black", label=""]; 512 | n154 [ shape=point ]; 513 | c245:p171:e -> n154:w [color="black", label=""]; 514 | n154:e -> c246:p168:w [color="black", label=""]; 515 | n154:e -> c300:p168:w [color="black", label=""]; 516 | n155 [ shape=point ]; 517 | c246:p169:e -> n155:w [color="black", label=""]; 518 | n155:e -> c247:p179:w [color="black", label=""]; 519 | n155:e -> c341:p187:w [color="black", label=""]; 520 | n156 [ shape=point ]; 521 | c248:p171:e -> n156:w [color="black", label=""]; 522 | n156:e -> c266:p177:w [color="black", label=""]; 523 | n156:e -> c266:p179:w [color="black", label=""]; 524 | n156:e -> c269:p197:w [color="black", label=""]; 525 | n157 [ shape=point ]; 526 | c249:p171:e -> n157:w [color="black", label=""]; 527 | n157:e -> c257:p177:w [color="black", label=""]; 528 | n157:e -> c257:p179:w [color="black", label=""]; 529 | n157:e -> c292:p197:w [color="black", label=""]; 530 | n158 [ shape=point ]; 531 | c250:p171:e -> n158:w [color="black", label=""]; 532 | n158:e -> c256:p177:w [color="black", label=""]; 533 | n158:e -> c256:p179:w [color="black", label=""]; 534 | n158:e -> c289:p197:w [color="black", label=""]; 535 | n159 [ shape=point ]; 536 | c251:p169:e -> n159:w [color="black", label=""]; 537 | n159:e -> c252:p180:w [color="black", label=""]; 538 | n159:e -> c253:p189:w [color="black", label=""]; 539 | n159:e -> c284:p198:w [color="black", label=""]; 540 | n159:e -> c285:p187:w [color="black", label=""]; 541 | n159:e -> c313:p187:w [color="black", label=""]; 542 | n16 [ shape=point ]; 543 | c263:p171:e -> n16:w [color="black", label=""]; 544 | n16:e -> c264:p178:w [color="black", label=""]; 545 | n16:e -> c264:p180:w [color="black", label=""]; 546 | n16:e -> c271:p198:w [color="black", label=""]; 547 | c252:p171:e -> c255:p168:w [color="black", label=""]; 548 | n161 [ shape=point ]; 549 | c253:p171:e -> n161:w [color="black", label=""]; 550 | n161:e -> c254:p168:w [color="black", label=""]; 551 | n161:e -> c289:p179:w [color="black", label=""]; 552 | c254:p169:e -> c255:p187:w [color="black", label=""]; 553 | n163 [ shape=point ]; 554 | c255:p171:e -> n163:w [color="black", label=""]; 555 | n163:e -> c256:p178:w [color="black", label=""]; 556 | n163:e -> c256:p180:w [color="black", label=""]; 557 | n163:e -> c289:p198:w [color="black", label=""]; 558 | n164:e -> x0:s0:w [color="black", label=""]; 559 | n164:e -> x11:s0:w [color="black", label=""]; 560 | n164:e -> x12:s0:w [color="black", label=""]; 561 | n164:e -> x15:s0:w [color="black", label=""]; 562 | n164:e -> x17:s0:w [color="black", label=""]; 563 | n164:e -> x18:s0:w [color="black", label=""]; 564 | n164:e -> x21:s0:w [color="black", label=""]; 565 | n164:e -> x3:s0:w [color="black", label=""]; 566 | n164:e -> x5:s0:w [color="black", label=""]; 567 | n164:e -> x7:s0:w [color="black", label=""]; 568 | n164:e -> x9:s0:w [color="black", label=""]; 569 | n165:e -> x10:s0:w [color="black", label=""]; 570 | n165:e -> x13:s0:w [color="black", label=""]; 571 | n165:e -> x14:s0:w [color="black", label=""]; 572 | n165:e -> x16:s0:w [color="black", label=""]; 573 | n165:e -> x19:s0:w [color="black", label=""]; 574 | n165:e -> x1:s0:w [color="black", label=""]; 575 | n165:e -> x20:s0:w [color="black", label=""]; 576 | n165:e -> x2:s0:w [color="black", label=""]; 577 | n165:e -> x4:s0:w [color="black", label=""]; 578 | n165:e -> x6:s0:w [color="black", label=""]; 579 | n165:e -> x8:s0:w [color="black", label=""]; 580 | x22:s0:e -> n166:w [color="black", label=""]; 581 | x23:s0:e -> n166:w [color="black", label=""]; 582 | x24:s0:e -> n166:w [color="black", label=""]; 583 | x25:s0:e -> n166:w [color="black", label=""]; 584 | x26:s0:e -> n166:w [color="black", label=""]; 585 | x27:s0:e -> n166:w [color="black", label=""]; 586 | x28:s0:e -> n166:w [color="black", label=""]; 587 | x29:s0:e -> n166:w [color="black", label=""]; 588 | n167:e -> c346:p344:w [color="black", label=""]; 589 | n167:e -> c347:p344:w [color="black", label=""]; 590 | n167:e -> c348:p344:w [color="black", label=""]; 591 | n167:e -> c349:p344:w [color="black", label=""]; 592 | n167:e -> c350:p344:w [color="black", label=""]; 593 | n167:e -> c351:p344:w [color="black", label=""]; 594 | n167:e -> c352:p344:w [color="black", label=""]; 595 | n167:e -> c353:p344:w [color="black", label=""]; 596 | n17 [ shape=point ]; 597 | c264:p171:e -> n17:w [color="black", label=""]; 598 | n17:e -> c265:p178:w [color="black", label=""]; 599 | n17:e -> c265:p180:w [color="black", label=""]; 600 | n17:e -> c292:p180:w [color="black", label=""]; 601 | n18 [ shape=point ]; 602 | c265:p171:e -> n18:w [color="black", label=""]; 603 | n18:e -> c266:p178:w [color="black", label=""]; 604 | n18:e -> c266:p180:w [color="black", label=""]; 605 | n18:e -> c269:p198:w [color="black", label=""]; 606 | n19 [ shape=point ]; 607 | c266:p171:e -> n19:w [color="black", label=""]; 608 | n19:e -> c267:p178:w [color="black", label=""]; 609 | n19:e -> c267:p180:w [color="black", label=""]; 610 | n19:e -> c269:p180:w [color="black", label=""]; 611 | c191:p171:e -> c347:p189:w [color="black", label=""]; 612 | n20 [ shape=point ]; 613 | c267:p171:e -> n20:w [color="black", label=""]; 614 | n20:e -> c268:p187:w [color="black", label=""]; 615 | n20:e -> c300:p187:w [color="black", label=""]; 616 | n20:e -> c342:p177:w [color="black", label=""]; 617 | n20:e -> c342:p179:w [color="black", label=""]; 618 | n21 [ shape=point ]; 619 | c268:p171:e -> n21:w [color="black", label=""]; 620 | n21:e -> c299:p177:w [color="black", label=""]; 621 | n21:e -> c299:p179:w [color="black", label=""]; 622 | n21:e -> c303:p197:w [color="black", label=""]; 623 | n22 [ shape=point ]; 624 | c269:p171:e -> n22:w [color="black", label=""]; 625 | n22:e -> c297:p168:w [color="black", label=""]; 626 | n22:e -> c298:p197:w [color="black", label=""]; 627 | n23 [ shape=point ]; 628 | c270:p169:e -> n23:w [color="black", label=""]; 629 | n23:e -> c272:p198:w [color="black", label=""]; 630 | n23:e -> c273:p187:w [color="black", label=""]; 631 | n23:e -> c327:p187:w [color="black", label=""]; 632 | n24 [ shape=point ]; 633 | c271:p171:e -> n24:w [color="black", label=""]; 634 | n24:e -> c272:p179:w [color="black", label=""]; 635 | n24:e -> c273:p188:w [color="black", label=""]; 636 | c272:p171:e -> c275:p168:w [color="black", label=""]; 637 | c273:p171:e -> c274:p168:w [color="black", label=""]; 638 | n27 [ shape=point ]; 639 | c274:p169:e -> n27:w [color="black", label=""]; 640 | n27:e -> c275:p187:w [color="black", label=""]; 641 | n27:e -> c333:p197:w [color="black", label=""]; 642 | n27:e -> c334:p197:w [color="black", label=""]; 643 | n28 [ shape=point ]; 644 | c275:p171:e -> n28:w [color="black", label=""]; 645 | n28:e -> c295:p168:w [color="black", label=""]; 646 | n28:e -> c296:p197:w [color="black", label=""]; 647 | n29 [ shape=point ]; 648 | c276:p171:e -> n29:w [color="black", label=""]; 649 | n29:e -> c281:p177:w [color="black", label=""]; 650 | n29:e -> c281:p179:w [color="black", label=""]; 651 | n29:e -> c328:p197:w [color="black", label=""]; 652 | c206:p169:e -> c348:p189:w [color="black", label=""]; 653 | c277:p171:e -> c280:p168:w [color="black", label=""]; 654 | n31 [ shape=point ]; 655 | c278:p171:e -> n31:w [color="black", label=""]; 656 | n31:e -> c279:p168:w [color="black", label=""]; 657 | n31:e -> c328:p179:w [color="black", label=""]; 658 | c279:p169:e -> c280:p187:w [color="black", label=""]; 659 | n33 [ shape=point ]; 660 | c280:p171:e -> n33:w [color="black", label=""]; 661 | n33:e -> c281:p178:w [color="black", label=""]; 662 | n33:e -> c281:p180:w [color="black", label=""]; 663 | n33:e -> c328:p198:w [color="black", label=""]; 664 | n34 [ shape=point ]; 665 | c281:p171:e -> n34:w [color="black", label=""]; 666 | n34:e -> c291:p177:w [color="black", label=""]; 667 | n34:e -> c291:p179:w [color="black", label=""]; 668 | n34:e -> c312:p179:w [color="black", label=""]; 669 | n35 [ shape=point ]; 670 | c282:p171:e -> n35:w [color="black", label=""]; 671 | n35:e -> c288:p177:w [color="black", label=""]; 672 | n35:e -> c288:p179:w [color="black", label=""]; 673 | n35:e -> c314:p197:w [color="black", label=""]; 674 | n36 [ shape=point ]; 675 | c283:p169:e -> n36:w [color="black", label=""]; 676 | n36:e -> c284:p180:w [color="black", label=""]; 677 | n36:e -> c285:p189:w [color="black", label=""]; 678 | n36:e -> c315:p187:w [color="black", label=""]; 679 | c284:p171:e -> c287:p168:w [color="black", label=""]; 680 | n38 [ shape=point ]; 681 | c285:p171:e -> n38:w [color="black", label=""]; 682 | n38:e -> c286:p168:w [color="black", label=""]; 683 | n38:e -> c314:p179:w [color="black", label=""]; 684 | c286:p169:e -> c287:p187:w [color="black", label=""]; 685 | c223:p169:e -> c349:p189:w [color="black", label=""]; 686 | n40 [ shape=point ]; 687 | c287:p171:e -> n40:w [color="black", label=""]; 688 | n40:e -> c288:p178:w [color="black", label=""]; 689 | n40:e -> c288:p180:w [color="black", label=""]; 690 | n40:e -> c314:p198:w [color="black", label=""]; 691 | n41 [ shape=point ]; 692 | c288:p171:e -> n41:w [color="black", label=""]; 693 | n41:e -> c290:p177:w [color="black", label=""]; 694 | n41:e -> c290:p179:w [color="black", label=""]; 695 | n41:e -> c312:p197:w [color="black", label=""]; 696 | n42 [ shape=point ]; 697 | c289:p171:e -> n42:w [color="black", label=""]; 698 | n42:e -> c290:p178:w [color="black", label=""]; 699 | n42:e -> c290:p180:w [color="black", label=""]; 700 | n42:e -> c312:p198:w [color="black", label=""]; 701 | n43 [ shape=point ]; 702 | c290:p171:e -> n43:w [color="black", label=""]; 703 | n43:e -> c291:p178:w [color="black", label=""]; 704 | n43:e -> c291:p180:w [color="black", label=""]; 705 | n43:e -> c312:p180:w [color="black", label=""]; 706 | n44 [ shape=point ]; 707 | c291:p171:e -> n44:w [color="black", label=""]; 708 | n44:e -> c293:p168:w [color="black", label=""]; 709 | n44:e -> c294:p197:w [color="black", label=""]; 710 | n45 [ shape=point ]; 711 | c292:p171:e -> n45:w [color="black", label=""]; 712 | n45:e -> c293:p187:w [color="black", label=""]; 713 | n45:e -> c294:p198:w [color="black", label=""]; 714 | n46 [ shape=point ]; 715 | c293:p171:e -> n46:w [color="black", label=""]; 716 | n46:e -> c294:p205:w [color="black", label=""]; 717 | n46:e -> c333:p179:w [color="black", label=""]; 718 | n46:e -> c334:p198:w [color="black", label=""]; 719 | n47 [ shape=point ]; 720 | c294:p171:e -> n47:w [color="black", label=""]; 721 | n47:e -> c295:p187:w [color="black", label=""]; 722 | n47:e -> c296:p198:w [color="black", label=""]; 723 | n48 [ shape=point ]; 724 | c295:p169:e -> n48:w [color="black", label=""]; 725 | n48:e -> c296:p179:w [color="black", label=""]; 726 | n48:e -> c333:p198:w [color="black", label=""]; 727 | n49 [ shape=point ]; 728 | c296:p171:e -> n49:w [color="black", label=""]; 729 | n49:e -> c297:p187:w [color="black", label=""]; 730 | n49:e -> c298:p198:w [color="black", label=""]; 731 | c247:p169:e -> c350:p189:w [color="black", label=""]; 732 | n50 [ shape=point ]; 733 | c297:p171:e -> n50:w [color="black", label=""]; 734 | n50:e -> c298:p205:w [color="black", label=""]; 735 | n50:e -> c335:p177:w [color="black", label=""]; 736 | n50:e -> c335:p179:w [color="black", label=""]; 737 | n51 [ shape=point ]; 738 | c298:p171:e -> n51:w [color="black", label=""]; 739 | n51:e -> c299:p178:w [color="black", label=""]; 740 | n51:e -> c299:p180:w [color="black", label=""]; 741 | n51:e -> c303:p198:w [color="black", label=""]; 742 | n52 [ shape=point ]; 743 | c299:p171:e -> n52:w [color="black", label=""]; 744 | n52:e -> c301:p177:w [color="black", label=""]; 745 | n52:e -> c301:p179:w [color="black", label=""]; 746 | n52:e -> c303:p179:w [color="black", label=""]; 747 | n53 [ shape=point ]; 748 | c300:p171:e -> n53:w [color="black", label=""]; 749 | n53:e -> c301:p178:w [color="black", label=""]; 750 | n53:e -> c301:p180:w [color="black", label=""]; 751 | n53:e -> c303:p180:w [color="black", label=""]; 752 | c301:p171:e -> c302:p168:w [color="black", label=""]; 753 | c303:p171:e -> c304:p168:w [color="black", label=""]; 754 | n56 [ shape=point ]; 755 | c304:p169:e -> n56:w [color="black", label=""]; 756 | n56:e -> c338:p168:w [color="black", label=""]; 757 | n56:e -> c339:p168:w [color="black", label=""]; 758 | n57 [ shape=point ]; 759 | c305:p171:e -> n57:w [color="black", label=""]; 760 | n57:e -> c311:p177:w [color="black", label=""]; 761 | n57:e -> c311:p179:w [color="black", label=""]; 762 | n58 [ shape=point ]; 763 | c306:p171:e -> n58:w [color="black", label=""]; 764 | n58:e -> c309:p168:w [color="black", label=""]; 765 | n58:e -> c310:p197:w [color="black", label=""]; 766 | n59 [ shape=point ]; 767 | c307:p171:e -> n59:w [color="black", label=""]; 768 | n59:e -> c308:p168:w [color="black", label=""]; 769 | n59:e -> c310:p180:w [color="black", label=""]; 770 | c342:p171:e -> c351:p189:w [color="black", label=""]; 771 | c308:p169:e -> c310:p198:w [color="black", label=""]; 772 | c309:p169:e -> c310:p179:w [color="black", label=""]; 773 | n62 [ shape=point ]; 774 | c310:p171:e -> n62:w [color="black", label=""]; 775 | n62:e -> c311:p178:w [color="black", label=""]; 776 | n62:e -> c311:p180:w [color="black", label=""]; 777 | n63 [ shape=point ]; 778 | c311:p171:e -> n63:w [color="black", label=""]; 779 | n63:e -> c324:p177:w [color="black", label=""]; 780 | n63:e -> c324:p179:w [color="black", label=""]; 781 | n64 [ shape=point ]; 782 | c312:p171:e -> n64:w [color="black", label=""]; 783 | n64:e -> c322:p168:w [color="black", label=""]; 784 | n64:e -> c323:p197:w [color="black", label=""]; 785 | n65 [ shape=point ]; 786 | c313:p171:e -> n65:w [color="black", label=""]; 787 | n65:e -> c321:p177:w [color="black", label=""]; 788 | n65:e -> c321:p179:w [color="black", label=""]; 789 | n66 [ shape=point ]; 790 | c314:p169:e -> n66:w [color="black", label=""]; 791 | n66:e -> c320:p177:w [color="black", label=""]; 792 | n66:e -> c320:p179:w [color="black", label=""]; 793 | n67 [ shape=point ]; 794 | c315:p171:e -> n67:w [color="black", label=""]; 795 | n67:e -> c316:p168:w [color="black", label=""]; 796 | n67:e -> c319:p179:w [color="black", label=""]; 797 | c316:p169:e -> c319:p197:w [color="black", label=""]; 798 | n69 [ shape=point ]; 799 | c317:p171:e -> n69:w [color="black", label=""]; 800 | n69:e -> c318:p168:w [color="black", label=""]; 801 | n69:e -> c319:p180:w [color="black", label=""]; 802 | c302:p169:e -> c352:p189:w [color="black", label=""]; 803 | c318:p169:e -> c319:p198:w [color="black", label=""]; 804 | n71 [ shape=point ]; 805 | c319:p171:e -> n71:w [color="black", label=""]; 806 | n71:e -> c320:p178:w [color="black", label=""]; 807 | n71:e -> c320:p180:w [color="black", label=""]; 808 | n72 [ shape=point ]; 809 | c320:p171:e -> n72:w [color="black", label=""]; 810 | n72:e -> c321:p178:w [color="black", label=""]; 811 | n72:e -> c321:p180:w [color="black", label=""]; 812 | n73 [ shape=point ]; 813 | c321:p171:e -> n73:w [color="black", label=""]; 814 | n73:e -> c322:p187:w [color="black", label=""]; 815 | n73:e -> c323:p198:w [color="black", label=""]; 816 | c322:p171:e -> c323:p205:w [color="black", label=""]; 817 | n75 [ shape=point ]; 818 | c323:p171:e -> n75:w [color="black", label=""]; 819 | n75:e -> c324:p178:w [color="black", label=""]; 820 | n75:e -> c324:p180:w [color="black", label=""]; 821 | n76 [ shape=point ]; 822 | c324:p171:e -> n76:w [color="black", label=""]; 823 | n76:e -> c332:p177:w [color="black", label=""]; 824 | n76:e -> c332:p179:w [color="black", label=""]; 825 | n77 [ shape=point ]; 826 | c325:p171:e -> n77:w [color="black", label=""]; 827 | n77:e -> c326:p168:w [color="black", label=""]; 828 | n77:e -> c331:p179:w [color="black", label=""]; 829 | c326:p169:e -> c331:p197:w [color="black", label=""]; 830 | n79 [ shape=point ]; 831 | c327:p171:e -> n79:w [color="black", label=""]; 832 | n79:e -> c329:p177:w [color="black", label=""]; 833 | n79:e -> c329:p179:w [color="black", label=""]; 834 | c340:p171:e -> c353:p189:w [color="black", label=""]; 835 | n80 [ shape=point ]; 836 | c328:p171:e -> n80:w [color="black", label=""]; 837 | n80:e -> c329:p178:w [color="black", label=""]; 838 | n80:e -> c329:p180:w [color="black", label=""]; 839 | n81 [ shape=point ]; 840 | c329:p171:e -> n81:w [color="black", label=""]; 841 | n81:e -> c330:p168:w [color="black", label=""]; 842 | n81:e -> c331:p180:w [color="black", label=""]; 843 | c330:p169:e -> c331:p198:w [color="black", label=""]; 844 | n83 [ shape=point ]; 845 | c331:p171:e -> n83:w [color="black", label=""]; 846 | n83:e -> c332:p178:w [color="black", label=""]; 847 | n83:e -> c332:p180:w [color="black", label=""]; 848 | n84 [ shape=point ]; 849 | c332:p171:e -> n84:w [color="black", label=""]; 850 | n84:e -> c337:p177:w [color="black", label=""]; 851 | n84:e -> c337:p179:w [color="black", label=""]; 852 | c333:p169:e -> c334:p179:w [color="black", label=""]; 853 | n86 [ shape=point ]; 854 | c334:p171:e -> n86:w [color="black", label=""]; 855 | n86:e -> c335:p178:w [color="black", label=""]; 856 | n86:e -> c335:p180:w [color="black", label=""]; 857 | c335:p171:e -> c336:p168:w [color="black", label=""]; 858 | n88 [ shape=point ]; 859 | c336:p169:e -> n88:w [color="black", label=""]; 860 | n88:e -> c337:p178:w [color="black", label=""]; 861 | n88:e -> c337:p180:w [color="black", label=""]; 862 | n89 [ shape=point ]; 863 | c337:p171:e -> n89:w [color="black", label=""]; 864 | n89:e -> c338:p187:w [color="black", label=""]; 865 | n89:e -> c339:p187:w [color="black", label=""]; 866 | n9 [ shape=point ]; 867 | c256:p171:e -> n9:w [color="black", label=""]; 868 | n9:e -> c257:p178:w [color="black", label=""]; 869 | n9:e -> c257:p180:w [color="black", label=""]; 870 | n9:e -> c292:p198:w [color="black", label=""]; 871 | c338:p169:e -> c340:p168:w [color="black", label=""]; 872 | c339:p171:e -> c340:p187:w [color="black", label=""]; 873 | n92 [ shape=point ]; 874 | c341:p171:e -> n92:w [color="black", label=""]; 875 | n92:e -> c342:p178:w [color="black", label=""]; 876 | n92:e -> c342:p180:w [color="black", label=""]; 877 | n93 [ shape=point ]; 878 | c170:p169:e -> n93:w [color="black", label=""]; 879 | n93:e -> c172:p168:w [color="black", label=""]; 880 | n93:e -> c260:p197:w [color="black", label=""]; 881 | n93:e -> c261:p168:w [color="black", label=""]; 882 | n94 [ shape=point ]; 883 | c172:p171:e -> n94:w [color="black", label=""]; 884 | n94:e -> c173:p168:w [color="black", label=""]; 885 | n94:e -> c199:p197:w [color="black", label=""]; 886 | n94:e -> c200:p168:w [color="black", label=""]; 887 | n94:e -> c210:p168:w [color="black", label=""]; 888 | n94:e -> c276:p168:w [color="black", label=""]; 889 | n95 [ shape=point ]; 890 | c173:p171:e -> n95:w [color="black", label=""]; 891 | n95:e -> c181:p177:w [color="black", label=""]; 892 | n95:e -> c190:p168:w [color="black", label=""]; 893 | n95:e -> c227:p197:w [color="black", label=""]; 894 | n95:e -> c228:p168:w [color="black", label=""]; 895 | n95:e -> c327:p168:w [color="black", label=""]; 896 | n96 [ shape=point ]; 897 | c174:p169:e -> n96:w [color="black", label=""]; 898 | n96:e -> c175:p168:w [color="black", label=""]; 899 | n96:e -> c235:p188:w [color="black", label=""]; 900 | n96:e -> c253:p188:w [color="black", label=""]; 901 | n96:e -> c285:p188:w [color="black", label=""]; 902 | n97 [ shape=point ]; 903 | c175:p171:e -> n97:w [color="black", label=""]; 904 | n97:e -> c176:p168:w [color="black", label=""]; 905 | n97:e -> c215:p188:w [color="black", label=""]; 906 | n97:e -> c234:p179:w [color="black", label=""]; 907 | n97:e -> c252:p179:w [color="black", label=""]; 908 | n97:e -> c284:p179:w [color="black", label=""]; 909 | n98 [ shape=point ]; 910 | c176:p171:e -> n98:w [color="black", label=""]; 911 | n98:e -> c181:p178:w [color="black", label=""]; 912 | n98:e -> c190:p187:w [color="black", label=""]; 913 | n98:e -> c199:p179:w [color="black", label=""]; 914 | n98:e -> c200:p188:w [color="black", label=""]; 915 | n98:e -> c213:p179:w [color="black", label=""]; 916 | c181:p171:e -> c191:p168:w [color="black", label=""]; 917 | } 918 | -------------------------------------------------------------------------------- /docs/multiplier8/opensta.min_max.rpt: -------------------------------------------------------------------------------- 1 | Startpoint: b[0] (input port clocked by clk) 2 | Endpoint: _326_ (rising edge-triggered flip-flop clocked by clk) 3 | Path Group: clk 4 | Path Type: min 5 | 6 | Delay Time Description 7 | --------------------------------------------------------- 8 | 0.00 0.00 clock clk (rise edge) 9 | 0.00 0.00 clock network delay (ideal) 10 | 2.00 2.00 ^ input external delay 11 | 0.01 2.01 ^ b[0] (in) 12 | 0.07 2.08 ^ _325_/X (sky130_fd_sc_hd__and2_4) 13 | 0.00 2.08 ^ _326_/D (sky130_fd_sc_hd__dfxtp_4) 14 | 2.08 data arrival time 15 | 16 | 0.00 0.00 clock clk (rise edge) 17 | 0.00 0.00 clock network delay (ideal) 18 | 0.00 0.00 clock reconvergence pessimism 19 | 0.00 ^ _326_/CLK (sky130_fd_sc_hd__dfxtp_4) 20 | -0.02 -0.02 library hold time 21 | -0.02 data required time 22 | --------------------------------------------------------- 23 | -0.02 data required time 24 | -2.08 data arrival time 25 | --------------------------------------------------------- 26 | 2.09 slack (MET) 27 | 28 | 29 | Startpoint: b[1] (input port clocked by clk) 30 | Endpoint: _333_ (rising edge-triggered flip-flop clocked by clk) 31 | Path Group: clk 32 | Path Type: max 33 | 34 | Delay Time Description 35 | --------------------------------------------------------- 36 | 0.00 0.00 clock clk (rise edge) 37 | 0.00 0.00 clock network delay (ideal) 38 | 2.00 2.00 ^ input external delay 39 | 0.02 2.02 ^ b[1] (in) 40 | 0.06 2.08 v _170_/Y (sky130_fd_sc_hd__inv_2) 41 | 1.09 3.16 v _267_/X (sky130_fd_sc_hd__or4_4) 42 | 0.10 3.27 ^ _268_/Y (sky130_fd_sc_hd__inv_2) 43 | 0.24 3.51 ^ _269_/X (sky130_fd_sc_hd__or2_4) 44 | 0.44 3.94 v _270_/X (sky130_fd_sc_hd__a2bb2o_4) 45 | 0.42 4.37 ^ _272_/X (sky130_fd_sc_hd__a2bb2o_4) 46 | 0.41 4.78 v _273_/X (sky130_fd_sc_hd__a2bb2o_4) 47 | 0.51 5.29 v _275_/X (sky130_fd_sc_hd__or2_4) 48 | 0.36 5.64 ^ _276_/X (sky130_fd_sc_hd__a21bo_4) 49 | 0.08 5.72 v _277_/Y (sky130_fd_sc_hd__nor2_4) 50 | 0.33 6.05 v _278_/X (sky130_fd_sc_hd__a21o_4) 51 | 0.46 6.51 v _279_/X (sky130_fd_sc_hd__or2_4) 52 | 0.35 6.86 ^ _280_/X (sky130_fd_sc_hd__a21bo_4) 53 | 0.43 7.30 v _281_/X (sky130_fd_sc_hd__a2bb2o_4) 54 | 0.39 7.69 v _285_/X (sky130_fd_sc_hd__o22a_4) 55 | 0.11 7.80 ^ _286_/Y (sky130_fd_sc_hd__inv_2) 56 | 0.07 7.87 v _320_/Y (sky130_fd_sc_hd__nor2_4) 57 | 0.43 8.30 v _322_/X (sky130_fd_sc_hd__or2_4) 58 | 0.00 8.30 v _333_/D (sky130_fd_sc_hd__dfxtp_4) 59 | 8.30 data arrival time 60 | 61 | 10.00 10.00 clock clk (rise edge) 62 | 0.00 10.00 clock network delay (ideal) 63 | 0.00 10.00 clock reconvergence pessimism 64 | 10.00 ^ _333_/CLK (sky130_fd_sc_hd__dfxtp_4) 65 | -0.29 9.71 library setup time 66 | 9.71 data required time 67 | --------------------------------------------------------- 68 | 9.71 data required time 69 | -8.30 data arrival time 70 | --------------------------------------------------------- 71 | 1.41 slack (MET) 72 | 73 | 74 | -------------------------------------------------------------------------------- /docs/multiplier8/yosys_2.stat.rpt: -------------------------------------------------------------------------------- 1 | 2 | 22. Printing statistics. 3 | 4 | === multiplier === 5 | 6 | Number of wires: 167 7 | Number of wire bits: 188 8 | Number of public wires: 4 9 | Number of public wire bits: 25 10 | Number of memories: 0 11 | Number of memory bits: 0 12 | Number of processes: 0 13 | Number of cells: 171 14 | sky130_fd_sc_hd__a21bo_4 3 15 | sky130_fd_sc_hd__a21boi_4 2 16 | sky130_fd_sc_hd__a21o_4 2 17 | sky130_fd_sc_hd__a21oi_4 1 18 | sky130_fd_sc_hd__a2bb2o_4 29 19 | sky130_fd_sc_hd__and2_4 5 20 | sky130_fd_sc_hd__buf_2 14 21 | sky130_fd_sc_hd__dfxtp_4 8 22 | sky130_fd_sc_hd__inv_2 34 23 | sky130_fd_sc_hd__nor2_4 2 24 | sky130_fd_sc_hd__o21a_4 8 25 | sky130_fd_sc_hd__o21ai_4 2 26 | sky130_fd_sc_hd__o22a_4 17 27 | sky130_fd_sc_hd__or2_4 34 28 | sky130_fd_sc_hd__or3_4 1 29 | sky130_fd_sc_hd__or4_4 9 30 | 31 | Chip area for module '\multiplier': 2028.195200 32 | 33 | -------------------------------------------------------------------------------- /edge_detect.gtkw: -------------------------------------------------------------------------------- 1 | [*] 2 | [*] GTKWave Analyzer v3.3.103 (w)1999-2019 BSI 3 | [*] Mon Feb 1 12:47:17 2021 4 | [*] 5 | [dumpfile] "/home/matt/work/asic-workshop/course/frequency_counter/edge_detect.vcd" 6 | [dumpfile_mtime] "Mon Feb 1 12:46:48 2021" 7 | [dumpfile_size] 590 8 | [savefile] "/home/matt/work/asic-workshop/course/frequency_counter/edge_detect.gtkw" 9 | [timestart] 0 10 | [size] 1472 756 11 | [pos] -1 -1 12 | *-25.000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 13 | [sst_width] 273 14 | [signals_width] 372 15 | [sst_expanded] 1 16 | [sst_vpaned_height] 191 17 | @28 18 | edge_detect.clk 19 | @29 20 | edge_detect.signal 21 | @28 22 | edge_detect.q0 23 | edge_detect.q1 24 | edge_detect.q2 25 | edge_detect.leading_edge_detect 26 | [pattern_trace] 1 27 | [pattern_trace] 0 28 | -------------------------------------------------------------------------------- /fpga/icebreaker.pcf: -------------------------------------------------------------------------------- 1 | # 12 MHz clock 2 | set_io -nowarn clk 35 3 | 4 | # RS232 5 | set_io -nowarn RX 6 6 | set_io -nowarn TX 9 7 | 8 | # LEDs and Button 9 | set_io -nowarn reset_n 10 10 | set_io -nowarn LEDR_N 11 11 | set_io -nowarn LEDG_N 37 12 | 13 | # RGB LED Driver 14 | set_io -nowarn LED_RED_N 39 15 | set_io -nowarn LED_GRN_N 40 16 | set_io -nowarn LED_BLU_N 41 17 | 18 | # SPI Flash 19 | set_io -nowarn FLASH_SCK 15 20 | set_io -nowarn FLASH_SSB 16 21 | set_io -nowarn FLASH_IO0 14 22 | set_io -nowarn FLASH_IO1 17 23 | set_io -nowarn FLASH_IO2 12 24 | set_io -nowarn FLASH_IO3 13 25 | 26 | # segments 27 | set_io -nowarn segments[0] 4 28 | set_io -nowarn segments[1] 2 29 | set_io -nowarn segments[2] 47 30 | set_io -nowarn segments[3] 45 31 | set_io -nowarn segments[4] 43 32 | set_io -nowarn segments[5] 38 33 | set_io -nowarn segments[6] 34 34 | set_io -nowarn digit 31 35 | 36 | # PMOD 1A 37 | set_io -nowarn P1A1 4 38 | set_io -nowarn P1A2 2 39 | set_io -nowarn P1A3 47 40 | set_io -nowarn P1A4 45 41 | set_io -nowarn P1A7 3 42 | set_io -nowarn P1A8 48 43 | set_io -nowarn P1A9 46 44 | set_io -nowarn P1A10 44 45 | 46 | # PMOD 1B 47 | set_io -nowarn P1B1 43 48 | set_io -nowarn P1B2 38 49 | set_io -nowarn P1B3 34 50 | set_io -nowarn P1B4 31 51 | set_io -nowarn P1B7 42 52 | set_io -nowarn P1B8 36 53 | set_io -nowarn P1B9 32 54 | set_io -nowarn P1B10 28 55 | 56 | set_io -nowarn signal 26 57 | 58 | # PMOD 2 59 | set_io -nowarn P2_1 27 60 | set_io -nowarn P2_2 25 61 | set_io -nowarn P2_3 21 62 | set_io -nowarn P2_4 19 63 | set_io -nowarn P2_7 26 64 | set_io -nowarn P2_8 23 65 | set_io -nowarn P2_9 20 66 | set_io -nowarn P2_10 18 67 | 68 | # LEDs and Buttons (PMOD 2) 69 | set_io -nowarn LED1 27 70 | set_io -nowarn LED2 25 71 | set_io -nowarn LED3 21 72 | set_io -nowarn BTN2 19 73 | set_io -nowarn LED5 26 74 | set_io -nowarn LED4 23 75 | set_io -nowarn BTN1 20 76 | set_io -nowarn BTN3 18 77 | -------------------------------------------------------------------------------- /fpga/icebreaker_1.0e.pcf: -------------------------------------------------------------------------------- 1 | # 12 MHz clock 2 | set_io -nowarn clk 35 3 | 4 | # RS232 5 | set_io -nowarn RX 6 6 | set_io -nowarn TX 9 7 | 8 | # LEDs and Button 9 | set_io -nowarn reset_n 10 10 | set_io -nowarn LEDR_N 11 11 | set_io -nowarn LEDG_N 37 12 | 13 | # RGB LED Driver 14 | set_io -nowarn LED_RED_N 39 15 | set_io -nowarn LED_GRN_N 40 16 | set_io -nowarn LED_BLU_N 41 17 | 18 | # SPI Flash 19 | set_io -nowarn FLASH_SCK 15 20 | set_io -nowarn FLASH_SSB 16 21 | set_io -nowarn FLASH_IO0 14 22 | set_io -nowarn FLASH_IO1 17 23 | set_io -nowarn FLASH_IO2 12 24 | set_io -nowarn FLASH_IO3 13 25 | 26 | # segments 27 | set_io -nowarn segments_n[0] 4 28 | set_io -nowarn segments_n[1] 2 29 | set_io -nowarn segments_n[2] 47 30 | set_io -nowarn segments_n[3] 45 31 | set_io -nowarn segments_n[4] 3 32 | set_io -nowarn segments_n[5] 48 33 | set_io -nowarn segments_n[6] 46 34 | set_io -nowarn digit_n 44 35 | 36 | # PMOD 1A 37 | set_io -nowarn P1A1 4 38 | set_io -nowarn P1A2 2 39 | set_io -nowarn P1A3 47 40 | set_io -nowarn P1A4 45 41 | set_io -nowarn P1A7 3 42 | set_io -nowarn P1A8 48 43 | set_io -nowarn P1A9 46 44 | set_io -nowarn P1A10 44 45 | 46 | # PMOD 1B 47 | set_io -nowarn P1B1 43 48 | set_io -nowarn P1B2 38 49 | set_io -nowarn P1B3 34 50 | set_io -nowarn P1B4 31 51 | set_io -nowarn P1B7 42 52 | set_io -nowarn P1B8 36 53 | set_io -nowarn P1B9 32 54 | set_io -nowarn P1B10 28 55 | 56 | set_io -nowarn signal 26 57 | 58 | # PMOD 2 59 | set_io -nowarn P2_1 27 60 | set_io -nowarn P2_2 25 61 | set_io -nowarn P2_3 21 62 | set_io -nowarn P2_4 19 63 | set_io -nowarn P2_7 26 64 | set_io -nowarn P2_8 23 65 | set_io -nowarn P2_9 20 66 | set_io -nowarn P2_10 18 67 | 68 | # LEDs and Buttons (PMOD 2) 69 | set_io -nowarn LED1 27 70 | set_io -nowarn LED2 25 71 | set_io -nowarn LED3 21 72 | set_io -nowarn BTN2 19 73 | set_io -nowarn LED5 26 74 | set_io -nowarn LED4 23 75 | set_io -nowarn BTN1 20 76 | set_io -nowarn BTN3 18 77 | -------------------------------------------------------------------------------- /frequency_counter.gtkw: -------------------------------------------------------------------------------- 1 | [*] 2 | [*] GTKWave Analyzer v3.4.0 (w)1999-2022 BSI 3 | [*] Thu Dec 22 16:47:40 2022 4 | [*] 5 | [dumpfile] "/home/matt/work/asic-workshop/shuttle8/openlane/designs/frequency_counter/frequency_counter.vcd" 6 | [dumpfile_mtime] "Thu Dec 22 16:46:49 2022" 7 | [dumpfile_size] 1003189 8 | [savefile] "/home/matt/work/asic-workshop/shuttle8/openlane/designs/frequency_counter/frequency_counter.gtkw" 9 | [timestart] 0 10 | [size] 1867 1018 11 | [pos] -1 -1 12 | *-28.340158 982000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 13 | [treeopen] frequency_counter. 14 | [sst_width] 343 15 | [signals_width] 478 16 | [sst_expanded] 1 17 | [sst_vpaned_height] 292 18 | @28 19 | frequency_counter.clk 20 | frequency_counter.signal 21 | frequency_counter.reset 22 | @c00200 23 | -edge detect 24 | @28 25 | frequency_counter.signal 26 | frequency_counter.leading_edge_detect 27 | @1401200 28 | -edge detect 29 | @200 30 | - 31 | @28 32 | frequency_counter.period_load 33 | @24 34 | frequency_counter.update_period[11:0] 35 | @800200 36 | -seg out 37 | @2024 38 | ^1 /home/matt/work/asic-workshop/shuttle8/openlane/designs/frequency_counter/segments.txt 39 | frequency_counter.segments[6:0] 40 | @28 41 | frequency_counter.digit 42 | @1000200 43 | -seg out 44 | @200 45 | - 46 | @800200 47 | -counters 48 | @24 49 | frequency_counter.edge_counter[6:0] 50 | @8024 51 | frequency_counter.clk_counter[11:0] 52 | @1000200 53 | -counters 54 | @200 55 | - 56 | @800200 57 | -state machine 58 | @28 59 | frequency_counter.update_digits 60 | @1000200 61 | -state machine 62 | @200 63 | - 64 | @800200 65 | -segments 66 | @28 67 | frequency_counter.seven_segment0.clk 68 | frequency_counter.seven_segment0.reset 69 | frequency_counter.seven_segment0.load 70 | @1000200 71 | -segments 72 | @800201 73 | -debug 74 | @29 75 | frequency_counter.dbg_clk_count[2:0] 76 | frequency_counter.dbg_edge_count[2:0] 77 | frequency_counter.dbg_state[1:0] 78 | @1000201 79 | -debug 80 | [pattern_trace] 1 81 | [pattern_trace] 0 82 | -------------------------------------------------------------------------------- /segments.txt: -------------------------------------------------------------------------------- 1 | 63 0 2 | 6 1 3 | 91 2 4 | 79 3 5 | 102 4 6 | 109 5 7 | 124 6 8 | 7 7 9 | 127 8 10 | 103 9 11 | -------------------------------------------------------------------------------- /seven_segment.gtkw: -------------------------------------------------------------------------------- 1 | [*] 2 | [*] GTKWave Analyzer v3.3.103 (w)1999-2019 BSI 3 | [*] Mon Feb 1 16:16:58 2021 4 | [*] 5 | [dumpfile] "/home/matt/work/asic-workshop/course/frequency_counter/seven_segment.vcd" 6 | [dumpfile_mtime] "Mon Feb 1 16:15:22 2021" 7 | [dumpfile_size] 21873 8 | [savefile] "/home/matt/work/asic-workshop/course/frequency_counter/seven_segment.gtkw" 9 | [timestart] 372900000 10 | [size] 2046 1082 11 | [pos] -1 -1 12 | *-26.000000 794600000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 13 | [sst_width] 273 14 | [signals_width] 451 15 | [sst_expanded] 1 16 | [sst_vpaned_height] 305 17 | @28 18 | seven_segment.clk 19 | seven_segment.reset 20 | @200 21 | - 22 | @22 23 | seven_segment.ten_count[3:0] 24 | seven_segment.unit_count[3:0] 25 | @28 26 | seven_segment.load 27 | @200 28 | - 29 | @28 30 | seven_segment.digit 31 | @2025 32 | ^1 /home/matt/work/asic-workshop/course/frequency_counter/segments.txt 33 | seven_segment.segments[6:0] 34 | [pattern_trace] 1 35 | [pattern_trace] 0 36 | -------------------------------------------------------------------------------- /src/edge_detect.v: -------------------------------------------------------------------------------- 1 | `default_nettype none 2 | `timescale 1ns/1ps 3 | module edge_detect ( 4 | input wire clk, 5 | input wire signal, 6 | output wire leading_edge_detect 7 | ); 8 | 9 | reg q0, q1, q2; // metastability on input and a delay to detect edges 10 | 11 | always @(posedge clk) begin 12 | q0 <= signal; 13 | q1 <= q0; 14 | q2 <= q1; 15 | end 16 | 17 | assign leading_edge_detect = q1 & (q2 != q1); 18 | 19 | endmodule 20 | -------------------------------------------------------------------------------- /src/frequency_counter.v: -------------------------------------------------------------------------------- 1 | `default_nettype none 2 | `timescale 1ns/1ps 3 | module frequency_counter #( 4 | // see calculations.py 5 | parameter UPDATE_PERIOD = 1200 - 1, 6 | parameter BITS = 12 7 | )( 8 | input wire clk, 9 | input wire reset, 10 | input wire signal, 11 | 12 | input wire [BITS-1:0] period, 13 | input wire period_load, 14 | 15 | output wire [6:0] segments, 16 | output wire digit, 17 | 18 | // some debug wires 19 | output wire [1:0] dbg_state, // state machine 20 | output wire [2:0] dbg_clk_count, // top 3 bits of clk counter 21 | output wire [2:0] dbg_edge_count // top 3 bits of edge counter 22 | ); 23 | 24 | 25 | reg [BITS-1:0] update_period; // measure incoming signal edges for this period 26 | 27 | reg [6:0] edge_counter; // how many edges have arrived in the counting period, max can show is 99, so limit to 7 bits 28 | reg [BITS-1:0] clk_counter; // keep track of clocks in the counting period 29 | 30 | reg [3:0] ten_count, unit_count; 31 | reg update_digits; 32 | 33 | wire leading_edge_detect; 34 | 35 | edge_detect edge_detect0 (.clk(clk), .signal(signal), .leading_edge_detect(leading_edge_detect)); 36 | 37 | always @(posedge clk) begin 38 | if(reset) 39 | update_period <= UPDATE_PERIOD; 40 | else if(period_load) 41 | update_period <= period; 42 | end 43 | 44 | localparam STATE_COUNT = 0; 45 | localparam STATE_TENS = 1; 46 | localparam STATE_UNITS = 2; 47 | 48 | reg [1:0] state; 49 | 50 | // debug assigns 51 | assign dbg_state = state; 52 | assign dbg_clk_count = clk_counter[BITS-1:BITS-3]; 53 | assign dbg_edge_count = edge_counter[6:4]; 54 | 55 | always @(posedge clk) begin 56 | if(reset) begin 57 | 58 | clk_counter <= 0; 59 | edge_counter <= 0; 60 | state <= STATE_COUNT; 61 | ten_count <= 0; 62 | unit_count <= 0; 63 | update_digits <= 0; 64 | 65 | end else begin 66 | case(state) 67 | STATE_COUNT: begin 68 | update_digits <= 0; 69 | clk_counter <= clk_counter + 1'b1; 70 | 71 | if(leading_edge_detect) 72 | edge_counter <= edge_counter + 1'b1; 73 | 74 | if(clk_counter >= update_period) begin 75 | clk_counter <= 0; 76 | ten_count <= 0; 77 | unit_count <= 0; 78 | state <= STATE_TENS; 79 | end 80 | end 81 | 82 | STATE_TENS: begin 83 | if(edge_counter < 7'd10) 84 | state <= STATE_UNITS; 85 | else begin 86 | edge_counter <= edge_counter - 7'd10; 87 | ten_count <= ten_count + 1; 88 | end 89 | end 90 | 91 | STATE_UNITS: begin 92 | unit_count <= edge_counter; 93 | update_digits <= 1'b1; 94 | edge_counter <= 0; 95 | state <= STATE_COUNT; 96 | end 97 | 98 | default: 99 | state <= STATE_COUNT; 100 | 101 | endcase 102 | end 103 | end 104 | 105 | seven_segment seven_segment0 (.clk(clk), .reset(reset), .load(update_digits), .ten_count(ten_count), .unit_count(unit_count), .segments(segments), .digit(digit)); 106 | 107 | endmodule 108 | -------------------------------------------------------------------------------- /src/seven_segment.v: -------------------------------------------------------------------------------- 1 | `default_nettype none 2 | `timescale 1ns/1ps 3 | module seven_segment ( 4 | input wire clk, 5 | input wire reset, 6 | input wire load, 7 | input wire [3:0] ten_count, 8 | input wire [3:0] unit_count, 9 | output reg [6:0] segments, 10 | output reg digit 11 | ); 12 | 13 | reg [3:0] ten_count_reg; 14 | reg [3:0] unit_count_reg; 15 | wire [3:0] decode; 16 | 17 | always @(posedge clk) begin 18 | 19 | if(reset) begin 20 | 21 | digit <= 0; 22 | ten_count_reg <= 0; 23 | unit_count_reg <= 0; 24 | 25 | end else begin 26 | 27 | if(load) begin 28 | ten_count_reg <= ten_count; 29 | unit_count_reg <= unit_count; 30 | end 31 | 32 | digit <= ! digit; 33 | end 34 | end 35 | 36 | assign decode = digit ? ten_count_reg : unit_count_reg; 37 | 38 | always @(*) begin 39 | case(decode) 40 | // 7654321 41 | 0: segments = 7'b0111111; 42 | 1: segments = 7'b0000110; 43 | 2: segments = 7'b1011011; 44 | 3: segments = 7'b1001111; 45 | 4: segments = 7'b1100110; 46 | 5: segments = 7'b1101101; 47 | 6: segments = 7'b1111100; 48 | 7: segments = 7'b0000111; 49 | 8: segments = 7'b1111111; 50 | 9: segments = 7'b1100111; 51 | default: 52 | segments = 7'b0000000; 53 | endcase 54 | end 55 | 56 | endmodule 57 | 58 | -------------------------------------------------------------------------------- /states.txt: -------------------------------------------------------------------------------- 1 | 0 count 2 | 1 tens 3 | 2 units 4 | -------------------------------------------------------------------------------- /test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mattvenn/frequency_counter/5fb023c89ae422d44bbb15e3d02d7d0e84810463/test/__init__.py -------------------------------------------------------------------------------- /test/dump_edge_detect.v: -------------------------------------------------------------------------------- 1 | module dump(); 2 | initial begin 3 | $dumpfile ("edge_detect.vcd"); 4 | $dumpvars (0, edge_detect); 5 | #1; 6 | end 7 | endmodule 8 | -------------------------------------------------------------------------------- /test/dump_frequency_counter.v: -------------------------------------------------------------------------------- 1 | module dump(); 2 | initial begin 3 | $dumpfile ("frequency_counter.vcd"); 4 | $dumpvars (0, frequency_counter); 5 | #1; 6 | end 7 | endmodule 8 | -------------------------------------------------------------------------------- /test/dump_seven_segment.v: -------------------------------------------------------------------------------- 1 | module dump(); 2 | initial begin 3 | $dumpfile ("seven_segment.vcd"); 4 | $dumpvars (0, seven_segment); 5 | #1; 6 | end 7 | endmodule 8 | -------------------------------------------------------------------------------- /test/test_edge_detect.py: -------------------------------------------------------------------------------- 1 | import cocotb 2 | from cocotb.clock import Clock 3 | from cocotb.triggers import RisingEdge, FallingEdge, ClockCycles, with_timeout 4 | 5 | @cocotb.test() 6 | async def test_edge_detect(dut): 7 | 8 | clock = Clock(dut.clk, 10, units="us") 9 | cocotb.start_soon(clock.start()) 10 | 11 | # unsynchronised input signal 12 | for input_signal_period in [50, 100, 333, 600]: 13 | input_signal = cocotb.start_soon(Clock(dut.signal, input_signal_period, units="us").start()) 14 | 15 | # wait for unknown flip flop state to propagate and finish 16 | await ClockCycles(dut.clk, 10) 17 | 18 | for i in range(10): 19 | # wait for rising edge of input signal 20 | await RisingEdge(dut.signal) 21 | 22 | # edge detect must go high in at most 2 clock cycles 23 | for cycles in range(3): 24 | if dut.leading_edge_detect == 1: 25 | break 26 | await RisingEdge(dut.clk) 27 | assert dut.leading_edge_detect == 1 28 | 29 | # wait for another full clock cycle 30 | await RisingEdge(dut.clk) 31 | await FallingEdge(dut.clk) 32 | 33 | # assert edge detect is low 34 | assert dut.leading_edge_detect == 0 35 | 36 | input_signal.kill() 37 | -------------------------------------------------------------------------------- /test/test_frequency_counter.py: -------------------------------------------------------------------------------- 1 | import cocotb 2 | from cocotb.clock import Clock 3 | from cocotb.triggers import RisingEdge, FallingEdge, ClockCycles 4 | from test_seven_segment import read_segments 5 | import random 6 | 7 | async def reset(dut): 8 | dut.reset.value = 1 9 | dut.period_load.value = 0 10 | await ClockCycles(dut.clk, 5) 11 | dut.reset.value = 0; 12 | await ClockCycles(dut.clk, 5) 13 | 14 | async def update_period(dut, period): 15 | dut.period_load.value = 1 16 | dut.period.value = period 17 | await ClockCycles(dut.clk, 1) 18 | dut.period_load.value = 0 19 | await ClockCycles(dut.clk, 1) 20 | 21 | @cocotb.test() 22 | async def test_load(dut): 23 | clock = Clock(dut.clk, 10, units="us") 24 | cocotb.start_soon(clock.start()) 25 | await reset(dut) 26 | for period in range(0, 2000, 100): 27 | await update_period(dut, period) 28 | assert dut.update_period == period 29 | 30 | @cocotb.test() 31 | async def test_all(dut): 32 | clock_mhz = 12 33 | clk_period_ns = round(1/clock_mhz * 1000, 2) 34 | dut._log.info("input clock = %d MHz, period = %.2f ns" % (clock_mhz, clk_period_ns)) 35 | 36 | clock = Clock(dut.clk, clk_period_ns, units="ns") 37 | clock_sig = cocotb.start_soon(clock.start()) 38 | await reset(dut) 39 | 40 | # adjust the update period to match clock freq 41 | period = clock_mhz * 100 - 1 42 | await update_period(dut, period) 43 | 44 | for input_freq in [10, 69, 90]: 45 | # create an input signal 46 | period_us = round((1/input_freq) * 100, 3) 47 | dut._log.info("input freq = %d kHz, period = %.2f us" % (input_freq, period_us)) 48 | input_signal = cocotb.start_soon(Clock(dut.signal, period_us, units="us").start()) 49 | 50 | # give it 4 update periods to allow counters to adjust 51 | await ClockCycles(dut.clk, period * 4) 52 | assert await read_segments(dut) == input_freq 53 | 54 | # kill signal 55 | input_signal.kill() 56 | 57 | clock_sig.kill() 58 | -------------------------------------------------------------------------------- /test/test_seven_segment.py: -------------------------------------------------------------------------------- 1 | import cocotb 2 | from cocotb.clock import Clock 3 | from cocotb.triggers import RisingEdge, FallingEdge, ClockCycles, with_timeout, Timer, ReadWrite 4 | import random 5 | 6 | async def reset(dut): 7 | dut.reset.value = 1 8 | await ClockCycles(dut.clk, 5) 9 | dut.reset.value = 0; 10 | dut.load.value = 0; 11 | await ClockCycles(dut.clk, 5) 12 | 13 | segments = { 14 | 63 : 0, 15 | 6 : 1, 16 | 91 : 2, 17 | 79 : 3, 18 | 102 : 4, 19 | 109 : 5, 20 | 124 : 6, 21 | 7 : 7, 22 | 127 : 8, 23 | 103 : 9, 24 | } 25 | 26 | async def read_segments(dut): 27 | await with_timeout(RisingEdge(dut.digit), 100, 'us') 28 | await ReadWrite() # wait for combinatorial output to settle: https://github.com/cocotb/cocotb/wiki/Timing-Model#readwrite 29 | tens = segments[int(dut.segments)] 30 | await with_timeout(FallingEdge(dut.digit), 100, 'us') 31 | await ReadWrite() # wait for combinatorial output to settle 32 | units = segments[int(dut.segments)] 33 | number = tens * 10 + units 34 | dut._log.debug("segments show %02d" % number) 35 | return number 36 | 37 | @cocotb.test() 38 | async def test_seven_segment(dut): 39 | 40 | clock = Clock(dut.clk, 10, units="us") 41 | cocotb.start_soon(clock.start()) 42 | 43 | await reset(dut) 44 | 45 | for tens in range(10): 46 | for units in range(10): 47 | dut.ten_count.value = tens 48 | dut.unit_count.value= units 49 | dut.load.value = 1 50 | await ClockCycles(dut.clk, 1) 51 | dut.load.value = 0 52 | await ClockCycles(dut.clk, 2) # have to wait a couple of cycles for flops 53 | assert await read_segments(dut) == tens * 10 + units 54 | -------------------------------------------------------------------------------- /verible.rules: -------------------------------------------------------------------------------- 1 | -explicit-parameter-storage-type 2 | -line-length 3 | -parameter-name-style 4 | -always-comb 5 | -unpacked-dimensions-range-ordering 6 | -no-tabs 7 | --------------------------------------------------------------------------------