Я работаю над программой для моей платы FPGA в Verilog, и у меня есть две проблемы, которые я не могу понять.По одному на каждый раз, когда я нажимаю кнопку, я хочу, чтобы загорелся один светодиод, затем два, затем три и т. Д. Я хочу, чтобы это по существу показывало количество нажатий кнопок.Тогда моя другая проблема заключается в том, что у меня на дисплее отображается таймер счетчика секунд, который запускается при нажатии одной кнопки и останавливается при нажатии другой.Я хочу изменить программу, чтобы кнопка остановки сбрасывала таймер на 00:00 и автоматически считала до тех пор, пока кнопка не будет нажата снова.Любая помощь с любой проблемой будет оценена.
Модуль светодиодного дисплея для отображения светодиодов при нажатии кнопки:
module LED_Counter (clk, start, snooze, reset, snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9);
input start, snooze, reset, clk;
output reg snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9;
parameter zero = 4'b0000, one = 4'b0001, two = 4'b0010, three = 4'b0011, four = 4'b0100, five = 4'b0101, six = 4'b0110, seven = 4'b0111, eight = 4'b1000, nine = 4'b1001, ten = 4'b1010;
reg [3:0] state, next_state;
always @(*) begin
if (reset) state = zero;
else if (snooze) state = next_state;
end
//next state combinational circuit (next state logic)
always @(state) begin
case (state)
zero: next_state =one;
one: next_state =two;
two: next_state = three;
three: next_state =four;
four: next_state =five;
five: next_state =six;
six: next_state = seven;
seven: next_state = eight;
eight: next_state = nine;
nine: next_state = ten;
default: next_state = zero;
endcase
end
//output combinational circuit (output logic)
always @(state) begin
case (state)
zero:{snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b0000000000;
one:{snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b1000000000;
two:{snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b1100000000;
three:{snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b1110000000;
four:{snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b1111000000;
five: {snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b1111100000;
six: {snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b1111110000;
seven: {snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b1111111000;
eight: {snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b1111111100;
nine: {snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b1111111110;
ten: {snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b1111111111;
default: {snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9} = 10'b0000000000;
endcase
end
endmodule
Модуль верхнего уровня (у меня есть и другие модули для вывода по таймеру)
module Final_Project (KEY, MAX10_CLK1_50, HEX0, HEX1, HEX2, HEX3, SW, LEDR);
input [1:0] KEY, SW;
input MAX10_CLK1_50;
output [6:0] HEX0, HEX1, HEX2, HEX3;
output [9:0] LEDR;
wire [9:0] LEDR;
wire clock_100hz, clk;
wire reset;
wire [15:0]T;
wire [27:0]h;
wire start, stop, enable, snooze;
wire snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9;
assign HEX0 = ~h[6:0];
assign HEX1 = ~h[13:7];
assign HEX2 = ~h[20:14];
assign HEX3 = ~h[27:21];
assign LEDR[0] = snooze0, LEDR[1] = snooze1 ,LEDR[2] = snooze2, LEDR[3] = snooze3 ,LEDR[4] = snooze4 ,LEDR[5] = snooze5, LEDR[6] = snooze6, LEDR[7] = snooze7, LEDR[8] = snooze8, LEDR[9] = snooze9;
assign reset = SW[0];
assign start = ~KEY[0];
assign snooze = ~KEY[1];
ClockDivider inst0 (MAX10_CLK1_50, clock_100hz);
StateMachine inst99 (clock_100hz, start, snooze, reset, enable);
sixteen_bit_counter inst10 (clock_100hz, enable, reset, T[15:0]);
bcd_to_sevenseg inst2 (T[3:0], h[6:0]);
bcd_to_sevenseg inst3 (T[7:4], h[13:7]);
bcd_to_sevenseg inst4 (T[11:8], h[20:14]);
bcd_to_sevenseg inst5 (T[15:12], h[27:21]);
LED_Counter inst6 (clock_100hz, start, snooze, reset, snooze0, snooze1, snooze2, snooze3, snooze4, snooze5, snooze6, snooze7, snooze8, snooze9);
endmodule