You are on page 1of 6

Snake.

v
module snake_and_ladder(p1,p2,p3,p4,start,clk,res);
output reg[15:0] p1,p2,p3,p4;
reg[15:0]rand;
input start,clk,res;
integer i;
task throw_dice;
output reg[15:0] p;
output reg[15:0] rand;
begin
rand<= 1+{$random}%6;
$strobe("you got %d",rand);
p<=p+rand;
$strobe("player is at pos %d",p);
end
endtask

task update_pos;
output reg[15:0] p;
begin
case(p)
16'd99:begin
p=16'd6;
$strobe(" BAD LUCK...... A SNAKE, player is at position %d",p);
end
16'd88:begin
p=16'd67;
$strobe(" BAD LUCK...... A SNAKE, player is at position %d",p);
end

16'd71:begin
p=16'd29;
$strobe(" BAD LUCK...... A SNAKE, player is at position %d",p);
end
16'd55:begin
p=16'd13;
$strobe(" BAD LUCK...... A SNAKE, player is at position %d",p);
end
16'd24:begin
p=16'd1;
$strobe(" BAD LUCK...... A SNAKE, player is at position %d",p);
end
16'd42:begin
p= 16'd81;
$strobe("WOW... A LADDER ,player is at pos %d",p);
end
16'd15:begin
p= 16'd97;
$strobe("WOW... A LADDER ,player is at pos %d",p);
end
16'd66:begin
p= 16'd87;
$strobe("WOW... A LADDER ,player is at pos %d",p);
end

16'd8:begin
p= 16'd31;
$strobe("WOW... A LADDER ,player is at pos %d",p);
end

endcase
end
endtask

always@(negedge clk)
begin
if (res)
begin
p1<=16'd0;
p2<=16'd0;
p3<=16'd0;
p4<=16'd0;
i<=1;
end
end
always@(negedge clk)
begin
$strobe("initial pos is %d %d%d%d",p1,p2,p3,p4);
if(start)
begin
if(i==1)
begin
$strobe("player 1 throws dice");
throw_dice(p1,rand);
update_pos(p1);
if(p1==16'd100)
begin
$strobe("player 1 is THE WINNER... HURRAY");
#5 $finish;

end
i=i+1;
end
else if(i==2)
begin
$strobe("player 2 throws dice");
throw_dice(p2,rand);
update_pos(p2);
if(p2==16'd100)
begin
$strobe("player 2 is THE WINNER... HURRAY");
#5 $finish;
end
i=i+1;
end
else if(i==3)
begin
$strobe("player 3 throws dice");
throw_dice(p3,rand);
update_pos(p3);
if(p3==16'd100)
begin
$strobe("player 3 is THE WINNER... HURRAY");
#5 $finish;
end
i=i+1;
end
else if(i==4)
begin

$strobe("player 4 throws dice");


throw_dice(p4,rand);
update_pos(p4);
if(p4==16'd100)
begin
$strobe("player 4 is THE WINNER... HURRAY");
#5 $finish;
end
i=1;
end
end
end
endmodule

Testbench.v
module testbench();
wire[15:0] p1,p2,p3,p4;
reg start,clk,res;
snake_and_ladder s1(p1,p2,p3,p4,start,clk,res);
initial
begin

clk=1'b1;
res=1'b1;
start=1'b1;
#1 clk=1'b0;
#1 res=1'b0;

#1 clk=1'b1;
#1 clk=1'b0;
#1 clk=1'b1;
#1 clk=1'b0;
#1 clk=1'b1;
#1 clk=1'b0;
#1 clk=1'b1;
#1 clk=1'b0;
#1 clk=1'b1;
#1 clk=1'b0;
#1 clk=1'b1;

end
endmodule

You might also like