99 Simon Says memory game

99 : Simon Says memory game

Design render

Simon Says Game

How it works

Simon says is a simple electronic memory game: the user has to repeat a growing sequence of colors. The sequence is displayed by lighting up the LEDs. Each color also has a corresponding tone.

In each turn, the game will play the sequence, and then wait for the user to repeat the sequence by pressing the buttons according to the color sequence. If the user repeated the sequence correctly, the game will play a "leveling-up" sound, add a new color at the end of the sequence, and move to the next turn.

The game continues until the user has made a mistake. Then a game over sound is played, and the game restarts.

Check out the online simulation at https://wokwi.com/projects/408757730664700929 (including wiring diagram).

Clock settings

The clk_sel input selects the clock source:

  • 0: external 50 KHz clock, provided through the clk input.
  • 1: internal clock, generated by the ring_osc module, with a frequency of ~55 KHz.

The internal clock is generated by a 13-stage ring oscillator, divided by 16384 to get the desired frequency. The divider value was determined by running the ring oscillator simulation in xschem/simulation/ring_osc.spice.

When using the internal clock, its signal is also output on the uo_out[7] pin for debugging purposes.

How to test

Use a Simon Says Pmod to test the game.

Provide a 50 KHz clock input, reset the game, and enjoy!

If you don't have the Pmod, you can still connect the hardware manually as follows:

  1. Connect the four push buttons to pins btn1, btn2, btn3, and btn4. Also connect each button to a pull down resistor.
  2. Connect the LEDs to pins led1, led2, led3, and led4, matching the colors of the buttons (so led1 and btn1 have the same color, etc.). Don't forget current-limiting resistors!
  3. Connect the speaker to the speaker pin (optional).
  4. Connect the seven segment display as follows: seg_a through sev_g to individual segments, dig1 to the common pin of the tens digit, dig2 to the common pin of the ones digit. Set seginv according to the type of 7 segment display you have: high for common anode, low for common cathode.
  5. Reset the game, and then press any button to start it. Enjoy!

External Hardware

Simon Says Pmod or four push buttons (with pull-down resistors), four LEDs, and optionally a speaker/buzzer and two digit 7-segment display.

IO

#InputOutputBidirectional
0btn1led1seg_a
1btn2led2seg_b
2btn3led3seg_c
3btn4led4seg_d
4seginvspeakerseg_e
5dig1seg_f
6dig2seg_g
7clk_selclk_internal

Chip location

Controller 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_r2r_dac (R-2R DAC) tt_um_algofoogle_antonalog (Antonalog analog VGA) tt_um_NicklausThompson_555_1x1 (HBT Comparator) tt_um_urish_dickson_pump (Dickson Charge Pump) tt_um_htfab_yadge (Yet Another Diffraction Grating Experiment) tt_um_colorful_stripes (Colorful stripes) tt_um_rte_eink_driver (E-ink display driver) tt_um_bleeptrack_prism (Prism) tt_um_calonso88_spi_test (SPI test) tt_um_sathworld_spi_pwm_peripheral (SPI-connected PWM generator) tt_um_lfsr_stevej (Linear Feedback Shift Register) tt_um_strau0106_simple_viii (simple-viii) tt_um_algofoogle_ro_worker (Ring Oscillator Worker) tt_um_vga_clock (VGA clock) tt_um_a1k0n_demo (Demo by a1k0n) tt_um_algofoogle_fun_vga_clock (Fun VGA Clock) tt_um_digital_clock_example (7-Segment Digital Desk Clock) tt_um_urish_simon (Simon Says memory game) tt_um_ihp_logo_screensaver (VGA Screensaver with the IHP Logo) tt_um_zerotoasic_logo_screensaver (VGA Screensaver with Zero to ASIC Logo) tt_um_arud4172_ROOTS_vga (ROOTS logo vga) Available