Egg Timer FPGA Design ⏲️

A close up of a diagram on a white background

Introduction

Timing is key to boil eggs just how you like them. This designed implemented on a FPGA can set a timer to alert you when your eggs are ready. The design has pre-set timers for soft, medium, or hard-boiled eggs. Any time can be set with the push buttons for other timed tasks. Simple logic implementation using FPGA.

Diagrams

Block Diagram

A close up of a diagram on a white background

Schematic

A model

Due to restrictions in Vivado 2016.3, it was not possible to install the Nexys4 DDR board. Consequently, a fully wired and correct Box Diagram could not be produced. Instead, I provided the schematic of the design using a similar part, supplemented with a hand-drawn Box Diagram.

Design

Design Choices

The design primarily serves as a timer that counts down from a preset or chosen time to zero, displayed on a seven-segment anode. Two key modules, ButtonTime (debouncer) and Current-timer (counter, timer, display, 7segment), work together to accomplish this. Additional features include a switch-enabled stopwatch, time presets, and a visual LED display to signal zero time. The entire design is synchronous, leveraging the on-board clock (100MHz) divided to 5MHz via the Clock Wizard IP, and further divided to 1Hz by another divider module (5MHz1Hz).

Verilog/Software Code

The Verilog code for this project is available on my GitHub here.

Verification

The design underwent rigorous testing and simulation using a custom-made test bench to ensure it functions as expected even without using an FPGA.

Test Benches

The test bench code can be found on my GitHub here.

Simulations

Figure 1: tb_egg Behaviour Simulation

Resource Usage

Table 1: Post-Synthesis Resource Utilization

Table 2: Post-Implementation Resource Utilization

Conclusions (Lessons Learned)

The Clocking Wizard IP can only produce a clock as low as 5MHz. In this project, using the same clock divider module twice to produce a 1Hz clock proved more practical. While if else chains are easy to code, they tend to be resource-intensive compared to behavioral code.

…return to projects.ibrahimsaid.ca or ibrahimsaid.ca.