
This project implements a 16-bit "one-hot" ring counter. It consists of a circular shift register where a single high bit (1) advances sequentially across the 16 outputs.
The internal operation is as follows:
rst_n pin in Tiny Tapeout, which is internally inverted to an active-high rst in the counter's logic), the register is loaded with the initial value 16'b0000_0000_0000_0001. This turns on only the first output.clk), the bits shift one position to the left. The most significant bit (MSB, bit 15) is fed back to the least significant position (LSB, bit 0), creating an infinite loop.uo_out), and the next 8 bits (8 to 15) are assigned to the bidirectional pins (uio_out), which are permanently configured as outputs via uio_oe.To test the design on the physical evaluation board (or in the Wokwi/Verilator simulator):
rst_n on the board is usually active-low). While the reset is held, only the first LED corresponding to uo_out[0] should be lit.uo_out[0] to uo_out[7], and then continuing its path through uio_out[0] to uio_out[7]. Once it reaches the last pin, the cycle starts again at uo_out[0].No special external hardware is required if using the standard Tiny Tapeout demonstration board, as it includes a clock generator, pushbuttons for inputs, and LEDs to visualize the outputs.
If mounted on a custom breadboard, the following will be needed:
uo_out and uio_out pins, along with their respective current-limiting resistors (e.g., 330 Ω to 1 kΩ).| # | Input | Output | Bidirectional |
|---|---|---|---|
| 0 | out_0 | out_8 | |
| 1 | out_1 | out_9 | |
| 2 | out_2 | out_10 | |
| 3 | out_3 | out_11 | |
| 4 | out_4 | out_12 | |
| 5 | out_5 | out_13 | |
| 6 | out_6 | out_14 | |
| 7 | out_7 | out_15 |