This live stream, hosted by Matt Venn of the Zero to ASIC Course, provides a practical, step-by-step tutorial on how to submit a custom peripheral to the Tiny Tapeout "Crowd Sourced RISC-V" competition. Using a two-channel PWM (Pulse-Width Modulation) controller as a live example, the video guides viewers through the entire submission workflow. The process includes forking the competition's TinyQV repository, integrating the new Verilog source files, adding and configuring a cocotb Python test bench, and creating the necessary documentation. The demonstration features realistic, live debugging of test bench failures within the integrated RISC-V environment. The stream culminates in creating a formal pull request on GitHub to submit the peripheral, explaining how this triggers the automated CI pipeline for testing and layout generation.
A Guide to the RISC-V Peripheral Challenge Submission Process
0:02 Introduction: Matt Venn introduces the stream's goal: to demonstrate the submission process for the Tiny Tapeout RISC-V peripheral competition, where participants contribute to building a crowd-sourced microcontroller.
2:28 Competition Details: The "Crowd Sourced RISC-V peripheral challenge" is officially open. Designs must be submitted by September 5th. It is announced that renowned hardware hacker Andrew "Bunnie" Huang will be one of the judges.
9:33 Reference Submission (Encoder): As a reference, Matt shows his recently merged submission, a quadrature encoder. He displays its successful cocotb test bench, which validates its functionality by simulating and checking the register values read by the RISC-V core.
13:20 Live Submission Example (PWM Driver): For the live tutorial, he uses a new, simple two-channel PWM (Pulse-Width Modulation) driver. He shows its standalone test bench working, verifying its ability to generate pulses of varying duty cycles.
17:50 The Submission Workflow: The core tutorial begins, outlining the process of forking the main ttsky25a-tinyQV repository and adding the new peripheral's files to the local copy.
19:00 Integrating the Verilog Files: The first practical step shown is adding the PWM driver's Verilog source files into the user_peripherals directory and editing the top-level Verilog and YAML files to instantiate the new module.
23:14 Setting Up the Test Bench: He demonstrates integrating his cocotb Python test into the project's test suite. This involves configuring the correct peripheral number (address 21) so the test bench can target the PWM driver for register writes and reads.
26:34 Live Debugging Session: When the integrated test fails, the stream shifts to a realistic debugging session. Matt uses GTKWave to analyze the waveform, identifying unexpected behavior and glitches in the PWM output when it's integrated into the larger system.
34:37 Output Multiplexing Explained: A key concept is discussed: individual peripherals can repeat their outputs on multiple pins. A top-level function selector in the final design allows users to mix and match outputs from different peripherals onto the physical pins of the chip.
41:23 Documenting the Peripheral: A crucial step is adding a Markdown file to the docs folder. He shows how to create this file to document the peripheral's function and register map, which is required for submission.
47:00 Creating the Pull Request: After committing and pushing all the changes to his forked repository, Matt demonstrates the final step: creating a pull request (PR) to the main TinyQV repository on GitHub, which officially submits his design to the competition.