Question: I am struggling with creating a program in Verilog ( inside Quartus Prime ) which takes a series of button presses ( short and long

I am struggling with creating a program in Verilog (inside Quartus Prime) which takes a series of button presses (short and long presses representing dots and dashes) and outputs the corresponding letter in morse code. I'm using a DE 10 Lite Board with a 50 MHz clock, which has a seven segment LED display.
The Idea is this:
Button not being pressed --> Idle --> Nothing displayed
Button pressed --> Short or Long? --> wait for next press --> Short or Long? -->.... etc -->wait until the user stops pressing (arbitrary amount of time)--> output corresponding letter on the seven segment display
When I compile, pin plan, and upload it to my board, I get no response to my button presses, and what looks like a 6 on a seven segment display without the bottommost segment being lit is there during idle with no pressing. I am very confused, and struggling to complete this, which must be done soon. Any assistance and advice would be amazing, thank you in advance! My code is provided below!
module MorseCode (
input CLK,// Clock signal
input BUTTON, // Push button input
output reg [6:0] segments // Seven-segment display output
);
reg [15:0] counter; // Counter for measuring button press duration
reg [3:0] state; // FSM state variable
reg [4:0] morse_code; // Morse code input variable
parameter LONG_PRESS_THRESHOLD =5000; // Adjust for your clock frequency
// Define Morse code patterns for letters
parameter [4:0] A =5'b101;
parameter [4:0] B =5'b11000;
parameter [4:0] C =5'b11010;
parameter [4:0] D =5'b1100;
parameter [4:0] E =5'b10;
parameter [4:0] F =5'b10010;
parameter [4:0] G =5'b1110;
parameter [4:0] H =5'b10000;
parameter [4:0] I =5'b100;
parameter [4:0] J =5'b10111;
parameter [4:0] K =5'b1101;
parameter [4:0] L =5'b10100;
parameter [4:0] M =5'b111;
parameter [4:0] N =5'b110;
parameter [4:0] O =5'b1111;
parameter [4:0] P =5'b10110;
parameter [4:0] Q =5'b11101;
parameter [4:0] R =5'b1010;
parameter [4:0] S =5'b1000;
parameter [4:0] T =5'b11;
parameter [4:0] U =5'b1001;
parameter [4:0] V =5'b10001;
parameter [4:0] W =5'b1011;
parameter [4:0] X =5'b11001;
parameter [4:0] Y =5'b11100;
parameter [4:0] Z =5'b11011;
always @(posedge CLK) begin
// FSM logic
case (state)
4'b0000: begin // Initial state
if (BUTTON) begin
counter <= counter +1;
if (counter >= LONG_PRESS_THRESHOLD) begin
state <=4'b0010; // Long press detected
end
end else begin
if (counter >0 && counter < LONG_PRESS_THRESHOLD) begin
state <=4'b0001; // Short press detected
end
counter <=0;
end
end
4'b0001: begin // Short press state
// Update morse_code variable based on short press
state <=4'b0000; // Return to initial state
end
4'b0010: begin // Long press state
// Update morse_code variable based on long press
state <=4'b0000; // Return to initial state
end
endcase
// Seven-segment display logic
case (morse_code)
5'b101: segments <= A; // Display 'A'
5'b11000: segments <= B; // Display 'B'
5'b11010: segments <= C; // Display 'C'
5'b1100: segments <= D; // Display 'D'
5'b10: segments <= E; // Display 'E'
5'b10010: segments <= F; // Display 'F'
5'b1110: segments <= G; // Display 'G'
5'b10000: segments <= H; // Display 'H'
5'b100: segments <= I; // Display 'I'
5'b10111: segments <= J; // Display 'J'
5'b1101: segments <= K; // Display 'K'
5'b10100: segments <= L; // Display 'L'
5'b111: segments <= M; // Display 'M'
5'b110: segments <= N; // Display 'N'
5'b1111: segments <= O; // Display 'O'
5'b10110: segments <= P; // Display 'P'
5'b11101: segments <= Q; // Display 'Q'
5'b1010: segments <= R; // Display 'R'
5'b1000: segments <= S; // Display 'S'
5'b11: segments <= T; // Display 'T'
5'b1001: segments <= U; // Display 'U'
5'b10001: segments <= V; // Display 'V'
5'b1011: segments <= W; // Display 'W'
5'b11001: segments <= X; // Display 'X'
5'b11100: segments <= Y; // Display 'Y'
5'b11011: segments <= Z; // Display 'Z'
default: segments <=7'b1111111; // All segments off (idle state)
endcase
end
endmodule

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!