From 62495c597ca8b60f733682661afdad9e0d3e0e2d Mon Sep 17 00:00:00 2001 From: Paul Selkirk Date: Mon, 16 Mar 2020 13:58:08 -0400 Subject: Increase NUM_MULTS to 32. This required finding and fixing every function that had a baked-in assumption that NUM_MULTS=8. --- rtl/modexpng_recombinator_block.v | 68 +++++++-------------------------------- 1 file changed, 12 insertions(+), 56 deletions(-) (limited to 'rtl/modexpng_recombinator_block.v') diff --git a/rtl/modexpng_recombinator_block.v b/rtl/modexpng_recombinator_block.v index ba440b0..ccd04ac 100644 --- a/rtl/modexpng_recombinator_block.v +++ b/rtl/modexpng_recombinator_block.v @@ -260,28 +260,14 @@ module modexpng_recombinator_block // endfunction - // - // TODO: This will need some generic replacement defined in modexpng_parameters.vh - // in case anything different from NUM_MULTS = 8 is used. - // function [ NUM_MULTS -1:0] calc_square_triangle_bitmap_lsb; input [COL_INDEX_W -1:0] col_index_value; input [COL_INDEX_W -1:0] col_index_last_value; input [BANK_ADDR_W -1:0] narrow_xy_bank_value; input [ OP_ADDR_W -1:0] narrow_xy_addr_value; // - if (narrow_xy_addr_value[OP_ADDR_W-1:MAC_INDEX_W] == col_index_value) - case (narrow_xy_addr_value[MAC_INDEX_W-1:0]) - 3'b000: calc_square_triangle_bitmap_lsb = 8'b00000001; - 3'b001: calc_square_triangle_bitmap_lsb = 8'b00000010; - 3'b010: calc_square_triangle_bitmap_lsb = 8'b00000100; - 3'b011: calc_square_triangle_bitmap_lsb = 8'b00001000; - 3'b100: calc_square_triangle_bitmap_lsb = 8'b00010000; - 3'b101: calc_square_triangle_bitmap_lsb = 8'b00100000; - 3'b110: calc_square_triangle_bitmap_lsb = 8'b01000000; - 3'b111: calc_square_triangle_bitmap_lsb = 8'b10000000; - endcase - else calc_square_triangle_bitmap_lsb = 8'b00000000; + if (narrow_xy_addr_value[OP_ADDR_W-1:MAC_INDEX_W] == col_index_value) calc_square_triangle_bitmap_lsb = {{NUM_MULTS-1{1'b0}}, 1'b1} << narrow_xy_addr_value[MAC_INDEX_W-1:0]; + else calc_square_triangle_bitmap_lsb = {NUM_MULTS{1'b0}}; // endfunction @@ -307,18 +293,8 @@ module modexpng_recombinator_block input [BANK_ADDR_W -1:0] narrow_xy_bank_value; input [ OP_ADDR_W -1:0] narrow_xy_addr_value; // - if ((narrow_xy_addr_value[OP_ADDR_W-1:MAC_INDEX_W] == col_index_value) && (narrow_xy_bank_value != BANK_NARROW_EXT)) - case (narrow_xy_addr_value[MAC_INDEX_W-1:0]) - 3'b000: calc_rectangle_bitmap_lsb = 8'b00000001; - 3'b001: calc_rectangle_bitmap_lsb = 8'b00000010; - 3'b010: calc_rectangle_bitmap_lsb = 8'b00000100; - 3'b011: calc_rectangle_bitmap_lsb = 8'b00001000; - 3'b100: calc_rectangle_bitmap_lsb = 8'b00010000; - 3'b101: calc_rectangle_bitmap_lsb = 8'b00100000; - 3'b110: calc_rectangle_bitmap_lsb = 8'b01000000; - 3'b111: calc_rectangle_bitmap_lsb = 8'b10000000; - endcase - else calc_rectangle_bitmap_lsb = 8'b00000000; + if ((narrow_xy_addr_value[OP_ADDR_W-1:MAC_INDEX_W] == col_index_value) && (narrow_xy_bank_value != BANK_NARROW_EXT)) calc_rectangle_bitmap_lsb = {{NUM_MULTS-1{1'b0}}, 1'b1} << narrow_xy_addr_value[MAC_INDEX_W-1:0]; + else calc_rectangle_bitmap_lsb = {NUM_MULTS{1'b0}}; // endfunction @@ -335,18 +311,8 @@ module modexpng_recombinator_block input [BANK_ADDR_W -1:0] narrow_xy_bank_value; input [ OP_ADDR_W -1:0] narrow_xy_addr_value; // - if (narrow_xy_addr_value[OP_ADDR_W-1:MAC_INDEX_W] == col_index_value) - case (narrow_xy_addr_value[MAC_INDEX_W-1:0]) - 3'b000: calc_square_triangle_index_lsb = 3'd0; - 3'b001: calc_square_triangle_index_lsb = 3'd1; - 3'b010: calc_square_triangle_index_lsb = 3'd2; - 3'b011: calc_square_triangle_index_lsb = 3'd3; - 3'b100: calc_square_triangle_index_lsb = 3'd4; - 3'b101: calc_square_triangle_index_lsb = 3'd5; - 3'b110: calc_square_triangle_index_lsb = 3'd6; - 3'b111: calc_square_triangle_index_lsb = 3'd7; - endcase - else calc_square_triangle_index_lsb = 3'dX; + if (narrow_xy_addr_value[OP_ADDR_W-1:MAC_INDEX_W] == col_index_value) calc_square_triangle_index_lsb = narrow_xy_addr_value[MAC_INDEX_W-1:0]; + else calc_square_triangle_index_lsb = {MAC_INDEX_W{1'bX}}; // endfunction @@ -372,18 +338,8 @@ module modexpng_recombinator_block input [BANK_ADDR_W -1:0] slim_bram_xy_bank_value; input [ OP_ADDR_W -1:0] slim_bram_xy_addr_value; // - if ((slim_bram_xy_addr_value[OP_ADDR_W-1:MAC_INDEX_W] == col_index_value) && (slim_bram_xy_bank_value != BANK_NARROW_EXT)) - case (slim_bram_xy_addr_value[MAC_INDEX_W-1:0]) - 3'b000: calc_rectangle_index_lsb = 3'd0; - 3'b001: calc_rectangle_index_lsb = 3'd1; - 3'b010: calc_rectangle_index_lsb = 3'd2; - 3'b011: calc_rectangle_index_lsb = 3'd3; - 3'b100: calc_rectangle_index_lsb = 3'd4; - 3'b101: calc_rectangle_index_lsb = 3'd5; - 3'b110: calc_rectangle_index_lsb = 3'd6; - 3'b111: calc_rectangle_index_lsb = 3'd7; - endcase - else calc_rectangle_index_lsb = 3'dX; + if ((slim_bram_xy_addr_value[OP_ADDR_W-1:MAC_INDEX_W] == col_index_value) && (slim_bram_xy_bank_value != BANK_NARROW_EXT)) calc_rectangle_index_lsb = slim_bram_xy_addr_value[MAC_INDEX_W-1:0]; + else calc_rectangle_index_lsb = {MAC_INDEX_W{1'bX}}; // endfunction @@ -445,8 +401,8 @@ module modexpng_recombinator_block input [ OP_ADDR_W -1:0] narrow_xy_addr_value; input [ OP_ADDR_W -1:0] index_last_value; // - if (narrow_xy_addr_value == index_last_value) calc_square_bitmap_msb = {col_index_value != col_index_last_value, 7'b1111111}; - else calc_square_bitmap_msb = 8'b00000000; + if (narrow_xy_addr_value == index_last_value) calc_square_bitmap_msb = {col_index_value != col_index_last_value, {NUM_MULTS-1{1'b1}}}; + else calc_square_bitmap_msb = {NUM_MULTS{1'b0}}; // endfunction @@ -457,8 +413,8 @@ module modexpng_recombinator_block input [ OP_ADDR_W -1:0] narrow_xy_addr_value; input [ OP_ADDR_W -1:0] index_last_value; // - if ((narrow_xy_addr_value == OP_ADDR_ONE) && (narrow_xy_bank_value == BANK_NARROW_EXT)) calc_rectangle_bitmap_msb = 8'b11111111; - else calc_rectangle_bitmap_msb = 8'b00000000; + if ((narrow_xy_addr_value == OP_ADDR_ONE) && (narrow_xy_bank_value == BANK_NARROW_EXT)) calc_rectangle_bitmap_msb = {NUM_MULTS{1'b1}}; + else calc_rectangle_bitmap_msb = {NUM_MULTS{1'b0}}; // endfunction -- cgit v1.2.3