Skip to content

Commit

Permalink
track collision stop
Browse files Browse the repository at this point in the history
  • Loading branch information
shawntsai0312 committed Dec 22, 2024
1 parent 1d8cca9 commit 97b28ac
Show file tree
Hide file tree
Showing 10 changed files with 279 additions and 137 deletions.
3 changes: 2 additions & 1 deletion Final/sim/tool.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
source /usr/cad/synopsys/CIC/vcs.cshrc
source /usr/cad/synopsys/CIC/verdi.cshrc
source /usr/cad/synopsys/CIC/license.csh
source /usr/spring_soft/CIC/verdi.cshrc
source /usr/spring_soft/CIC/verdi.cshrc
source /usr/cad/synopsys/cshrc
21 changes: 14 additions & 7 deletions Final/src/DE2_115/DE2_115.sv
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ module DE2_115 (
);

logic key0down, key1down, key2down, key3down;
logic clk_108m, clk_12m, clk_100k;
logic clk_108m, clk_12m, clk_100k, clk_400k;

wire [31:0] frame_counter;
wire [31:0] timer;
Expand All @@ -153,6 +153,7 @@ module DE2_115 (
.altpll_108m_clk (clk_108m),
.altpll_12m_clk (clk_12m),
.altpll_100k_clk (clk_100k),
.altpll_400k_clk (clk_400k),
.clk_clk (CLOCK_50),
.reset_reset_n (rst_n),

Expand Down Expand Up @@ -210,12 +211,16 @@ module DE2_115 (
wire [game_pkg::VELOCITY_OUTPUT_WIDTH-1:0] car1_v_m, car2_v_m;

wire [2:0] car1_acc, car2_acc;
wire [2:0] car1_brake, car2_brake;
wire [2:0] car1_omega, car2_omega;

assign car2_acc = SW[2:0];
assign car1_acc = SW[15:13];
assign car2_brake = SW[5:3];
assign car2_omega = {SW[7],1'b0,SW[6]};

wire [1:0] car1_omega, car2_omega;
assign car2_omega = SW[4:3];
assign car1_omega = SW[17:16];
assign car1_acc = SW[12:10];
assign car1_brake = SW[15:13];
assign car1_omega = {SW[17],1'b0,SW[16]};

wire [2:0] game_state;
assign LEDG[0] = (game_state == 0);
Expand All @@ -235,10 +240,12 @@ module DE2_115 (
.i_AUD_BCLK (AUD_BCLK),
.i_AUD_DACLRCK (AUD_DACLRCK),
.o_AUD_DACDAT (AUD_DACDAT),
.i_car2_acc (car2_acc),
.i_car1_acc (car1_acc),
.i_car2_omega (car2_omega),
.i_car2_acc (car2_acc),
.i_car1_brake (car1_brake),
.i_car2_brake (car2_brake),
.i_car1_omega (car1_omega),
.i_car2_omega (car2_omega),
.o_game_state (game_state),
.o_car1_v_m (car1_v_m),
.o_car2_v_m (car2_v_m),
Expand Down
24 changes: 15 additions & 9 deletions Final/src/gameControl/basicTrackCollision.sv
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ module CircleTrackCollision (
input signed [game_pkg::VELOCITY_INTEGER_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_v_x,
input signed [game_pkg::VELOCITY_INTEGER_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_v_y,
input signed [sram_pkg::CAR_COOR_WIDTH-1:0] i_radius,
output signed [game_pkg::VELOCITY_INTEGER_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] o_v_x,
output signed [game_pkg::VELOCITY_INTEGER_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] o_v_y,
output reg o_in_region,
output reg o_collision
);
Expand All @@ -103,33 +105,37 @@ module CircleTrackCollision (
.o_in_region (in_region)
);

wire signed [sram_pkg::MAP_H_WIDTH-1:0] displacement_center_x, displacement_center_y;
localparam PROCESS_WIDTH = 2*sram_pkg::MAP_H_WIDTH+game_pkg::VELOCITY_INTEGER_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH;

wire signed [PROCESS_WIDTH-1:0] displacement_center_x, displacement_center_y;
assign displacement_center_x = i_x - i_track.center_x;
assign displacement_center_y = i_y - i_track.center_y;

wire signed [2*sram_pkg::MAP_H_WIDTH-1:0] displacement_center_square;
wire signed [PROCESS_WIDTH-1:0] displacement_center_square;
assign displacement_center_square = displacement_center_x * displacement_center_x + displacement_center_y * displacement_center_y;

wire signed [sram_pkg::MAP_H_WIDTH-1:0] distance_lowerBound, distance_upperBound;
wire signed [PROCESS_WIDTH-1:0] distance_lowerBound, distance_upperBound;
assign distance_lowerBound = i_track.radius_inner + i_radius;
assign distance_upperBound = i_track.radius_outer - i_radius;

wire signed [2*sram_pkg::MAP_H_WIDTH-1:0] distance_lowerBound_square, distance_upperBound_square;
wire signed [PROCESS_WIDTH-1:0] distance_lowerBound_square, distance_upperBound_square;
assign distance_lowerBound_square = distance_lowerBound * distance_lowerBound;
assign distance_upperBound_square = distance_upperBound * distance_upperBound;

// calculate the dot product of the velocity and the vector from the center to the car
// if the dot product is positive, the car is moving away from the center
// if the dot product is negative, the car is moving towards the center
wire going_outwards, going_inwards;
assign going_outwards = (i_v_x * displacement_center_x + i_v_y * displacement_center_y) > 0;
assign going_inwards = (i_v_x * displacement_center_x + i_v_y * displacement_center_y) < 0;
wire [PROCESS_WIDTH-1:0] dot_product;
assign dot_product = i_v_x * displacement_center_x + i_v_y * displacement_center_y;

assign o_v_x = (displacement_center_square * i_v_x - dot_product * displacement_center_x) / displacement_center_square;
assign o_v_y = (displacement_center_square * i_v_y - dot_product * displacement_center_y) / displacement_center_square;

always @(*) begin
if (in_region) begin
o_collision = 0;
if (displacement_center_square <= distance_lowerBound_square && going_inwards) o_collision = 1;
if (displacement_center_square >= distance_upperBound_square && going_outwards) o_collision = 1;
if (displacement_center_square <= distance_lowerBound_square && dot_product < 0) o_collision = 1;
if (displacement_center_square >= distance_upperBound_square && dot_product > 0) o_collision = 1;
end
else begin
o_collision = 0;
Expand Down
18 changes: 9 additions & 9 deletions Final/src/gameControl/carCollision.sv
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ module CarCollision (
input i_clk,
input i_rst_n,

input signed [sram_pkg::MAP_H_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car1_x,
input signed [sram_pkg::MAP_V_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car1_y,
input signed [sram_pkg::MAP_H_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car2_x,
input signed [sram_pkg::MAP_V_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car2_y,
input signed [sram_pkg::MAP_H_WIDTH-1:0] i_car1_x,
input signed [sram_pkg::MAP_V_WIDTH-1:0] i_car1_y,
input signed [sram_pkg::MAP_H_WIDTH-1:0] i_car2_x,
input signed [sram_pkg::MAP_V_WIDTH-1:0] i_car2_y,

input signed [game_pkg::VELOCITY_INTEGER_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car1_v_x,
input signed [game_pkg::VELOCITY_INTEGER_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car1_v_y,
Expand Down Expand Up @@ -155,10 +155,10 @@ module CarCollision (
endmodule

module CarCollisionVelocityHandler (
input signed [sram_pkg::MAP_H_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car1_x,
input signed [sram_pkg::MAP_V_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car1_y,
input signed [sram_pkg::MAP_H_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car2_x,
input signed [sram_pkg::MAP_V_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car2_y,
input signed [sram_pkg::MAP_H_WIDTH-1:0] i_car1_x,
input signed [sram_pkg::MAP_V_WIDTH-1:0] i_car1_y,
input signed [sram_pkg::MAP_H_WIDTH-1:0] i_car2_x,
input signed [sram_pkg::MAP_V_WIDTH-1:0] i_car2_y,

input signed [game_pkg::VELOCITY_INTEGER_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car1_v_x,
input signed [game_pkg::VELOCITY_INTEGER_WIDTH+game_pkg::VELOCITY_FRACTION_WIDTH-1:0] i_car1_v_y,
Expand Down Expand Up @@ -190,7 +190,7 @@ module CarCollisionVelocityHandler (

wire signed [PROCESS_WIDTH-1:0] radius_sum_with_scale;
wire signed [2*PROCESS_WIDTH-1:0] radius_sum_square_with_scale;
assign radius_sum_with_scale = (i_car1_radius + i_car2_radius) << game_pkg::VELOCITY_FRACTION_WIDTH;
assign radius_sum_with_scale = (i_car1_radius + i_car2_radius);
assign radius_sum_square_with_scale = radius_sum_with_scale * radius_sum_with_scale;
// assign o_radius_sum_square_with_scale = radius_sum_square_with_scale; // for test

Expand Down
Loading

0 comments on commit 97b28ac

Please sign in to comment.