diff --git a/configure.py b/configure.py index 8d13999..ede30a5 100755 --- a/configure.py +++ b/configure.py @@ -353,4 +353,5 @@ def count_items(lst: List[str]): docs.dump_markdown() if args.build_hugo_content: + shuttle.configure_mux() docs.build_hugo_content() diff --git a/docs/hugo_index_template.md b/docs/hugo_index_template.md index c08317f..558c336 100644 --- a/docs/hugo_index_template.md +++ b/docs/hugo_index_template.md @@ -1,84 +1,22 @@ --- -title: "Tiny Tapeout 03" -weight: 20 -description: 249 designs, closed 24th April 2023 +title: "Tiny Tapeout 05" +weight: 50 +description: 174 designs, closed 4th November 2023 --- {{% toc %}} # Design details -* [Github repository](https://github.com/TinyTapeout/tinytapeout-03) -* [PDF datasheet](https://github.com/TinyTapeout/tinytapeout-03/raw/main/datasheet.pdf) -* [Verification](https://github.com/TinyTapeout/tinytapeout-03/blob/main/VERIFICATION.md) -* [Efabless MPW submission](https://platform.efabless.com/projects/1971) +* [Github repository](https://github.com/TinyTapeout/tinytapeout-05) +* [PDF datasheet](https://tinytapeout.github.io/tinytapeout-05/datasheet.pdf) +* [Efabless MPW submission](https://repositories.efabless.com/urish/tinytapeout-05) +* [Shuttle index (JSON)](https://tinytapeout.github.io/tinytapeout-05/shuttle_index.json) # Launch stats -* Launched: 1 March 2023 -* Submission closed: 24 April 2023 -* Submitted to Efabless 2304C chipIgnite shuttle using Skywater 130nm open source PDK - -# Project statistics - -* 100 projects submitted, 149 projects added from [TT02](/runs/tt02) -* build time for all projects 22.68 hours -* total cells 79674 -* max cells 1287 for [project 072](./072) -* max utilisation 59.95% for [project 044](./044) -* total wire length 4079 mm -* 94 used Wokwi, 135 Verilog, 1 myhdl, 7 Amaranth, spade 1, xls 2, migen 1, systemverilog 3, mixed radix circuit synthesis (mrcs) 1, chisel 1. -* top 10 tags: - - test : 21 - - experiment: 6 - - cpu : 6 - - timer : 5 - - risc : 5 - - game : 4 - - pwm : 4 - - music : 4 - - counter : 4 - -# Whole die render - -![whole die](images/tinytapeout-03.png) - -# Project Showcase - -* [12 bit PDP8](./019) -* [Prime detector](./031) -* [Pulse density modulators](./033) -* [Most of the Sky130 cells](./045) -* [Synthesizable Digital Temperature Sensor](./047) -* [Neptune guitar tuner](./052) -* [MSF clock](./066) -* [Ring oscillator temperature sensor](./058) -* [Locked QTCore-A1](./072) - -# Testimonials / Endorsements - -Awesome! Sent my design to #TinyTapeout ! Emotion! Thanks -@matthewvenn , @marunmagesh and crew, for making it possible! - ---- - -#tinytapeout 3 submission is in! I'm very thankful to be a part of such an amazing project, even if my project is small. - ---- - -Just to take moment, thank you! I didn't think I would ever get to do something like this, especially with so little cost or pressure. -For context, at work, I was testing an ASIC a supplier designed for us, and that was quite the opposite of both of these. - ---- - -Hurray, also made a last minute submission, haven't felt that rush since my last university homework submission deadline... Great that a chip design can be done on a weekend, looking forward to getting all the other designs, and thanks everybody who contributed to the platform, it is really easy to use! - ---- - -I just submitted a last minute project to tt03, wanted to drop by and say kudos for all the resources and the project in general! - -I've never done any hardware before (just software), but after reading the updated Code by Petzold earlier in the year and listening to an interview with Jim Keller I had my interest peeked to look at whats going on in the layers I usually take for granted. Really cool to find something like tiny tapeout, nice motivating to actually install some of the tools and give it a try. - ---- -More on [Twitter](https://twitter.com/search?q=tinytapeout). +* Launched: 11 September 2023 +* Submission closed: 4 November 2023 +* Submitted to Efabless [2311C chipIgnite](https://efabless.com/shuttle-status) shuttle using Skywater 130nm open source PDK +* Chips expected April 2024, PCBs expected June 2024 diff --git a/docs/hugo_template.md b/docs/hugo_template.md index 96ab27a..bb06534 100644 --- a/docs/hugo_template.md +++ b/docs/hugo_template.md @@ -1,15 +1,15 @@ --- hidden: true -title: "{index} {title}" +title: "{mux_address} {title}" weight: {weight} --- -## {index} : {title} +## {mux_address} : {title} * Author: {author} * Description: {description} * [GitHub repository]({git_url}) -* [Most recent GDS build]({git_action}) +* [GDS submitted]({git_action}) * {project_type} project * [Extra docs]({doc_link}) * Clock: {clock_hz} Hz @@ -27,13 +27,13 @@ weight: {weight} ### IO -| # | Input | Output | -|---|--------------|--------------| -| 0 | {inputs[0]} | {outputs[0]} | -| 1 | {inputs[1]} | {outputs[1]} | -| 2 | {inputs[2]} | {outputs[2]} | -| 3 | {inputs[3]} | {outputs[3]} | -| 4 | {inputs[4]} | {outputs[4]} | -| 5 | {inputs[5]} | {outputs[5]} | -| 6 | {inputs[6]} | {outputs[6]} | -| 7 | {inputs[7]} | {outputs[7]} | +| # | Input | Output | Bidirectional | +|---|--------------|--------------| -------------------| +| 0 | {inputs[0]} | {outputs[0]} | {bidirectional[0]} | +| 1 | {inputs[1]} | {outputs[1]} | {bidirectional[1]} | +| 2 | {inputs[2]} | {outputs[2]} | {bidirectional[2]} | +| 3 | {inputs[3]} | {outputs[3]} | {bidirectional[3]} | +| 4 | {inputs[4]} | {outputs[4]} | {bidirectional[4]} | +| 5 | {inputs[5]} | {outputs[5]} | {bidirectional[5]} | +| 6 | {inputs[6]} | {outputs[6]} | {bidirectional[6]} | +| 7 | {inputs[7]} | {outputs[7]} | {bidirectional[7]} | diff --git a/documentation.py b/documentation.py index 60b1c24..4599244 100644 --- a/documentation.py +++ b/documentation.py @@ -155,7 +155,7 @@ def dump_markdown(self): if p.returncode != 0: logging.error("pdf command failed") - def build_hugo_content(self): + def build_hugo_content(self) -> None: hugo_root = self.args.build_hugo_content hugo_images = os.path.join(hugo_root, "images") shutil.rmtree(hugo_root) @@ -171,46 +171,62 @@ def build_hugo_content(self): index_template = fh.read() # copy image - shutil.copyfile( - "pics/tinytapeout_numbered.png", - os.path.join(hugo_images, "tinytapeout-03.png"), - ) # TODO fix hardcoded run + # TODO, need to get image from somewhere + # shutil.copyfile( + # "tt/docs/pics/tinytapeout_numbered.png", + # os.path.join(hugo_images, f'tinytapeout-{self.config["id"]}.png'), + # ) # index page - logging.info( - "building pages - can take a minute as fetching latest GDS action URLs for all projects" - ) + logging.info("building pages") with open(os.path.join(hugo_root, "_index.md"), "w") as fh: fh.write(index_template) fh.write("# All projects\n") fh.write("| Index | Title | Author |\n") fh.write("| ----- | ----- | -------|\n") + self.projects.sort(key=lambda x: x.mux_address) for project in self.projects: logging.info(project) fh.write(project.get_hugo_row()) - project_dir = os.path.join(hugo_root, f"{project.get_index() :03}") + project_dir = os.path.join(hugo_root, f"{project.mux_address :03}") project_image_dir = os.path.join(project_dir, "images") os.makedirs(project_dir) os.makedirs(project_image_dir) yaml_data = project.get_project_doc_yaml() + yaml_data["mux_address"] = project.mux_address + if '""' in yaml_data["title"]: + yaml_data["title"] = yaml_data["title"].replace('""', "") + yaml_data["index"] = project.index yaml_data["weight"] = project.index + 1 - yaml_data["git_action"] = project.get_latest_action_url() + yaml_data["git_action"] = project.get_workflow_url_when_submitted() + for key in "external_hw", "clock_hz": + if key not in yaml_data: + yaml_data[key] = "" + + # many people remove unused pins in input / output / bidirectional + for key in ["inputs", "outputs", "bidirectional"]: + yaml_data[key].extend((8 - len(yaml_data[key])) * ["n/a"]) + yaml_data["picture_link"] = "" if yaml_data["picture"]: - picture_name = yaml_data["picture"] - picture_filename = os.path.join(project.local_dir, picture_name) - picture_basename = os.path.basename(picture_filename) + extension = os.path.splitext(yaml_data["picture"])[1] + picture_path = os.path.join( + project.local_dir, f"picture{extension}" + ) + picture_basename = os.path.basename(picture_path) try: shutil.copyfile( - picture_filename, + picture_path, os.path.join(project_image_dir, picture_basename), ) yaml_data[ "picture_link" ] = f"![picture](images/{picture_basename})" + logging.warning(f"picture found {picture_path}") except FileNotFoundError: + logging.warning(f"picture not found {picture_path}") yaml_data["picture_link"] = "Image path is broken" doc = doc_template.format(**yaml_data) with open(os.path.join(project_dir, "_index.md"), "w") as pfh: diff --git a/project.py b/project.py index 2a37fc1..be88862 100644 --- a/project.py +++ b/project.py @@ -215,8 +215,8 @@ def get_hdl_source(self): def get_yaml(self): return self.yaml - def get_hugo_row(self): - return f'| {self.index} | [{self.yaml["documentation"]["title"]}]({self.index :03}) | {self.yaml["documentation"]["author"]}|\n' + def get_hugo_row(self) -> str: + return f'| {self.mux_address} | [{self.yaml["documentation"]["title"]}]({self.mux_address :03}) | {self.yaml["documentation"]["author"]}|\n' # docs stuff for index on README.md def get_index_row(self): @@ -275,6 +275,12 @@ def get_tt_tools_version(self): repo = Repo(os.path.join(self.local_dir, "tt")) return f"{repo.active_branch.name} {repo.commit().hexsha[:8]}" + def get_workflow_url_when_submitted(self): + json_file = os.path.join(self.local_dir, "commit_id.json") + with open(json_file) as fh: + commit_info = json.load(fh) + return commit_info["workflow_url"] + def get_workflow_url(self): GITHUB_SERVER_URL = os.getenv("GITHUB_SERVER_URL") GITHUB_REPOSITORY = os.getenv("GITHUB_REPOSITORY")