rendered paste bodymodule 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