From f44b7107f171e3f932360317458b79a1e6027653 Mon Sep 17 00:00:00 2001 From: TinyTapeoutBot <139130078+TinyTapeoutBot@users.noreply.github.com> Date: Mon, 30 Sep 2024 14:41:42 +0300 Subject: [PATCH] feat: update project tt_um_mattvenn_double_inverter from mattvenn/tt09-analog-double-inverter Commit: 1d0833dd1355f46c3dc192f3e39e7e7694615d10 Workflow: https://github.com/mattvenn/tt09-analog-double-inverter/actions/runs/11105297810 --- .../tt_um_mattvenn_double_inverter/LICENSE | 201 +++++++ .../commit_id.json | 8 + .../docs/info.md | 22 + .../tt_um_mattvenn_double_inverter/info.yaml | 65 +++ .../tt_um_mattvenn_double_inverter.gds | Bin 0 -> 95464 bytes .../tt_um_mattvenn_double_inverter.lef | 526 ++++++++++++++++++ .../tt_um_mattvenn_double_inverter.v | 57 ++ 7 files changed, 879 insertions(+) create mode 100644 projects/tt_um_mattvenn_double_inverter/LICENSE create mode 100644 projects/tt_um_mattvenn_double_inverter/commit_id.json create mode 100644 projects/tt_um_mattvenn_double_inverter/docs/info.md create mode 100644 projects/tt_um_mattvenn_double_inverter/info.yaml create mode 100644 projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.gds create mode 100644 projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.lef create mode 100644 projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.v diff --git a/projects/tt_um_mattvenn_double_inverter/LICENSE b/projects/tt_um_mattvenn_double_inverter/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/projects/tt_um_mattvenn_double_inverter/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/projects/tt_um_mattvenn_double_inverter/commit_id.json b/projects/tt_um_mattvenn_double_inverter/commit_id.json new file mode 100644 index 0000000..4d37a54 --- /dev/null +++ b/projects/tt_um_mattvenn_double_inverter/commit_id.json @@ -0,0 +1,8 @@ +{ + "app": "custom_gds action", + "repo": "https://github.com/mattvenn/tt09-analog-double-inverter", + "commit": "1d0833dd1355f46c3dc192f3e39e7e7694615d10", + "workflow_url": "https://github.com/mattvenn/tt09-analog-double-inverter/actions/runs/11105297810", + "sort_id": 1727687830514, + "analog": true +} \ No newline at end of file diff --git a/projects/tt_um_mattvenn_double_inverter/docs/info.md b/projects/tt_um_mattvenn_double_inverter/docs/info.md new file mode 100644 index 0000000..309fd96 --- /dev/null +++ b/projects/tt_um_mattvenn_double_inverter/docs/info.md @@ -0,0 +1,22 @@ + + +## How it works + +A pair of inverters, a large one after a small one. + +## How to test + +Put a signal into the input pin, and observe the output. It should match polarity. + +The rise time of the output was simulated at less than 4ns. + +## External hardware + +Signal generator, oscilloscope. diff --git a/projects/tt_um_mattvenn_double_inverter/info.yaml b/projects/tt_um_mattvenn_double_inverter/info.yaml new file mode 100644 index 0000000..569c792 --- /dev/null +++ b/projects/tt_um_mattvenn_double_inverter/info.yaml @@ -0,0 +1,65 @@ +# Tiny Tapeout project information +project: + title: "Analog double inverter" # Project title + author: "Matt Venn" # Your name + discord: "mattvenn" # Your discord username, for communication and automatically assigning you a Tapeout role (optional) + description: "A pair of inverters wired between 2 analog pins" # One line description of what your project does + language: "Analog" # other examples include Verilog, Amaranth, VHDL, etc + clock_hz: 0 # Clock frequency in Hz (or 0 if not applicable) + + # How many tiles your design occupies? A single tile is about 167x108 uM. + tiles: "1x2" # Valid values for analog projects: 1x2, 2x2 + + # How many analog pins does your project use? + analog_pins: 2 # Valid values: 0 to 6 + uses_3v3: false # Set to true if your project uses 3.3V (VAPWR) in addition to 1.8V (VDPWR) + + # Your top module name must start with "tt_um_". Make it unique by including your github username: + top_module: "tt_um_mattvenn_double_inverter" + + # List your project's source files here. Source files must be in ./src and you must list each source file separately, one per line: + source_files: + - "project.v" + +# The pinout of your project. Leave unused pins blank. DO NOT delete or add any pins. +pinout: + # Inputs + ui[0]: "" + ui[1]: "" + ui[2]: "" + ui[3]: "" + ui[4]: "" + ui[5]: "" + ui[6]: "" + ui[7]: "" + + # Outputs + uo[0]: "" + uo[1]: "" + uo[2]: "" + uo[3]: "" + uo[4]: "" + uo[5]: "" + uo[6]: "" + uo[7]: "" + + # Bidirectional pins + uio[0]: "" + uio[1]: "" + uio[2]: "" + uio[3]: "" + uio[4]: "" + uio[5]: "" + uio[6]: "" + uio[7]: "" + + # Analog pins - make sure to also set "analog_pins" above, else the pins won't be connected + ua[0]: "output" + ua[1]: "input" + ua[2]: "" + ua[3]: "" + ua[4]: "" + ua[5]: "" + +# Do not change! +yaml_version: 6 diff --git a/projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.gds b/projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.gds new file mode 100644 index 0000000000000000000000000000000000000000..27effc4db94e6a0f54d5ee948201577935e7faa7 GIT binary patch literal 95464 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 literal 0 HcmV?d00001 diff --git a/projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.lef b/projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.lef new file mode 100644 index 0000000..30e439e --- /dev/null +++ b/projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.lef @@ -0,0 +1,526 @@ +MACRO tt_um_mattvenn_double_inverter + CLASS BLOCK ; + FOREIGN tt_um_mattvenn_double_inverter ; + ORIGIN 0.000 0.000 ; + SIZE 161.000 BY 225.760 ; + PIN clk + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 143.830 224.760 144.130 225.760 ; + END + END clk + PIN ena + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 146.590 224.760 146.890 225.760 ; + END + END ena + PIN rst_n + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 141.070 224.760 141.370 225.760 ; + END + END rst_n + PIN ua[0] + DIRECTION INOUT ; + USE SIGNAL ; + ANTENNADIFFAREA 6.890000 ; + PORT + LAYER met4 ; + RECT 151.810 0.000 152.710 1.000 ; + END + END ua[0] + PIN ua[1] + DIRECTION INOUT ; + USE SIGNAL ; + ANTENNAGATEAREA 0.300000 ; + PORT + LAYER met4 ; + RECT 132.490 0.000 133.390 1.000 ; + END + END ua[1] + PIN ua[2] + DIRECTION INOUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 113.170 0.000 114.070 1.000 ; + END + END ua[2] + PIN ua[3] + DIRECTION INOUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 93.850 0.000 94.750 1.000 ; + END + END ua[3] + PIN ua[4] + DIRECTION INOUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 74.530 0.000 75.430 1.000 ; + END + END ua[4] + PIN ua[5] + DIRECTION INOUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 55.210 0.000 56.110 1.000 ; + END + END ua[5] + PIN ua[6] + DIRECTION INOUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 35.890 0.000 36.790 1.000 ; + END + END ua[6] + PIN ua[7] + DIRECTION INOUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 16.570 0.000 17.470 1.000 ; + END + END ua[7] + PIN ui_in[0] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 138.310 224.760 138.610 225.760 ; + END + END ui_in[0] + PIN ui_in[1] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 135.550 224.760 135.850 225.760 ; + END + END ui_in[1] + PIN ui_in[2] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 132.790 224.760 133.090 225.760 ; + END + END ui_in[2] + PIN ui_in[3] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 130.030 224.760 130.330 225.760 ; + END + END ui_in[3] + PIN ui_in[4] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 127.270 224.760 127.570 225.760 ; + END + END ui_in[4] + PIN ui_in[5] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 124.510 224.760 124.810 225.760 ; + END + END ui_in[5] + PIN ui_in[6] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 121.750 224.760 122.050 225.760 ; + END + END ui_in[6] + PIN ui_in[7] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 118.990 224.760 119.290 225.760 ; + END + END ui_in[7] + PIN uio_in[0] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 116.230 224.760 116.530 225.760 ; + END + END uio_in[0] + PIN uio_in[1] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 113.470 224.760 113.770 225.760 ; + END + END uio_in[1] + PIN uio_in[2] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 110.710 224.760 111.010 225.760 ; + END + END uio_in[2] + PIN uio_in[3] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 107.950 224.760 108.250 225.760 ; + END + END uio_in[3] + PIN uio_in[4] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 105.190 224.760 105.490 225.760 ; + END + END uio_in[4] + PIN uio_in[5] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 102.430 224.760 102.730 225.760 ; + END + END uio_in[5] + PIN uio_in[6] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 99.670 224.760 99.970 225.760 ; + END + END uio_in[6] + PIN uio_in[7] + DIRECTION INPUT ; + USE SIGNAL ; + PORT + LAYER met4 ; + RECT 96.910 224.760 97.210 225.760 ; + END + END uio_in[7] + PIN uio_oe[0] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 49.990 224.760 50.290 225.760 ; + END + END uio_oe[0] + PIN uio_oe[1] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 47.230 224.760 47.530 225.760 ; + END + END uio_oe[1] + PIN uio_oe[2] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 44.470 224.760 44.770 225.760 ; + END + END uio_oe[2] + PIN uio_oe[3] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 41.710 224.760 42.010 225.760 ; + END + END uio_oe[3] + PIN uio_oe[4] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 38.950 224.760 39.250 225.760 ; + END + END uio_oe[4] + PIN uio_oe[5] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 36.190 224.760 36.490 225.760 ; + END + END uio_oe[5] + PIN uio_oe[6] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 33.430 224.760 33.730 225.760 ; + END + END uio_oe[6] + PIN uio_oe[7] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 30.670 224.760 30.970 225.760 ; + END + END uio_oe[7] + PIN uio_out[0] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 72.070 224.760 72.370 225.760 ; + END + END uio_out[0] + PIN uio_out[1] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 69.310 224.760 69.610 225.760 ; + END + END uio_out[1] + PIN uio_out[2] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 66.550 224.760 66.850 225.760 ; + END + END uio_out[2] + PIN uio_out[3] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 63.790 224.760 64.090 225.760 ; + END + END uio_out[3] + PIN uio_out[4] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 61.030 224.760 61.330 225.760 ; + END + END uio_out[4] + PIN uio_out[5] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 58.270 224.760 58.570 225.760 ; + END + END uio_out[5] + PIN uio_out[6] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 55.510 224.760 55.810 225.760 ; + END + END uio_out[6] + PIN uio_out[7] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 52.750 224.760 53.050 225.760 ; + END + END uio_out[7] + PIN uo_out[0] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 94.150 224.760 94.450 225.760 ; + END + END uo_out[0] + PIN uo_out[1] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 91.390 224.760 91.690 225.760 ; + END + END uo_out[1] + PIN uo_out[2] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 88.630 224.760 88.930 225.760 ; + END + END uo_out[2] + PIN uo_out[3] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 85.870 224.760 86.170 225.760 ; + END + END uo_out[3] + PIN uo_out[4] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 83.110 224.760 83.410 225.760 ; + END + END uo_out[4] + PIN uo_out[5] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 80.350 224.760 80.650 225.760 ; + END + END uo_out[5] + PIN uo_out[6] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 77.590 224.760 77.890 225.760 ; + END + END uo_out[6] + PIN uo_out[7] + DIRECTION OUTPUT ; + USE SIGNAL ; + ANTENNADIFFAREA 9.421000 ; + PORT + LAYER met4 ; + RECT 74.830 224.760 75.130 225.760 ; + END + END uo_out[7] + PIN VDPWR + DIRECTION INOUT ; + USE POWER ; + PORT + LAYER met4 ; + RECT 1.000 5.000 3.000 220.760 ; + END + END VDPWR + PIN VGND + DIRECTION INOUT ; + USE GROUND ; + PORT + LAYER met4 ; + RECT 4.000 5.000 6.000 220.760 ; + END + END VGND + OBS + LAYER nwell ; + RECT 134.820 10.170 149.590 17.860 ; + LAYER li1 ; + RECT 135.000 10.320 149.410 17.720 ; + LAYER met1 ; + RECT 122.330 7.910 152.740 19.970 ; + LAYER met2 ; + RECT 120.490 7.920 152.730 19.460 ; + LAYER met3 ; + RECT 1.000 4.460 152.735 19.465 ; + LAYER met4 ; + RECT 6.000 224.360 30.270 224.760 ; + RECT 31.370 224.360 33.030 224.760 ; + RECT 34.130 224.360 35.790 224.760 ; + RECT 36.890 224.360 38.550 224.760 ; + RECT 39.650 224.360 41.310 224.760 ; + RECT 42.410 224.360 44.070 224.760 ; + RECT 45.170 224.360 46.830 224.760 ; + RECT 47.930 224.360 49.590 224.760 ; + RECT 50.690 224.360 52.350 224.760 ; + RECT 53.450 224.360 55.110 224.760 ; + RECT 56.210 224.360 57.870 224.760 ; + RECT 58.970 224.360 60.630 224.760 ; + RECT 61.730 224.360 63.390 224.760 ; + RECT 64.490 224.360 66.150 224.760 ; + RECT 67.250 224.360 68.910 224.760 ; + RECT 70.010 224.360 71.670 224.760 ; + RECT 72.770 224.360 74.430 224.760 ; + RECT 75.530 224.360 77.190 224.760 ; + RECT 78.290 224.360 79.950 224.760 ; + RECT 81.050 224.360 82.710 224.760 ; + RECT 83.810 224.360 85.470 224.760 ; + RECT 86.570 224.360 88.230 224.760 ; + RECT 89.330 224.360 90.990 224.760 ; + RECT 92.090 224.360 93.750 224.760 ; + RECT 94.850 224.360 96.510 224.760 ; + RECT 97.610 224.360 99.270 224.760 ; + RECT 100.370 224.360 102.030 224.760 ; + RECT 103.130 224.360 104.790 224.760 ; + RECT 105.890 224.360 107.550 224.760 ; + RECT 108.650 224.360 110.310 224.760 ; + RECT 111.410 224.360 113.070 224.760 ; + RECT 114.170 224.360 115.830 224.760 ; + RECT 116.930 224.360 118.590 224.760 ; + RECT 119.690 224.360 121.350 224.760 ; + RECT 122.450 224.360 124.110 224.760 ; + RECT 125.210 224.360 126.870 224.760 ; + RECT 127.970 224.360 129.630 224.760 ; + RECT 130.730 224.360 132.390 224.760 ; + RECT 133.490 224.360 135.150 224.760 ; + RECT 136.250 224.360 137.910 224.760 ; + RECT 139.010 224.360 140.670 224.760 ; + RECT 141.770 224.360 143.430 224.760 ; + RECT 144.530 224.360 146.190 224.760 ; + RECT 147.290 224.360 152.710 224.760 ; + RECT 6.000 221.160 152.710 224.360 ; + RECT 6.400 4.600 152.710 221.160 ; + RECT 6.000 1.400 152.710 4.600 ; + RECT 6.000 1.000 16.170 1.400 ; + RECT 17.870 1.000 35.490 1.400 ; + RECT 37.190 1.000 54.810 1.400 ; + RECT 56.510 1.000 74.130 1.400 ; + RECT 75.830 1.000 93.450 1.400 ; + RECT 95.150 1.000 112.770 1.400 ; + RECT 114.470 1.000 132.090 1.400 ; + RECT 133.790 1.000 151.410 1.400 ; + END +END tt_um_mattvenn_double_inverter +END LIBRARY + diff --git a/projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.v b/projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.v new file mode 100644 index 0000000..0ba9a7e --- /dev/null +++ b/projects/tt_um_mattvenn_double_inverter/tt_um_mattvenn_double_inverter.v @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2024 Your Name + * SPDX-License-Identifier: Apache-2.0 + */ + +`default_nettype none + +module tt_um_mattvenn_double_inverter ( + input wire VGND, + input wire VDPWR, // 1.8v power supply +// input wire VAPWR, // 3.3v power supply + input wire [7:0] ui_in, // Dedicated inputs + output wire [7:0] uo_out, // Dedicated outputs + input wire [7:0] uio_in, // IOs: Input path + output wire [7:0] uio_out, // IOs: Output path + output wire [7:0] uio_oe, // IOs: Enable path (active high: 0=input, 1=output) + inout wire [7:0] ua, // Analog pins, only ua[5:0] can be used + input wire ena, // always 1 when the design is powered, so you can ignore it + input wire clk, // clock + input wire rst_n // reset_n - low to reset +); + + double_inverter double_inverter( + .VDD(VDPWR), + .VSS(VGND), + .INPUT(ua[1]), + .OUTPUT(ua[0]) + ); + + assign uo_out[0] = VGND; + assign uo_out[1] = VGND; + assign uo_out[2] = VGND; + assign uo_out[3] = VGND; + assign uo_out[4] = VGND; + assign uo_out[5] = VGND; + assign uo_out[6] = VGND; + assign uo_out[7] = VGND; + + assign uio_out[0] = VGND; + assign uio_out[1] = VGND; + assign uio_out[2] = VGND; + assign uio_out[3] = VGND; + assign uio_out[4] = VGND; + assign uio_out[5] = VGND; + assign uio_out[6] = VGND; + assign uio_out[7] = VGND; + + assign uio_oe[0] = VGND; + assign uio_oe[1] = VGND; + assign uio_oe[2] = VGND; + assign uio_oe[3] = VGND; + assign uio_oe[4] = VGND; + assign uio_oe[5] = VGND; + assign uio_oe[6] = VGND; + assign uio_oe[7] = VGND; + +endmodule