J'essaye de faire un FSM qui allume différents LEDS sur une matrice de LED selon le bouton pressé. Cependant, la LED ne reste pas allumée et après avoir relâché le bouton, la première LED s'allume à nouveau. Voici le code:Comment rester dans le même état FSM après que l'entrée est remise à zéro? (SystemVerilog)
module OneLed(input logic clk, reset, input logic [1:0] button,
output logic [7:0] rows,
output logic shcp, stcp, mr, oe, ds); //The LED matrix has 3 74hc595 shift registers below it
logic [7:0] [23:0] in;
logic [1:0] butreg; // thought a register would remember the button input
assign butreg = button;
//FSM
typedef enum logic [1:0] {S0, S1, S2} statetype;
statetype state , nextstate;
//state register
always_ff @(posedge clk, posedge reset)
if (reset) state <= S0;
else state <= nextstate;
//next state logic
always_comb
case(butreg)
S0: if (2'b01) nextstate = S1;
else if (2'b10) nextstate = S2;
else nextstate = S0;
S1: if (2'b01) nextstate = S2;
else if (2'b10) nextstate = S0;
else nextstate = S1;
S2: if (2'b01) nextstate = S0;
else if (2'b10) nextstate = S1;
else nextstate = S2;
default: nextstate = S0;
endcase
//output logic
always_comb
begin
if (state == S0)
in [0] = 24'b10000000_00000000_00000000;
else if (state == S1)
in [0] = 24'b00000000_10000000_00000000;
else if (state == S2)
in[0] = 24'b00000000_00000000_10000000;
end
led LED (clk, in , rows, shcp, stcp, mr, oe, ds); // this module works fine
endmodule
Merci! Cela fonctionne parfaitement – HKS