VGA Output
From Ece
// This module created by Justin Davis, July 2004 // This module modified by Patrick Duckworth, April 2007 // Target board: Pegasus by Digilent, Inc. module draw_vga (clk, paddleY, ballX, ballY, video_on, row, col, red, green, blue); input clk, video_on; input [9:0] paddleY; input [9:0] ballX, ballY; input [9:0] row, col; output red, green, blue;
reg r, g, b;
reg red, green, blue;
parameter WALLWIDTH = 20; parameter TOTALROWS = 479; parameter TOTALCOLS = 639; parameter PADDLEWIDTH = 20; parameter PADDLELENGTH = 80; parameter BALL = 20;
always@(row, col, paddleY, ballX, ballY)
begin
r = 1;
b = 1;
g = 1;
// ball
if (((row+4) <= ballY+BALL) && ((row+4) >= ballY) && ((col+4)>= ballX) && ((col+4) <= ballX+BALL)) begin
r = 0;
b = 0;
g = 0;
end
// ball
if (((row+3) <= ballY+BALL) && ((row+3) >= ballY) && ((col+3)>= ballX) && ((col+3) <= ballX+BALL)) begin
r = 0;
b = 0;
g = 0;
end
// ball
if (((row+2) <= ballY+BALL) && ((row+2) >= ballY) && ((col+2)>= ballX) && ((col+2) <= ballX+BALL)) begin
r = 0;
b = 0;
g = 0;
end
// ball
if (((row+1) <= ballY+BALL) && ((row+1) >= ballY) && ((col+1)>= ballX) && ((col+1) <= ballX+BALL)) begin
r = 0;
b = 0;
g = 0;
end
// ball
if ((row <= ballY+BALL) && (row >= ballY) && (col>= ballX) && (col <= ballX+BALL)) begin
r = 0;
b = 0;
g = 0;
end
if ((row <= ballY+BALL-2) && (row >= ballY+2) && (col>= ballX+2) && (col <= ballX+BALL-2)) begin
r = 1;
b = 0;
g = 0;
end
// right wall
if (((TOTALCOLS - (col+4)) <= WALLWIDTH) && ((row+4)<=TOTALROWS)) begin
r = 0;
b = 1;
g = 1;
end
// right wall
if (((TOTALCOLS - (col+3)) <= WALLWIDTH) && ((row+3)<=TOTALROWS)) begin
r = 0;
b = 1;
g = 1;
end
// right wall
if (((TOTALCOLS - (col+2)) <= WALLWIDTH) && ((row+2)<=TOTALROWS)) begin
r = 0;
b = 1;
g = 1;
end
// right wall
if (((TOTALCOLS - (col+1)) <= WALLWIDTH) && ((row+1)<=TOTALROWS)) begin
r = 0;
b = 1;
g = 1;
end
// right wall
if (((TOTALCOLS - col) <= WALLWIDTH) && (row<=TOTALROWS)) begin
r = 0;
b = 0;
g = 0;
end
// top wall
if ((row <= WALLWIDTH) && (col<=TOTALCOLS)) begin
r = 0;
b = 0;
g = 0;
end
// paddle 3D outline
if (((col+4) <= paddleY+PADDLELENGTH) && ((col+4) >= paddleY) && ((row+4)>=(TOTALROWS-PADDLEWIDTH)) && ((row+4)<=(TOTALROWS-(PADDLEWIDTH/2)))) begin
r = 0;
b = 0;
g = 0;
end
// paddle 3D outline
if (((col+3) <= paddleY+PADDLELENGTH) && ((col+3) >= paddleY) && ((row+3)>=(TOTALROWS-PADDLEWIDTH)) && ((row+3)<=(TOTALROWS-(PADDLEWIDTH/2)))) begin
r = 0;
b = 0;
g = 0;
end
// paddle 3D outline
if (((col+2) <= paddleY+PADDLELENGTH) && ((col+2) >= paddleY) && ((row+2)>=(TOTALROWS-PADDLEWIDTH)) && ((row+3)<=(TOTALROWS-(PADDLEWIDTH/2)))) begin
r = 0;
b = 0;
g = 0;
end
// paddle 3D outline
if (((col+1) <= paddleY+PADDLELENGTH) && ((col+1) >= paddleY) && ((row+1)>=(TOTALROWS-PADDLEWIDTH)) && ((row+3)<=(TOTALROWS-(PADDLEWIDTH/2)))) begin
r = 0;
b = 0;
g = 0;
end
// paddle 3D filler
if (((col+4) <= paddleY+PADDLELENGTH-1) && ((col+4) >= paddleY+1) && ((row+4)>=(TOTALROWS-PADDLEWIDTH+1)) && ((row+4)<=(TOTALROWS-(PADDLEWIDTH/2)-1))) begin
r = 0;
b = 1;
g = 1;
end
// paddle 3D filler
if (((col+3) <= paddleY+PADDLELENGTH-1) && ((col+3) >= paddleY+1) && ((row+3)>=(TOTALROWS-PADDLEWIDTH+1)) && ((row+3)<=(TOTALROWS-(PADDLEWIDTH/2)-1))) begin
r = 0;
b = 1;
g = 1;
end
// paddle 3D filler
if (((col+2) <= paddleY+PADDLELENGTH-1) && ((col+2) >= paddleY+1) && ((row+2)>=(TOTALROWS-PADDLEWIDTH+1)) && ((row+2)<=(TOTALROWS-(PADDLEWIDTH/2)-1))) begin
r = 0;
b = 1;
g = 1;
end
// paddle 3D filler
if (((col+1) <= paddleY+PADDLELENGTH-1) && ((col+1) >= paddleY+1) && ((row+1)>=(TOTALROWS-PADDLEWIDTH+1)) && ((row+1)<=(TOTALROWS-(PADDLEWIDTH/2)-1))) begin
r = 0;
b = 1;
g = 1;
end
// paddle outline
if ((col <= paddleY+PADDLELENGTH) && ( col >= paddleY) && (row>=(TOTALROWS-PADDLEWIDTH)) && (row<=(TOTALROWS-(PADDLEWIDTH/2)))) begin
r = 0;
b = 0;
g = 0;
end
// paddle filler
if ((col <= paddleY+PADDLELENGTH-1) && ( col >= paddleY+1) && (row>=(TOTALROWS-PADDLEWIDTH+1)) && (row<=(TOTALROWS-(PADDLEWIDTH/2)-1))) begin
r = 0;
b = 1;
g = 0;
end
// left wall
if (((row) <= TOTALROWS) && (col<=WALLWIDTH)) begin
r = 0;
b = 0;
g = 0;
end
if (row==0 || col==0 || row==TOTALROWS || col==TOTALCOLS) begin r = 1; b = 1; g = 1; end
end
always@(posedge clk)
begin
red = 0;
green = 0;
blue = 0;
if (video_on) begin
red = r;
green = g;
blue = b;
end
end
endmodule




