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