test.mp4
Alphanumeric custom messages on 7-Segment Display Menu using Boolean Board
with integrated 8 x 7-segment displays and 4 button menu.
- Dual clock synchronization
- Four-state display control logic
- Dynamic symbol selection and addressing
- Safe initialization avoiding undefined states
- Efficient right-to-left digit scanning
The seg_driver module features two clock signals for synchronization purposes and operates based on four states:
- Select symbol
- Display symbol on screen
- Change digit
- Turn off the display
This module includes a 40-bit input called word and an 8-bit input called out_sym, which is connected to a 32-bit memory (M0).
Additionally, there is a single 5-bit output named sel_sym, which is also connected to memory M0.
This output acts as the address sent to the memory so that it can provide the corresponding word through the previously mentioned out_sym input.
The code logic can be divided into four main parts:
An initial statement assigns starting values to all registers, leaving the circuit in a known state — in this case, with the display completely turned off.
This ensures that no floating registers with ambiguous values exist, which could lead to unknown (X) or high-impedance (Z) states.
A case statement checks the state of the variable sel_digit, which indicates which digit of the two 4-digit 7-segment modules is currently active.
The corresponding symbol is then taken from the 40-bit word register.
For example:
If sel_digit = 3, the module will select the fourth group of 5 bits (bits 15 to 19) from the word.
This group is used as the address sent to the 32-bit memory, which then provides the corresponding character via the out_sym output.
Using the same case statement, the sel_digit variable determines which digit to display.
Depending on the selected digit, the symbol stored in memory (out_sym) is assigned and shown on screen.
Only one digit is turned on per cycle, and it is turned off before the cycle ends.
Conditional statements increment the sel_digit variable by 1 until it reaches its maximum value (7).
After that, it resets back to 0.
This means the display performs a right-to-left sweep, updating the 7-segment display as many times as the combined period of both clocks allows. In other words, the display refreshes at the same frequency as the slowest clock.
| Signal | Type | Width | Description |
|---|---|---|---|
word |
Input | 40 bits | Input data containing encoded symbol addresses |
out_sym |
Input | 8 bits | Symbol data retrieved from 32-bit memory (M0) |
sel_sym |
Output | 5 bits | Memory address used to fetch symbols |
sel_digit |
Internal | 3 bits | Current digit being displayed (0–7) |
Typical
Hello World message displayed in Spanish