124 lines
3.9 KiB
Verilog
124 lines
3.9 KiB
Verilog
`timescale 1ns / 1ps
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
// Company:
|
|
// Engineer:
|
|
//
|
|
// Create Date: 01/06/2021 08:41:26 AM
|
|
// Design Name:
|
|
// Module Name: item_display
|
|
// Project Name:
|
|
// Target Devices:
|
|
// Tool Versions:
|
|
// Description:
|
|
//
|
|
// Dependencies:
|
|
//
|
|
// Revision:
|
|
// Revision 0.01 - File Created
|
|
// Additional Comments:
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
module item_display(
|
|
input clk,
|
|
input set_require,
|
|
input enable_reward,
|
|
input [ 10: 0 ] random_xpos,
|
|
input [ 10: 0 ] random_ypos,
|
|
input [ 2: 0 ] item_type,
|
|
input [ 10: 0 ] VGA_h,
|
|
input [ 10: 0 ] VGA_V,
|
|
input enable_game_classic,
|
|
input enable_game_infinity,
|
|
output reg [ 11: 0 ] VGA_data
|
|
);
|
|
|
|
|
|
|
|
wire [ 5: 0 ] ITEM_WIDTH ;
|
|
wire [ 5: 0 ] ITEM_HEIGHT;
|
|
|
|
assign ITEM_WIDTH = item_type == 3 ? 32 : 20;
|
|
assign ITEM_HEIGHT = item_type == 3 ? 32 : 20;
|
|
reg [ 8: 0 ] addra_add_heart, addra_add_timing, addra_frozen, addra_faster;
|
|
reg [ 9: 0 ] addra_invincible;
|
|
|
|
wire[ 11: 0 ] add_heart_pic, add_timing_pic, add_frozen_pic, invincible_pic, faster_pic;
|
|
// reg [ 11: 0 ] add_heart_reg, add_timing_reg, add_frozen_reg, invincible_reg;
|
|
|
|
|
|
|
|
always @( posedge clk ) begin
|
|
if ( set_require == 1'b1 && enable_reward == 1'b1 ) begin
|
|
if ( VGA_h >= random_xpos && VGA_h < random_xpos + ITEM_WIDTH && VGA_V >= random_ypos && VGA_V < random_ypos + ITEM_HEIGHT ) begin
|
|
addra_add_heart <= ( VGA_h - random_xpos ) + ( VGA_V - random_ypos ) * 20;
|
|
addra_add_timing <= ( VGA_h - random_xpos ) + ( VGA_V - random_ypos ) * 20;
|
|
addra_frozen <= ( VGA_h - random_xpos ) + ( VGA_V - random_ypos ) * 20;
|
|
addra_faster <= ( VGA_h - random_xpos ) + ( VGA_V - random_ypos ) * 20;
|
|
addra_invincible <= ( VGA_h - random_xpos ) + ( VGA_V - random_ypos ) * 32;
|
|
case ( item_type )
|
|
1: begin
|
|
if ( enable_game_classic == 1 ) begin
|
|
VGA_data <= add_heart_pic;
|
|
end
|
|
else if ( enable_game_infinity ) begin
|
|
VGA_data <= add_timing_pic;
|
|
end
|
|
end
|
|
2: begin
|
|
VGA_data <= add_frozen_pic;
|
|
end
|
|
3: begin
|
|
VGA_data <= invincible_pic;
|
|
end
|
|
4: begin
|
|
VGA_data <= faster_pic;
|
|
end
|
|
default : begin
|
|
VGA_data <= 0;
|
|
end
|
|
endcase
|
|
end
|
|
else begin
|
|
VGA_data <= 0;
|
|
end
|
|
end
|
|
else begin
|
|
VGA_data <= 0;
|
|
end
|
|
|
|
end
|
|
add_heart_20_20 u_add_heart_20_20(
|
|
.clka( clk ),
|
|
.ena( 1'b1 ),
|
|
.addra( addra_add_heart ),
|
|
.douta( add_heart_pic )
|
|
);
|
|
add_timing_20_20 u_add_timing_20_20(
|
|
.clka( clk ),
|
|
.ena( 1'b1 ),
|
|
.addra( addra_add_timing ),
|
|
.douta( add_timing_pic )
|
|
);
|
|
snowflake_20_20 u_snowflake_20_20(
|
|
.clka( clk ),
|
|
.ena( 1'b1 ),
|
|
.addra( addra_frozen ),
|
|
.douta( add_frozen_pic )
|
|
);
|
|
invincible_star_32_32 u_invincible_star(
|
|
.clka( clk ),
|
|
.ena( 1'b1 ),
|
|
.addra( addra_invincible ),
|
|
.douta( invincible_pic )
|
|
);
|
|
|
|
lightning_20_20 u_lightning_20_20(
|
|
.clka( clk ),
|
|
.ena( 1'b1 ),
|
|
.addra( addra_faster ),
|
|
.douta( faster_pic )
|
|
);
|
|
endmodule
|