OpenCores
URL https://opencores.org/ocsvn/2d_game_console/2d_game_console/trunk

Subversion Repositories 2d_game_console

[/] [2d_game_console/] [trunk/] [Processor_Quartus/] [Sprite_Processor.v] - Rev 2

Compare with Previous | Blame | View Log

module Sprite_Processor(
	R_in,
	G_in,
	B_in,
	clk,
	rst,
	sprite_id,
	sprite_x,
	sprite_y,
	sprite_color,
	sprite_shape,
	V_pos_in,
	H_pos_in,
 
	R_out,
	G_out,
	B_out
);
 
 
	input clk;
	input rst;
	input	[7:0]		R_in;
	input	[7:0]		G_in;
	input	[7:0]		B_in;
	input	[9:0]		H_pos_in;
	input	[9:0]		V_pos_in;
 
	input	[383:0]	sprite_id;
	input	[639:0]	sprite_x;
	input	[639:0]	sprite_y;
	input	[1023:0]	sprite_color;
	input	[1023:0]	sprite_shape;
 
	output	reg	[7:0]		R_out;
	output	reg	[7:0]		G_out;
	output	reg	[7:0]		B_out;
 
 
 
	always @ (posedge clk)
	begin
 
		if (rst)
		begin
 
		end
 
		else
		begin
			// SPRITE LEVEL 15 - START
			if	(
				V_pos_in >= sprite_y[(15*10)+9 : 15*10] &&
				V_pos_in <= sprite_y[(15*10)+9 : 15*10] + 15 &&
				H_pos_in >= sprite_x[(15*10)+9 : 15*10] &&
				H_pos_in <= sprite_x[(15*10)+9 : 15*10] + 15 &&
				sprite_shape[ (15*16) + 15 - (H_pos_in - sprite_x[(15*10)+9 : 15*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(15*16)+4	: (15*16)+0];
				G_out	[7:2]	<=	sprite_color[(15*16)+10	: (15*16)+5];
				B_out	[7:3]	<=	sprite_color[(15*16)+15 : (15*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 14 - START
			if	(
				V_pos_in >= sprite_y[(14*10)+9 : 14*10] &&
				V_pos_in <= sprite_y[(14*10)+9 : 14*10] + 15 &&
				H_pos_in >= sprite_x[(14*10)+9 : 14*10] &&
				H_pos_in <= sprite_x[(14*10)+9 : 14*10] + 15 &&
				sprite_shape[ (14*16) + 15 - (H_pos_in - sprite_x[(14*10)+9 : 14*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(14*16)+4	: (14*16)+0];
				G_out	[7:2]	<=	sprite_color[(14*16)+10	: (14*16)+5];
				B_out	[7:3]	<=	sprite_color[(14*16)+15 : (14*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 13 - START
			if	(
				V_pos_in >= sprite_y[(13*10)+9 : 13*10] &&
				V_pos_in <= sprite_y[(13*10)+9 : 13*10] + 15 &&
				H_pos_in >= sprite_x[(13*10)+9 : 13*10] &&
				H_pos_in <= sprite_x[(13*10)+9 : 13*10] + 15 &&
				sprite_shape[ (13*16) + 15 - (H_pos_in - sprite_x[(13*10)+9 : 13*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(13*16)+4	: (13*16)+0];
				G_out	[7:2]	<=	sprite_color[(13*16)+10	: (13*16)+5];
				B_out	[7:3]	<=	sprite_color[(13*16)+15 : (13*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 12 - START
			if	(
				V_pos_in >= sprite_y[(12*10)+9 : 12*10] &&
				V_pos_in <= sprite_y[(12*10)+9 : 12*10] + 15 &&
				H_pos_in >= sprite_x[(12*10)+9 : 12*10] &&
				H_pos_in <= sprite_x[(12*10)+9 : 12*10] + 15 &&
				sprite_shape[ (12*16) + 15 - (H_pos_in - sprite_x[(12*10)+9 : 12*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(12*16)+4	: (12*16)+0];
				G_out	[7:2]	<=	sprite_color[(12*16)+10	: (12*16)+5];
				B_out	[7:3]	<=	sprite_color[(12*16)+15 : (12*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 11 - START
			if	(
				V_pos_in >= sprite_y[(11*10)+9 : 11*10] &&
				V_pos_in <= sprite_y[(11*10)+9 : 11*10] + 15 &&
				H_pos_in >= sprite_x[(11*10)+9 : 11*10] &&
				H_pos_in <= sprite_x[(11*10)+9 : 11*10] + 15 &&
				sprite_shape[ (11*16) + 15 - (H_pos_in - sprite_x[(11*10)+9 : 11*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(11*16)+4	: (11*16)+0];
				G_out	[7:2]	<=	sprite_color[(11*16)+10	: (11*16)+5];
				B_out	[7:3]	<=	sprite_color[(11*16)+15 : (11*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 10 - START
			if	(
				V_pos_in >= sprite_y[(10*10)+9 : 10*10] &&
				V_pos_in <= sprite_y[(10*10)+9 : 10*10] + 15 &&
				H_pos_in >= sprite_x[(10*10)+9 : 10*10] &&
				H_pos_in <= sprite_x[(10*10)+9 : 10*10] + 15 &&
				sprite_shape[ (10*16) + 15 - (H_pos_in - sprite_x[(10*10)+9 : 10*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(10*16)+4	: (10*16)+0];
				G_out	[7:2]	<=	sprite_color[(10*16)+10	: (10*16)+5];
				B_out	[7:3]	<=	sprite_color[(10*16)+15 : (10*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 9 - START
			if	(
				V_pos_in >= sprite_y[(9*10)+9 : 9*10] &&
				V_pos_in <= sprite_y[(9*10)+9 : 9*10] + 15 &&
				H_pos_in >= sprite_x[(9*10)+9 : 9*10] &&
				H_pos_in <= sprite_x[(9*10)+9 : 9*10] + 15 &&
				sprite_shape[ (9*16) + 15 - (H_pos_in - sprite_x[(9*10)+9 : 9*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(9*16)+4	: (9*16)+0];
				G_out	[7:2]	<=	sprite_color[(9*16)+10	: (9*16)+5];
				B_out	[7:3]	<=	sprite_color[(9*16)+15 : (9*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 8 - START
			if	(
				V_pos_in >= sprite_y[(8*10)+9 : 8*10] &&
				V_pos_in <= sprite_y[(8*10)+9 : 8*10] + 15 &&
				H_pos_in >= sprite_x[(8*10)+9 : 8*10] &&
				H_pos_in <= sprite_x[(8*10)+9 : 8*10] + 15 &&
				sprite_shape[ (8*16) + 15 - (H_pos_in - sprite_x[(8*10)+9 : 8*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(8*16)+4	: (8*16)+0];
				G_out	[7:2]	<=	sprite_color[(8*16)+10	: (8*16)+5];
				B_out	[7:3]	<=	sprite_color[(8*16)+15 : (8*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 7 - START
			if	(
				V_pos_in >= sprite_y[(7*10)+9 : 7*10] &&
				V_pos_in <= sprite_y[(7*10)+9 : 7*10] + 15 &&
				H_pos_in >= sprite_x[(7*10)+9 : 7*10] &&
				H_pos_in <= sprite_x[(7*10)+9 : 7*10] + 15 &&
				sprite_shape[ (7*16) + 15 - (H_pos_in - sprite_x[(7*10)+9 : 7*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(7*16)+4	: (7*16)+0];
				G_out	[7:2]	<=	sprite_color[(7*16)+10	: (7*16)+5];
				B_out	[7:3]	<=	sprite_color[(7*16)+15 : (7*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 6 - START
			if	(
				V_pos_in >= sprite_y[(6*10)+9 : 6*10] &&
				V_pos_in <= sprite_y[(6*10)+9 : 6*10] + 15 &&
				H_pos_in >= sprite_x[(6*10)+9 : 6*10] &&
				H_pos_in <= sprite_x[(6*10)+9 : 6*10] + 15 &&
				sprite_shape[ (6*16) + 15 - (H_pos_in - sprite_x[(6*10)+9 : 6*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(6*16)+4	: (6*16)+0];
				G_out	[7:2]	<=	sprite_color[(6*16)+10	: (6*16)+5];
				B_out	[7:3]	<=	sprite_color[(6*16)+15 : (6*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 5 - START
			if	(
				V_pos_in >= sprite_y[(5*10)+9 : 5*10] &&
				V_pos_in <= sprite_y[(5*10)+9 : 5*10] + 15 &&
				H_pos_in >= sprite_x[(5*10)+9 : 5*10] &&
				H_pos_in <= sprite_x[(5*10)+9 : 5*10] + 15 &&
				sprite_shape[ (5*16) + 15 - (H_pos_in - sprite_x[(5*10)+9 : 5*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(5*16)+4	: (5*16)+0];
				G_out	[7:2]	<=	sprite_color[(5*16)+10	: (5*16)+5];
				B_out	[7:3]	<=	sprite_color[(5*16)+15 : (5*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 4 - START
			if	(
				V_pos_in >= sprite_y[(4*10)+9 : 4*10] &&
				V_pos_in <= sprite_y[(4*10)+9 : 4*10] + 15 &&
				H_pos_in >= sprite_x[(4*10)+9 : 4*10] &&
				H_pos_in <= sprite_x[(4*10)+9 : 4*10] + 15 &&
				sprite_shape[ (4*16) + 15 - (H_pos_in - sprite_x[(4*10)+9 : 4*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(4*16)+4	: (4*16)+0];
				G_out	[7:2]	<=	sprite_color[(4*16)+10	: (4*16)+5];
				B_out	[7:3]	<=	sprite_color[(4*16)+15 : (4*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 3 - START
			if	(
				V_pos_in >= sprite_y[(3*10)+9 : 3*10] &&
				V_pos_in <= sprite_y[(3*10)+9 : 3*10] + 15 &&
				H_pos_in >= sprite_x[(3*10)+9 : 3*10] &&
				H_pos_in <= sprite_x[(3*10)+9 : 3*10] + 15 &&
				sprite_shape[ (3*16) + 15 - (H_pos_in - sprite_x[(3*10)+9 : 3*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(3*16)+4	: (3*16)+0];
				G_out	[7:2]	<=	sprite_color[(3*16)+10	: (3*16)+5];
				B_out	[7:3]	<=	sprite_color[(3*16)+15 : (3*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 2 - START
			if	(
				V_pos_in >= sprite_y[(2*10)+9 : 2*10] &&
				V_pos_in <= sprite_y[(2*10)+9 : 2*10] + 15 &&
				H_pos_in >= sprite_x[(2*10)+9 : 2*10] &&
				H_pos_in <= sprite_x[(2*10)+9 : 2*10] + 15 &&
				sprite_shape[ (2*16) + 15 - (H_pos_in - sprite_x[(2*10)+9 : 2*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(2*16)+4	: (2*16)+0];
				G_out	[7:2]	<=	sprite_color[(2*16)+10	: (2*16)+5];
				B_out	[7:3]	<=	sprite_color[(2*16)+15 : (2*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 1 - START
			if	(
				V_pos_in >= sprite_y[(1*10)+9 : 1*10] &&
				V_pos_in <= sprite_y[(1*10)+9 : 1*10] + 15 &&
				H_pos_in >= sprite_x[(1*10)+9 : 1*10] &&
				H_pos_in <= sprite_x[(1*10)+9 : 1*10] + 15 &&
				sprite_shape[ (1*16) + 15 - (H_pos_in - sprite_x[(1*10)+9 : 1*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(1*16)+4	: (1*16)+0];
				G_out	[7:2]	<=	sprite_color[(1*16)+10	: (1*16)+5];
				B_out	[7:3]	<=	sprite_color[(1*16)+15 : (1*16)+11];
			end
 
			else
			begin
 
			// SPRITE LEVEL 0 - START
			if	(
				V_pos_in >= sprite_y[(0*10)+9 : 0*10] &&
				V_pos_in <= sprite_y[(0*10)+9 : 0*10] + 15 &&
				H_pos_in >= sprite_x[(0*10)+9 : 0*10] &&
				H_pos_in <= sprite_x[(0*10)+9 : 0*10] + 15 &&
				sprite_shape[ (0*16) + 15 - (H_pos_in - sprite_x[(0*10)+9 : 0*10]) ]
				)
			begin
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	sprite_color[(0*16)+4	: (0*16)+0];
				G_out	[7:2]	<=	sprite_color[(0*16)+10	: (0*16)+5];
				B_out	[7:3]	<=	sprite_color[(0*16)+15 : (0*16)+11];
			end
 
			else
			begin
 
				R_out [2:0]	<=	3'b000;
				G_out [1:0]	<=	2'b00;
				B_out [2:0]	<=	3'b000;
				R_out	[7:3]	<=	R_in	[7:3];
				G_out	[7:2]	<=	G_in	[7:2];
				B_out	[7:3]	<=	B_in	[7:3];
			end	// SPRITE LEVEL 0 - ELSE END
			end	// SPRITE LEVEL 1 - ELSE END
			end	// SPRITE LEVEL 2 - ELSE END
			end	// SPRITE LEVEL 3 - ELSE END
			end	// SPRITE LEVEL 4 - ELSE END
			end	// SPRITE LEVEL 5 - ELSE END
			end	// SPRITE LEVEL 6 - ELSE END
			end	// SPRITE LEVEL 7 - ELSE END
			end	// SPRITE LEVEL 8 - ELSE END
			end	// SPRITE LEVEL 9 - ELSE END
			end	// SPRITE LEVEL 10 - ELSE END
			end	// SPRITE LEVEL 11 - ELSE END
			end	// SPRITE LEVEL 12 - ELSE END
			end	// SPRITE LEVEL 13 - ELSE END
			end	// SPRITE LEVEL 14 - ELSE END
			end	// SPRITE LEVEL 15 - ELSE END
 
		end   // RST - ELSE END
 
	end   // ALWAYS END
 
 
endmodule
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.