// // Helper Functions // /* function [INDEX_WIDTH-1:0] calc_preset_a_index; input [INDEX_WIDTH-4:0] col_in; input integer x_in; integer index_out; begin index_out = col_in * NUM_MULTS + x_in; calc_preset_a_index = index_out[INDEX_WIDTH-1:0]; end endfunction function [INDEX_WIDTH-1:0] calc_rotate_a_index; input [INDEX_WIDTH-1:0] current_index_in; input [INDEX_WIDTH-1:0] last_index_in; begin if (current_index_in > {INDEX_WIDTH{1'b0}}) calc_rotate_a_index = current_index_in - 1'b1; else calc_rotate_a_index = last_index_in; end endfunction */ /* // // Narrow Counters // reg [INDEX_WIDTH-1:0] din_addr_narrow_reg; reg [INDEX_WIDTH-1:0] din_addr_narrow_dly; localparam [INDEX_WIDTH-1:0] din_addr_narrow_zero = {INDEX_WIDTH{1'b0}}; wire [INDEX_WIDTH-1:0] din_addr_narrow_next = (din_addr_narrow_reg < index_last) ? din_addr_narrow_reg + 1'b1 : din_addr_narrow_zero; wire din_addr_narrow_done = din_addr_narrow_reg == index_last; assign din_addr_narrow = din_addr_narrow_reg; always @(posedge clk) // din_addr_narrow_dly <= din_addr_narrow_reg; always @(posedge clk) // case (fsm_state_next) FSM_STATE_MULT_SQUARE_COL_0_TRIG: din_addr_narrow_reg <= din_addr_narrow_zero; FSM_STATE_MULT_SQUARE_COL_0_BUSY: din_addr_narrow_reg <= din_addr_narrow_next; FSM_STATE_MULT_SQUARE_COL_N_TRIG: din_addr_narrow_reg <= din_addr_narrow_zero; FSM_STATE_MULT_SQUARE_COL_N_BUSY: din_addr_narrow_reg <= din_addr_narrow_next; endcase // // Helper Functions // function [NUM_MULTS-1:0] calc_mac_clear_bitmask; input [2:0] t; begin case (t) 3'd0: calc_mac_clear_bitmask = 8'b00000001; 3'd1: calc_mac_clear_bitmask = 8'b00000010; 3'd2: calc_mac_clear_bitmask = 8'b00000100; 3'd3: calc_mac_clear_bitmask = 8'b00001000; 3'd4: calc_mac_clear_bitmask = 8'b00010000; 3'd5: calc_mac_clear_bitmask = 8'b00100000; 3'd6: calc_mac_clear_bitmask = 8'b01000000; 3'd7: calc_mac_clear_bitmask = 8'b10000000; endcase end endfunction function [NUM_MULTS:0] calc_mac_clear_square; input [INDEX_WIDTH-4:0] current_col_index; input [INDEX_WIDTH-1:0] b_addr_prev; begin if (b_addr_prev[INDEX_WIDTH-1:3] == current_col_index) calc_mac_clear_square = {1'b0, calc_mac_clear_bitmask(b_addr_prev[2:0])}; else calc_mac_clear_square = {1'b0, {NUM_MULTS{1'b0}}}; end endfunction // // Wide Counters // reg [INDEX_WIDTH-1:0] din_addr_wide_reg[0:NUM_MULTS-1]; integer xi; always @(posedge clk) // for (xi=0; xi