diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index b56726d..6864744 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -46,6 +46,9 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} fail_on_error: true reviewdog_reporter: github-check + exclude: | + rtl/redmule_noncomp.sv + rtl/redmule_fma.sv lint-cxx: runs-on: ubuntu-latest diff --git a/rtl/redmule_scheduler.sv b/rtl/redmule_scheduler.sv index f0aa2d4..eea04c8 100644 --- a/rtl/redmule_scheduler.sv +++ b/rtl/redmule_scheduler.sv @@ -134,7 +134,7 @@ logic [1:0] transfer_count_d, logic [31:0] x_rows_offs_d, x_rows_offs_q, x_cols_offs_d, - x_cols_offs_q; + x_cols_offs_q; logic [15:0] w_loaded_d, w_loaded_q, w_iters_d, w_iters_q, tot_w_loaded_d, tot_w_loaded_q, @@ -150,7 +150,7 @@ logic [$clog2(H):0] h_shift_d, d_shift_d, d_shift_q; logic w_cols_lftovr_en, - w_cols_lftovr_rst, + w_cols_lftovr_rst, x_cols_lftovr_en, x_cols_lftovr_rst; logic [$clog2(D):0] w_cycles_q, @@ -169,49 +169,52 @@ fpnew_pkg::fp_format_e input_cast_src_fmt , localparam int unsigned JMP = NumByte*(DATA_W/MemDw - 1); localparam int unsigned NBYTES = BITW/8; -typedef enum logic [3:0] {ENGINE_IDLE, PRELOAD_Y, LOAD_Y, X_REQ, W_REQ, STORE_REQ, FIRST_LOAD, WAIT, WAIT_ONE, WAIT_TWO, LOAD_X, LOAD_W, STORE, SKIP_W} redmule_fsm_state; -redmule_fsm_state current, next; +typedef enum logic [3:0] {ENGINE_IDLE, PRELOAD_Y, LOAD_Y, X_REQ, W_REQ, STORE_REQ, FIRST_LOAD, WAIT, + WAIT_ONE, WAIT_TWO, LOAD_X, LOAD_W, STORE, SKIP_W} redmule_fsm_state_e; +redmule_fsm_state_e current, next; always_comb begin : address_gen_signals - // Here we initialize the streamer source signals + // Here we initialize the streamer source signals // for the X stream source - cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.base_addr = reg_file_i.hwpe_params[X_ADDR] + x_rows_offs_q + x_cols_offs_q; - cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.tot_len = (x_rows_lftovr_q == 0) ? W : x_rows_lftovr_q; - cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.d0_len = 32'd1; - cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.d0_stride = 32'd0; - cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.d1_len = W; - cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.d1_stride = reg_file_i.hwpe_params[X_D1_STRIDE]; - cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.d2_stride = '0; + cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.base_addr = reg_file_i.hwpe_params[X_ADDR] + + x_rows_offs_q + x_cols_offs_q; + cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.tot_len = (x_rows_lftovr_q == 0) ? + W : x_rows_lftovr_q; + cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.d0_len = 'd1; + cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.d0_stride = 'd0; + cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.d1_len = W; + cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.d1_stride = reg_file_i.hwpe_params[X_D1_STRIDE]; + cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.d2_stride = '0; cntrl_streamer_o.x_stream_source_ctrl.addressgen_ctrl.dim_enable_1h = 2'b11; // Here we initialize the streamer source signals // for the W stream source - cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.base_addr = reg_file_i.hwpe_params[W_ADDR]; - cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.tot_len = reg_file_i.hwpe_params[W_TOT_LEN]; - cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.d0_len = reg_file_i.hwpe_params[W_ITERS][31:16]; - cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.d0_stride = reg_file_i.hwpe_params[W_D0_STRIDE]; - cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.d1_len = reg_file_i.hwpe_params[W_ITERS][15:0]; - cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.d1_stride = JMP; - cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.d2_stride = 32'd0; + cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.base_addr = reg_file_i.hwpe_params[W_ADDR]; + cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.tot_len = reg_file_i.hwpe_params[W_TOT_LEN]; + cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.d0_len = reg_file_i.hwpe_params[W_ITERS][31:16]; + cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.d0_stride = reg_file_i.hwpe_params[W_D0_STRIDE]; + cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.d1_len = reg_file_i.hwpe_params[W_ITERS][15:0]; + cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.d1_stride = JMP; + cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.d2_stride = 'd0; cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.dim_enable_1h = 2'b11; // Here we initialize the streamer source signals // for the Y stream source - cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.base_addr = reg_file_i.hwpe_params[Z_ADDR]; - cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.tot_len = reg_file_i.hwpe_params[Z_TOT_LEN]; - cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.d0_len = W; - cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.d0_stride = reg_file_i.hwpe_params[Z_D0_STRIDE]; - cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.d1_len = reg_file_i.hwpe_params[W_ITERS][15:0]; - cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.d1_stride = JMP; - cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.d2_stride = reg_file_i.hwpe_params[Z_D2_STRIDE]; + cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.base_addr = reg_file_i.hwpe_params[Z_ADDR]; + cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.tot_len = reg_file_i.hwpe_params[Z_TOT_LEN]; + cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.d0_len = W; + cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.d0_stride = reg_file_i.hwpe_params[Z_D0_STRIDE]; + cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.d1_len = reg_file_i.hwpe_params[W_ITERS][15:0]; + cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.d1_stride = JMP; + cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.d2_stride = reg_file_i.hwpe_params[Z_D2_STRIDE]; cntrl_streamer_o.y_stream_source_ctrl.addressgen_ctrl.dim_enable_1h = 2'b11; // Here we initialize the streamer sink signals for // the Z stream sink - cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.base_addr = reg_file_i.hwpe_params[Z_ADDR]; - cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.tot_len = reg_file_i.hwpe_params[Z_TOT_LEN]; - cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.d0_len = W; - cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.d0_stride = reg_file_i.hwpe_params[Z_D0_STRIDE]; - cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.d1_len = reg_file_i.hwpe_params[W_ITERS][15:0]; - cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.d1_stride = JMP; - cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.d2_stride = reg_file_i.hwpe_params[Z_D2_STRIDE]; + cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.base_addr = reg_file_i.hwpe_params[Z_ADDR]; + cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.tot_len = reg_file_i.hwpe_params[Z_TOT_LEN]; + cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.d0_len = W; + cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.d0_stride = reg_file_i.hwpe_params[Z_D0_STRIDE]; + cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.d1_len = reg_file_i.hwpe_params[W_ITERS][15:0]; + cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.d1_stride = JMP; + cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.d2_stride = reg_file_i.hwpe_params[Z_D2_STRIDE]; cntrl_streamer_o.z_stream_sink_ctrl.addressgen_ctrl.dim_enable_1h = 2'b11; end