From 87c71bf590e3e3d0ebe71fce2d5a3c38958aad08 Mon Sep 17 00:00:00 2001 From: Stefanie Schmid Date: Sat, 28 Mar 2026 12:14:10 +0100 Subject: [PATCH] remove (almost) all verible warnings --- src/chipinvaders.sv | 12 ++--- src/rtl/alien.sv | 2 +- src/rtl/alien_projectile.sv | 6 +-- src/rtl/cannon.sv | 16 ++++--- src/rtl/cannon_display.sv | 9 ++-- src/rtl/cannon_laser.sv | 12 ++--- src/rtl/character.sv | 14 +++--- src/rtl/hud.sv | 2 +- src/rtl/hvsync_generator.sv | 95 +++++++++++++++---------------------- 9 files changed, 76 insertions(+), 92 deletions(-) diff --git a/src/chipinvaders.sv b/src/chipinvaders.sv index fe221ff..0f84e08 100644 --- a/src/chipinvaders.sv +++ b/src/chipinvaders.sv @@ -84,12 +84,12 @@ module chipinvaders ( // Alien formation localparam int NumberRows = 5; localparam int NumberColumns = 8; - localparam [15:0] AlienSpriteWidth = 16; - localparam [15:0] AlienSpriteHeight = 16; - localparam [3:0] AlienScaling = 2; - localparam [15:0] ProjectileSpriteWidth = 1; - localparam [15:0] ProjectileSpriteHeight = 4; - localparam [3:0] ProjectileScaling = 4; + localparam logic [15:0] AlienSpriteWidth = 16; + localparam logic [15:0] AlienSpriteHeight = 16; + localparam logic [3:0] AlienScaling = 2; + localparam logic [15:0] ProjectileSpriteWidth = 1; + localparam logic [15:0] ProjectileSpriteHeight = 4; + localparam logic [3:0] ProjectileScaling = 4; logic [NumberRows-1:0][NumberColumns-1:0] alive_matrix; logic [NumberRows-1:0][NumberColumns-1:0] hit_matrix; logic [NumberRows-1:0][NumberColumns-1:0][15:0] alien_position_x_matrix; diff --git a/src/rtl/alien.sv b/src/rtl/alien.sv index 8fc6225..8f8651a 100644 --- a/src/rtl/alien.sv +++ b/src/rtl/alien.sv @@ -100,7 +100,7 @@ module alien #( invert_movement = alive && !frozen && (movement_counter >= movement_frequency) && - (next_position_x+(SPRITE_WIDTH*SCALING_FACTOR) >= MAX_POSITION_X || + (next_position_x+(SPRITE_WIDTH*SCALING_FACTOR) >= MAX_POSITION_X || next_position_x < movement_width); reached_bottom = alive && (position_y + (SPRITE_HEIGHT * SCALING_FACTOR) >= MAX_POSITION_Y); diff --git a/src/rtl/alien_projectile.sv b/src/rtl/alien_projectile.sv index 7c7562e..91bdc33 100644 --- a/src/rtl/alien_projectile.sv +++ b/src/rtl/alien_projectile.sv @@ -1,6 +1,6 @@ module alien_projectile #( - parameter LOWER_BORDER = 480, - parameter SCALING = 4 + parameter logic[15:0] LOWER_BORDER = 480, + parameter logic[9:0] SCALING = 4 ) ( input logic clock, input logic reset_n, @@ -23,7 +23,7 @@ module alien_projectile #( output logic projectile_gfx ); - localparam ProjectileSpeed = 6; + localparam logic[9:0] ProjectileSpeed = 6; logic frame; diff --git a/src/rtl/cannon.sv b/src/rtl/cannon.sv index 252f543..2af40e3 100644 --- a/src/rtl/cannon.sv +++ b/src/rtl/cannon.sv @@ -55,26 +55,28 @@ module cannon #( $readmemb("src/rtl/single_barrel_cannon_fire.hex", sprite_rom_firing); end - // --- RENDERING LOGIC --- logic signed [10:0] rel_x, rel_y; logic in_sprite_bounds; always_comb begin - rel_x = (10'(pix_x) - x_reg) / scale; - rel_y = (10'(pix_y) - SHIP_Y) / scale; + rel_x = (pix_x - x_reg) / scale; + rel_y = (pix_y - SHIP_Y) / scale; in_sprite_bounds = (rel_x >= 0) && (rel_x < SpriteWidth) && (rel_y >= 0) && (rel_y < SpriteHeight); - // rel_y[3:0] instead of [2:0] - need 4 bits for indices 0–15 if (fire) begin - cannon_graphics = in_sprite_bounds + cannon_graphics = (in_sprite_bounds ? ~sprite_rom_firing[rel_y[3:0]][SpriteWidth-1-rel_x[3:0]] - : 1'b0; + : 0) + & scale > 0; // scale = 0 -> invisible end else begin - cannon_graphics = in_sprite_bounds ? ~sprite_rom[rel_y[3:0]][SpriteWidth-1-rel_x[3:0]] : 1'b0; + cannon_graphics = (in_sprite_bounds + ? ~sprite_rom[rel_y[3:0]][SpriteWidth-1-rel_x[3:0]] + : 0) + & scale > 0; // scale = 0 -> invisible end end diff --git a/src/rtl/cannon_display.sv b/src/rtl/cannon_display.sv index 8ad4d42..2716f15 100644 --- a/src/rtl/cannon_display.sv +++ b/src/rtl/cannon_display.sv @@ -16,16 +16,17 @@ module cannon_display #( $readmemb("src/rtl/single_barrel_cannon.hex", sprite_rom); end - logic signed [10:0] rel_x, rel_y = 0; + logic signed [10:0] rel_x, rel_y; logic in_sprite_bounds; always_comb begin - rel_x = (10'(pix_x) - x_reg) / scale; - rel_y = (10'(pix_y) - CANNON_Y) / scale; + rel_x = (pix_x - x_reg) / scale; + rel_y = (pix_y - CANNON_Y) / scale; in_sprite_bounds = (rel_x >= 0) && (rel_x < SpriteW) && (rel_y >= 0) && (rel_y < SpriteH); - cannon_graphics = in_sprite_bounds ? ~sprite_rom[rel_y[3:0]][SpriteW-1-rel_x[3:0]] : 1'b0; + cannon_graphics = (in_sprite_bounds ? ~sprite_rom[rel_y[3:0]][SpriteW-1-rel_x[3:0]] : 1'b0) + & scale > 0; // scale = 0 -> invisible end endmodule diff --git a/src/rtl/cannon_laser.sv b/src/rtl/cannon_laser.sv index 44f9e63..2597188 100644 --- a/src/rtl/cannon_laser.sv +++ b/src/rtl/cannon_laser.sv @@ -1,7 +1,7 @@ module cannon_laser #( - parameter CANNON_Y = 470, - parameter UPPER_BORDER = 50, - parameter SCALING = 4 + parameter logic[15:0] CANNON_Y = 470, + parameter logic[15:0] UPPER_BORDER = 50, + parameter logic[15:0] SCALING = 4 ) ( input logic reset_n, input logic clk, @@ -23,9 +23,9 @@ module cannon_laser #( output logic laser_gfx ); - localparam LaserSpeed = 6; - localparam LaserWidth = 1 * SCALING; - localparam LaserHeight = 4 * SCALING; + localparam logic[15:0] LaserSpeed = 6; + localparam logic[15:0] LaserWidth = 1 * SCALING; + localparam logic[15:0] LaserHeight = 4 * SCALING; always_ff @(posedge clk or negedge reset_n) begin if (!reset_n) begin diff --git a/src/rtl/character.sv b/src/rtl/character.sv index 78f6622..dc8ac96 100644 --- a/src/rtl/character.sv +++ b/src/rtl/character.sv @@ -3,7 +3,7 @@ module character #( parameter logic [15:0] X_POS = 0, parameter logic [15:0] Y_POS = 0 ) ( - input logic [15:0] char_code, // ascii when letter + input logic [7:0] char_code, // ascii when letter input logic [15:0] hpos, input logic [15:0] vpos, @@ -25,9 +25,9 @@ module character #( logic is_digit, is_letter; - logic [15:0] letter_index; + logic [4:0] letter_index; - logic [15:0] rel_x, rel_y; + logic [2:0] rel_x, rel_y; always_comb begin graphics = 0; @@ -36,14 +36,14 @@ module character #( is_digit = (char_code <= 9); is_letter = (char_code >= "A") && (char_code <= "Z"); - rel_x = (hpos - X_POS) / SCALING; - rel_y = (vpos - Y_POS) / SCALING; + rel_x = 3'((hpos - X_POS) / SCALING); + rel_y = 3'((vpos - Y_POS) / SCALING); if (rel_y < SpriteHeight && rel_x < SpriteWidth) begin if (is_digit) begin - graphics = digits_rom[char_code][rel_y][SpriteWidth-1-rel_x]; + graphics = digits_rom[4'(char_code)][rel_y][SpriteWidth-1-rel_x]; end else if (is_letter) begin - letter_index = char_code[15:0] - "A"; + letter_index = 5'(char_code[7:0] - "A"); graphics = letters_rom[letter_index][rel_y][SpriteWidth-1-rel_x]; end end diff --git a/src/rtl/hud.sv b/src/rtl/hud.sv index 372de36..0059a45 100644 --- a/src/rtl/hud.sv +++ b/src/rtl/hud.sv @@ -92,7 +92,7 @@ module hud #( localparam logic [15:0] LiveW = 16; localparam logic [15:0] LiveGap = 4; - localparam logic [15:0] LiveScale = SCALE * 2; + localparam logic [3:0] LiveScale = SCALE * 2; localparam logic [15:0] LiveStep = (LiveW + LiveGap) * LiveScale; genvar life; diff --git a/src/rtl/hvsync_generator.sv b/src/rtl/hvsync_generator.sv index d1e7a94..f10f7aa 100644 --- a/src/rtl/hvsync_generator.sv +++ b/src/rtl/hvsync_generator.sv @@ -1,70 +1,51 @@ - -`ifndef HVSYNC_GENERATOR_H -`define HVSYNC_GENERATOR_H - -/* -Video sync generator, used to drive a VGA monitor. -Timing from: https://en.wikipedia.org/wiki/Video_Graphics_Array -To use: -- Wire the hsync and vsync signals to top level outputs -- Add a 3-bit (or more) "rgb" output to the top level -*/ - -module hvsync_generator(clk, reset, hsync, vsync, display_on, hpos, vpos); - - input clk; - input reset; - output reg hsync, vsync; - output display_on; - output reg [9:0] hpos; - output reg [9:0] vpos; +module hvsync_generator ( + input clk, + input reset, + output logic hsync, + output logic vsync, + output logic display_on, + output logic [9:0] hpos, + output logic [9:0] vpos +); // declarations for TV-simulator sync parameters // horizontal constants - parameter H_DISPLAY = 640; // horizontal display width - parameter H_BACK = 48; // horizontal left border (back porch) - parameter H_FRONT = 16; // horizontal right border (front porch) - parameter H_SYNC = 96; // horizontal sync width - // vertical constants - parameter V_DISPLAY = 480; // vertical display height - parameter V_TOP = 33; // vertical top border - parameter V_BOTTOM = 10; // vertical bottom border - parameter V_SYNC = 2; // vertical sync # lines + localparam logic [15:0] HDisplay = 640; // horizontal display width + localparam logic [15:0] HBack = 48; // horizontal left border (back porch) + localparam logic [15:0] HFront = 16; // horizontal right border (front porch) + localparam logic [15:0] HSync = 96; // horizontal sync width + // verticallogic constants + localparam logic [15:0] VDisplay = 480; // vertical display height + localparam logic [15:0] VTop = 33; // vertical top border + localparam logic [15:0] VBottom = 10; // vertical bottom border + localparam logic [15:0] VSync = 2; // vertical sync # lines // derived constants - parameter H_SYNC_START = H_DISPLAY + H_FRONT; - parameter H_SYNC_END = H_DISPLAY + H_FRONT + H_SYNC - 1; - parameter H_MAX = H_DISPLAY + H_BACK + H_FRONT + H_SYNC - 1; - parameter V_SYNC_START = V_DISPLAY + V_BOTTOM; - parameter V_SYNC_END = V_DISPLAY + V_BOTTOM + V_SYNC - 1; - parameter V_MAX = V_DISPLAY + V_TOP + V_BOTTOM + V_SYNC - 1; + localparam logic [15:0] HSyncStart = HDisplay + HFront; + localparam logic [15:0] HSyncEnd = HDisplay + HFront + HSync - 1; + localparam logic [15:0] HMax = HDisplay + HBack + HFront + HSync - 1; + localparam logic [15:0] VSyncStart = VDisplay + VBottom; + localparam logic [15:0] VSyncEnd = VDisplay + VBottom + VSync - 1; + localparam logic [15:0] VMax = VDisplay + VTop + VBottom + VSync - 1; + + wire hmaxxed = (hpos == HMax) || reset; // set when hpos is maximum + wire vmaxxed = (vpos == VMax) || reset; // set when vpos is maximum - wire hmaxxed = (hpos == H_MAX) || reset; // set when hpos is maximum - wire vmaxxed = (vpos == V_MAX) || reset; // set when vpos is maximum - // horizontal position counter - always @(posedge clk) - begin - hsync <= (hpos>=H_SYNC_START && hpos<=H_SYNC_END); - if(hmaxxed) - hpos <= 0; - else - hpos <= hpos + 1; + always @(posedge clk) begin + hsync <= (hpos >= HSyncStart && hpos <= HSyncEnd); + if (hmaxxed) hpos <= 0; + else hpos <= hpos + 1; end // vertical position counter - always @(posedge clk) - begin - vsync <= (vpos>=V_SYNC_START && vpos<=V_SYNC_END); - if(hmaxxed) - if (vmaxxed) - vpos <= 0; - else - vpos <= vpos + 1; + always @(posedge clk) begin + vsync <= (vpos >= VSyncStart && vpos <= VSyncEnd); + if (hmaxxed) + if (vmaxxed) vpos <= 0; + else vpos <= vpos + 1; end - + // display_on is set when beam is in "safe" visible frame - assign display_on = (hpos