451 Asicle v2

451 : Asicle v2

Design render

How it works

VGA screenshot with questions CRATE and ANGLE

Asicle is a Wordle clone implemented directly in hardware. A first version of it was taped out on the Google-Skywater MPW6 shuttle. This second version is a rewrite for Tiny Tapeout.

The 25-fold decrease in area mostly comes from moving the word list and font bitmaps to external flash on the QSPI Pmod, with some architectural changes to compensate for slower memory access. The design was also adapted to the Tiny Tapeout ecosystem by using the Gamepad Pmod for input and the Tiny VGA Pmod for output.

How to test

  • Connect the Pmods:
    • Gamepad to input port (optional, you can also drive the input pins using the commander app or momentary push buttons)
    • QSPI to bidirectional port
    • Tiny VGA to output port
  • Flash the data file to the QSPI Pmod using the Tiny Tapeout flasher
  • Select the design
  • Set the clock to 25.175 MHz and reset the design
  • Play the game

If you haven't played Wordle before, the aim is to guess a five-letter English word in six attempts. Each time you get feedback: a green square indicates that the letter is correct, a yellow square indicates that it appears in the hidden word but at a different position, and a grey square means that the letter doesn't appear in the solution at all.

Gamepad controls:

  • <kbd>๐Ÿ </kbd> <kbd>๐Ÿ Ÿ</kbd>: change the letter in the selected position
  • <kbd>๐Ÿ œ</kbd> <kbd>๐Ÿ ž</kbd>: move the selection
  • <kbd>A</kbd>: make a guess
  • <kbd>START</kbd>: start a new game (if the current one is finished)
  • <kbd>SELECT</kbd>+<kbd>START</kbd>: start a new game (any time)
  • <kbd>SELECT</kbd>+<kbd>X</kbd>: show the solution*
  • <kbd>SELECT</kbd>+<kbd>Y</kbd>: re-roll the solution*

(* only in debug mode)

Direct input using ui_in:

  • <kbd>0</kbd> <kbd>1</kbd>: change the letter in the selected position
  • <kbd>2</kbd> <kbd>3</kbd>: move the selection
  • <kbd>4</kbd>: make a guess
  • <kbd>5</kbd>: start a new game
  • <kbd>6</kbd>: show the solution
  • <kbd>7</kbd>: re-roll the solution

External hardware

IO

#InputOutputBidirectional
0uptinyvga: r1qspi: cs0 (flash)
1downtinyvga: g1qspi: sd0/mosi
2lefttinyvga: b1qspi: sd1/miso
3righttinyvga: vsyncqspi: sck
4guess / gamepad: latchtinyvga: r0qspi: sd2
5new game / gamepad: clocktinyvga: g0qspi: sd3
6peek (debug) / gamepad: datatinyvga: b0qspi: cs1 (unused)
7roll (debug)tinyvga: hsyncqspi: cs2 (unused)

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (Tiny Tapeout Factory Test) tt_um_htfab_asicle2 (Asicle v2) tt_um_urish_simon (Simon Says memory game) tt_um_dlmiles_ringosc_5inv (Ring Oscillator (5 inverter)) tt_um_rejunity_vga_logo (VGA Tiny Logo) tt_um_rejunity_sn76489 (Classic 8-bit era Programmable Sound Generator SN76489) tt_um_wokwi_392873974467527681 (PILIPINAS_IC) tt_um_wokwi_442081253563458561 (PRISM 8 with TinySnake) tt_um_waferspace_vga_screensaver (Wafer.space Logo VGA Screensaver) tt_um_rejunity_z80 (Zilog Z80) tt_um_MichaelBell_tinyQV (TinyQV Risc-V SoC) tt_um_calonso88_spi_i2c_reg_bank (Register bank accessible through SPI and I2C) tt_um_htfab_caterpillar (Simon's Caterpillar) tt_um_gf0p2_faust_top (Silly-Faust) tt_um_htfab_cells (Cell mux) tt_um_zedtc1_top (Zedulo TestChip1) tt_um_essen (2x2 MAC Systolic array with DFT) tt_um_BLE_RX (SCยตM-BLE-RX) tt_um_kianV_rv32ima_uLinux_SoC (KianV uLinux SoC) tt_um_schoeberl_wildcat (Wildcat RISC-V) tt_um_vga_clock (VGA clock) tt_um_digital_clock_example (7-Segment Digital Desk Clock) tt_um_rejunity_vga_test01 (VGA Drop (audio/visual demo)) tt_um_a1k0n_nyancat (VGA Nyan Cat) tt_um_proppy_megabytebeat (megabytebeat) tt_um_javibajocero_top (MarcoPolo) tt_um_kercrafter_leds_racer (LEDs Racer) tt_um_noritsuna_CAN_CTRL (CAN Controller for Rocket) tt_um_algofoogle_raybox_zero (raybox-zero TTGF0p2 edition) tt_um_flummer_ltc (Linear Timecode (LTC) generator) tt_um_dlmiles_bad_synchronizer (Example of Bad Synchronizer) tt_um_multi_bit_puf_wrapper (One Bit PUF) tt_um_algofoogle_vgaringosc (Ring osc on VGA) tt_um_lisa (LISA 8-Bit Microcontroller) tt_um_mmorri22_lockpick_game (Notre Dame - Lockpick Game TT Example) tt_um_simple_riscv (Simple RISC-V) tt_um_mmorri22_cse_30342 (Notre Dame - CSE 30342 - DIC - Advanced FSM Final Project Example) tt_um_zacky1972_PVTMonitorSuite (PVTMonitorSuite) tt_um_SophusAndreassen_dogbattle (Dog Battle Game) tt_um_frequency_counter (Frequency Counter SSD1306 OLED) tt_um_wokwi_445338187869298689 (WokwiPWM) tt_um_kbeckmann_flame (Flame demo) tt_um_2048_vga_game (2048 sliding tile puzzle game (VGA)) tt_um_spi_cpu_top (Super-Simple-SPI-CPU) tt_um_urish_usb_cdc (USB CDC (Serial) Device) tt_um_htfab_vga_tester (Video mode tester) tt_um_dlmiles_ddr_throughput_test (DDR throughput and flop aperature test) tt_um_dlmiles_loopback (GF180MCU loopback tile with input skew measurement) tt_um_thezoq2_quickscope (Quickscope) tt_um_MATTHIAS_M_PAL_TOP_WRAPPER (easy PAL) tt_um_htfab_rotfpga2 (ROTFPGA v2)