Justin Sapun, justin.sapun.th@dartmouth.edu
Arun Guruswamy, arun.guruswamy.th@dartmouth.edu
Khanh Le, khanh.l.le.th@dartmouth.edu
Sam Peter, samuel.peter.25@dartmouth.edu

The goal of this project was to design a game for users to learn and practice morse code. We used a Basys 3 as our field programmable gate array. The intial design was split into two projects, the morse decoding logic and the vga display logic. Once each sub system was working, we worked on combining them. The game consisted of revealing a letter on a moniter, which the user would attempt to press the button in morse code for the letter. If the input was correct, the letter would turn green and reveal a new letter. If the input was wrong, the letter would turn red and prompt another attempt. There is a reset button to skip a letter and move on. Additionally, there is a speaker componenet to give audible feedback to users.

Hardware Components

  • FPGA (Basys 3)

  • Small Speaker (with Amplifier)

  • Display Moniter (with VGA)

Implementation


The project was initially developed on paper, with hand-drawn schematics for the datapath and finite state machine. There were numerous developments during the initial weeks, leading to the discovery of more efficient methods for interpreting long and short button presses. We mapped all Morse Code letter combinations to ASCII values in memory, making comparisons and sending results to the VGA logic straightforward. The display logic used bitmaps to individually showcase random letters and would update accordingly. We fine-tuned a time variable to adjust the duration of short presses, long presses, and spacing. While we were aware that hardware programming, even for relatively simple projects, could be tedious, we were confident in our ability to accomplish the task. Overall, the results were a resounding success.



In the left video demonstration, we began by turning on the game using the game_en switch and enabling the seven-segment display via the seven_seg switch for system operation checks, if desired. Then, a letter appeared on the screen, prompting the user to start the game. The center button was used for Morse code input. We intentionally failed the first attempt to demonstrate the system's reaction (indicated by red). Upon correctly entering the Morse code, a green indicator appeared, and a new letter was displayed. If a user was stuck on a letter, they could press the top (reset) button to skip. In the video, a buzzer sound accompanied each button press, providing an audible cue that sometimes aided in adjusting to the timing.

Skills


This project developed my design ability in signal processing utilizing datapaths and finite state machines. Furthermore, I became proficient in hardware programming with VHDL and the Vivado environment. These capabilities enable me to engineer effective digital systems, contributing to real-world projects and applications in the field of digital electronics.