module lampa(clk, rst, en, sw1, sw2, a, b); input clk; input rst; input en; input sw1; input sw2; output reg [2:0] a; output reg [2:0] b; parameter P = 2'b00; parameter PS = 2'b01; parameter Z = 2'b10; parameter S = 2'b11; reg[15:0] timer; reg[1:0] this; reg[1:0] next; always @(posedge clk) if(rst) this <= P; else if(en) this <= next; else this <= this; always @(*) if(timer==0) case(this) P: next <= PS; PS: next <= Z; Z: next <= S; S: next <= P; default: next <= P; endcase else next <= next; always @(posedge clk) if(timer==0) case(this) (P|Z): if(sw1|sw2) timer <= 10; else timer <= 5; (PS|S): timer <= 2; endcase else timer <= timer - 1; always @(*) case(this) P:begin a <= 3'b100; b <= 3'b001; end PS:begin a <= 3'b110; b <= 3'b010; end Z:begin a <= 3'b001; b <= 3'b100; end S:begin a <= 3'b010; b <= 3'b110; end endcase endmodule