Tiny Tapeout Course 3nd lesson - Tiny Tapeout

Paul Campbell - March 2023

paul@taniwha.com @moonbaseotago

Course notes


(C) Copyright Moonbase Otago 2023

All rights reserved

Tiny Tapeout is a group project with bunches of tiny chiplets on the one die


Each is assigned a fixed block - notice the fixed interface on the LHS


Interface

  • The interface is simple, 8 input wires, 8 output wires
  • bit 0 of the input must be clock
  • bit 1 of the input must be reset
module my_design (input [7:0] io_in, output [7:0] io_out);

    wire clk = io_in[0];
    wire reset = io_in[1];

    ....

Before you start

Open a Github account from https://github.com/

Things to Learn

  • Making a Tiny Tapeout Verilog Repo
  • Changing it
  • Taping it out

Fork Tiny Tapeout's Verilog Demo

Set up Github Pages

Set up so you can look at the produced GDS files:

  • Goto to "Settings"
  • Choose pages on the left
  • Under "Source" choose "github actions"

Set up Github Actions

Set up actions so that checkins will cause an automatic build:

  • Goto the "Actions" tab
  • Click the big green button
  • Test it - choose "GDS" and run workflow manually
  • click on "gds" and see the build flow
  • click on the "gds" box in the flow and see the build logs
  • when it's done go back to the workflow and when "pages" goes green click on the link to get to the GDS viewer

Setting up your design

  • install git on your laptop
  • open a shell and clone your repo with something like "git clone https://github.com/your-git/your-repo/"
  • step into the repo and edit info.yaml
  • change the source files to match your file name(s), your file(s) go in the src directory - use "git add <files>" to add and "git rm <files>" to remove the existing counter.v and decoder.v
  • Choose a unique top_module name for your design (must be different from all TT submisions so maybe use your name) - edit your top level verilog module so it has the same name
  • Set your author and title
  • Add a description and how_it_works, and document the pins (you can do this later)
  • update anything else you like (maybe remove the default discord handle)

Changing your design

The most basic git flow is:

  • edit something (like we just editted info.yaml)
  • add the changes for example: git add info.yaml
  • commit the changes: git commit -m "comment - changed info.yaml, added source files
  • "git push" - this uploads your changes to github and triggers a build on github
  • it's best to at the very least run your design through icarus to verify syntax before checking in

That's It - start building

Really that is it .... however:

  • You can set up automatic tests, more info here https://tinytapeout.com/hdl/testing/, you can also turn that action off in github
  • If you have a testbench you can do gatesim after synthesis
  • Remember when we talked about naming all things you want to be flops the same way (I start with "r_") it's worth doing this. It helps you deb ug unwanted latches - have a look at the GDS summary that lists the gates that are used - if there's a "Latches" line and you didn't explicitly make them (ie other than flip flops) then it's worth looking in the resulting gate level net list - find the 'dxl' cells - or any Q output not driving a r_* wire then chances are you have a bug, please come talk to me

More resources