Skip to content

Commit 1128abc

Browse files
authored
Merge pull request #34 from pulp-platform/yt/support-dequant
(Re-)Get the pipeline up and running
2 parents 85158be + 1fc79d5 commit 1128abc

17 files changed

+88
-116
lines changed

Bender.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ sources:
3333
- rtl/redmule_castout.sv
3434
- rtl/redmule_streamer.sv
3535
- rtl/x_buffer/redmule_x_buffer.sv
36-
- rtl/x_buffer/redmule_x_pad_scm.sv
36+
- rtl/x_buffer/redmule_x_pad_scm.sv
3737
- rtl/x_buffer/redmule_x_buffer_scm.sv
38-
- rtl/w_buffer/redmule_w_buffer.sv
38+
- rtl/w_buffer/redmule_w_buffer.sv
3939
- rtl/w_buffer/redmule_w_buffer_scm.sv
4040
- rtl/z_buffer/redmule_z_buffer.sv
4141
- rtl/z_buffer/redmule_z_buffer_scm.sv
@@ -45,7 +45,6 @@ sources:
4545
- rtl/redmule_row.sv
4646
- rtl/redmule_engine.sv
4747
- rtl/redmule_top.sv
48-
- rtl/redmule_fifo_scm.sv
4948
- rtl/redmule_memory_scheduler.sv
5049

5150
- target: redmule_hwpe

Makefile

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ SW ?= $(RootDir)sw
1717
BUILD_DIR ?= $(SW)/build
1818
SIM_DIR ?= $(RootDir)vsim
1919
QUESTA ?= questa-2023.4
20-
BENDER_DIR ?= .
21-
BENDER ?= bender
20+
Bender ?= $(CargoInstallDir)/bin/bender
2221
Gcc ?= $(GccInstallDir)/bin/
2322
ISA ?= riscv
2423
ARCH ?= rv
@@ -104,17 +103,12 @@ SHELL := /bin/bash
104103
# Generate instructions and data stimuli
105104
sw-build: $(STIM_INSTR) $(STIM_DATA) dis
106105

107-
# Download bender
108-
bender:
109-
curl --proto '=https' \
110-
--tlsv1.2 https://pulp-platform.github.io/bender/init -sSf | sh -s -- 0.24.0
111-
112106
$(SIM_DIR):
113107
mkdir -p $(SIM_DIR)
114108

115109
synth-ips:
116-
$(BENDER) update
117-
$(BENDER) script synopsys \
110+
$(Bender) update
111+
$(Bender) script synopsys \
118112
$(common_targs) $(common_defs) \
119113
$(synth_targs) $(synth_defs) \
120114
> ${compile_script_synth}
@@ -156,6 +150,11 @@ VerilatorInstallDir := $(InstallDir)/verilator
156150
GccInstallDir := $(InstallDir)/riscv
157151
RiscvTarDir := riscv.tar.gz
158152
GccUrl := https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2024.08.28/riscv32-elf-ubuntu-20.04-gcc-nightly-2024.08.28-nightly.tar.gz
153+
# Bender
154+
RustupInit := $(ScriptsDir)/rustup-init.sh
155+
CargoInstallDir := $(InstallDir)/cargo
156+
RustupInstallDir := $(InstallDir)/rustup
157+
Cargo := $(CargoInstallDir)/bin/cargo
159158

160159
verilator: $(InstallDir)/bin/verilator
161160

@@ -177,3 +176,13 @@ $(GccInstallDir):
177176
cd $(VendorDir) && \
178177
wget $(GccUrl) -O $(RiscvTarDir) && \
179178
tar -xzvf $(RiscvTarDir) -C $(InstallDir) riscv
179+
180+
bender: $(CargoInstallDir)/bin/bender
181+
182+
$(CargoInstallDir)/bin/bender:
183+
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf > $(RustupInit)
184+
mkdir -p $(InstallDir)
185+
export CARGO_HOME=$(CargoInstallDir) && export RUSTUP_HOME=$(RustupInstallDir) && \
186+
chmod +x $(RustupInit); source $(RustupInit) -y && \
187+
$(Cargo) install bender
188+
rm -rf $(RustupInit)

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,11 @@ The RedMulE Golden Model is intended to generate Floating-Point (FP) input and r
5757
The golden model makes use of Python3.6 virtual environment, Numpy and Pytorch. These modules have
5858
to be installed if they are not already present. To simplify this procedure, the `golden-model` folder
5959
contains a `setup-py.sh` that can be sourced to install all these modules, and to export the
60-
required environment variables. Thus, the first step is to move into the `golden-model` folder and run:
60+
required environment variables. Thus, the first step is to install such python packages by running:
6161
```bash
62-
source golden-model/setup-py.sh
62+
cd golden-model
63+
source setup-py.sh
64+
cd ..
6365
```
6466

6567
This will install a Python3.6 virtual environment under the `venv` folder.

rtl/redmule_ctrl.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// SPDX-License-Identifier: SHL-0.51
44
//
55
// Yvan Tortorella <yvan.tortorella@unibo.it>
6-
// Andrea Belano <andrea.belano2@unibo.it>
6+
// Andrea Belano <andrea.belano2@unibo.it>
77
//
88

99
import redmule_pkg::*;

rtl/redmule_memory_scheduler.sv

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
// Copyright 2025 ETH Zurich and University of Bologna.
2+
// Solderpad Hardware License, Version 0.51, see LICENSE for details.
3+
// SPDX-License-Identifier: SHL-0.51
4+
//
5+
// Andrea Belano <andrea.belano2@unibo.it>
6+
//
7+
18
module redmule_memory_scheduler
29
import redmule_pkg::*;
310
import hwpe_ctrl_package::*;
@@ -36,7 +43,7 @@ module redmule_memory_scheduler
3643
logic [$clog2(W):0] x_rows_lftover_d, x_rows_lftover_q;
3744

3845
logic [$clog2(W):0] num_x_reads;
39-
46+
4047
always_ff @(posedge clk_i or negedge rst_ni) begin : x_cols_iters_register
4148
if (~rst_ni) begin
4249
x_cols_iters_q <= '0;
@@ -64,7 +71,7 @@ module redmule_memory_scheduler
6471
end
6572

6673
assign w_iters_d = w_iters_q == reg_file_i.hwpe_params[W_ITERS][15:0]-1 ? '0 : w_iters_q + 1;
67-
74+
6875
always_ff @(posedge clk_i or negedge rst_ni) begin : x_rows_iters_register
6976
if (~rst_ni) begin
7077
x_rows_iters_q <= '0;
@@ -139,7 +146,7 @@ module redmule_memory_scheduler
139146

140147
// Here we initialize the streamer source signals
141148
// for the W stream source
142-
// In quantization mode this is used to load the scales instead
149+
// In quantization mode this is used to load the scales instead
143150
if (reg_file_i.hwpe_params[DEQUANT_MODE][0] == 1'b0) begin
144151
cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.base_addr = reg_file_i.hwpe_params[W_ADDR];
145152
cntrl_streamer_o.w_stream_source_ctrl.addressgen_ctrl.tot_len = reg_file_i.hwpe_params[W_TOT_LEN];
@@ -222,7 +229,7 @@ module redmule_memory_scheduler
222229
always_comb begin : req_start_assignment
223230
cntrl_streamer_o.x_stream_source_ctrl.req_start = (cntrl_scheduler_i.first_load || tot_x_read_q != '0 && tot_x_read_q != reg_file_i.hwpe_params[TOT_X_READ]) && flgs_streamer_i.x_stream_source_flags.ready_start;
224231
cntrl_streamer_o.w_stream_source_ctrl.req_start = cntrl_scheduler_i.first_load && flgs_streamer_i.z_stream_sink_flags.ready_start;
225-
cntrl_streamer_o.y_stream_source_ctrl.req_start = cntrl_scheduler_i.first_load && reg_file_i.hwpe_params[OP_SELECTION][0] && flgs_streamer_i.y_stream_source_flags.ready_start;
232+
cntrl_streamer_o.y_stream_source_ctrl.req_start = cntrl_scheduler_i.first_load && reg_file_i.hwpe_params[OP_SELECTION][0] && flgs_streamer_i.y_stream_source_flags.ready_start;
226233
cntrl_streamer_o.z_stream_sink_ctrl.req_start = cntrl_scheduler_i.first_load && flgs_streamer_i.z_stream_sink_flags.ready_start;
227234
cntrl_streamer_o.gid_stream_source_ctrl.req_start = '0; //FIXME
228235
cntrl_streamer_o.wq_stream_source_ctrl.req_start = '0; //FIXME
@@ -234,4 +241,4 @@ module redmule_memory_scheduler
234241
assign cntrl_streamer_o.output_cast_src_fmt = fpnew_pkg::fp_format_e'(reg_file_i.hwpe_params[OP_SELECTION][12:10]);
235242
assign cntrl_streamer_o.output_cast_dst_fmt = fpnew_pkg::fp_format_e'(reg_file_i.hwpe_params[OP_SELECTION][15:13]);
236243

237-
endmodule
244+
endmodule : redmule_memory_scheduler

rtl/redmule_pkg.sv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ package redmule_pkg;
9999
// [2:1] -> Quantized format
100100
// [0:0] -> Dequantization enable
101101
parameter int unsigned DEQUANT_MODE = 18; // 0x48
102-
parameter int unsigned GIDX_ADDR = 19; // 0x4C
102+
parameter int unsigned GIDX_ADDR = 19; // 0x4C
103103
parameter int unsigned SCALES_ADDR = 20; // 0x50
104104
parameter int unsigned ZEROS_ADDR = 21; // 0x54
105105

rtl/redmule_scheduler.sv

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Solderpad Hardware License, Version 0.51, see LICENSE for details.
33
// SPDX-License-Identifier: SHL-0.51
44
//
5+
// Yvan Tortorella <yvan.tortorella@unibo.it>
56
// Andrea Belano <andrea.belano2@unibo.it>
67
//
78

@@ -168,7 +169,7 @@ module redmule_scheduler
168169

169170
assign x_shift_cnt_en = (current_state == LOAD_W) && ~stall_engine;
170171
assign x_shift_cnt_d = x_shift_cnt_q == H-1 ? '0 : x_shift_cnt_q + 1;
171-
172+
172173
assign cntrl_x_buffer_o.h_shift = x_shift_cnt_en;
173174
assign cntrl_x_buffer_o.d_shift = x_shift_cnt_q == H-1 && x_shift_cnt_en;
174175

@@ -194,7 +195,7 @@ module redmule_scheduler
194195

195196
assign x_reload_en = start || x_cols_iter_en/*x_w_iters_en*/;
196197
assign x_reload_rst = flgs_x_buffer_i.full;
197-
198+
198199
assign cntrl_x_buffer_o.pad_setup = current_state == PRELOAD && next_state == LOAD_W;
199200
assign cntrl_x_buffer_o.load = (flgs_x_buffer_i.empty || x_reload_q) && x_valid_i;
200201
assign cntrl_x_buffer_o.rst_w_index = (current_state == LOAD_W && x_shift_cnt_q == H-1) && flgs_x_buffer_i.full && ~stall_engine; // FIXME CHECK, WAS current_state == LOAD_W && flgs_x_buffer_i.full
@@ -271,7 +272,7 @@ module redmule_scheduler
271272

272273
assign cntrl_w_buffer_o.height = w_rows_iter_q >= reg_file_i.hwpe_params[W_ITERS][31:16]-(PIPE_REGS+1)/*w_cols_iter_q == reg_file_i.hwpe_params[W_ITERS][15:0]-1*/ && reg_file_i.hwpe_params[LEFTOVERS][15:8] != '0 ? reg_file_i.hwpe_params[LEFTOVERS][15:8] : H;
273274
assign cntrl_w_buffer_o.width = w_cols_iter_q == reg_file_i.hwpe_params[W_ITERS][15:0]-1/*w_rows_iter_q >= reg_file_i.hwpe_params[W_ITERS][31:16]-(PIPE_REGS+1)*/ && reg_file_i.hwpe_params[LEFTOVERS][7:0] != '0 ? reg_file_i.hwpe_params[LEFTOVERS][7:0] : D;
274-
275+
275276
assign cntrl_w_buffer_o.load = current_state == LOAD_W && ~stall_engine;
276277
assign cntrl_w_buffer_o.shift = (current_state == LOAD_W || current_state == WAIT) && ~stall_engine;
277278

@@ -584,7 +585,7 @@ module redmule_scheduler
584585
assign flgs_scheduler_o.w_loaded = current_state == LOAD_W && ~stall_engine;
585586

586587
/*********************************
587-
* FSM *
588+
* FSM *
588589
*********************************/
589590

590591
always_ff @(posedge clk_i or negedge rst_ni) begin : state_register
@@ -637,4 +638,4 @@ module redmule_scheduler
637638
endcase
638639
end
639640

640-
endmodule
641+
endmodule : redmule_scheduler

rtl/redmule_top.sv

Lines changed: 9 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -137,24 +137,24 @@ flags_fifo_t w_fifo_flgs;
137137
// X streaming interface + X FIFO interface
138138
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) x_buffer_d ( .clk( clk_i ) );
139139
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) x_buffer_fifo ( .clk( clk_i ) );
140-
141-
// W streaming interface + W FIFO interface
140+
141+
// W streaming interface + W FIFO interface
142142
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) w_buffer_d ( .clk( clk_i ) );
143143
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) w_buffer_fifo ( .clk( clk_i ) );
144-
145-
// Y streaming interface + Y FIFO interface
144+
145+
// Y streaming interface + Y FIFO interface
146146
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) y_buffer_d ( .clk( clk_i ) );
147147
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) y_buffer_fifo ( .clk( clk_i ) );
148-
149-
// Z streaming interface + Z FIFO interface
148+
149+
// Z streaming interface + Z FIFO interface
150150
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) z_buffer_q ( .clk( clk_i ) );
151151
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) z_buffer_fifo ( .clk( clk_i ) );
152152

153153
// GIDX streaming interface + GIDX FIFO interface
154154
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) gidx_stream_d ( .clk( clk_i ) ); //FIXME DATA WIDTH (?)
155155
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) gidx_buffer_fifo ( .clk( clk_i ) );
156156

157-
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) wq_stream_d ( .clk( clk_i ) );
157+
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) wq_stream_d ( .clk( clk_i ) );
158158
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) wq_buffer_fifo ( .clk( clk_i ) );
159159

160160
hwpe_stream_intf_stream #( .DATA_WIDTH ( DATAW_ALIGN ) ) zeros_stream_d ( .clk( clk_i ) ); //FIXME DATA WIDTH
@@ -317,7 +317,7 @@ redmule_w_buffer #(
317317
.flags_o ( w_buffer_flgs ),
318318
.w_buffer_o ( w_buffer_q ),
319319
.w_buffer_i ( w_buffer_fifo.data ),
320-
.next_gidx_i ( wrow_q.data &'b111 ) //JUST FOR TESTING
320+
.next_gidx_i ( wrow_q.data &'b111 ) //JUST FOR TESTING
321321
);
322322

323323
logic [Width-1:0][BITW-1:0] z_buffer_d, y_bias_q;
@@ -446,7 +446,7 @@ redmule_engine #(
446446
redmule_memory_scheduler #(
447447
.DW (DATAW_ALIGN),
448448
.W (Width),
449-
.H (Height)
449+
.H (Height)
450450
) i_memory_scheduler (
451451
.clk_i ( clk_i ),
452452
.rst_ni ( rst_ni ),
@@ -495,52 +495,6 @@ redmule_ctrl #(
495495
/*---------------------------------------------------------------*/
496496
/* | Local FSM | */
497497
/*---------------------------------------------------------------*/
498-
499-
//redmule_scheduler #(
500-
// .Height ( Height ),
501-
// .Width ( Width ),
502-
// .NumPipeRegs ( NumPipeRegs )
503-
//) i_scheduler (
504-
// .clk_i ( clk_i ),
505-
// .rst_ni ( rst_ni ),
506-
// .test_mode_i ( test_mode_i ),
507-
// .clear_i ( clear ),
508-
// .x_valid_i ( x_buffer_fifo.valid ),
509-
// .x_strb_i ( x_buffer_fifo.strb ),
510-
// .w_valid_i ( w_buffer_fifo.valid ),
511-
// .w_strb_i ( w_buffer_fifo.strb ),
512-
// .y_fifo_valid_i ( y_buffer_fifo.valid ),
513-
// .y_fifo_strb_i ( y_buffer_fifo.strb ),
514-
// .z_ready_i ( z_buffer_q.ready ),
515-
// .accumulate_i ( accumulate ),
516-
// .engine_flush_i ( engine_flush ),
517-
// .z_strb_o ( ),
518-
// .soft_clear_o ( soft_clear ),
519-
// .w_load_o ( w_load ),
520-
// .w_cols_lftovr_o ( w_cols_lftovr ),
521-
// .w_rows_lftovr_o ( w_rows_lftovr ),
522-
// .y_cols_lftovr_o ( y_cols_lftovr ),
523-
// .y_rows_lftovr_o ( y_rows_lftovr ),
524-
// .gate_en_o ( gate_en ),
525-
// .z_buffer_clk_en_o ( fsm_z_clk_en ),
526-
// .reg_enable_o ( reg_enable ),
527-
// .z_store_o ( z_buffer_store ),
528-
// .y_buffer_load_o ( y_buffer_load ),
529-
// .reg_file_i ( reg_file ),
530-
// .flgs_streamer_i ( flgs_streamer ),
531-
// .flgs_x_buffer_i ( x_buffer_flgs ),
532-
// .flgs_w_buffer_i ( w_buffer_flgs ),
533-
// .flgs_z_buffer_i ( z_buffer_flgs ),
534-
// .flgs_engine_i ( flgs_engine ),
535-
// .fifo_flgs_i ( w_fifo_flgs ),
536-
// .cntrl_scheduler_i ( cntrl_scheduler ),
537-
// .cntrl_engine_o ( cntrl_engine ),
538-
// .cntrl_x_buffer_o ( x_buffer_ctrl ),
539-
// .flgs_scheduler_o ( flgs_scheduler )
540-
//);
541-
542-
543-
// Will replace the scheduler
544498
redmule_scheduler #(
545499
.Height ( Height ),
546500
.Width ( Width ),

rtl/w_buffer/redmule_w_buffer.sv

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module redmule_w_buffer
1717
parameter int unsigned GID_WIDTH = GROUP_ID_WIDTH ,
1818
localparam int unsigned BITW = fp_width(FpFormat), // Number of bits for the given format
1919
localparam int unsigned H = Height ,
20-
localparam int unsigned D = DW/BITW
20+
localparam int unsigned D = DW/BITW
2121
)(
2222
input logic clk_i ,
2323
input logic rst_ni ,
@@ -61,7 +61,7 @@ logic [$clog2(H)-1:0] buf_write_addr;
6161

6262
logic [H-1:0][$clog2(N_REGS+1)+$clog2(C)+$clog2(H)-1:0] buf_read_addr;
6363

64-
for (genvar d = 0; d < D; d++) begin : zero_padding
64+
for (genvar d = 0; d < D; d++) begin : gen_zero_padding
6565
assign w_data[d] = (d < ctrl_i.width && w_row < ctrl_i.height) ? w_buffer_i[(d+1)*BITW-1:d*BITW] : '0;
6666
end
6767

@@ -164,7 +164,7 @@ for (genvar h = 0; h < H; h++) begin : gen_w_id_registers
164164
assign cache_w_id_valid_d[h] = (evict_pointer == h && ctrl_i.load && ctrl_i.dequant && ~gidx_present) ? '1 : cache_w_id_valid_q[h];
165165
end
166166

167-
// Each row of the buffer has a counter that
167+
// Each row of the buffer has a counter that
168168
// It resets to D/(PIPE_REGS+1)-1 each time the vector is requested
169169
for (genvar h = 0; h < H; h++) begin : gen_usage_counters
170170
always_ff @(posedge clk_i or negedge rst_ni) begin

rtl/w_buffer/redmule_w_buffer_scm.sv

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ module redmule_w_buffer_scm #(
99
parameter int unsigned WORD_SIZE = 32,
1010
parameter int unsigned ROWS = 1 ,
1111
parameter int unsigned COLS = 1 ,
12-
parameter int unsigned ELMS = 1
12+
parameter int unsigned ELMS = 1
1313
) (
1414
input logic clk_i ,
1515
input logic rst_ni ,
@@ -51,7 +51,7 @@ module redmule_w_buffer_scm #(
5151
assign cols_read_addr[r] = cols_read_offs_q >= r ? cols_read_offs_q - r : ROWS - (r - cols_read_offs_q);
5252
end
5353

54-
for (genvar r = 0; r < ROWS; r++) begin : output_assignment
54+
for (genvar r = 0; r < ROWS; r++) begin : gen_output_assignment
5555
assign rdata_o[r] = buffer_q[rows_read_addr_q[r]][cols_read_addr[r]][elms_read_addr_q];
5656
end
5757

@@ -84,4 +84,4 @@ module redmule_w_buffer_scm #(
8484
end
8585
end
8686

87-
endmodule
87+
endmodule : redmule_w_buffer_scm

0 commit comments

Comments
 (0)