From 1efa177afcb7c9fb2dfd9448540bbc7aa917c696 Mon Sep 17 00:00:00 2001 From: TinyTapeoutBot <139130078+TinyTapeoutBot@users.noreply.github.com> Date: Sat, 1 Jun 2024 21:53:55 +0300 Subject: [PATCH] feat: update project tt_um_jleightcap from jleightcap/tt07 Commit: 4ca64608e28143b638283243d8fd8d42203dda68 Workflow: https://github.com/jleightcap/tt07/actions/runs/9332458377 --- projects/tt_um_jleightcap/LICENSE | 201 + projects/tt_um_jleightcap/commit_id.json | 9 + projects/tt_um_jleightcap/docs/info.md | 27 + projects/tt_um_jleightcap/info.yaml | 49 + projects/tt_um_jleightcap/stats/metrics.csv | 2 + .../stats/synthesis-stats.txt | 62 + .../tt_um_jleightcap/tt_um_jleightcap.gds | Bin 0 -> 1377430 bytes .../tt_um_jleightcap/tt_um_jleightcap.lef | 522 + .../tt_um_jleightcap/tt_um_jleightcap.spef | 12807 ++++++++++++++++ projects/tt_um_jleightcap/tt_um_jleightcap.v | 8686 +++++++++++ 10 files changed, 22365 insertions(+) create mode 100644 projects/tt_um_jleightcap/LICENSE create mode 100644 projects/tt_um_jleightcap/commit_id.json create mode 100644 projects/tt_um_jleightcap/docs/info.md create mode 100644 projects/tt_um_jleightcap/info.yaml create mode 100644 projects/tt_um_jleightcap/stats/metrics.csv create mode 100644 projects/tt_um_jleightcap/stats/synthesis-stats.txt create mode 100644 projects/tt_um_jleightcap/tt_um_jleightcap.gds create mode 100644 projects/tt_um_jleightcap/tt_um_jleightcap.lef create mode 100644 projects/tt_um_jleightcap/tt_um_jleightcap.spef create mode 100644 projects/tt_um_jleightcap/tt_um_jleightcap.v diff --git a/projects/tt_um_jleightcap/LICENSE b/projects/tt_um_jleightcap/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/projects/tt_um_jleightcap/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_jleightcap/commit_id.json b/projects/tt_um_jleightcap/commit_id.json new file mode 100644 index 0000000..d1763cd --- /dev/null +++ b/projects/tt_um_jleightcap/commit_id.json @@ -0,0 +1,9 @@ +{ + "app": "Tiny Tapeout tt07 11b2d371", + "repo": "https://github.com/jleightcap/tt07", + "commit": "4ca64608e28143b638283243d8fd8d42203dda68", + "workflow_url": "https://github.com/jleightcap/tt07/actions/runs/9332458377", + "sort_id": 1717268031187, + "openlane_version": "OpenLane 337ffbf4749b8bc6e8d8742ed9a595934142198b", + "pdk_version": "open_pdks cd1748bb197f9b7af62a54507de6624e30363943" +} \ No newline at end of file diff --git a/projects/tt_um_jleightcap/docs/info.md b/projects/tt_um_jleightcap/docs/info.md new file mode 100644 index 0000000..7a8bb0f --- /dev/null +++ b/projects/tt_um_jleightcap/docs/info.md @@ -0,0 +1,27 @@ + + +## How it works + +An ASIC Fractran interpreter. + +TODO: explain prime stream representation, factorization as stream addition, etc. + +## How to test + +Automated test suite is ran via GitHub actions per the tinytapeout HDL template. + +TODO: explain test architecture + +## External hardware + +TODO: + +- 32KiB RAM +- 32KiB ROM diff --git a/projects/tt_um_jleightcap/info.yaml b/projects/tt_um_jleightcap/info.yaml new file mode 100644 index 0000000..acb91ac --- /dev/null +++ b/projects/tt_um_jleightcap/info.yaml @@ -0,0 +1,49 @@ +# Tiny Tapeout project information +project: + title: "fractran-tt" + author: "Jack Leightcap" + description: "Hardware implementation of John Conway's estoeric turing-complete lanugage Fractran" + language: "Clash" + clock_hz: 1 # TODO: how to determine max clock rate? or just leave as reasonable minimum? + + # How many tiles your design occupies? A single tile is about 167x108 uM. + tiles: "1x1" # Valid values: 1x1, 1x2, 2x2, 3x2, 4x2, 6x2 or 8x2 + + top_module: "tt_um_jleightcap" + + source_files: + - "project.v" + - "Fractran.v" + +pinout: + # Inputs + ui[0]: "accumulator stream [0]" + ui[1]: "accumulator stream [1]" + ui[2]: "accumulator stream [2]" + ui[3]: "accumulator stream [3]" + ui[4]: "accumulator stream [4]" + ui[5]: "accumulator stream [5]" + ui[6]: "accumulator stream [6]" + ui[7]: "accumulator stream [7]" + + # Outputs + uo[0]: "factorized stream [0]" + uo[1]: "factorized stream [1]" + uo[2]: "factorized stream [2]" + uo[3]: "factorized stream [3]" + uo[4]: "factorized stream [4]" + uo[5]: "factorized stream [5]" + uo[6]: "factorized stream [6]" + uo[7]: "factorized stream [7]" + + # Bidirectional pins, all configured as inputs + uio[0]: "fraction stream [0]" + uio[1]: "fraction stream [1]" + uio[2]: "fraction stream [2]" + uio[3]: "fraction stream [3]" + uio[4]: "fraction stream [4]" + uio[5]: "fraction stream [5]" + uio[6]: "fraction stream [6]" + uio[7]: "fraction stream [7]" + +yaml_version: 6 diff --git a/projects/tt_um_jleightcap/stats/metrics.csv b/projects/tt_um_jleightcap/stats/metrics.csv new file mode 100644 index 0000000..83b9c5b --- /dev/null +++ b/projects/tt_um_jleightcap/stats/metrics.csv @@ -0,0 +1,2 @@ +design,design_name,config,flow_status,total_runtime,routed_runtime,(Cell/mm^2)/Core_Util,DIEAREA_mm^2,CellPer_mm^2,OpenDP_Util,Final_Util,Peak_Memory_Usage_MB,synth_cell_count,tritonRoute_violations,Short_violations,MetSpc_violations,OffGrid_violations,MinHole_violations,Other_violations,Magic_violations,pin_antenna_violations,net_antenna_violations,lvs_total_errors,cvc_total_errors,klayout_violations,wire_length,vias,wns,pl_wns,optimized_wns,fastroute_wns,spef_wns,tns,pl_tns,optimized_tns,fastroute_tns,spef_tns,HPWL,routing_layer1_pct,routing_layer2_pct,routing_layer3_pct,routing_layer4_pct,routing_layer5_pct,routing_layer6_pct,wires_count,wire_bits,public_wires_count,public_wire_bits,memories_count,memory_bits,processes_count,cells_pre_abc,AND,DFF,NAND,NOR,OR,XOR,XNOR,MUX,inputs,outputs,level,DecapCells,WelltapCells,DiodeCells,FillCells,NonPhysCells,TotalCells,CoreArea_um^2,power_slowest_internal_uW,power_slowest_switching_uW,power_slowest_leakage_uW,power_typical_internal_uW,power_typical_switching_uW,power_typical_leakage_uW,power_fastest_internal_uW,power_fastest_switching_uW,power_fastest_leakage_uW,critical_path_ns,suggested_clock_period,suggested_clock_frequency,CLOCK_PERIOD,FP_ASPECT_RATIO,FP_CORE_UTIL,FP_PDN_HPITCH,FP_PDN_VPITCH,GRT_ADJUSTMENT,GRT_REPAIR_ANTENNAS,MAX_FANOUT_CONSTRAINT,PL_TARGET_DENSITY,RUN_HEURISTIC_DIODE_INSERTION,STD_CELL_LIBRARY,SYNTH_STRATEGY +/work/src,tt_um_jleightcap,wokwi,flow completed,0h1m14s0ms,0h0m55s0ms,35533.8317723696,0.01795472,17766.9158861848,16.62,17.227999999999998,517.82,281,0,0,0,0,0,0,0,0,0,0,-1,-1,6427,2171,0.0,-1,-1,-1,-1,0.0,-1,-1,-1,-1,5157828.0,0.0,15.06,8.41,1.76,1.82,-1,331,503,31,193,0,0,0,341,13,0,9,16,33,54,7,37,35,43,15,1097,225,0,298,319,1939,16493.3184,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,21.0,47.61904761904762,20,1,50,26.520,38.870,0.3,1,10,0.6,0,sky130_fd_sc_hd,AREA 0 diff --git a/projects/tt_um_jleightcap/stats/synthesis-stats.txt b/projects/tt_um_jleightcap/stats/synthesis-stats.txt new file mode 100644 index 0000000..02e820d --- /dev/null +++ b/projects/tt_um_jleightcap/stats/synthesis-stats.txt @@ -0,0 +1,62 @@ + +64. Printing statistics. + +=== tt_um_jleightcap === + + Number of wires: 265 + Number of wire bits: 300 + Number of public wires: 26 + Number of public wire bits: 61 + Number of memories: 0 + Number of memory bits: 0 + Number of processes: 0 + Number of cells: 281 + sky130_fd_sc_hd__a2111o_2 1 + sky130_fd_sc_hd__a211o_2 1 + sky130_fd_sc_hd__a21bo_2 4 + sky130_fd_sc_hd__a21boi_2 2 + sky130_fd_sc_hd__a21o_2 10 + sky130_fd_sc_hd__a21oi_2 13 + sky130_fd_sc_hd__a22o_2 5 + sky130_fd_sc_hd__a22oi_2 1 + sky130_fd_sc_hd__a2bb2o_2 2 + sky130_fd_sc_hd__a311o_2 2 + sky130_fd_sc_hd__a31o_2 5 + sky130_fd_sc_hd__a32o_2 5 + sky130_fd_sc_hd__and2_2 10 + sky130_fd_sc_hd__and2b_2 3 + sky130_fd_sc_hd__and3_2 12 + sky130_fd_sc_hd__and4_2 7 + sky130_fd_sc_hd__and4bb_2 1 + sky130_fd_sc_hd__buf_1 13 + sky130_fd_sc_hd__buf_2 16 + sky130_fd_sc_hd__dfrtp_2 15 + sky130_fd_sc_hd__dfstp_2 2 + sky130_fd_sc_hd__inv_2 27 + sky130_fd_sc_hd__mux2_2 2 + sky130_fd_sc_hd__nand2_2 25 + sky130_fd_sc_hd__nand3_2 1 + sky130_fd_sc_hd__nand3b_2 2 + sky130_fd_sc_hd__nor2_2 15 + sky130_fd_sc_hd__nor3_2 1 + sky130_fd_sc_hd__o211a_2 1 + sky130_fd_sc_hd__o21a_2 10 + sky130_fd_sc_hd__o21ai_2 6 + sky130_fd_sc_hd__o21bai_2 1 + sky130_fd_sc_hd__o221a_2 1 + sky130_fd_sc_hd__o22a_2 3 + sky130_fd_sc_hd__o2bb2a_2 7 + sky130_fd_sc_hd__o31a_2 4 + sky130_fd_sc_hd__o31ai_2 1 + sky130_fd_sc_hd__o32a_2 1 + sky130_fd_sc_hd__or2_2 8 + sky130_fd_sc_hd__or2b_2 4 + sky130_fd_sc_hd__or3_2 1 + sky130_fd_sc_hd__or3b_2 1 + sky130_fd_sc_hd__or4_2 4 + sky130_fd_sc_hd__or4bb_2 1 + sky130_fd_sc_hd__xnor2_2 15 + sky130_fd_sc_hd__xor2_2 9 + + Chip area for module '\tt_um_jleightcap': 2645.036800 + diff --git a/projects/tt_um_jleightcap/tt_um_jleightcap.gds b/projects/tt_um_jleightcap/tt_um_jleightcap.gds new file mode 100644 index 0000000000000000000000000000000000000000..b276a825e6f8d078e946a907493389fdb50a4490 GIT binary patch literal 1377430 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