From c5dcc60dbb3f29fa8e7ee46fc099eb3bfcc370c5 Mon Sep 17 00:00:00 2001 From: James Ross Date: Fri, 6 Sep 2024 00:10:53 -0400 Subject: [PATCH] nVious Retro FCX 890 documentation --- README.md | 47 +++++++++++++++----------------------------- docs/info.md | 4 ---- docs/screenshot.png | Bin 0 -> 20776 bytes 3 files changed, 16 insertions(+), 35 deletions(-) create mode 100644 docs/screenshot.png diff --git a/README.md b/README.md index 68ba6ed..64a300e 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,26 @@ ![](../../workflows/gds/badge.svg) ![](../../workflows/docs/badge.svg) ![](../../workflows/test/badge.svg) ![](../../workflows/fpga/badge.svg) -# Tiny Tapeout Verilog Project Template +# Tiny Tapeout nVious Retro FCX 890 Graphics -- [Read the documentation for project](docs/info.md) +![example VGA output](docs/screenshot.png) -## What is Tiny Tapeout? - -Tiny Tapeout is an educational project that aims to make it easier and cheaper than ever to get your digital and analog designs manufactured on a real chip. - -To learn more and get started, visit https://tinytapeout.com. - -## Set up your Verilog project +This is an entry into the Tiny Tapeout Demoscene competition. This project +aims to add retro graphics to dozens of existing projects by intercepting the +binary output typically sent to the 7-segment LED display and redirecting it to +a VGA-compatible monitor. -1. Add your Verilog files to the `src` folder. -2. Edit the [info.yaml](info.yaml) and update information about your project, paying special attention to the `source_files` and `top_module` properties. If you are upgrading an existing Tiny Tapeout project, check out our [online info.yaml migration tool](https://tinytapeout.github.io/tt-yaml-upgrade-tool/). -3. Edit [docs/info.md](docs/info.md) and add a description of your project. -4. Adapt the testbench to your design. See [test/README.md](test/README.md) for more information. +The demo is targeting the following categories: -The GitHub action will automatically build the ASIC files using [OpenLane](https://www.zerotoasiccourse.com/terminology/openlane/). + - **Best single tile design** (~71% utilization) + - **Best graphics** (Retrowave Fuchsia Extreme mode (FCX On)) + - **Most impressive for the size** (single tile features many color gradients, complex shapes, and 3D effect) + - **Most useful design** (adds stylized output compatible with dozens of existing projects) -## Enable GitHub actions to build the results page +[Read the documentation for project](docs/info.md) -- [Enabling GitHub Pages](https://tinytapeout.com/faq/#my-github-action-is-failing-on-the-pages-part) - -## Resources - -- [FAQ](https://tinytapeout.com/faq/) -- [Digital design lessons](https://tinytapeout.com/digital_design/) -- [Learn how semiconductors work](https://tinytapeout.com/siliwiz/) -- [Join the community](https://tinytapeout.com/discord) -- [Build your design locally](https://www.tinytapeout.com/guides/local-hardening/) +## What is Tiny Tapeout? -## What next? +Tiny Tapeout is an educational project that aims to make it easier and cheaper +than ever to get your digital and analog designs manufactured on a real chip. -- [Submit your design to the next shuttle](https://app.tinytapeout.com/). -- Edit [this README](README.md) and explain your design, how it works, and how to test it. -- Share your project on your social network of choice: - - LinkedIn [#tinytapeout](https://www.linkedin.com/search/results/content/?keywords=%23tinytapeout) [@TinyTapeout](https://www.linkedin.com/company/100708654/) - - Mastodon [#tinytapeout](https://chaos.social/tags/tinytapeout) [@matthewvenn](https://chaos.social/@matthewvenn) - - X (formerly Twitter) [#tinytapeout](https://twitter.com/hashtag/tinytapeout) [@tinytapeout](https://twitter.com/tinytapeout) +To learn more and get started, visit https://tinytapeout.com. diff --git a/docs/info.md b/docs/info.md index 64d1928..9df896b 100644 --- a/docs/info.md +++ b/docs/info.md @@ -14,10 +14,6 @@ To test the user input functionality, connect the `ui_io[7:0]` pins. The idea is that this would be a possibly useful graphical extension to the dozens of existing projects that utilize the 7-segment LED display to show results. -### Advanced Configuration - -TBD. (to configure LED colors/background) - ## External hardware Requires the [TinyVGA PMOD](https://github.com/mole99/tiny-vga) diff --git a/docs/screenshot.png b/docs/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..9dcc3277148c37f4bb548e601c1f5fd4c53e4728 GIT binary patch literal 20776 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