VGA Output - Ece

VGA Output

From Ece

Jump to: navigation, search

// 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