From 55e5de335e917734f60862876b0c1ba32a66e0fa Mon Sep 17 00:00:00 2001 From: Diyou Shen Date: Fri, 10 Jul 2026 10:15:27 +0200 Subject: [PATCH 1/9] [Dep] Switch to common_cell v2 --- Bender.lock | 12 +- Bender.yml | 7 +- hw/ip/snitch/src/riscv_instr.sv | 310 ++++---------------------------- hw/src/generated/spatz_pkg.sv | 2 +- hw/src/reorder_buffer.sv | 2 +- hw/src/spatz.sv | 26 +-- hw/src/spatz_controller.sv | 26 +-- hw/src/spatz_doublebw_vlsu.sv | 61 ++++--- hw/src/spatz_fpu_sequencer.sv | 15 +- hw/src/spatz_pkg.sv.tpl | 2 +- hw/src/spatz_serdiv.sv | 12 +- hw/src/spatz_vfu.sv | 7 +- hw/src/spatz_vlsu.sv | 61 ++++--- hw/src/spatz_vrf.sv | 3 +- hw/src/spatz_vsldu.sv | 12 +- hw/src/vregfile.sv | 4 +- 16 files changed, 166 insertions(+), 396 deletions(-) diff --git a/Bender.lock b/Bender.lock index ef9b323..a982990 100644 --- a/Bender.lock +++ b/Bender.lock @@ -9,8 +9,8 @@ packages: - common_verification - tech_cells_generic common_cells: - revision: 9afda9abb565971649c2aa0985639c096f351171 - version: 1.38.0 + revision: 65881ba0300209f181ddd34a12a8a2e5df7c07c8 + version: null source: Git: https://github.com/pulp-platform/common_cells.git dependencies: @@ -23,10 +23,10 @@ packages: Git: https://github.com/pulp-platform/common_verification.git dependencies: [] fpnew: - revision: bf2100ff68cf736c50b095169d87231a1fa3cc66 + revision: 46cb33a4ce6b04b83ec38ebd288dd58a031a6390 version: null source: - Git: https://github.com/Jayanth2209/cvfpu.git + Git: https://github.com/pulp-platform/cvfpu.git dependencies: - common_cells - fpu_div_sqrt_mvp @@ -55,8 +55,8 @@ packages: - common_cells - tech_cells_generic tech_cells_generic: - revision: 7968dd6e6180df2c644636bc6d2908a49f2190cf - version: 0.2.13 + revision: 3a3de73632a06826b1bd9c65a0a2e92b32016845 + version: 0.2.14 source: Git: https://github.com/pulp-platform/tech_cells_generic.git dependencies: diff --git a/Bender.yml b/Bender.yml index d0f172d..7c066e8 100644 --- a/Bender.yml +++ b/Bender.yml @@ -10,10 +10,9 @@ package: - "Diyou Shen Date: Thu, 23 Jul 2026 14:12:31 +0200 Subject: [PATCH 2/9] [Bender] Remove unused dependencies --- Bender.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Bender.yml b/Bender.yml index 7c066e8..c27a27a 100644 --- a/Bender.yml +++ b/Bender.yml @@ -13,8 +13,6 @@ dependencies: common_cells: { git: "https://github.com/pulp-platform/common_cells.git", rev: master } FPnew: { git: "https://github.com/pulp-platform/cvfpu.git", rev: common-cells-v2 } tech_cells_generic: { git: "https://github.com/pulp-platform/tech_cells_generic.git", version: 0.2.14 } - snitch: { path: "hw/ip/snitch" } - reqrsp_interface: { path: "hw/ip/reqrsp_interface" } workspace: checkout_dir: "hw/ip" @@ -25,7 +23,9 @@ sources: files: # Level 0 - hw/ip/snitch/src/riscv_instr.sv - - hw/src/reorder_buffer.sv + - target: mempool + files: + - hw/src/reorder_buffer.sv - hw/src/rvv_pkg.sv # Level 1 - hw/src/generated/spatz_pkg.sv From 984b8a24a1d0ba265fe2096262f1091b04e37e0a Mon Sep 17 00:00:00 2001 From: Diyou Shen Date: Thu, 23 Jul 2026 15:45:55 +0200 Subject: [PATCH 3/9] [CFG] Improve import_cfg.py to support better in snitch cluster and add default configuration. --- hw/import_cfg.py | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/hw/import_cfg.py b/hw/import_cfg.py index e46ca2f..84e59c7 100644 --- a/hw/import_cfg.py +++ b/hw/import_cfg.py @@ -9,33 +9,40 @@ print("Usage: python script.py ") sys.exit(1) -# get dir to which the output is exported script_dir = Path(__file__).parent -# get path of config file cfg_source_path = Path(sys.argv[1]) cfg_name = cfg_source_path.stem # strip extension; apply_cfg.py appends .hjson +SPATZ_KEYS = ['mempool', 'vlen', 'n_fpu', 'n_ipu', 'spatz_fpu', 'spatz_nports', + 'double_bw', 'buf_fpu', 'rvf', 'rvd'] + +DEFAULT_SPATZ_CFG = { + 'mempool': False, + 'vlen': 512, + 'n_fpu': 4, + 'n_ipu': 1, + 'spatz_fpu': True, + 'spatz_nports': 4, + 'double_bw': False, + 'buf_fpu': 1, + 'rvf': True, + 'rvd': True, +} + with open(cfg_source_path, "r") as f: data = hjson.load(f) - -# copy only relevant information -spatz_cfg = {'spatz': {}} -keys = ['mempool', 'vlen', 'n_fpu', 'n_ipu', 'spatz_fpu', 'spatz_nports', 'double_bw', 'buf_fpu', 'rvf', 'rvd'] -for k in keys: - if k in data['cluster']: - spatz_cfg['spatz'][k] = data['cluster'][k] +cfg = data.get('spatz') +if not cfg: + print(f"[import_cfg] Warning: '{cfg_source_path}' carries no (or an " + f"empty) 'spatz' configuration; falling back to defaults.", + file=sys.stderr) + cfg = DEFAULT_SPATZ_CFG +spatz_cfg = {'spatz': {k: cfg[k] for k in SPATZ_KEYS if k in cfg}} -# dump output into cfg folder (always .hjson so apply_cfg.py can find it) cfg_dest_path = script_dir / 'cfg' / (cfg_name + '.hjson') cfg_dest_path.parent.mkdir(parents=True, exist_ok=True) with open(cfg_dest_path, "w") as f: hjson.dump(spatz_cfg, f) - - - - - - From 8c9e3103eff31832e2303c607eef6fc4a1d43c55 Mon Sep 17 00:00:00 2001 From: Diyou Shen Date: Sat, 25 Jul 2026 16:01:42 +0200 Subject: [PATCH 4/9] [Util] Add requirements.txt for python dependency. --- requirements.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2836b1c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,11 @@ +# Python packages required for hardware code generation (make generate). +# dataclasses is a stdlib backport needed on Python 3.6; it is a no-op on 3.7+. +dataclasses +hjson +jsonref +jsonschema +mako +termcolor +# CPU-only torch for data generation scripts (gen_data.py in software/tests/) +--extra-index-url https://download.pytorch.org/whl/cpu +torch \ No newline at end of file From 733bd3e5321f1d557b20e9e943d0365df7a874bc Mon Sep 17 00:00:00 2001 From: Luca Colagrande Date: Sun, 26 Jul 2026 16:29:10 +0200 Subject: [PATCH 5/9] Replace requirements.txt with modern pyproject.toml --- pyproject.toml | 36 ++++++++++++++++++++++++++++++++++++ requirements.txt | 11 ----------- 2 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 pyproject.toml delete mode 100644 requirements.txt diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..19707dd --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,36 @@ +# Copyright 2026 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +[build-system] +requires = ["setuptools>=64"] +build-backend = "setuptools.build_meta" + +[project] +name = "spatz-core" +description = "Spatz VPU scripts and utilities" +dynamic = ["version"] +requires-python = ">=3.11" +dependencies = [ + # Alphabetically sorted. + "dataclasses", + "hjson", + "jsonref", + "jsonschema", + "mako", + "termcolor", + "torch", +] + +[tool.uv.sources] +torch = [ + { index = "pytorch-cpu" }, +] + +[[tool.uv.index]] +name = "pytorch-cpu" +url = "https://download.pytorch.org/whl/cpu" +explicit = true + +[tool.setuptools] +packages = [] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 2836b1c..0000000 --- a/requirements.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Python packages required for hardware code generation (make generate). -# dataclasses is a stdlib backport needed on Python 3.6; it is a no-op on 3.7+. -dataclasses -hjson -jsonref -jsonschema -mako -termcolor -# CPU-only torch for data generation scripts (gen_data.py in software/tests/) ---extra-index-url https://download.pytorch.org/whl/cpu -torch \ No newline at end of file From 0a09d7ea5d2bb2e7844742f2d4bbe3f4874bea97 Mon Sep 17 00:00:00 2001 From: Luca Colagrande Date: Sun, 26 Jul 2026 17:20:11 +0200 Subject: [PATCH 6/9] Align Bender and Python package names to `spatz_vpu` --- Bender.yml | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Bender.yml b/Bender.yml index c27a27a..dc8d5f9 100644 --- a/Bender.yml +++ b/Bender.yml @@ -3,7 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 package: - name: spatz_core + name: spatz_vpu authors: - "Matheus Cavalcante " - "Mattia Sinigaglia " diff --git a/pyproject.toml b/pyproject.toml index 19707dd..6a33ebb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ requires = ["setuptools>=64"] build-backend = "setuptools.build_meta" [project] -name = "spatz-core" +name = "spatz-vpu" description = "Spatz VPU scripts and utilities" dynamic = ["version"] requires-python = ">=3.11" From 235068cb4481dc15f3f49715450726e8404ecc67 Mon Sep 17 00:00:00 2001 From: Luca Colagrande Date: Mon, 27 Jul 2026 14:16:26 +0200 Subject: [PATCH 7/9] Bender.yml: Remove redundant `spatz` target --- Bender.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Bender.yml b/Bender.yml index dc8d5f9..618bccd 100644 --- a/Bender.yml +++ b/Bender.yml @@ -19,8 +19,7 @@ workspace: sources: ## hw/ip/spatz ## - - target: spatz - files: + - files: # Level 0 - hw/ip/snitch/src/riscv_instr.sv - target: mempool From dc1986c913f55361610d997d625f2e30812a367e Mon Sep 17 00:00:00 2001 From: Sergio Mazzola Date: Fri, 19 Jun 2026 14:33:20 +0200 Subject: [PATCH 8/9] hw: :bug: Fix controller rejecting scalar FP ops before vlen was set --- hw/src/spatz_controller.sv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/src/spatz_controller.sv b/hw/src/spatz_controller.sv index 76903ad..4a72ed1 100644 --- a/hw/src/spatz_controller.sv +++ b/hw/src/spatz_controller.sv @@ -605,8 +605,8 @@ module spatz_controller issue_rsp_o.writeback = spatz_req.use_rd; end // CON VFU: begin - // vtype is illegal -> illegal instruction - if (vtype_q.vill) begin + // Scalar FP ops use the VFU path but do not depend on the vector vtype CSR. + if (vtype_q.vill && !decoder_rsp.spatz_req.op_arith.is_scalar) begin issue_rsp_o.accept = 1'b0; end end // VFU From a36814897db3e508c7a9c9020ec9d4257371c2cc Mon Sep 17 00:00:00 2001 From: Diyou Shen Date: Tue, 28 Jul 2026 16:08:51 +0200 Subject: [PATCH 9/9] [Bender][SRC] Re-enable the reqrsp_interface and snitch dependency to be used inside snitch cluster and align the package use. --- Bender.yml | 2 ++ hw/src/spatz_fpu_sequencer.sv | 4 ++-- hw/src/spatz_vlsu.sv | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Bender.yml b/Bender.yml index 618bccd..9432926 100644 --- a/Bender.yml +++ b/Bender.yml @@ -13,6 +13,8 @@ dependencies: common_cells: { git: "https://github.com/pulp-platform/common_cells.git", rev: master } FPnew: { git: "https://github.com/pulp-platform/cvfpu.git", rev: common-cells-v2 } tech_cells_generic: { git: "https://github.com/pulp-platform/tech_cells_generic.git", version: 0.2.14 } + snitch: { path: "hw/ip/snitch" } + reqrsp_interface: { path: "hw/ip/reqrsp_interface" } workspace: checkout_dir: "hw/ip" diff --git a/hw/src/spatz_fpu_sequencer.sv b/hw/src/spatz_fpu_sequencer.sv index 9123bf2..de9ff27 100644 --- a/hw/src/spatz_fpu_sequencer.sv +++ b/hw/src/spatz_fpu_sequencer.sv @@ -517,7 +517,7 @@ module spatz_fpu_sequencer logic [AddrWidth-1:0] fp_lsu_qaddr; logic [DataWidth-1:0] fp_lsu_qdata; logic [1:0] fp_lsu_qsize; - logic [3:0] fp_lsu_qamo; // Underlying type of snitch_pkg::amo_op_e — update if that typedef changes. + snitch_pkg::amo_op_e fp_lsu_qamo; logic fp_lsu_qvalid; logic fp_lsu_qready; @@ -636,7 +636,7 @@ module spatz_fpu_sequencer `endif fp_lsu_qdata = fpr_rdata[1]; fp_lsu_qsize = ls_size; - fp_lsu_qamo = 4'h0; // snitch_pkg::AMONone + fp_lsu_qamo = snitch_pkg::AMONone; fp_lsu_qvalid = (is_load || is_store) && operands_available && !vlsu_stall; acc_mem_cnt_d = acc_mem_cnt_q; diff --git a/hw/src/spatz_vlsu.sv b/hw/src/spatz_vlsu.sv index cf71a63..7b27306 100644 --- a/hw/src/spatz_vlsu.sv +++ b/hw/src/spatz_vlsu.sv @@ -1014,7 +1014,7 @@ module spatz_vlsu `else assign spatz_mem_req[port] = '{addr: mem_req_addr[port], write: !mem_is_load, - amo: 4'h0, // snitch_pkg::AMONone + amo: snitch_pkg::AMONone, data: mem_req_data[port], strb: mem_req_strb[port], default: '0};