From 903247cc8552472e53aaebb9988e6a7edbb27043 Mon Sep 17 00:00:00 2001 From: Luca Balboni Date: Thu, 30 Jul 2026 15:27:34 +0200 Subject: [PATCH 01/26] Removed RI5CY and re-enabled CV32E40X in memory-mapped mode --- .gitignore | 3 + Bender.lock | 2 +- Bender.yml | 35 +- Makefile | 46 +- README.md | 4 +- bender_common.mk | 1 - hw/tile/converters/cv32e40p_data2obi.sv | 49 ++ hw/tile/converters/cv32e40p_obi2data.sv | 38 ++ .../{data2obi.sv => cv32e40x_data2obi.sv} | 28 +- .../{obi2data.sv => cv32e40x_obi2data.sv} | 22 +- hw/tile/fractal_sync_xif_inst_decoder.sv | 332 ------------ hw/tile/idma_ctrl.sv | 292 ---------- hw/tile/idma_xif_inst_decoder.sv | 445 ---------------- hw/tile/magia_tile.sv | 501 +++--------------- hw/tile/magia_tile_pkg.sv | 177 ++----- hw/tile/xif_inst_dispatcher.sv | 204 ------- setup_env.sh | 12 +- sw/kernel_pulp/Makefile | 38 +- sw/tests/cluster_tests/hello_pulp/main.c | 13 +- .../hello_pulp/pulp_task/hello_pulp_task.c | 13 +- sw/tests/fpu_test.c | 16 +- sw/tests/xif_tests/fsync_extended_test.c | 131 ----- sw/tests/xif_tests/fsync_test.c | 286 ---------- sw/tests/xif_tests/idma_test.c | 213 -------- sw/tests/xif_tests/mesh_test.c | 265 --------- sw/tests/xif_tests/redmule_test.c | 113 ---- sw/tests/xif_tests/tile_test.c | 255 --------- sw/utils/event_unit_utils.h | 11 +- sw/utils/magia_utils.h | 14 +- 29 files changed, 271 insertions(+), 3288 deletions(-) create mode 100644 hw/tile/converters/cv32e40p_data2obi.sv create mode 100644 hw/tile/converters/cv32e40p_obi2data.sv rename hw/tile/converters/{data2obi.sv => cv32e40x_data2obi.sv} (74%) rename hw/tile/converters/{obi2data.sv => cv32e40x_obi2data.sv} (68%) delete mode 100644 hw/tile/fractal_sync_xif_inst_decoder.sv delete mode 100644 hw/tile/idma_ctrl.sv delete mode 100644 hw/tile/idma_xif_inst_decoder.sv delete mode 100644 hw/tile/xif_inst_dispatcher.sv delete mode 100644 sw/tests/xif_tests/fsync_extended_test.c delete mode 100644 sw/tests/xif_tests/fsync_test.c delete mode 100644 sw/tests/xif_tests/idma_test.c delete mode 100644 sw/tests/xif_tests/mesh_test.c delete mode 100644 sw/tests/xif_tests/redmule_test.c delete mode 100644 sw/tests/xif_tests/tile_test.c diff --git a/.gitignore b/.gitignore index d03f86be..958b0821 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ update-ips.log synth-ips.log build-hw.log profile-ips.log +vsim-scripts.log magia_venv/ modelsim.ini regression_logs/ @@ -23,6 +24,8 @@ sw/tests/*/*/work/ sw/tests/*/*/work sw/tests/*/*/transcript sw/tests/*/*/*.log +sw/tests/*/traces/*/ +sw/tests/*/*/traces/*/ spatz/bootrom/*.elf spatz/bootrom/*.bin diff --git a/Bender.lock b/Bender.lock index b955ed37..d50140aa 100644 --- a/Bender.lock +++ b/Bender.lock @@ -72,7 +72,7 @@ packages: Git: https://github.com/pulp-platform/common_verification.git dependencies: [] cv32e40p: - revision: a8206ab02759f110c40dd907369816ea656381bc + revision: 65c6961d8acf9698e09c976228c43692d700e697 version: null source: Git: https://github.com/FondazioneChipsIT/cv32e40p.git diff --git a/Bender.yml b/Bender.yml index 9780b048..ef0ad7ed 100644 --- a/Bender.yml +++ b/Bender.yml @@ -26,7 +26,7 @@ package: dependencies: redmule : { git: "https://github.com/pulp-platform/redmule.git" , rev: 2.2.0 } cv32e40x : { git: "https://github.com/pulp-platform/cv32e40x.git" , rev: a90101211048ba1a16cedbe4db963ab6e12569d7 } # branch: vi/redmule_scaleup - cv32e40p : { git: "https://github.com/FondazioneChipsIT/cv32e40p.git" , rev: a8206ab02759f110c40dd907369816ea656381bc } # branch: ng/pulp_cluster + cv32e40p : { git: "https://github.com/FondazioneChipsIT/cv32e40p.git" , rev: 65c6961d8acf9698e09c976228c43692d700e697 } # branch: ng/pulp_cluster spatz : { git: "https://github.com/pulp-platform/spatz.git" , rev: 9380883fd36a4794d7f31e2c22e3fed3202aeb81 } # branch: lb/magia-spatz_cc idma : { git: "https://github.com/pulp-platform/iDMA.git" , rev: ff5d56fffb3767814db88d6bf8f381974ea33aa5 } # version: 0.6.4 hwpe-stream : { git: "https://github.com/pulp-platform/hwpe-stream.git" , version: 1.6 } @@ -60,8 +60,10 @@ sources: - hw/mesh/magia_pkg.sv - hw/tile/magia_tile_pkg.sv # MAGIA Tile - - hw/tile/converters/data2obi.sv - - hw/tile/converters/obi2data.sv + - hw/tile/converters/cv32e40p_data2obi.sv + - hw/tile/converters/cv32e40x_data2obi.sv + - hw/tile/converters/cv32e40p_obi2data.sv + - hw/tile/converters/cv32e40x_obi2data.sv - hw/tile/converters/instr2obi.sv - hw/tile/converters/obi2instr.sv - hw/tile/converters/instr2cache.sv @@ -84,14 +86,9 @@ sources: - hw/tile/obi_demux_addr.sv - hw/tile/l1_spm.sv - hw/tile/local_interconnect.sv - - hw/tile/idma_xif_inst_decoder.sv - - hw/tile/xif_inst_dispatcher.sv - - hw/tile/idma_xif_inst_decoder.sv - - hw/tile/idma_ctrl.sv - hw/tile/idma_axi_obi_transfer_ch.sv - hw/tile/idma_obi_ctrl_decoder.sv - hw/tile/idma_ctrl_mm.sv - - hw/tile/fractal_sync_xif_inst_decoder.sv - hw/tile/obi_slave_fsync.sv - hw/tile/obi_slave_ctrl_spatz.sv - hw/tile/obi_slave_ctrl_cluster.sv @@ -127,8 +124,10 @@ sources: - hw/tile/magia_tile_pkg.sv - hw/mesh/noc/magia_noc_pkg.sv # MAGIA Tile - - hw/tile/converters/data2obi.sv - - hw/tile/converters/obi2data.sv + - hw/tile/converters/cv32e40p_data2obi.sv + - hw/tile/converters/cv32e40x_data2obi.sv + - hw/tile/converters/cv32e40p_obi2data.sv + - hw/tile/converters/cv32e40x_obi2data.sv - hw/tile/converters/instr2obi.sv - hw/tile/converters/obi2instr.sv - hw/tile/converters/instr2cache.sv @@ -151,14 +150,9 @@ sources: - hw/tile/obi_demux_addr.sv - hw/tile/l1_spm.sv - hw/tile/local_interconnect.sv - - hw/tile/idma_xif_inst_decoder.sv - - hw/tile/xif_inst_dispatcher.sv - - hw/tile/idma_xif_inst_decoder.sv - - hw/tile/idma_ctrl.sv - hw/tile/idma_axi_obi_transfer_ch.sv - hw/tile/idma_obi_ctrl_decoder.sv - hw/tile/idma_ctrl_mm.sv - - hw/tile/fractal_sync_xif_inst_decoder.sv - hw/tile/obi_slave_fsync.sv - hw/tile/obi_slave_ctrl_spatz.sv - hw/tile/obi_slave_ctrl_cluster.sv @@ -209,8 +203,10 @@ sources: - hw/tile/magia_tile_pkg.sv - hw/mesh/noc/magia_noc_pkg.sv # MAGIA Tile - - hw/tile/converters/data2obi.sv - - hw/tile/converters/obi2data.sv + - hw/tile/converters/cv32e40p_data2obi.sv + - hw/tile/converters/cv32e40x_data2obi.sv + - hw/tile/converters/cv32e40p_obi2data.sv + - hw/tile/converters/cv32e40x_obi2data.sv - hw/tile/converters/instr2obi.sv - hw/tile/converters/obi2instr.sv - hw/tile/converters/instr2cache.sv @@ -233,14 +229,9 @@ sources: - hw/tile/obi_demux_addr.sv - hw/tile/l1_spm.sv - hw/tile/local_interconnect.sv - - hw/tile/idma_xif_inst_decoder.sv - - hw/tile/xif_inst_dispatcher.sv - - hw/tile/idma_xif_inst_decoder.sv - - hw/tile/idma_ctrl.sv - hw/tile/idma_axi_obi_transfer_ch.sv - hw/tile/idma_obi_ctrl_decoder.sv - hw/tile/idma_ctrl_mm.sv - - hw/tile/fractal_sync_xif_inst_decoder.sv - hw/tile/obi_slave_fsync.sv - hw/tile/obi_slave_ctrl_spatz.sv - hw/tile/obi_slave_ctrl_cluster.sv diff --git a/Makefile b/Makefile index dce40399..83418b07 100644 --- a/Makefile +++ b/Makefile @@ -46,16 +46,7 @@ ifeq ($(core), CV32E40X) ISA = riscv ABI ?= ilp XABI ?= f -else ifeq ($(core), RI5CY) - XTEN = imcxgap9 - ISA = riscv - ABI ?= ilp - XABI ?= else - # CV32E40P configured with ZFINX=1 in RTL: FP ops use the GPRs (no F register - # file). Toolchain must therefore use Zfinx (and Zhinxmin for FP16) and the - # plain ilp32 ABI; using `f` in march or ilp32f ABI would emit instructions - # that target the (non-existent) F regs. XTEN = imc_xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw_zfinx_zhinxmin ISA = cv32e40p ABI ?= ilp @@ -124,9 +115,6 @@ ifeq ($(core), CV32E40P) FLAGS += -DCV32E40P endif -ifeq ($(core), RI5CY) - FLAGS += -DRI5CY -endif # Include directories INC += -Isw @@ -226,11 +214,14 @@ spatz-header: # Build PULP cluster binary (magia-sdk style): produces # sw/kernel_pulp/headers_bin/_pulp_task_bin.h # embedding the position-independent flat binary in section .pulp_binary. +# PULP cluster cores are always CV32E40P (see magia_tile.sv), independent of +# which core is selected for the control core via $(core) — so core=CV32E40P +# is hardcoded here rather than forwarding $(core). .PHONY: pulp-header pulp-header: @if [ -n "$(PULP_TASKS)" ]; then \ echo "[PULP] Auto-detected tasks: $(PULP_TASKS)"; \ - $(MAKE) -C $(PULP_SW_DIR) TEST_NAME=$(test) task="$(PULP_TASKS)" PULP_TASK_DIR=$(ROOT_DIR)/$(PULP_TASK_DIR_PATH) core=$(core) all; \ + $(MAKE) -C $(PULP_SW_DIR) TEST_NAME=$(test) task="$(PULP_TASKS)" PULP_TASK_DIR=$(ROOT_DIR)/$(PULP_TASK_DIR_PATH) core=CV32E40P all; \ else \ echo "[PULP] No pulp_task/ directory — skipping PULP cluster compilation"; \ fi @@ -354,18 +345,13 @@ ifeq ($(core), CV32E40X) bender_defs += -D CV32E40X else ifeq ($(core), CV32E40P) bender_defs += -D CV32E40P -else ifeq ($(core), RI5CY) - bender_defs += -D RI5CY else - $(error Detected unsupported core, must choose among CV32E40X, CV32E40P and RI5CY) + $(error Detected unsupported core, must choose among CV32E40X or CV32E40P ) endif bender_targs += -t rtl bender_targs += -t test -ifeq ($(core), CV32E40P) bender_targs += -t cv32e40p_include_tracer -endif -# RI5CY: riscv_*.sv compiled unconditionally by the PULP cv32e40p package, no extra bender target needed # Targets needed to avoid error even though the module is not used @@ -411,19 +397,9 @@ bender_defs += -D SPATZ_XDMA=$(SPATZ_XDMA) bender_defs += -D SPATZ_RVF=$(SPATZ_RVF) bender_defs += -D SPATZ_RVV=$(SPATZ_RVV) -# RI5CY_CV32E40P_GIT / RI5CY_CV32E40P_REV: PULP repo override for core=RI5CY -RI5CY_CV32E40P_GIT := https://github.com/pulp-platform/cv32e40p.git -RI5CY_CV32E40P_REV := f5241403d5d65dbe1fffacd7035dd7ae1359c8ef -CV32E40P_GIT := https://github.com/FondazioneChipsIT/cv32e40p.git -CV32E40P_REV := a8206ab02759f110c40dd907369816ea656381bc update-ips: -ifeq ($(core), RI5CY) - @sed -i '/^ cv32e40p:$$/,/^ cv32e40x:/ { s|^ revision: .*| revision: $(RI5CY_CV32E40P_REV)|; s|^ Git: .*| Git: $(RI5CY_CV32E40P_GIT)|; }' Bender.lock -else - @sed -i '/^ cv32e40p:$$/,/^ cv32e40x:/ { s|^ revision: .*| revision: $(CV32E40P_REV)|; s|^ Git: .*| Git: $(CV32E40P_GIT)|; }' Bender.lock -endif - $(BENDER) checkout + $(BENDER) update $(BENDER) script vsim \ --vlog-arg="$(compile_flag)" \ --vcom-arg="-pedanticerrors" \ @@ -432,11 +408,6 @@ endif > ${compile_script} vsim-scripts: -ifeq ($(core), RI5CY) - @sed -i '/^ cv32e40p:$$/,/^ cv32e40x:/ { s|^ revision: .*| revision: $(RI5CY_CV32E40P_REV)|; s|^ Git: .*| Git: $(RI5CY_CV32E40P_GIT)|; }' Bender.lock -else - @sed -i '/^ cv32e40p:$$/,/^ cv32e40x:/ { s|^ revision: .*| revision: $(CV32E40P_REV)|; s|^ Git: .*| Git: $(CV32E40P_GIT)|; }' Bender.lock -endif $(BENDER) script vsim \ --vlog-arg="$(compile_flag)" \ --vcom-arg="-pedanticerrors" \ @@ -445,11 +416,6 @@ endif > ${compile_script} synth-ips: -ifeq ($(core), RI5CY) - @sed -i '/^ cv32e40p:$$/,/^ cv32e40x:/ { s|^ revision: .*| revision: $(RI5CY_CV32E40P_REV)|; s|^ Git: .*| Git: $(RI5CY_CV32E40P_GIT)|; }' Bender.lock -else - @sed -i '/^ cv32e40p:$$/,/^ cv32e40x:/ { s|^ revision: .*| revision: $(CV32E40P_REV)|; s|^ Git: .*| Git: $(CV32E40P_GIT)|; }' Bender.lock -endif $(MAKE) -C $(IDMA_ROOT) idma_hw_all IDMA_ADD_IDS=$(IDMA_ADD_IDS) $(BENDER) script synopsys \ $(common_targs) $(common_defs) \ diff --git a/README.md b/README.md index 645071ba..1b056ead 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ The following *optional* parameters can be specified: `gui`: **0**|**1** (**Default**: 0). 0 simulation without GUI; 1 simulation with GUI. -`core`: **CV32E40P**|**RI5CY**|**CV32E40X** (**Default**: CV32E40P). Control and cluster cores type. +`core`: **CV32E40P**|**CV32E40X** (**Default**: CV32E40P). Control and cluster cores type. **Instructions to build HW/SW and run simulations**: @@ -182,7 +182,7 @@ The central piece of the architecture is the MAGIA tile containing a GeMM accele Each tile is controlled by a [CV32E40P](https://github.com/pulp-platform/cv32e40p) main core. Control of iDMA, RedMulE, FractalSync, Spatz CC, and the PULP cluster follows a memory-mapped model, with the Event Unit handling event aggregation for system control. #### PULP Cluster -Each tile embeds a cluster of 8 [CV32E40P](https://github.com/pulp-platform/cv32e40p) (or RI5CY) cores. Cluster cores share a Snitch instruction cache with an AXI refill path to L2, and each core has its own OBI master port into the tile crossbar for data accesses (L1, accelerator registers, PULP_CTRL). Cluster cores receive interrupts exclusively from the tile CSR (`PULP_CTRL`) — they are not connected to the Event Unit. The main core dispatches tasks to the cluster via the `PULP_CTRL` register block (`0x1740`), which provides: binary entry point (`PULP_BINARY`), per-core MEI dispatch (`PULP_START`), task function pointer (`PULP_TASKBIN`), data pointer (`PULP_DATA`), completion quorum (`PULP_NB_CORES_TO_WAIT`), and readiness/done handshake registers (`PULP_READY`, `PULP_DONE`). When the done quorum is reached, the tile CSR raises EU bit 12 on the main core's Event Unit, allowing the main core to sleep in WFE until the cluster finishes. +Each tile embeds a cluster of 8 [CV32E40P](https://github.com/pulp-platform/cv32e40p) cores. Cluster cores share a Snitch instruction cache with an AXI refill path to L2, and each core has its own OBI master port into the tile crossbar for data accesses (L1, accelerator registers, PULP_CTRL). Cluster cores receive interrupts exclusively from the tile CSR (`PULP_CTRL`) — they are not connected to the Event Unit. The main core dispatches tasks to the cluster via the `PULP_CTRL` register block (`0x1740`), which provides: binary entry point (`PULP_BINARY`), per-core MEI dispatch (`PULP_START`), task function pointer (`PULP_TASKBIN`), data pointer (`PULP_DATA`), completion quorum (`PULP_NB_CORES_TO_WAIT`), and readiness/done handshake registers (`PULP_READY`, `PULP_DONE`). When the done quorum is reached, the tile CSR raises EU bit 12 on the main core's Event Unit, allowing the main core to sleep in WFE until the cluster finishes. ### Mesh Replicating the MAGIA tile, we scale up to a homogeneous two-dimensional (2D) mesh of compute tiles. The NoC allows access to the global west-side L2 through row-side interfaces, while tiles exchange traffic through FlooNoC router. The mesh uses XY routing and carries both AXI narrow channels (32-bit) and AXI wide channels (256-bit), with protocol conversion handled by per-tile Network Interfaces (NIs). diff --git a/bender_common.mk b/bender_common.mk index 3c0c4f0d..cff75149 100644 --- a/bender_common.mk +++ b/bender_common.mk @@ -26,7 +26,6 @@ ifeq ($(core), CV32E40X) sim_targs += -t cv32e40x else ifeq ($(core), CV32E40P) sim_targs += -t cv32e40p -# RI5CY: no bender target needed — riscv_*.sv compiled unconditionally by the PULP cv32e40p package endif common_targs += -t magia_tile diff --git a/hw/tile/converters/cv32e40p_data2obi.sv b/hw/tile/converters/cv32e40p_data2obi.sv new file mode 100644 index 00000000..1e1d030a --- /dev/null +++ b/hw/tile/converters/cv32e40p_data2obi.sv @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2023-2024 ETH Zurich and University of Bologna + * + * Licensed under the Solderpad Hardware License, Version 0.51 + * (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: SHL-0.51 + * + * Authors: Victor Isachi + * Luca Balboni + * + * CV32E40P Core Data - OBI REQ Converter + * + * CV32E40P has no atop/memtype/prot/dbg on its data channel, so those OBI + * optional fields are tied to their inactive defaults. Used by the PULP + * cluster cores (always CV32E40P) and by the control core when it is CV32E40P. + */ + +module cv32e40p_data2obi_req + import magia_tile_pkg::*; +( + input magia_tile_pkg::cv32e40p_core_data_req_t data_req_i, + output magia_tile_pkg::core_obi_data_req_t obi_req_o +); + + assign obi_req_o.req = data_req_i.req; + assign obi_req_o.a.addr = data_req_i.addr; + assign obi_req_o.a.we = data_req_i.we; + assign obi_req_o.a.be = data_req_i.be; + assign obi_req_o.a.wdata = data_req_i.wdata; + assign obi_req_o.a.aid = 'b0; + assign obi_req_o.a.a_optional.auser = 'b0; + assign obi_req_o.a.a_optional.wuser = 'b0; + assign obi_req_o.a.a_optional.mid = 'b0; + assign obi_req_o.a.a_optional.achk = 'b0; + assign obi_req_o.a.a_optional.atop = 'b0; + assign obi_req_o.a.a_optional.memtype = 'b0; + assign obi_req_o.a.a_optional.prot = 'b0; + assign obi_req_o.a.a_optional.dbg = 'b0; + +endmodule: cv32e40p_data2obi_req diff --git a/hw/tile/converters/cv32e40p_obi2data.sv b/hw/tile/converters/cv32e40p_obi2data.sv new file mode 100644 index 00000000..5bb9ebf6 --- /dev/null +++ b/hw/tile/converters/cv32e40p_obi2data.sv @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2023-2024 ETH Zurich and University of Bologna + * + * Licensed under the Solderpad Hardware License, Version 0.51 + * (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: SHL-0.51 + * + * Authors: Victor Isachi + * Luca Balboni + * + * OBI - CV32E40P Core Data RSP Converter + * + * CV32E40P has no exokay on its data response. Used by the PULP cluster cores + * (always CV32E40P) and by the control core when it is CV32E40P. + */ + +module cv32e40p_obi2data_rsp + import magia_tile_pkg::*; +( + input magia_tile_pkg::core_obi_data_rsp_t obi_rsp_i, + output magia_tile_pkg::cv32e40p_core_data_rsp_t data_rsp_o +); + + assign data_rsp_o.gnt = obi_rsp_i.gnt; + assign data_rsp_o.rvalid = obi_rsp_i.rvalid; + assign data_rsp_o.rdata = obi_rsp_i.r.rdata; + assign data_rsp_o.err = obi_rsp_i.r.err; + +endmodule: cv32e40p_obi2data_rsp diff --git a/hw/tile/converters/data2obi.sv b/hw/tile/converters/cv32e40x_data2obi.sv similarity index 74% rename from hw/tile/converters/data2obi.sv rename to hw/tile/converters/cv32e40x_data2obi.sv index e6146ee7..f09e68db 100644 --- a/hw/tile/converters/data2obi.sv +++ b/hw/tile/converters/cv32e40x_data2obi.sv @@ -1,8 +1,8 @@ /* * Copyright (C) 2023-2024 ETH Zurich and University of Bologna * - * Licensed under the Solderpad Hardware License, Version 0.51 - * (the "License"); you may not use this file except in compliance + * Licensed under the Solderpad Hardware License, Version 0.51 + * (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 @@ -15,15 +15,19 @@ * SPDX-License-Identifier: SHL-0.51 * * Authors: Victor Isachi - * - * Core Data - OBI REQ/RSP Converter + * Luca Balboni + * + * CV32E40X Core Data - OBI REQ Converter + * + * CV32E40X drives atop/memtype/prot/dbg on its data channel, which are mapped + * onto the OBI optional fields. Used by the control core when it is CV32E40X. */ -module data2obi_req +module cv32e40x_data2obi_req import magia_tile_pkg::*; ( - input magia_tile_pkg::core_data_req_t data_req_i, - output magia_tile_pkg::core_obi_data_req_t obi_req_o + input magia_tile_pkg::cv32e40x_core_data_req_t data_req_i, + output magia_tile_pkg::core_obi_data_req_t obi_req_o ); assign obi_req_o.req = data_req_i.req; @@ -34,19 +38,11 @@ module data2obi_req assign obi_req_o.a.aid = 'b0; assign obi_req_o.a.a_optional.auser = 'b0; assign obi_req_o.a.a_optional.wuser = 'b0; - assign obi_req_o.a.a_optional.mid = 'b0; assign obi_req_o.a.a_optional.achk = 'b0; -`ifdef CV32E40X assign obi_req_o.a.a_optional.atop = data_req_i.atop; assign obi_req_o.a.a_optional.memtype = data_req_i.memtype; assign obi_req_o.a.a_optional.prot = data_req_i.prot; assign obi_req_o.a.a_optional.dbg = data_req_i.dbg; -`else - assign obi_req_o.a.a_optional.atop = 'b0; - assign obi_req_o.a.a_optional.memtype = 'b0; - assign obi_req_o.a.a_optional.prot = 'b0; - assign obi_req_o.a.a_optional.dbg = 'b0; -`endif -endmodule: data2obi_req +endmodule: cv32e40x_data2obi_req diff --git a/hw/tile/converters/obi2data.sv b/hw/tile/converters/cv32e40x_obi2data.sv similarity index 68% rename from hw/tile/converters/obi2data.sv rename to hw/tile/converters/cv32e40x_obi2data.sv index 70fa64e3..b1c88e34 100644 --- a/hw/tile/converters/obi2data.sv +++ b/hw/tile/converters/cv32e40x_obi2data.sv @@ -1,8 +1,8 @@ /* * Copyright (C) 2023-2024 ETH Zurich and University of Bologna * - * Licensed under the Solderpad Hardware License, Version 0.51 - * (the "License"); you may not use this file except in compliance + * Licensed under the Solderpad Hardware License, Version 0.51 + * (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 @@ -15,23 +15,25 @@ * SPDX-License-Identifier: SHL-0.51 * * Authors: Victor Isachi - * - * OBI - Core Data REQ/RSP Converter + * Luca Balboni + * + * OBI - CV32E40X Core Data RSP Converter + * + * CV32E40X consumes the exokay response bit. Used by the control core when it + * is CV32E40X. */ -module obi2data_rsp +module cv32e40x_obi2data_rsp import magia_tile_pkg::*; ( - input magia_tile_pkg::core_obi_data_rsp_t obi_rsp_i, - output magia_tile_pkg::core_data_rsp_t data_rsp_o + input magia_tile_pkg::core_obi_data_rsp_t obi_rsp_i, + output magia_tile_pkg::cv32e40x_core_data_rsp_t data_rsp_o ); assign data_rsp_o.gnt = obi_rsp_i.gnt; assign data_rsp_o.rvalid = obi_rsp_i.rvalid; assign data_rsp_o.rdata = obi_rsp_i.r.rdata; assign data_rsp_o.err = obi_rsp_i.r.err; -`ifdef CV32E40X assign data_rsp_o.exokay = obi_rsp_i.r.r_optional.exokay; -`endif -endmodule: obi2data_rsp \ No newline at end of file +endmodule: cv32e40x_obi2data_rsp diff --git a/hw/tile/fractal_sync_xif_inst_decoder.sv b/hw/tile/fractal_sync_xif_inst_decoder.sv deleted file mode 100644 index a31292ea..00000000 --- a/hw/tile/fractal_sync_xif_inst_decoder.sv +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Solderpad Hardware License, Version 0.51 - * (the "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: SHL-0.51 - * - * Authors: Victor Isachi - * - * Fractal Sync Xif Instruction Decoder - */ - -module fractal_sync_xif_inst_decoder - import magia_tile_pkg::*; - import cv32e40x_pkg::*; -#( - parameter int unsigned INSTR_W = magia_tile_pkg::FSYNC_INSTR_W, - parameter int unsigned DATA_W = magia_tile_pkg::FSYNC_DATA_W, - parameter int unsigned ADDR_W = magia_tile_pkg::FSYNC_ADDR_W, - parameter int unsigned N_RF_PORTS = magia_tile_pkg::FSYNC_N_RF_PORTS, - parameter int unsigned OPCODE_W = magia_tile_pkg::FSYNC_OPCODE_W, - parameter int unsigned FUNC3_W = magia_tile_pkg::FSYNC_FUNC3_W, - parameter int unsigned OPCODE_OFF = magia_tile_pkg::FSYNC_OPCODE_OFF, - parameter int unsigned FUNC3_OFF = magia_tile_pkg::FSYNC_FUNC3_OFF, - parameter int unsigned N_CFG_REG = magia_tile_pkg::FSYNC_N_CFG_REG, - parameter int unsigned AGGR_W = magia_tile_pkg::FSYNC_AGGR_W, - parameter int unsigned ID_W = magia_tile_pkg::FSYNC_ID_W, - parameter int unsigned NBR_AGGR_W = magia_tile_pkg::FSYNC_NBR_AGGR_W, - parameter int unsigned NBR_ID_W = magia_tile_pkg::FSYNC_NBR_ID_W, - parameter bit STALL = magia_tile_pkg::FSYNC_STALL -)( - input logic clk_i, - input logic rst_ni, - input logic clear_i, - - cv32e40x_if_xif.coproc_issue xif_issue_if_i, - - fractal_sync_if.mst_port ht_fsync_if_o, - fractal_sync_if.mst_port hn_fsync_if_o, - fractal_sync_if.mst_port vt_fsync_if_o, - fractal_sync_if.mst_port vn_fsync_if_o, - - output logic done_o, - output logic error_o -); - -/*******************************************************/ -/** Internal Signal Definitions Beginning **/ -/*******************************************************/ - - logic clk_dec_en, clk_sync_en; - logic clk_dec_g, clk_sync_g; - - logic[OPCODE_W-1:0] opcode; - logic[ FUNC3_W-1:0] func3; - - logic sync; - logic done; - - logic[N_CFG_REG-1:0][DATA_W-1:0] cfg_reg_d, cfg_reg_q; - - typedef enum logic[1:0] { - IDLE, - SYNC, - WAIT, - DONE - } sync_state_e; - - sync_state_e c_sync_state, n_sync_state; - -/*******************************************************/ -/** Internal Signal Definitions End **/ -/*******************************************************/ -/** Hardwired Signals Beginning **/ -/*******************************************************/ - - assign opcode = xif_issue_if_i.issue_req.instr[OPCODE_OFF+:OPCODE_W]; - assign func3 = xif_issue_if_i.issue_req.instr[ FUNC3_OFF+: FUNC3_W]; - - assign done_o = done; - assign error_o = ht_fsync_if_o.error | hn_fsync_if_o.error | vt_fsync_if_o.error | vn_fsync_if_o.error; - -/*******************************************************/ -/** Hardwired Signals End **/ -/*******************************************************/ -/** Clock gating Beginning **/ -/*******************************************************/ - - tc_clk_gating i_dec_clock_gating ( - .clk_i , - .en_i ( clk_dec_en ), - .test_en_i ( '0 ), - .clk_o ( clk_dec_g ) - ); - - tc_clk_gating i_sync_clock_gating ( - .clk_i , - .en_i ( clk_sync_en ), - .test_en_i ( '0 ), - .clk_o ( clk_sync_g ) - ); - -/*******************************************************/ -/** Clock gating End **/ -/*******************************************************/ -/** Decoder FSM Beginning **/ -/*******************************************************/ - - generate if (STALL) begin: gen_stalling_decoder - always_comb begin: instruction_decoder - clk_dec_en = 1'b0; - cfg_reg_d = cfg_reg_q; - sync = 1'b0; - - if (xif_issue_if_i.issue_valid) begin - case (opcode) - FSYNC_OPCODE: begin - clk_dec_en = 1'b1; - if ((func3 == FSYNC_FUNC3) && (xif_issue_if_i.issue_req.rs_valid)) begin - cfg_reg_d[magia_tile_pkg::FSYNC_AGGR_IDX] = xif_issue_if_i.issue_req.rs[0]; - cfg_reg_d[magia_tile_pkg::FSYNC_ID_IDX] = xif_issue_if_i.issue_req.rs[1]; - sync = 1'b1; - end - end - endcase - end - end - end else begin: gen_non_stalling_decoder - always_comb begin: instruction_decoder - clk_dec_en = 1'b0; - cfg_reg_d = cfg_reg_q; - sync = 1'b0; - xif_issue_if_i.issue_ready = 1'b0; - xif_issue_if_i.issue_resp = '0; - - if (xif_issue_if_i.issue_valid) begin - case (opcode) - FSYNC_OPCODE: begin - xif_issue_if_i.issue_ready = 1'b1; - xif_issue_if_i.issue_resp.accept = 1'b1; - clk_dec_en = 1'b1; - if ((func3 == FSYNC_FUNC3) && (xif_issue_if_i.issue_req.rs_valid)) begin - cfg_reg_d[magia_tile_pkg::FSYNC_AGGR_IDX] = xif_issue_if_i.issue_req.rs[0]; - cfg_reg_d[magia_tile_pkg::FSYNC_ID_IDX] = xif_issue_if_i.issue_req.rs[1]; - sync = 1'b1; - end - end - endcase - end - end - end endgenerate - - always_ff @(posedge clk_dec_g, negedge rst_ni) begin: configuration_register - if (~rst_ni) cfg_reg_q <= '0; - else begin - if (clear_i) cfg_reg_q <= '0; - else cfg_reg_q <= cfg_reg_d; - end - end - -/*******************************************************/ -/** Decoder FSM End **/ -/*******************************************************/ -/** Synchronization FSM Beginning **/ -/*******************************************************/ - - generate if (STALL) begin: gen_stalling_sync - always_comb begin: sync_logic - n_sync_state = c_sync_state; - clk_sync_en = 1'b1; - done = 1'b0; - ht_fsync_if_o.sync = 1'b0; - ht_fsync_if_o.aggr = '0; - ht_fsync_if_o.id_req = '0; - hn_fsync_if_o.sync = 1'b0; - hn_fsync_if_o.aggr = '0; - hn_fsync_if_o.id_req = '0; - vt_fsync_if_o.sync = 1'b0; - vt_fsync_if_o.aggr = '0; - vt_fsync_if_o.id_req = '0; - vn_fsync_if_o.sync = 1'b0; - vn_fsync_if_o.aggr = '0; - vn_fsync_if_o.id_req = '0; - xif_issue_if_i.issue_ready = 1'b0; - xif_issue_if_i.issue_resp = '0; - - case (c_sync_state) - IDLE: if (sync) n_sync_state = SYNC; else clk_sync_en = 1'b0; - SYNC: begin - n_sync_state = WAIT; - if (cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX] != 1) begin // Tree (level > 1) request - case (cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][0]) - 1'b0: begin // Horizontal tree node request - ht_fsync_if_o.sync = 1'b1; - ht_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][AGGR_W-1:0]; - ht_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ ID_W-1:0]; - end - 1'b1: begin // Vertical tree node request - vt_fsync_if_o.sync = 1'b1; - vt_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][AGGR_W-1:0]; - vt_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ ID_W-1:0]; - end - endcase - end else begin // Neighbor (level = 1) request - case (cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][1:0]) - 2'b00: begin // Horizontal tree node request - ht_fsync_if_o.sync = 1'b1; - ht_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][AGGR_W-1:0]; - ht_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ ID_W-1:0]; - end - 2'b01: begin // Vertical tree node request - vt_fsync_if_o.sync = 1'b1; - vt_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][AGGR_W-1:0]; - vt_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ ID_W-1:0]; - end - 2'b10: begin // Horizontal neighbor node request - hn_fsync_if_o.sync = 1'b1; - hn_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][NBR_AGGR_W-1:0]; - hn_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ NBR_ID_W-1:0]; - end - 2'b11: begin // Vertical neighbor node request - vn_fsync_if_o.sync = 1'b1; - vn_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][NBR_AGGR_W-1:0]; - vn_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ NBR_ID_W-1:0]; - end - endcase - end - end - WAIT: begin - n_sync_state = (ht_fsync_if_o.wake | hn_fsync_if_o.wake | vt_fsync_if_o.wake | vn_fsync_if_o.wake) ? DONE : WAIT; - end - DONE: begin - n_sync_state = IDLE; - done = 1'b1; - xif_issue_if_i.issue_ready = 1'b1; - xif_issue_if_i.issue_resp.accept = 1'b1; - end - endcase - end - end else begin: gen_non_stalling_sync - always_comb begin: sync_logic - n_sync_state = c_sync_state; - clk_sync_en = 1'b1; - done = 1'b0; - ht_fsync_if_o.sync = 1'b0; - ht_fsync_if_o.aggr = '0; - ht_fsync_if_o.id_req = '0; - hn_fsync_if_o.sync = 1'b0; - hn_fsync_if_o.aggr = '0; - hn_fsync_if_o.id_req = '0; - vt_fsync_if_o.sync = 1'b0; - vt_fsync_if_o.aggr = '0; - vt_fsync_if_o.id_req = '0; - vn_fsync_if_o.sync = 1'b0; - vn_fsync_if_o.aggr = '0; - vn_fsync_if_o.id_req = '0; - - case (c_sync_state) - IDLE: if (sync) n_sync_state = SYNC; else clk_sync_en = 1'b0; - SYNC: begin - n_sync_state = WAIT; - if (cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX] != 1) begin // Tree (level > 1) request - case (cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][0]) - 1'b0: begin // Horizontal tree node request - ht_fsync_if_o.sync = 1'b1; - ht_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][AGGR_W-1:0]; - ht_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ ID_W-1:0]; - end - 1'b1: begin // Vertical tree node request - vt_fsync_if_o.sync = 1'b1; - vt_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][AGGR_W-1:0]; - vt_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ ID_W-1:0]; - end - endcase - end else begin // Neighbor (level = 1) request - case (cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][1:0]) - 2'b00: begin // Horizontal tree node request - ht_fsync_if_o.sync = 1'b1; - ht_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][AGGR_W-1:0]; - ht_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ ID_W-1:0]; - end - 2'b01: begin // Vertical tree node request - vt_fsync_if_o.sync = 1'b1; - vt_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][AGGR_W-1:0]; - vt_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ ID_W-1:0]; - end - 2'b10: begin // Horizontal neighbor node request - hn_fsync_if_o.sync = 1'b1; - hn_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][NBR_AGGR_W-1:0]; - hn_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ NBR_ID_W-1:0]; - end - 2'b11: begin // Vertical neighbor node request - vn_fsync_if_o.sync = 1'b1; - vn_fsync_if_o.aggr = cfg_reg_q[magia_tile_pkg::FSYNC_AGGR_IDX][NBR_AGGR_W-1:0]; - vn_fsync_if_o.id_req = cfg_reg_q[magia_tile_pkg::FSYNC_ID_IDX][ NBR_ID_W-1:0]; - end - endcase - end - end - WAIT: begin - n_sync_state = (ht_fsync_if_o.wake | hn_fsync_if_o.wake | vt_fsync_if_o.wake | vn_fsync_if_o.wake) ? DONE : WAIT; - end - DONE: begin - n_sync_state = IDLE; - done = 1'b1; - end - endcase - end - end endgenerate - - always_ff @(posedge clk_sync_g, negedge rst_ni) begin: sync_state - if (~rst_ni) c_sync_state <= IDLE; - else begin - if (clear_i) c_sync_state <= IDLE; - else c_sync_state <= n_sync_state; - end - end - -/*******************************************************/ -/** Synchronization FSM End **/ -/*******************************************************/ - -endmodule: fractal_sync_xif_inst_decoder \ No newline at end of file diff --git a/hw/tile/idma_ctrl.sv b/hw/tile/idma_ctrl.sv deleted file mode 100644 index 58e2e3c2..00000000 --- a/hw/tile/idma_ctrl.sv +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Solderpad Hardware License, Version 0.51 - * (the "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: SHL-0.51 - * - * Authors: Victor Isachi - * - * iDMA Controller - */ - -module idma_ctrl - import magia_tile_pkg::*; - import cv32e40x_pkg::*; - import idma_pkg::*; -#( - parameter idma_pkg::error_cap_e ERROR_CAP = idma_pkg::NO_ERROR_HANDLING, - localparam int unsigned DIRECTION_W = magia_tile_pkg::DMA_DIRECTION_W, - localparam int unsigned DIRECTION_OFF = magia_tile_pkg::DMA_DIRECTION_OFF, - localparam type idma_fe_reg_req_t = magia_tile_pkg::idma_fe_reg_req_t, - localparam type idma_fe_reg_rsp_t = magia_tile_pkg::idma_fe_reg_rsp_t, - parameter type axi_req_t = magia_tile_pkg::idma_axi_req_t, - parameter type axi_rsp_t = magia_tile_pkg::idma_axi_rsp_t, - parameter type obi_req_t = magia_tile_pkg::idma_obi_req_t, - parameter type obi_rsp_t = magia_tile_pkg::idma_obi_rsp_t -)( - input logic clk_i, - input logic rst_ni, - input logic testmode_i, - input logic clear_i, - - cv32e40x_if_xif.coproc_issue xif_issue_if_i, - - output axi_req_t axi_read_req_o, - input axi_rsp_t axi_read_rsp_i, - - output axi_req_t axi_write_req_o, - input axi_rsp_t axi_write_rsp_i, - - output obi_req_t obi_read_req_o, - input obi_rsp_t obi_read_rsp_i, - - output obi_req_t obi_write_req_o, - input obi_rsp_t obi_write_rsp_i, - - output logic axi2obi_start_o, // Started L2 to L1 iDMA transfer - output logic axi2obi_busy_o, // Performing L2 to L1 iDMA transfer - output logic axi2obi_done_o, // Finished L2 to L1 iDMA transfer - output logic axi2obi_error_o, // Detected L2 to L1 transfer error - - output logic obi2axi_start_o, // Started L1 to L2 iDMA transfer - output logic obi2axi_busy_o, // Performing L1 to L2 iDMA transfer - output logic obi2axi_done_o, // Finished L1 to L2 iDMA transfer - output logic obi2axi_error_o // Detected L1 to L2 transfer error -); - -/*******************************************************/ -/** Internal Signal Definitions Beginning **/ -/*******************************************************/ - - logic direction; // Direction of the iDMA transfer: 0 -> AXI2OBI; 1 -> OBI2AXI - - idma_fe_reg_req_t idma_fe_reg_axi2obi_req; - idma_fe_reg_rsp_t idma_fe_reg_axi2obi_rsp; - idma_fe_reg_req_t idma_fe_reg_obi2axi_req; - idma_fe_reg_rsp_t idma_fe_reg_obi2axi_rsp; - -/*******************************************************/ -/** Internal Signal Definitions End **/ -/*******************************************************/ -/** Interface Definitions Beginning **/ -/*******************************************************/ - - cv32e40x_if_xif #( - .X_NUM_RS ( magia_tile_pkg::X_NUM_RS ), - .X_ID_WIDTH ( magia_tile_pkg::X_ID_W ), - .X_MEM_WIDTH ( magia_tile_pkg::X_MEM_W ), - .X_RFR_WIDTH ( magia_tile_pkg::X_RFR_W ), - .X_RFW_WIDTH ( magia_tile_pkg::X_RFW_W ), - .X_MISA ( magia_tile_pkg::X_MISA ), - .X_ECS_XS ( magia_tile_pkg::X_ECS_XS ) - ) xif_axi2obi_issue_if (); - - cv32e40x_if_xif #( - .X_NUM_RS ( magia_tile_pkg::X_NUM_RS ), - .X_ID_WIDTH ( magia_tile_pkg::X_ID_W ), - .X_MEM_WIDTH ( magia_tile_pkg::X_MEM_W ), - .X_RFR_WIDTH ( magia_tile_pkg::X_RFR_W ), - .X_RFW_WIDTH ( magia_tile_pkg::X_RFW_W ), - .X_MISA ( magia_tile_pkg::X_MISA ), - .X_ECS_XS ( magia_tile_pkg::X_ECS_XS ) - ) xif_obi2axi_issue_if (); - -/*******************************************************/ -/** Interface Definitions End **/ -/*******************************************************/ -/** Hardwired Signals Beginning **/ -/*******************************************************/ - - assign direction = xif_issue_if_i.issue_req.instr[DIRECTION_OFF+:DIRECTION_W]; - -/*******************************************************/ -/** Hardwired Signals End **/ -/*******************************************************/ -/** Xif Issue DEMUX Beginning **/ -/*******************************************************/ - - always_comb begin: xif_issue_demux - if (direction) begin // OBI2AXI - xif_obi2axi_issue_if.issue_valid = xif_issue_if_i.issue_valid; - xif_obi2axi_issue_if.issue_req = xif_issue_if_i.issue_req; - xif_issue_if_i.issue_ready = xif_obi2axi_issue_if.issue_ready; - xif_issue_if_i.issue_resp = xif_obi2axi_issue_if.issue_resp; - - xif_axi2obi_issue_if.issue_valid = 1'b0; - xif_axi2obi_issue_if.issue_req = '0; - end else begin // AXI2OBI - xif_axi2obi_issue_if.issue_valid = xif_issue_if_i.issue_valid; - xif_axi2obi_issue_if.issue_req = xif_issue_if_i.issue_req; - xif_issue_if_i.issue_ready = xif_axi2obi_issue_if.issue_ready; - xif_issue_if_i.issue_resp = xif_axi2obi_issue_if.issue_resp; - - xif_obi2axi_issue_if.issue_valid = 1'b0; - xif_obi2axi_issue_if.issue_req = '0; - end - end - -/*******************************************************/ -/** Xif Issue DEMUX End **/ -/*******************************************************/ -/** AXI2OBI Xif Instruction Decoder Beginning **/ -/*******************************************************/ - - idma_xif_inst_decoder #( - .INSTR_W ( magia_tile_pkg::DMA_INSTR_W ), - .DATA_W ( magia_tile_pkg::DMA_DATA_W ), - .N_RF_PORTS ( magia_tile_pkg::DMA_N_RF_PORTS ), - .OPCODE_W ( magia_tile_pkg::DMA_OPCODE_W ), - .FUNC3_W ( magia_tile_pkg::DMA_FUNC3_W ), - .ND_EN_W ( magia_tile_pkg::DMA_ND_EN_W ), - .DST_MAX_LOG_LEN_W ( magia_tile_pkg::DMA_DST_MAX_LOG_LEN_W ), - .SRC_MAX_LOG_LEN_W ( magia_tile_pkg::DMA_SRC_MAX_LOG_LEN_W ), - .DST_REDUCE_LEN_W ( magia_tile_pkg::DMA_DST_REDUCE_LEN_W ), - .SRC_REDUCE_LEN_W ( magia_tile_pkg::DMA_SRC_REDUCE_LEN_W ), - .DECOUPLE_R_W_W ( magia_tile_pkg::DMA_DECOUPLE_R_W_W ), - .DECOUPLE_R_AW_W ( magia_tile_pkg::DMA_DECOUPLE_R_AW_W ), - .OPCODE_OFF ( magia_tile_pkg::DMA_OPCODE_OFF ), - .FUNC3_OFF ( magia_tile_pkg::DMA_FUNC3_OFF ), - .ND_EN_OFF ( magia_tile_pkg::DMA_ND_EN_OFF ), - .DST_MAX_LOG_LEN_OFF ( magia_tile_pkg::DMA_DST_MAX_LOG_LEN_OFF ), - .SRC_MAX_LOG_LEN_OFF ( magia_tile_pkg::DMA_SRC_MAX_LOG_LEN_OFF ), - .DST_REDUCE_LEN_OFF ( magia_tile_pkg::DMA_DST_REDUCE_LEN_OFF ), - .SRC_REDUCE_LEN_OFF ( magia_tile_pkg::DMA_SRC_REDUCE_LEN_OFF ), - .DECOUPLE_R_W_OFF ( magia_tile_pkg::DMA_DECOUPLE_R_W_OFF ), - .DECOUPLE_R_AW_OFF ( magia_tile_pkg::DMA_DECOUPLE_R_AW_OFF ), - .N_CFG_REG ( magia_tile_pkg::DMA_N_CFG_REG ), - .idma_fe_req_t ( idma_fe_reg_req_t ), - .idma_fe_rsp_t ( idma_fe_reg_rsp_t ) - ) i_idma_axi2obi_inst_decoder ( - .clk_i , - .rst_ni , - .clear_i , - - .xif_issue_if_i ( xif_axi2obi_issue_if.coproc_issue ), - - .cfg_req_o ( idma_fe_reg_axi2obi_req ), - .cfg_rsp_i ( idma_fe_reg_axi2obi_rsp ), - - .start_o ( axi2obi_start_o ), - .busy_o ( axi2obi_busy_o ), - .done_o ( axi2obi_done_o ), - .error_o ( axi2obi_error_o ) - ); - -/*******************************************************/ -/** AXI2OBI Xif Instruction Decoder End **/ -/*******************************************************/ -/** OBI2AXI Xif Instruction Decoder Beginning **/ -/*******************************************************/ - - idma_xif_inst_decoder #( - .INSTR_W ( magia_tile_pkg::DMA_INSTR_W ), - .DATA_W ( magia_tile_pkg::DMA_DATA_W ), - .N_RF_PORTS ( magia_tile_pkg::DMA_N_RF_PORTS ), - .OPCODE_W ( magia_tile_pkg::DMA_OPCODE_W ), - .FUNC3_W ( magia_tile_pkg::DMA_FUNC3_W ), - .ND_EN_W ( magia_tile_pkg::DMA_ND_EN_W ), - .DST_MAX_LOG_LEN_W ( magia_tile_pkg::DMA_DST_MAX_LOG_LEN_W ), - .SRC_MAX_LOG_LEN_W ( magia_tile_pkg::DMA_SRC_MAX_LOG_LEN_W ), - .DST_REDUCE_LEN_W ( magia_tile_pkg::DMA_DST_REDUCE_LEN_W ), - .SRC_REDUCE_LEN_W ( magia_tile_pkg::DMA_SRC_REDUCE_LEN_W ), - .DECOUPLE_R_W_W ( magia_tile_pkg::DMA_DECOUPLE_R_W_W ), - .DECOUPLE_R_AW_W ( magia_tile_pkg::DMA_DECOUPLE_R_AW_W ), - .OPCODE_OFF ( magia_tile_pkg::DMA_OPCODE_OFF ), - .FUNC3_OFF ( magia_tile_pkg::DMA_FUNC3_OFF ), - .ND_EN_OFF ( magia_tile_pkg::DMA_ND_EN_OFF ), - .DST_MAX_LOG_LEN_OFF ( magia_tile_pkg::DMA_DST_MAX_LOG_LEN_OFF ), - .SRC_MAX_LOG_LEN_OFF ( magia_tile_pkg::DMA_SRC_MAX_LOG_LEN_OFF ), - .DST_REDUCE_LEN_OFF ( magia_tile_pkg::DMA_DST_REDUCE_LEN_OFF ), - .SRC_REDUCE_LEN_OFF ( magia_tile_pkg::DMA_SRC_REDUCE_LEN_OFF ), - .DECOUPLE_R_W_OFF ( magia_tile_pkg::DMA_DECOUPLE_R_W_OFF ), - .DECOUPLE_R_AW_OFF ( magia_tile_pkg::DMA_DECOUPLE_R_AW_OFF ), - .N_CFG_REG ( magia_tile_pkg::DMA_N_CFG_REG ), - .idma_fe_req_t ( idma_fe_reg_req_t ), - .idma_fe_rsp_t ( idma_fe_reg_rsp_t ) - ) i_idma_obi2axi_inst_decoder ( - .clk_i , - .rst_ni , - .clear_i , - - .xif_issue_if_i ( xif_obi2axi_issue_if.coproc_issue ), - - .cfg_req_o ( idma_fe_reg_obi2axi_req ), - .cfg_rsp_i ( idma_fe_reg_obi2axi_rsp ), - - .start_o ( obi2axi_start_o ), - .busy_o ( obi2axi_busy_o ), - .done_o ( obi2axi_done_o ), - .error_o ( obi2axi_error_o ) - ); - -/*******************************************************/ -/** OBI2AXI Xif Instruction Decoder End **/ -/*******************************************************/ -/** AXI2OBI (L2 to L1) Transfer Channel Beginning **/ -/*******************************************************/ - - idma_axi_obi_transfer_ch #( - .CHANNEL_T ( magia_tile_pkg::AXI2OBI ), - .ERROR_CAP ( ERROR_CAP ), - .idma_fe_reg_req_t ( idma_fe_reg_req_t ), - .idma_fe_reg_rsp_t ( idma_fe_reg_rsp_t ), - .axi_req_t ( axi_req_t ), - .axi_rsp_t ( axi_rsp_t ), - .obi_req_t ( obi_req_t ), - .obi_rsp_t ( obi_rsp_t ) - ) i_l2_to_l1_ch ( - .clk_i , - .rst_ni , - .testmode_i , - .clear_i , - .cfg_req_i ( idma_fe_reg_axi2obi_req ), - .cfg_rsp_o ( idma_fe_reg_axi2obi_rsp ), - .axi_req_o ( axi_read_req_o ), - .axi_rsp_i ( axi_read_rsp_i ), - .obi_req_o ( obi_write_req_o ), - .obi_rsp_i ( obi_write_rsp_i ) - ); - -/*******************************************************/ -/** AXI2OBI (L2 to L1) Transfer Channel End **/ -/*******************************************************/ -/** OBI2AXI (L1 to L2) Transfer Channel Beginning **/ -/*******************************************************/ - - idma_axi_obi_transfer_ch #( - .CHANNEL_T ( magia_tile_pkg::OBI2AXI ), - .ERROR_CAP ( ERROR_CAP ), - .idma_fe_reg_req_t ( idma_fe_reg_req_t ), - .idma_fe_reg_rsp_t ( idma_fe_reg_rsp_t ), - .axi_req_t ( axi_req_t ), - .axi_rsp_t ( axi_rsp_t ), - .obi_req_t ( obi_req_t ), - .obi_rsp_t ( obi_rsp_t ) - ) i_l1_to_l2_ch ( - .clk_i , - .rst_ni , - .testmode_i , - .clear_i , - .cfg_req_i ( idma_fe_reg_obi2axi_req ), - .cfg_rsp_o ( idma_fe_reg_obi2axi_rsp ), - .axi_req_o ( axi_write_req_o ), - .axi_rsp_i ( axi_write_rsp_i ), - .obi_req_o ( obi_read_req_o ), - .obi_rsp_i ( obi_read_rsp_i ) - ); - -/*******************************************************/ -/** OBI2AXI (L1 to L2) Transfer Channel End **/ -/*******************************************************/ - -endmodule: idma_ctrl \ No newline at end of file diff --git a/hw/tile/idma_xif_inst_decoder.sv b/hw/tile/idma_xif_inst_decoder.sv deleted file mode 100644 index d37cf580..00000000 --- a/hw/tile/idma_xif_inst_decoder.sv +++ /dev/null @@ -1,445 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Solderpad Hardware License, Version 0.51 - * (the "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: SHL-0.51 - * - * Authors: Victor Isachi - * - * iDMA Xif Instruction Decoder - */ - -module idma_xif_inst_decoder - import magia_tile_pkg::*; - import cv32e40x_pkg::*; - import idma_pkg::*; -#( - parameter int unsigned INSTR_W = magia_tile_pkg::DMA_INSTR_W, - parameter int unsigned DATA_W = magia_tile_pkg::DMA_DATA_W, - parameter int unsigned ADDR_W = magia_tile_pkg::DMA_ADDR_W, - parameter int unsigned N_RF_PORTS = magia_tile_pkg::DMA_N_RF_PORTS, - parameter int unsigned OPCODE_W = magia_tile_pkg::DMA_OPCODE_W, - parameter int unsigned FUNC3_W = magia_tile_pkg::DMA_FUNC3_W, - parameter int unsigned ND_EN_W = magia_tile_pkg::DMA_ND_EN_W, - parameter int unsigned DST_MAX_LOG_LEN_W = magia_tile_pkg::DMA_DST_MAX_LOG_LEN_W, - parameter int unsigned SRC_MAX_LOG_LEN_W = magia_tile_pkg::DMA_SRC_MAX_LOG_LEN_W, - parameter int unsigned DST_REDUCE_LEN_W = magia_tile_pkg::DMA_DST_REDUCE_LEN_W, - parameter int unsigned SRC_REDUCE_LEN_W = magia_tile_pkg::DMA_SRC_REDUCE_LEN_W, - parameter int unsigned DECOUPLE_R_W_W = magia_tile_pkg::DMA_DECOUPLE_R_W_W, - parameter int unsigned DECOUPLE_R_AW_W = magia_tile_pkg::DMA_DECOUPLE_R_AW_W, - localparam int unsigned CONF_W = ND_EN_W + - DST_MAX_LOG_LEN_W + - SRC_MAX_LOG_LEN_W + - DST_REDUCE_LEN_W + - SRC_REDUCE_LEN_W + - DECOUPLE_R_W_W + - DECOUPLE_R_AW_W, - parameter int unsigned OPCODE_OFF = magia_tile_pkg::DMA_OPCODE_OFF, - parameter int unsigned FUNC3_OFF = magia_tile_pkg::DMA_FUNC3_OFF, - parameter int unsigned ND_EN_OFF = magia_tile_pkg::DMA_ND_EN_OFF, - parameter int unsigned DST_MAX_LOG_LEN_OFF = magia_tile_pkg::DMA_DST_MAX_LOG_LEN_OFF, - parameter int unsigned SRC_MAX_LOG_LEN_OFF = magia_tile_pkg::DMA_SRC_MAX_LOG_LEN_OFF, - parameter int unsigned DST_REDUCE_LEN_OFF = magia_tile_pkg::DMA_DST_REDUCE_LEN_OFF, - parameter int unsigned SRC_REDUCE_LEN_OFF = magia_tile_pkg::DMA_SRC_REDUCE_LEN_OFF, - parameter int unsigned DECOUPLE_R_W_OFF = magia_tile_pkg::DMA_DECOUPLE_R_W_OFF, - parameter int unsigned DECOUPLE_R_AW_OFF = magia_tile_pkg::DMA_DECOUPLE_R_AW_OFF, - parameter int unsigned N_CFG_REG = magia_tile_pkg::DMA_N_CFG_REG, - parameter type idma_fe_req_t = magia_tile_pkg::idma_fe_reg_req_t, - parameter type idma_fe_rsp_t = magia_tile_pkg::idma_fe_reg_rsp_t -)( - input logic clk_i, - input logic rst_ni, - input logic clear_i, - - cv32e40x_if_xif.coproc_issue xif_issue_if_i, - - output idma_fe_req_t cfg_req_o, - input idma_fe_rsp_t cfg_rsp_i, - - output logic start_o, // Started iDMA transfer - output logic busy_o, // Performing iDMA transfer - output logic done_o, // Finished iDMA transfer - output logic error_o // Detected error -); - -/*******************************************************/ -/** Internal Signal Definitions Beginning **/ -/*******************************************************/ - - logic dec_clk_req; - logic cfg_clk_req; - logic clk_dc_en, clk_tfr_en; - logic clk_dc_g, clk_tfr_g; - - logic[ OPCODE_W-1:0] opcode; - logic[ FUNC3_W-1:0] func3; - logic[ ND_EN_W-1:0] nd_en; - logic[DST_MAX_LOG_LEN_W-1:0] dst_max_log_len; - logic[SRC_MAX_LOG_LEN_W-1:0] src_max_log_len; - logic[ DST_REDUCE_LEN_W-1:0] dst_reduce_len; - logic[ SRC_REDUCE_LEN_W-1:0] src_reduce_len; - logic[ DECOUPLE_R_W_W-1:0] decouple_r_w; - logic[ DECOUPLE_R_AW_W-1:0] decouple_r_aw; - - logic[N_CFG_REG-1:0][DATA_W-1:0] cfg_reg_d, cfg_reg_q; - logic[N_CFG_REG-1:0] cfg_reg_update_d, cfg_reg_update_q; - logic[N_CFG_REG-1:0] cfg_reg_update_clr; - - idma_fe_req_t cfg_configurer_req; - idma_fe_rsp_t cfg_configurer_rsp; - idma_fe_req_t cfg_transferer_req; - idma_fe_rsp_t cfg_transferer_rsp; - - logic free_cfg; - logic free_tfr; - - logic start_transfer; - - logic start_dma; - logic busy_dma; - logic done_dma; - - logic transfer_not_set_properly; - logic reg_error_cfg, reg_error_tfr; - - logic rw_valid_cfg, rw_valid_tfr; - - logic[DATA_W-1:0] next_id_d, next_id_q; - logic[DATA_W-1:0] done_id; - - typedef enum logic[1:0] { - IDLE, - START, - BUSY, - DONE - } idma_state_e; - - idma_state_e c_idma_state, n_idma_state; - -/*******************************************************/ -/** Internal Signal Definitions End **/ -/*******************************************************/ -/** Function Definitions Beginning **/ -/*******************************************************/ - - /* Function that writes the data argument to the addr argument of the iDMA FE register - * OUTPUT: - * req - iDMA FE register request channel - * reg_error - indicates that the req/rsp of the iDMA FE asserted the error signal - * INPUT: - * rsp - iDMA FE register response channel - * addr - iDMA FE register address - * data - iDMA FE register data - * RETURN: - * 1'b1 if the write was acknowledged, 1'b0 otherwise - */ - function automatic logic write_idma_reg(output idma_fe_req_t req, input idma_fe_rsp_t rsp, - input logic[ADDR_W-1:0] addr, input logic[DATA_W-1:0] data, - output logic reg_error); - req.addr = addr; - req.write = 1'b1; - req.wdata = data; - req.wstrb = '1; - req.valid = 1'b1; - - reg_error = rsp.error ? 1'b1 : 1'b0; - write_idma_reg = cfg_rsp_i.ready ? 1'b1 : 1'b0; - endfunction: write_idma_reg - - /* - * Function that reads the data argument of the iDMA FE register - * OUTPUT: - * req - iDMA FE register request channel - * reg_error - indicates that the req/rsp of the iDMA FE asserted the error signal - * data - iDMA FE register read data - * INPUT: - * rsp - iDMA FE register response channel - * addr - iDMA FE register address - * RETURN: - * 1'b1 if the read data is valid, 1'b0 otherwise - */ - function automatic logic read_idma_reg(output idma_fe_req_t req, input idma_fe_rsp_t rsp, - input logic[ADDR_W-1:0] addr, output logic[DATA_W-1:0] data, - output logic reg_error); - req.addr = addr; - req.write = 1'b0; - req.wdata = '0; - req.wstrb = '0; - req.valid = 1'b1; - - data = cfg_rsp_i.rdata; - - reg_error = rsp.error ? 1'b1 : 1'b0; - read_idma_reg = cfg_rsp_i.ready ? 1'b1 : 1'b0; - endfunction: read_idma_reg - -/*******************************************************/ -/** Function Definitions End **/ -/*******************************************************/ -/** Hardwired Signals Beginning **/ -/*******************************************************/ - - assign clk_dc_en = dec_clk_req | cfg_clk_req; - - assign opcode = xif_issue_if_i.issue_req.instr[ OPCODE_OFF+: OPCODE_W]; - assign func3 = xif_issue_if_i.issue_req.instr[ FUNC3_OFF+: FUNC3_W]; - assign nd_en = xif_issue_if_i.issue_req.instr[ ND_EN_OFF+: ND_EN_W]; - assign dst_max_log_len = xif_issue_if_i.issue_req.instr[DST_MAX_LOG_LEN_OFF+:DST_MAX_LOG_LEN_W]; - assign src_max_log_len = xif_issue_if_i.issue_req.instr[SRC_MAX_LOG_LEN_OFF+:SRC_MAX_LOG_LEN_W]; - assign dst_reduce_len = xif_issue_if_i.issue_req.instr[ DST_REDUCE_LEN_OFF+: DST_REDUCE_LEN_W]; - assign src_reduce_len = xif_issue_if_i.issue_req.instr[ SRC_REDUCE_LEN_OFF+: SRC_REDUCE_LEN_W]; - assign decouple_r_w = xif_issue_if_i.issue_req.instr[ DECOUPLE_R_W_OFF+: DECOUPLE_R_W_W]; - assign decouple_r_aw = xif_issue_if_i.issue_req.instr[ DECOUPLE_R_AW_OFF+: DECOUPLE_R_AW_W]; - - assign free_cfg = ~(|cfg_reg_update_q); - assign free_tfr = ~(start_dma | busy_dma); - - assign cfg_req_o = ~free_tfr ? cfg_transferer_req : - ~free_cfg ? cfg_configurer_req : '0; - assign cfg_transferer_rsp = ~free_tfr ? cfg_rsp_i : '0; - assign cfg_configurer_rsp = ~free_tfr ? '0 : - ~free_cfg ? cfg_rsp_i : '0; - - assign error_o = transfer_not_set_properly | reg_error_cfg | reg_error_tfr; - - assign start_o = start_dma; - assign busy_o = busy_dma; - assign done_o = done_dma; - -/*******************************************************/ -/** Hardwired Signals End **/ -/*******************************************************/ -/** Clock gating Beginning **/ -/*******************************************************/ - - tc_clk_gating dc_clock_gating ( - .clk_i , - .en_i ( clk_dc_en ), - .test_en_i ( '0 ), - .clk_o ( clk_dc_g ) - ); - - tc_clk_gating tfr_clock_gating ( - .clk_i , - .en_i ( clk_tfr_en ), - .test_en_i ( '0 ), - .clk_o ( clk_tfr_g ) - ); - -/*******************************************************/ -/** Clock gating End **/ -/*******************************************************/ -/** Decoder FSM Beginning **/ -/*******************************************************/ - - always_comb begin: instr_decoder - dec_clk_req = 1'b0; - start_transfer = 1'b0; - cfg_reg_d = cfg_reg_q; - cfg_reg_update_d = cfg_reg_update_q; - xif_issue_if_i.issue_ready = 1'b0; - xif_issue_if_i.issue_resp = '0; - - if (xif_issue_if_i.issue_valid) begin - case (opcode) - CONF_OPCODE: if (func3 == CONF_FUNC3) begin - xif_issue_if_i.issue_ready = 1'b1; - xif_issue_if_i.issue_resp.accept = 1'b1; - dec_clk_req = 1'b1; - cfg_reg_d [magia_tile_pkg::DMA_CONF_IDX] = {nd_en, dst_max_log_len, src_max_log_len, dst_reduce_len, src_reduce_len, decouple_r_w, decouple_r_aw}; - cfg_reg_update_d[magia_tile_pkg::DMA_CONF_IDX] = 1'b1; - end - SET_OPCODE: begin - xif_issue_if_i.issue_ready = 1'b1; - xif_issue_if_i.issue_resp.accept = 1'b1; - dec_clk_req = 1'b1; - case (func3) - SET_AL_FUNC3: if (xif_issue_if_i.issue_req.rs_valid) begin - cfg_reg_d [magia_tile_pkg::DMA_LENGTH_IDX] = xif_issue_if_i.issue_req.rs[0]; - cfg_reg_d [magia_tile_pkg::DMA_SRC_ADDR_IDX] = xif_issue_if_i.issue_req.rs[1]; - cfg_reg_d [magia_tile_pkg::DMA_DST_ADDR_IDX] = xif_issue_if_i.issue_req.rs[2]; - cfg_reg_update_d[magia_tile_pkg::DMA_LENGTH_IDX] = 1'b1; - cfg_reg_update_d[magia_tile_pkg::DMA_SRC_ADDR_IDX] = 1'b1; - cfg_reg_update_d[magia_tile_pkg::DMA_DST_ADDR_IDX] = 1'b1; - end - SET_SR2_FUNC3: if (xif_issue_if_i.issue_req.rs_valid) begin - cfg_reg_d [magia_tile_pkg::DMA_REPS_2_IDX] = xif_issue_if_i.issue_req.rs[0]; - cfg_reg_d [magia_tile_pkg::DMA_SRC_STRIDE_2_IDX] = xif_issue_if_i.issue_req.rs[1]; - cfg_reg_d [magia_tile_pkg::DMA_DST_STRIDE_2_IDX] = xif_issue_if_i.issue_req.rs[2]; - cfg_reg_update_d[magia_tile_pkg::DMA_REPS_2_IDX] = 1'b1; - cfg_reg_update_d[magia_tile_pkg::DMA_SRC_STRIDE_2_IDX] = 1'b1; - cfg_reg_update_d[magia_tile_pkg::DMA_DST_STRIDE_2_IDX] = 1'b1; - end - SET_SR3_FUNC3: if (xif_issue_if_i.issue_req.rs_valid) begin - cfg_reg_d [magia_tile_pkg::DMA_REPS_3_IDX] = xif_issue_if_i.issue_req.rs[0]; - cfg_reg_d [magia_tile_pkg::DMA_SRC_STRIDE_3_IDX] = xif_issue_if_i.issue_req.rs[1]; - cfg_reg_d [magia_tile_pkg::DMA_DST_STRIDE_3_IDX] = xif_issue_if_i.issue_req.rs[2]; - cfg_reg_update_d[magia_tile_pkg::DMA_REPS_3_IDX] = 1'b1; - cfg_reg_update_d[magia_tile_pkg::DMA_SRC_STRIDE_3_IDX] = 1'b1; - cfg_reg_update_d[magia_tile_pkg::DMA_DST_STRIDE_3_IDX] = 1'b1; - end - SET_S_FUNC3: start_transfer = 1'b1; - endcase - end - endcase - end - end - - always_ff @(posedge clk_dc_g, negedge rst_ni) begin: configuration_register - if (~rst_ni) cfg_reg_q <= '0; - else begin - if (clear_i) cfg_reg_q <= '0; - else cfg_reg_q <= cfg_reg_d; - end - end - -/*******************************************************/ -/** Decoder FSM End **/ -/*******************************************************/ -/** iDMA FE Configuration FSM Beginning **/ -/*******************************************************/ - - always_comb begin: idma_configurerer_next_state_output_logic - cfg_clk_req = 1'b0; - reg_error_cfg = 1'b0; - rw_valid_cfg = 1'b0; - cfg_reg_update_clr = '0; - cfg_configurer_req.addr = '0; - cfg_configurer_req.write = 1'b0; - cfg_configurer_req.wdata = '0; - cfg_configurer_req.wstrb = '0; - cfg_configurer_req.valid = 1'b0; - - if (free_tfr) begin - if (~free_cfg) begin - cfg_clk_req = 1'b1; - case (1'b1) - cfg_reg_update_q[magia_tile_pkg::DMA_CONF_IDX]: begin - rw_valid_cfg = write_idma_reg(.req(cfg_configurer_req), .rsp(cfg_configurer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_CONF_OFFSET), .data(cfg_reg_d[magia_tile_pkg::DMA_CONF_IDX][CONF_W-1:0]), .reg_error(reg_error_cfg)); - cfg_reg_update_clr[magia_tile_pkg::DMA_CONF_IDX] = reg_error_cfg ? 1'b0 : (rw_valid_cfg ? 1'b1 : 1'b0); - end - cfg_reg_update_q[magia_tile_pkg::DMA_DST_ADDR_IDX]: begin - rw_valid_cfg = write_idma_reg(.req(cfg_configurer_req), .rsp(cfg_configurer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_DST_ADDR_LOW_OFFSET), .data(cfg_reg_d[magia_tile_pkg::DMA_DST_ADDR_IDX]), .reg_error(reg_error_cfg)); - cfg_reg_update_clr[magia_tile_pkg::DMA_DST_ADDR_IDX] = reg_error_cfg ? 1'b0 : (rw_valid_cfg ? 1'b1 : 1'b0); - end - cfg_reg_update_q[magia_tile_pkg::DMA_SRC_ADDR_IDX]: begin - rw_valid_cfg = write_idma_reg(.req(cfg_configurer_req), .rsp(cfg_configurer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_SRC_ADDR_LOW_OFFSET), .data(cfg_reg_d[magia_tile_pkg::DMA_SRC_ADDR_IDX]), .reg_error(reg_error_cfg)); - cfg_reg_update_clr[magia_tile_pkg::DMA_SRC_ADDR_IDX] = reg_error_cfg ? 1'b0 : (rw_valid_cfg ? 1'b1 : 1'b0); - end - cfg_reg_update_q[magia_tile_pkg::DMA_LENGTH_IDX]: begin - rw_valid_cfg = write_idma_reg(.req(cfg_configurer_req), .rsp(cfg_configurer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_LENGTH_LOW_OFFSET), .data(cfg_reg_d[magia_tile_pkg::DMA_LENGTH_IDX]), .reg_error(reg_error_cfg)); - cfg_reg_update_clr[magia_tile_pkg::DMA_LENGTH_IDX] = reg_error_cfg ? 1'b0 : (rw_valid_cfg ? 1'b1 : 1'b0); - end - cfg_reg_update_q[magia_tile_pkg::DMA_DST_STRIDE_2_IDX]: begin - rw_valid_cfg = write_idma_reg(.req(cfg_configurer_req), .rsp(cfg_configurer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_DST_STRIDE_2_LOW_OFFSET), .data(cfg_reg_d[magia_tile_pkg::DMA_DST_STRIDE_2_IDX]), .reg_error(reg_error_cfg)); - cfg_reg_update_clr[magia_tile_pkg::DMA_DST_STRIDE_2_IDX] = reg_error_cfg ? 1'b0 : (rw_valid_cfg ? 1'b1 : 1'b0); - end - cfg_reg_update_q[magia_tile_pkg::DMA_SRC_STRIDE_2_IDX]: begin - rw_valid_cfg = write_idma_reg(.req(cfg_configurer_req), .rsp(cfg_configurer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_SRC_STRIDE_2_LOW_OFFSET), .data(cfg_reg_d[magia_tile_pkg::DMA_SRC_STRIDE_2_IDX]), .reg_error(reg_error_cfg)); - cfg_reg_update_clr[magia_tile_pkg::DMA_SRC_STRIDE_2_IDX] = reg_error_cfg ? 1'b0 : (rw_valid_cfg ? 1'b1 : 1'b0); - end - cfg_reg_update_q[magia_tile_pkg::DMA_REPS_2_IDX]: begin - rw_valid_cfg = write_idma_reg(.req(cfg_configurer_req), .rsp(cfg_configurer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_REPS_2_LOW_OFFSET), .data(cfg_reg_d[magia_tile_pkg::DMA_REPS_2_IDX]), .reg_error(reg_error_cfg)); - cfg_reg_update_clr[magia_tile_pkg::DMA_REPS_2_IDX] = reg_error_cfg ? 1'b0 : (rw_valid_cfg ? 1'b1 : 1'b0); - end - cfg_reg_update_q[magia_tile_pkg::DMA_DST_STRIDE_3_IDX]: begin - rw_valid_cfg = write_idma_reg(.req(cfg_configurer_req), .rsp(cfg_configurer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_DST_STRIDE_3_LOW_OFFSET), .data(cfg_reg_d[magia_tile_pkg::DMA_DST_STRIDE_3_IDX]), .reg_error(reg_error_cfg)); - cfg_reg_update_clr[magia_tile_pkg::DMA_DST_STRIDE_3_IDX] = reg_error_cfg ? 1'b0 : (rw_valid_cfg ? 1'b1 : 1'b0); - end - cfg_reg_update_q[magia_tile_pkg::DMA_SRC_STRIDE_3_IDX]: begin - rw_valid_cfg = write_idma_reg(.req(cfg_configurer_req), .rsp(cfg_configurer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_SRC_STRIDE_3_LOW_OFFSET), .data(cfg_reg_d[magia_tile_pkg::DMA_SRC_STRIDE_3_IDX]), .reg_error(reg_error_cfg)); - cfg_reg_update_clr[magia_tile_pkg::DMA_SRC_STRIDE_3_IDX] = reg_error_cfg ? 1'b0 : (rw_valid_cfg ? 1'b1 : 1'b0); - end - cfg_reg_update_q[magia_tile_pkg::DMA_REPS_3_IDX]: begin - rw_valid_cfg = write_idma_reg(.req(cfg_configurer_req), .rsp(cfg_configurer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_REPS_3_LOW_OFFSET), .data(cfg_reg_d[magia_tile_pkg::DMA_REPS_3_IDX]), .reg_error(reg_error_cfg)); - cfg_reg_update_clr[magia_tile_pkg::DMA_REPS_3_IDX] = reg_error_cfg ? 1'b0 : (rw_valid_cfg ? 1'b1 : 1'b0); - end - endcase - end - end - end - - for (genvar i = 0; i < N_CFG_REG; i++) begin: gen_configuration_update_register - always_ff @(posedge clk_dc_g, negedge rst_ni) begin: configuration_update_register - if (~rst_ni) cfg_reg_update_q[i] <= 1'b0; - else begin - if (clear_i | cfg_reg_update_clr[i]) cfg_reg_update_q[i] <= 1'b0; - else cfg_reg_update_q[i] <= cfg_reg_update_d[i]; - end - end - end - -/*******************************************************/ -/** iDMA FE Configuration FSM End **/ -/*******************************************************/ -/** iDMA Transfer FSM Beginning **/ -/*******************************************************/ - - always_comb begin: idma_transferer_next_state_output_logic - clk_tfr_en = 1'b1; - n_idma_state = c_idma_state; - start_dma = 1'b0; - busy_dma = 1'b0; - done_dma = 1'b0; - transfer_not_set_properly = 1'b0; - reg_error_tfr = 1'b0; - rw_valid_tfr = 1'b0; - next_id_d = next_id_q; - done_id = '0; - cfg_transferer_req.addr = '0; - cfg_transferer_req.write = 1'b0; - cfg_transferer_req.wdata = '0; - cfg_transferer_req.wstrb = '0; - cfg_transferer_req.valid = 1'b0; - - case (c_idma_state) - IDLE: if (start_transfer) n_idma_state = START; else clk_tfr_en = 1'b0; - START: begin - start_dma = 1'b1; - rw_valid_tfr = read_idma_reg(.req(cfg_transferer_req), .rsp(cfg_transferer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_NEXT_ID_0_OFFSET), .data(next_id_d), .reg_error(reg_error_tfr)); - transfer_not_set_properly = (rw_valid_tfr & (next_id_d == 0)) ? 1'b1 : 1'b0; - n_idma_state = (reg_error_tfr | transfer_not_set_properly) ? IDLE : (~rw_valid_tfr ? c_idma_state: BUSY); - end - BUSY: begin - busy_dma = 1'b1; - rw_valid_tfr = read_idma_reg(.req(cfg_transferer_req), .rsp(cfg_transferer_rsp), .addr(idma_reg32_3d_reg_pkg::IDMA_REG32_3D_DONE_ID_0_OFFSET), .data(done_id), .reg_error(reg_error_tfr)); - n_idma_state = reg_error_tfr ? IDLE : (~rw_valid_tfr ? c_idma_state : (done_id != next_id_q ? c_idma_state : DONE)); - end - DONE: begin - done_dma = 1'b1; - n_idma_state = IDLE; - end - endcase - end - - always_ff @(posedge clk_tfr_g, negedge rst_ni) begin: idma_state_register - if (~rst_ni) c_idma_state <= IDLE; - else begin - if (clear_i) c_idma_state <= IDLE; - else c_idma_state <= n_idma_state; - end - end - - always_ff @(posedge clk_tfr_g, negedge rst_ni) begin: next_id_register - if (~rst_ni) next_id_q <= 1; - else begin - if (clear_i) next_id_q <= 1; - else next_id_q <= next_id_d; - end - end - -/*******************************************************/ -/** iDMA Transfer FSM End **/ -/*******************************************************/ - -endmodule: idma_xif_inst_decoder \ No newline at end of file diff --git a/hw/tile/magia_tile.sv b/hw/tile/magia_tile.sv index 161ff914..353995af 100644 --- a/hw/tile/magia_tile.sv +++ b/hw/tile/magia_tile.sv @@ -316,7 +316,6 @@ module magia_tile logic idma_obi2axi_done; logic idma_obi2axi_error; - magia_tile_pkg::xif_inst_rule_t[magia_tile_pkg::N_RULES-1:0] xif_coproc_rules; logic sys_clk; logic sys_clk_en; @@ -403,9 +402,13 @@ module magia_tile magia_tile_pkg::eu_direct_req_t eu_direct_req; magia_tile_pkg::eu_direct_rsp_t eu_direct_rsp; - // Cluster core data interface (converted directly to OBI xbar) - magia_tile_pkg::core_data_req_t [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_data_req; - magia_tile_pkg::core_data_rsp_t [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_data_rsp; + // Cluster core data interface (converted directly to OBI xbar). + // Cluster cores are always CV32E40P, so these are typed on the CV32E40P + // flavour and not on core_data_req_t, which follows the control core: with + // core=CV32E40X the extra atop/memtype/prot/dbg fields would never be driven + // and would propagate X into the OBI crossbar. + magia_tile_pkg::cv32e40p_core_data_req_t [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_data_req; + magia_tile_pkg::cv32e40p_core_data_rsp_t [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_data_rsp; // Cluster core OBI data interface (output from demux data2obi) magia_tile_pkg::core_obi_data_req_t [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_obi_data_req; @@ -466,9 +469,6 @@ module magia_tile magia_tile_pkg::core_instr_rsp_t [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_instr_rsp; logic [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_fetch_enable; logic [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_core_sleep; -`ifdef RI5CY - logic [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_core_busy; // RI5CY cluster: core_busy_o intermediate -`endif logic cluster_done; // Per-core dispatch IRQ pulse from tile_csr. CV32E40P IRQ inputs are level // sensitive, so the pulse is stretched until the worker acknowledges MEI. @@ -476,7 +476,7 @@ module magia_tile logic [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_start_irq; logic [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_start_irq_pending; logic [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_irq_ack; - logic [magia_tile_pkg::N_CLUSTER_CORES-1:0][magia_tile_pkg::CLIC_ID_W-1:0] cluster_irq_id; + logic [magia_tile_pkg::N_CLUSTER_CORES-1:0][magia_tile_pkg::CLIC_ID_W_CLUSTER-1:0] cluster_irq_id; logic [magia_tile_pkg::N_CLUSTER_CORES-1:0][31:0] cluster_irq_vec; @@ -524,13 +524,11 @@ module magia_tile assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_L1SPM_IDX] = '{idx: 32'd1, start_addr: tile_l1_start_addr, end_addr: tile_l1_end_addr }; assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_RESERVED_IDX] = '{idx: 32'd1, start_addr: tile_reserved_start_addr, end_addr: tile_reserved_end_addr }; assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_STACK_IDX] = '{idx: 32'd1, start_addr: magia_tile_pkg::STACK_ADDR_START, end_addr: magia_tile_pkg::STACK_ADDR_END }; - assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_EVENT_UNIT_IDX] = '{idx: 32'd5, start_addr: tile_event_unit_start_addr, end_addr: tile_event_unit_end_addr }; - assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_TILE_CSR_IDX] = '{idx: 32'd6, start_addr: tile_csr_start_addr, end_addr: tile_csr_end_addr }; -`ifndef CV32E40X - assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_REDMULE_CTRL_IDX] = '{idx: 32'd2, start_addr: tile_redmule_ctrl_start_addr, end_addr: tile_redmule_ctrl_end_addr }; - assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_IDMA_IDX] = '{idx: 32'd3, start_addr: tile_idma_ctrl_start_addr, end_addr: tile_idma_ctrl_end_addr }; - assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_FSYNC_CTRL_IDX] = '{idx: 32'd4, start_addr: tile_fsync_ctrl_start_addr, end_addr: tile_fsync_ctrl_end_addr }; -`endif + assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_REDMULE_CTRL_IDX] = '{idx: 32'd2, start_addr: tile_redmule_ctrl_start_addr, end_addr: tile_redmule_ctrl_end_addr }; + assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_IDMA_IDX] = '{idx: 32'd3, start_addr: tile_idma_ctrl_start_addr, end_addr: tile_idma_ctrl_end_addr }; + assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_FSYNC_CTRL_IDX] = '{idx: 32'd4, start_addr: tile_fsync_ctrl_start_addr, end_addr: tile_fsync_ctrl_end_addr }; + assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_EVENT_UNIT_IDX] = '{idx: 32'd5, start_addr: tile_event_unit_start_addr, end_addr: tile_event_unit_end_addr }; + assign obi_xbar_rule[magia_tile_pkg::OBI_XBAR_TILE_CSR_IDX] = '{idx: 32'd6, start_addr: tile_csr_start_addr, end_addr: tile_csr_end_addr }; assign axi_xbar_rule[magia_tile_pkg::AXI_XBAR_L2_IDX] = '{idx: 32'd0, start_addr: magia_tile_pkg::L2_ADDR_START, end_addr: magia_tile_pkg::L2_ADDR_END }; assign axi_xbar_rule[magia_tile_pkg::AXI_XBAR_L1SPM_IDX] = '{idx: 32'd1, start_addr: tile_l1_start_addr, end_addr: tile_l1_end_addr }; @@ -587,74 +585,37 @@ module magia_tile assign hci_clear = 1'b0; assign hci_ctrl = '0; -`ifdef CV32E40X - assign redmule_ctrl_req = '0; -`endif - assign idma_clear = 1'b0; assign fsync_clear = 1'b0; - assign xif_coproc_rules[magia_tile_pkg::XIF_REDMULE_IDX] = '0; // current version of XIF-RedMulE not (yet) supported - assign xif_coproc_rules[magia_tile_pkg::XIF_IDMA_IDX] = '{sign_list: '{ {{magia_tile_pkg::CONF_OPCODE, magia_tile_pkg::CONF_FUNC3}}, - {{magia_tile_pkg::SET_OPCODE, magia_tile_pkg::SET_AL_FUNC3}}, - {{magia_tile_pkg::SET_OPCODE, magia_tile_pkg::SET_SR2_FUNC3}}, - {{magia_tile_pkg::SET_OPCODE, magia_tile_pkg::SET_SR3_FUNC3}}, - {{magia_tile_pkg::SET_OPCODE, magia_tile_pkg::SET_S_FUNC3}}, - {{magia_tile_pkg::SET_OPCODE, magia_tile_pkg::SET_S_FUNC3}}, - {{magia_tile_pkg::SET_OPCODE, magia_tile_pkg::SET_S_FUNC3}}, - {{magia_tile_pkg::SET_OPCODE, magia_tile_pkg::SET_S_FUNC3}}, - {{magia_tile_pkg::SET_OPCODE, magia_tile_pkg::SET_S_FUNC3}} }}; - assign xif_coproc_rules[magia_tile_pkg::XIF_FSYNC_IDX] = '{sign_list: '{ default: {magia_tile_pkg::FSYNC_OPCODE, magia_tile_pkg::FSYNC_FUNC3} }}; assign redmule_evt[0][1] = 1'b0; `ifdef CV32E40X - assign irq[magia_tile_pkg::IRQ_IDX_REDMULE_EVT_0] = 1'b0; /* redmule_evt[0][0]; */ // Event Unit manages these interrupts // Only 1 core supported - assign irq[magia_tile_pkg::IRQ_IDX_REDMULE_EVT_1] = 1'b0; /* redmule_evt[0][1]; */ // Event Unit manages these interrupts // Only 1 core supported - assign irq[magia_tile_pkg::IRQ_IDX_A2O_ERROR] = 1'b0; /* idma_axi2obi_error; */ // Event Unit manages these interrupts - assign irq[magia_tile_pkg::IRQ_IDX_O2A_ERROR] = 1'b0; /* idma_obi2axi_error; */ // Event Unit manages these interrupts - assign irq[magia_tile_pkg::IRQ_IDX_A2O_DONE] = 1'b0; /* idma_axi2obi_done; */ // Event Unit manages these interrupts - assign irq[magia_tile_pkg::IRQ_IDX_O2A_DONE] = 1'b0; /* idma_obi2axi_done; */ // Event Unit manages these interrupts - assign irq[magia_tile_pkg::IRQ_IDX_A2O_START] = 1'b0; /* idma_axi2obi_start; */ // Event Unit manages these interrupts - assign irq[magia_tile_pkg::IRQ_IDX_O2A_START] = 1'b0; /* idma_obi2axi_start; */ // Event Unit manages these interrupts - assign irq[magia_tile_pkg::IRQ_IDX_A2O_BUSY] = 1'b0; /* idma_axi2obi_busy; */ // Event Unit manages these interrupts - assign irq[magia_tile_pkg::IRQ_IDX_O2A_BUSY] = 1'b0; /* idma_obi2axi_busy; */ // Event Unit manages these interrupts - assign irq[magia_tile_pkg::IRQ_IDX_REDMULE_BUSY] = 1'b0; /* redmule_busy; */ // Event Unit manages these interrupts - assign irq[magia_tile_pkg::IRQ_IDX_FSYNC_DONE] = 1'b0; /* fsync_done; */ // Event Unit manages these interrupts - assign irq[magia_tile_pkg::IRQ_IDX_FSYNC_ERROR] = 1'b0; /* fsync_error; */ // Event Unit manages these interrupts - assign irq[magia_pkg::N_IRQ-magia_tile_pkg::IRQ_USED-1:16] - = irq_i[magia_pkg::N_IRQ-magia_tile_pkg::IRQ_USED-1:16]; + assign enable_prefetching = 1'b0; + assign flush_valid[0] = fencei_flush_req; // Single port i$ + assign fencei_flush_ack = flush_ready[0]; // Signle port i$ + + assign irq[N_IRQ-1:19] = '0; + assign irq[18:16] = irq_i[18:16]; assign irq[15:12] = '0; - assign irq[11] = eu_core_irq_req[0]; // Event Unit IRQ mapped to external interrupt (bit 11) /* irq_i[11]; */ + assign irq[11] = eu_core_irq_req[0]; // Event Unit IRQ mapped to external interrupt (bit 11) assign irq[10:8] = '0; assign irq[7] = irq_i[7]; assign irq[6:4] = '0; assign irq[3] = irq_i[3]; assign irq[2:0] = '0; - // CLIC unused assign clic_irq = 1'b0; assign clic_irq_id = '0; assign clic_irq_level = '0; assign clic_irq_priv = '0; assign clic_irq_shv = 1'b0; - - assign enable_prefetching = 1'b0; - assign flush_valid[0] = fencei_flush_req; // Single port i$ - assign fencei_flush_ack = flush_ready[0]; // Signle port i$ - - assign xif_redmule_if.result_ready = 1'b0; - assign xif_redmule_if.compressed_valid = 1'b0; - assign xif_redmule_if.compressed_req = '0; - assign xif_redmule_if.mem_ready = 1'b0; - assign xif_redmule_if.mem_resp = '0; `else // Icache control signals assign enable_prefetching = 1'b0; assign flush_valid = '0; - // Event Unit provides unified interrupt management - // External interrupts must be mapped to bit 11 (MEIE - Machine External Interrupt Enable) assign irq[magia_pkg::N_IRQ-1:12] = '0; // Clear all high IRQs assign irq[11] = eu_core_irq_req[0]; // Event Unit IRQ mapped to external interrupt (bit 11) assign irq[10:8] = '0; // Clear IRQs 8-10 @@ -670,16 +631,28 @@ module magia_tile /** Type Conversions Beginning **/ /*******************************************************/ - // Convert core data interface to OBI for crossbar - data2obi_req i_core_data2obi_req ( + // Convert control core data interface to OBI for crossbar +`ifdef CV32E40X + cv32e40x_data2obi_req i_core_data2obi_req ( + .data_req_i ( core_data_req_to_xbar ), + .obi_req_o ( core_obi_data_req ) + ); + + cv32e40x_obi2data_rsp i_core_obi2data_rsp ( + .obi_rsp_i ( core_obi_data_rsp ), + .data_rsp_o ( core_data_rsp_from_xbar ) + ); +`else + cv32e40p_data2obi_req i_core_data2obi_req ( .data_req_i ( core_data_req_to_xbar ), .obi_req_o ( core_obi_data_req ) ); - obi2data_rsp i_core_obi2data_rsp ( + cv32e40p_obi2data_rsp i_core_obi2data_rsp ( .obi_rsp_i ( core_obi_data_rsp ), .data_rsp_o ( core_data_rsp_from_xbar ) ); +`endif obi2hci_req #( .obi_req_t ( magia_tile_pkg::core_obi_data_req_t ), @@ -935,7 +908,6 @@ module magia_tile .rsp_r_user_i ( '0 ) ); -`ifndef CV32E40X // RedMule controller OBI-to-HWPE control interface obi2hwpe_ctrl obi2hwpe_ctrl_inst ( .obi_req_i ( core_mem_data_req[magia_tile_pkg::OBI_XBAR_REDMULE_CTRL_IDX] ), @@ -943,7 +915,6 @@ module magia_tile .ctrl_req_o ( redmule_ctrl_req ), .ctrl_rsp_i ( redmule_ctrl_rsp ) ); -`endif /*********************** Cluster **********************************/ @@ -1133,18 +1104,7 @@ module magia_tile end endgenerate - cv32e40x_if_xif xif_redmule_if (); - - cv32e40x_if_xif #( - .X_NUM_RS ( magia_tile_pkg::X_NUM_RS ), - .X_ID_WIDTH ( magia_tile_pkg::X_ID_W ), - .X_MEM_WIDTH ( magia_tile_pkg::X_MEM_W ), - .X_RFR_WIDTH ( magia_tile_pkg::X_RFR_W ), - .X_RFW_WIDTH ( magia_tile_pkg::X_RFW_W ), - .X_MISA ( magia_tile_pkg::X_MISA ), - .X_ECS_XS ( magia_tile_pkg::X_ECS_XS ) - ) xif_fpu_if (); - + // Single Xif interface shared between core (cpu_*) and FPU (coproc_*) cv32e40x_if_xif #( .X_NUM_RS ( magia_tile_pkg::X_NUM_RS ), .X_ID_WIDTH ( magia_tile_pkg::X_ID_W ), @@ -1153,17 +1113,9 @@ module magia_tile .X_RFW_WIDTH ( magia_tile_pkg::X_RFW_W ), .X_MISA ( magia_tile_pkg::X_MISA ), .X_ECS_XS ( magia_tile_pkg::X_ECS_XS ) - ) xif_if (); + ) xif_if (); + - cv32e40x_if_xif #( - .X_NUM_RS ( magia_tile_pkg::X_NUM_RS ), - .X_ID_WIDTH ( magia_tile_pkg::X_ID_W ), - .X_MEM_WIDTH ( magia_tile_pkg::X_MEM_W ), - .X_RFR_WIDTH ( magia_tile_pkg::X_RFR_W ), - .X_RFW_WIDTH ( magia_tile_pkg::X_RFW_W ), - .X_MISA ( magia_tile_pkg::X_MISA ), - .X_ECS_XS ( magia_tile_pkg::X_ECS_XS ) - ) xif_coproc_if[magia_tile_pkg::N_COPROC] (); // Index 0 -> RedMulE, Index 1 -> iDMA, Index 2 -> Fractal Sync, Index 3 -> FPU /*******************************************************/ /** Interface Definitions End **/ @@ -1190,14 +1142,9 @@ module magia_tile /*******************************************************/ magia_redmule_wrap #( -`ifdef CV32E40X - .CtrlIntfConfig ( redmule_pkg::XIF ), - .XifIdWidth ( magia_tile_pkg::X_ID_W ), -`else - .CtrlIntfConfig ( redmule_pkg::HWPE_TARGET ), -`endif - .Height ( magia_tile_pkg::REDMULE_HEIGHT ), - .Width ( magia_tile_pkg::REDMULE_WIDTH ), + .CtrlIntfConfig ( redmule_pkg::HWPE_TARGET ), + .Height ( magia_tile_pkg::REDMULE_HEIGHT ), + .Width ( magia_tile_pkg::REDMULE_WIDTH ), .NumPipeRegs ( magia_tile_pkg::REDMULE_NUM_PIPE_REGS ) ) i_redmule_wrap ( .clk_i ( sys_clk ), @@ -1206,21 +1153,6 @@ module magia_tile .busy_o ( redmule_busy ), .evt_o ( redmule_evt[0][0] ), - -`ifdef CV32E40X - .x_issue_req_i ( xif_coproc_if.coproc_issue[magia_tile_pkg::XIF_REDMULE_IDX].issue_req ), - .x_issue_resp_o ( xif_coproc_if.coproc_issue[magia_tile_pkg::XIF_REDMULE_IDX].issue_resp ), - .x_issue_valid_i ( xif_coproc_if.coproc_issue[magia_tile_pkg::XIF_REDMULE_IDX].issue_valid ), - .x_issue_ready_o ( xif_coproc_if.coproc_issue[magia_tile_pkg::XIF_REDMULE_IDX].issue_ready ), - .x_register_i ( xif_coproc_if.coproc_issue[magia_tile_pkg::XIF_REDMULE_IDX].register ), - .x_register_valid_i ( xif_coproc_if.coproc_issue[magia_tile_pkg::XIF_REDMULE_IDX].register_valid ), - .x_register_ready_o ( xif_coproc_if.coproc_issue[magia_tile_pkg::XIF_REDMULE_IDX].register_ready ), - .x_commit_i ( xif_coproc_if.coproc_commit[magia_tile_pkg::XIF_REDMULE_IDX].commit ), - .x_commit_valid_i ( xif_coproc_if.coproc_commit[magia_tile_pkg::XIF_REDMULE_IDX].commit_valid ), - .x_result_o ( xif_redmule_if.coproc_result.result ), - .x_result_valid_o ( xif_redmule_if.coproc_result.result_valid ), - .x_result_ready_i ( xif_redmule_if.coproc_result.result_ready ), -`else .x_issue_req_i ( ), // Not used in HWPE mode .x_issue_resp_o ( ), // Not used in HWPE mode .x_issue_valid_i ( 1'b0 ), // Not used in HWPE mode @@ -1233,7 +1165,6 @@ module magia_tile .x_result_o ( ), // Not used in HWPE mode .x_result_valid_o ( ), // Not used in HWPE mode .x_result_ready_i ( 1'b0 ), // Not used in HWPE mode -`endif .data_req_o ( redmule_data_req ), .data_rsp_i ( redmule_data_rsp ), @@ -1280,7 +1211,7 @@ module magia_tile .CLIC_ID_WIDTH ( magia_tile_pkg::CLIC_ID_W ) // Width of clic_irq_id_i and clic_irq_id_o ) i_cv32e40x_ctrl_core ( // Clock and reset - .clk_i ( sys_clk ), + .clk_i ( core_clk ), .rst_ni ( rst_ni ), .scan_cg_en_i , @@ -1355,102 +1286,8 @@ module magia_tile // Special control signals .fetch_enable_i , .core_sleep_o , - .wu_wfe_i - ); -`elsif RI5CY - riscv_core #( - .N_EXT_PERF_COUNTERS ( magia_tile_pkg::N_EXT_PERF_COUNTERS ), - .INSTR_RDATA_WIDTH ( magia_tile_pkg::INSTR_RDATA_WIDTH ), - .PULP_SECURE ( magia_tile_pkg::PULP_SECURE ), - .N_PMP_ENTRIES ( magia_tile_pkg::N_PMP_ENTRIES ), - .USE_PMP ( magia_tile_pkg::USE_PMP ), - .PULP_CLUSTER ( magia_tile_pkg::PULP_CLUSTER ), - .FPU ( magia_tile_pkg::FPU ), - .Zfinx ( magia_tile_pkg::ZFINX ), - .FP_DIVSQRT ( magia_tile_pkg::FP_DIVSQRT ), - .SHARED_FP ( magia_tile_pkg::SHARED_FP ), - .SHARED_DSP_MULT ( magia_tile_pkg::SHARED_DSP_MULT ), - .SHARED_INT_MULT ( magia_tile_pkg::SHARED_INT_MULT ), - .SHARED_INT_DIV ( magia_tile_pkg::SHARED_INT_DIV ), - .SHARED_FP_DIVSQRT ( magia_tile_pkg::SHARED_FP_DIVSQRT ), - .WAPUTYPE ( magia_tile_pkg::WAPUTYPE ), - .APU_NARGS_CPU ( magia_tile_pkg::APU_NARGS_CPU ), - .APU_WOP_CPU ( magia_tile_pkg::APU_WOP_CPU ), - .APU_NDSFLAGS_CPU ( magia_tile_pkg::APU_NDSFLAGS_CPU ), - .APU_NUSFLAGS_CPU ( magia_tile_pkg::APU_NUSFLAGS_CPU ), - .DM_HaltAddress ( magia_tile_pkg::DM_HALT_ADDR ) - ) i_ri5cy_ctrl_core ( - // Clock and Reset - .clk_i ( core_clk ), // Use gated clock for core - .rst_ni ( rst_ni ), - - // Clock enable and test mode - .clock_en_i ( sys_clk_en ), - .test_en_i ( test_mode_i ), - - // Floating-point register file disable (for Zfinx) - .fregfile_disable_i ( 1'b0 ), // FPU enabled, use dedicated FP regfile - - // Boot configuration - .boot_addr_i ( boot_addr_i ), - - // Cluster/Core IDs - .cluster_id_i ( '0 ), - .core_id_i ( mhartid_i[3:0] ), - - // Instruction memory interface - .instr_req_o ( core_instr_req.req ), - .instr_gnt_i ( core_instr_rsp.gnt ), - .instr_rvalid_i ( core_instr_rsp.rvalid ), - .instr_addr_o ( core_instr_req.addr ), - .instr_rdata_i ( core_instr_rsp.rdata ), - - // Data memory interface - .data_req_o ( core_data_req.req ), - .data_gnt_i ( core_data_rsp.gnt ), - .data_rvalid_i ( core_data_rsp.rvalid ), - .data_addr_o ( core_data_req.addr ), - .data_be_o ( core_data_req.be ), - .data_wdata_o ( core_data_req.wdata ), - .data_we_o ( core_data_req.we ), - .data_rdata_i ( core_data_rsp.rdata ), - - // APU interface (disabled - not connected) - .apu_master_req_o ( ), - .apu_master_ready_o ( ), - .apu_master_gnt_i ( '0 ), - - .apu_master_operands_o ( ), - .apu_master_op_o ( ), - .apu_master_type_o ( ), - .apu_master_flags_o ( ), - - .apu_master_valid_i ( '0 ), - .apu_master_result_i ( '0 ), - .apu_master_flags_i ( '0 ), - - // Interrupts - .irq_i ( eu_core_irq_req[0] ), - .irq_id_i ( '0 ), - .irq_ack_o ( eu_core_irq_ack[0] ), - .irq_id_o ( eu_core_irq_ack_id[0] ), - .irq_sec_i ( '0 ), - - // Security level (unused) - .sec_lvl_o ( ), - - // Debug interface - .debug_req_i ( debug_req_i[0] ), - - // CPU control - .fetch_enable_i ( fetch_enable_i ), - .core_busy_o ( core_busy_o ), - - - // Performance counters - .ext_perf_counters_i ( '0 ) + .wu_wfe_i ); - `else `ifndef CORE_TRACES cv32e40p_top #( @@ -1460,7 +1297,7 @@ module magia_tile .COREV_PULP ( 1 ), // For now this is a no .COREV_CLUSTER ( 1 ), .FPU ( FPU ), - .ZFINX ( magia_tile_pkg::ZFINX ), + .ZFINX ( magia_tile_pkg::ZFINX_CV32E40P ), .FPU_ADDMUL_LAT ( 1 ), // Match C_LAT_FP32=1 in fpnew wrapper .FPU_OTHERS_LAT ( 1 ), // Match C_LAT_NONCOMP=1 in fpnew wrapper .NUM_MHPMCOUNTERS ( 29 ) @@ -1497,7 +1334,10 @@ module magia_tile .irq_ack_o ( eu_core_irq_ack[0] ), .irq_id_o ( eu_core_irq_ack_id[0] ), // Debug interface - .debug_req_i ( debug_req_i[0] ), + .debug_req_i ( debug_req_i[0] ), + .debug_havereset_o ( debug_havereset_o ), + .debug_running_o ( debug_running_o ), + .debug_halted_o ( debug_halted_o ), // CPU control .fetch_enable_i ( fetch_enable_i ), .core_sleep_o ( core_sleep_o ) @@ -1510,9 +1350,6 @@ module magia_tile assign core_instr_req.dbg = 1'b0; assign mcycle_o = 64'h0; - assign debug_havereset_o = 1'b0; - assign debug_running_o = 1'b0; - assign debug_halted_o = 1'b0; assign debug_pc_valid_o = 1'b0; assign debug_pc_o = 32'h0; `endif @@ -1676,70 +1513,9 @@ module magia_tile /*******************************************************/ /** L1 SPM (TCDM) End **/ /*******************************************************/ -/** Xif Dispatcher Beginning **/ -/*******************************************************/ - - xif_inst_dispatcher #( - .N_COPROC ( magia_tile_pkg::N_COPROC ), - .N_RULES ( magia_tile_pkg::N_RULES ), - .DEFAULT_IDX ( magia_tile_pkg::DEFAULT_IDX ), - .OPCODE_OFF ( magia_tile_pkg::OPCODE_OFF ), - .OPCODE_W ( magia_tile_pkg::OPCODE_W ), - .xif_inst_rule_t ( magia_tile_pkg::xif_inst_rule_t ) - ) i_xif_inst_dispatcher ( - .clk_i ( sys_clk ), - .rst_ni ( rst_ni ), - .xif_issue_if_i ( xif_if.coproc_issue ), - .xif_issue_if_o ( xif_coproc_if.cpu_issue ), - .xif_result_if_o ( xif_if.coproc_result ), - .xif_result_if_i ( xif_fpu_if.cpu_result ), - .rules_i ( xif_coproc_rules ) - ); - -/*******************************************************/ -/** Xif Dispatcher End **/ -/*******************************************************/ /** iDMA Beginning **/ /*******************************************************/ -`ifdef CV32E40X - idma_ctrl #( - .ERROR_CAP ( ERROR_CAP ), - .axi_req_t ( magia_tile_pkg::idma_axi_req_t ), - .axi_rsp_t ( magia_tile_pkg::idma_axi_rsp_t ), - .obi_req_t ( magia_tile_pkg::idma_obi_req_t ), - .obi_rsp_t ( magia_tile_pkg::idma_obi_rsp_t ) - ) i_idma_ctrl ( - .clk_i ( sys_clk ), - .rst_ni ( rst_ni ), - .testmode_i ( test_mode_i ), - .clear_i ( idma_clear ), - - .xif_issue_if_i ( xif_coproc_if.coproc_issue[magia_tile_pkg::XIF_IDMA_IDX] ), - - .axi_read_req_o ( idma_axi_read_req_out ), - .axi_read_rsp_i ( idma_axi_read_rsp_out ), - - .axi_write_req_o ( idma_axi_write_req_out ), - .axi_write_rsp_i ( idma_axi_write_rsp_out ), - - .obi_read_req_o ( idma_obi_read_req_out ), - .obi_read_rsp_i ( idma_obi_read_rsp_out ), - - .obi_write_req_o ( idma_obi_write_req_out ), - .obi_write_rsp_i ( idma_obi_write_rsp_out ), - - .axi2obi_start_o ( idma_axi2obi_start ), - .axi2obi_busy_o ( idma_axi2obi_busy ), - .axi2obi_done_o ( idma_axi2obi_done ), - .axi2obi_error_o ( idma_axi2obi_error ), - - .obi2axi_start_o ( idma_obi2axi_start ), - .obi2axi_busy_o ( idma_obi2axi_busy ), - .obi2axi_done_o ( idma_obi2axi_done ), - .obi2axi_error_o ( idma_obi2axi_error ) - ); -`else idma_ctrl_mm #( .ERROR_CAP ( ERROR_CAP ), .obi_req_t ( magia_tile_pkg::core_obi_data_req_t ), @@ -1782,7 +1558,6 @@ module magia_tile .irq_o2a_done_o ( idma_obi2axi_done ), .irq_o2a_error_o ( idma_obi2axi_error ) ); -`endif axi_rw_join #( .axi_req_t ( magia_tile_pkg::idma_axi_req_t ), @@ -2011,37 +1786,8 @@ module magia_tile /*******************************************************/ /** Fractal Sync Out Beginning **/ /*******************************************************/ - -`ifdef CV32E40X - fractal_sync_xif_inst_decoder #( - .INSTR_W ( magia_tile_pkg::FSYNC_INSTR_W ), - .DATA_W ( magia_tile_pkg::FSYNC_DATA_W ), - .ADDR_W ( magia_tile_pkg::FSYNC_ADDR_W ), - .N_RF_PORTS ( magia_tile_pkg::FSYNC_N_RF_PORTS ), - .OPCODE_W ( magia_tile_pkg::FSYNC_OPCODE_W ), - .FUNC3_W ( magia_tile_pkg::FSYNC_FUNC3_W ), - .OPCODE_OFF ( magia_tile_pkg::FSYNC_OPCODE_OFF ), - .FUNC3_OFF ( magia_tile_pkg::FSYNC_FUNC3_OFF ), - .N_CFG_REG ( magia_tile_pkg::FSYNC_N_CFG_REG ), - .AGGR_W ( magia_tile_pkg::FSYNC_AGGR_W ), - .ID_W ( magia_tile_pkg::FSYNC_ID_W ), - .NBR_AGGR_W ( magia_tile_pkg::FSYNC_NBR_AGGR_W ), - .NBR_ID_W ( magia_tile_pkg::FSYNC_NBR_ID_W ), - .STALL ( magia_tile_pkg::FSYNC_STALL ) - ) i_fsync_dec ( - .clk_i ( sys_clk ), - .rst_ni ( rst_ni ), - .clear_i ( fsync_clear ), - .xif_issue_if_i ( xif_coproc_if.coproc_issue[magia_tile_pkg::XIF_FSYNC_IDX] ), - .ht_fsync_if_o ( ht_fsync_if_o ), - .hn_fsync_if_o ( hn_fsync_if_o ), - .vt_fsync_if_o ( vt_fsync_if_o ), - .vn_fsync_if_o ( vn_fsync_if_o ), - .done_o ( fsync_done ), - .error_o ( fsync_error ) - ); -`else - // Fractal Sync OBI Memory-Mapped Slave (replaces XIF interface) + + // Fractal Sync OBI Memory-Mapped Slave obi_slave_fsync #( .BASE_ADDR ( magia_tile_pkg::FSYNC_CTRL_ADDR_START ), .AGGR_W ( magia_tile_pkg::FSYNC_AGGR_W ), @@ -2061,7 +1807,6 @@ module magia_tile .done_o ( fsync_done ), .error_o ( fsync_error ) ); -`endif /*******************************************************/ /** Fractal Sync Out End **/ @@ -2071,7 +1816,7 @@ module magia_tile `ifdef CV32E40X fpu_ss #( - .PULP_ZFINX ( magia_tile_pkg::FPU_ZFINX ), + .PULP_ZFINX ( magia_tile_pkg::ZFINX_CV32E40X ), .INPUT_BUFFER_DEPTH ( magia_tile_pkg::FPU_BUFFER_DEPTH ), .INPUT_BUFFER_FALL_THROUGH ( magia_tile_pkg::FPU_BUFFER_FT ), .OUT_OF_ORDER ( magia_tile_pkg::FPU_OOO ), @@ -2104,12 +1849,12 @@ module magia_tile ); xif_if2struct i_xif_if2struct ( - .xif_compressed_if_i ( xif_if.coproc_compressed ), - .xif_issue_if_i ( xif_coproc_if.coproc_issue[magia_tile_pkg::XIF_FPU_IDX] ), - .xif_commit_if_i ( xif_if.coproc_commit ), - .xif_mem_if_o ( xif_if.coproc_mem ), - .xif_mem_result_if_i ( xif_if.coproc_mem_result ), - .xif_result_if_o ( xif_fpu_if.coproc_result ), + .xif_compressed_if_i ( xif_if.coproc_compressed ), + .xif_issue_if_i ( xif_if.coproc_issue ), + .xif_commit_if_i ( xif_if.coproc_commit ), + .xif_mem_if_o ( xif_if.coproc_mem ), + .xif_mem_result_if_i ( xif_if.coproc_mem_result ), + .xif_result_if_o ( xif_if.coproc_result ), .x_compressed_valid_o ( x_compressed_valid ), .x_compressed_ready_i ( x_compressed_ready ), .x_compressed_req_o ( x_compressed_req ), @@ -2222,25 +1967,16 @@ module magia_tile assign core_irq_vec[i] = {20'b0, eu_core_irq_req[i], 11'b0}; end endgenerate - -`ifdef CV32E40X - assign eu_core_irq_ack = eu_core_irq_req; - assign eu_core_irq_ack_id = eu_core_irq_id; - - assign core_busy_o = !core_sleep_o; -`else - // PULP cluster cores are no longer wired to the event unit's IRQ port: - // tie their ack/ack_id slots so the EU sees them as idle/never-acking. generate for (genvar i = 0; i < magia_tile_pkg::N_CLUSTER_CORES; i++) begin : gen_cluster_irq_ack_tie assign eu_core_irq_ack[i+1] = 1'b0; assign eu_core_irq_ack_id[i+1] = '0; end endgenerate -`ifdef RI5CY - // RI5CY outputs core_busy_o (active-high: 1 = busy); derive core_sleep_o (active-high: 1 = sleeping) - assign core_sleep_o = ~core_busy_o; -`endif + +`ifdef CV32E40X + assign eu_core_irq_ack[0] = eu_core_irq_req[0]; + assign eu_core_irq_ack_id[0] = eu_core_irq_id[0]; `endif magia_event_unit #( @@ -2477,10 +2213,7 @@ always_ff @(posedge sys_clk or negedge rst_ni) begin for (int unsigned i = 0; i < magia_tile_pkg::N_CLUSTER_CORES; i++) begin // Clear on any ack: cluster cores have exactly one IRQ source (the // dispatch pulse), so irq_ack always refers to that source. - // CV32E40P acks with irq_id_o=11 (MEI, from priority encoder on irq_i[31:0]). - // RI5CY acks with irq_id_o=0 (reflects irq_id_i which is tied to '0). - // Checking irq_id==11 would never fire for RI5CY, leaving pending stuck - // HIGH and causing repeated trap-handler re-entry after every mret. + // CV32E40P acks with irq_id_o=11 (MEI, from priority encoder on irq_i[31:0]) if (cluster_irq_ack[i]) begin cluster_start_irq_pending[i] <= 1'b0; end else if (cluster_start_irq[i]) begin @@ -2498,105 +2231,6 @@ end generate for (genvar i = 0; i < magia_tile_pkg::N_CLUSTER_CORES; i++) begin : CORE - `ifdef RI5CY - // RI5CY core with integrated FPU and tracer - // cluster_id_i identifies WHICH cluster (= tile), same for all cores in a tile. - // core_id_i identifies WHICH core within the cluster (0-indexed). - // Use mhartid_i+1 for cluster_id so tile-0 cluster cores never get 0 (0 = standalone main core). - riscv_core #( - .N_EXT_PERF_COUNTERS ( magia_tile_pkg::N_EXT_PERF_COUNTERS ), - .INSTR_RDATA_WIDTH ( magia_tile_pkg::INSTR_RDATA_WIDTH ), - .PULP_SECURE ( magia_tile_pkg::PULP_SECURE ), - .N_PMP_ENTRIES ( magia_tile_pkg::N_PMP_ENTRIES ), - .USE_PMP ( magia_tile_pkg::USE_PMP ), - .PULP_CLUSTER ( magia_tile_pkg::PULP_CLUSTER ), - .FPU ( magia_tile_pkg::FPU ), - .Zfinx ( magia_tile_pkg::ZFINX ), - .FP_DIVSQRT ( magia_tile_pkg::FP_DIVSQRT ), - .SHARED_FP ( magia_tile_pkg::SHARED_FP ), - .SHARED_DSP_MULT ( magia_tile_pkg::SHARED_DSP_MULT ), - .SHARED_INT_MULT ( magia_tile_pkg::SHARED_INT_MULT ), - .SHARED_INT_DIV ( magia_tile_pkg::SHARED_INT_DIV ), - .SHARED_FP_DIVSQRT ( magia_tile_pkg::SHARED_FP_DIVSQRT ), - .WAPUTYPE ( magia_tile_pkg::WAPUTYPE ), - .APU_NARGS_CPU ( magia_tile_pkg::APU_NARGS_CPU ), - .APU_WOP_CPU ( magia_tile_pkg::APU_WOP_CPU ), - .APU_NDSFLAGS_CPU ( magia_tile_pkg::APU_NDSFLAGS_CPU ), - .APU_NUSFLAGS_CPU ( magia_tile_pkg::APU_NUSFLAGS_CPU ), - .DM_HaltAddress ( magia_tile_pkg::DM_HALT_ADDR ) - ) i_RI5CY_core ( - // Clock and Reset - .clk_i ( cluster_clk[i] ), // Always-on per-core cluster clock (NOT the EU-gated main-core clock) - .rst_ni ( rst_ni ), - - // Clock enable and test mode - .clock_en_i ( sys_clk_en ), - .test_en_i ( test_mode_i ), - - // Floating-point register file disable (for Zfinx) - .fregfile_disable_i ( 1'b0 ), // FPU enabled, use dedicated FP regfile - - // Boot configuration - .boot_addr_i ( cluster_boot_addr[i] ), - - // Cluster/Core IDs - .cluster_id_i ( 6'(mhartid_i) + 6'd1 ), // which cluster (tile+1, 1-indexed) - .core_id_i ( 4'(i) ), // which core within the cluster - - // Instruction memory interface - .instr_req_o ( cluster_instr_req[i].req ), - .instr_addr_o ( cluster_instr_req[i].addr ), - .instr_gnt_i ( cluster_instr_rsp[i].gnt ), - .instr_rvalid_i ( cluster_instr_rsp[i].rvalid ), - .instr_rdata_i ( cluster_instr_rsp[i].rdata ), - - // Data memory interface - .data_req_o ( cluster_data_req[i].req ), - .data_addr_o ( cluster_data_req[i].addr ), - .data_be_o ( cluster_data_req[i].be ), - .data_wdata_o ( cluster_data_req[i].wdata ), - .data_we_o ( cluster_data_req[i].we ), - .data_gnt_i ( cluster_data_rsp[i].gnt ), - .data_rvalid_i ( cluster_data_rsp[i].rvalid ), - .data_rdata_i ( cluster_data_rsp[i].rdata ), - - // APU interface (disabled - not connected) - .apu_master_req_o ( ), - .apu_master_ready_o ( ), - .apu_master_gnt_i ( '0 ), - - .apu_master_operands_o ( ), - .apu_master_op_o ( ), - .apu_master_type_o ( ), - .apu_master_flags_o ( ), - - .apu_master_valid_i ( '0 ), - .apu_master_result_i ( '0 ), - .apu_master_flags_i ( '0 ), - - // Interrupts - .irq_i ( cluster_start_irq_pending[i] ), - .irq_ack_o ( cluster_irq_ack[i] ), - .irq_id_o ( cluster_irq_id[i] ), - .irq_sec_i ( '0 ), - .irq_id_i ( '0 ), - - // Security level (unused) - .sec_lvl_o ( ), - - // Debug interface - .debug_req_i ( debug_req_i[i+1] ), - - // CPU control - .fetch_enable_i ( cluster_fetch_enable[i] ), - .core_busy_o ( cluster_core_busy[i] ), - - - // Performance counters - .ext_perf_counters_i ( '0 ) - ); - assign cluster_core_sleep[i] = ~cluster_core_busy[i]; // RI5CY: core_busy_o is active-high; derive core_sleep (active-high) - `else `ifndef CORE_TRACES cv32e40p_top #( `else @@ -2605,7 +2239,7 @@ generate .COREV_PULP ( 1 ), // For now this is a no .COREV_CLUSTER ( 1 ), .FPU ( FPU ), - .ZFINX ( magia_tile_pkg::ZFINX ), + .ZFINX ( magia_tile_pkg::ZFINX_CV32E40P ), .FPU_ADDMUL_LAT ( 1 ), // Match C_LAT_FP32=1 in fpnew wrapper .FPU_OTHERS_LAT ( 1 ), // Match C_LAT_NONCOMP=1 in fpnew wrapper .NUM_MHPMCOUNTERS ( 29 ) @@ -2645,23 +2279,26 @@ generate .irq_id_o ( cluster_irq_id[i] ), // Debug interface .debug_req_i ( debug_req_i[i+1] ), + // Debug status outputs unused: no tile-level output exposes per-cluster-core debug status. + .debug_havereset_o ( ), + .debug_running_o ( ), + .debug_halted_o ( ), // CPU control .fetch_enable_i ( cluster_fetch_enable[i] ), .core_sleep_o ( cluster_core_sleep[i] ) ); - `endif end endgenerate // Cluster core data demux (EU direct link) and OBI conversion generate for (genvar i = 0; i < magia_tile_pkg::N_CLUSTER_CORES; i++) begin : gen_cluster_data_obi - data2obi_req i_cluster_data2obi ( + cv32e40p_data2obi_req i_cluster_data2obi ( .data_req_i ( cluster_data_req[i] ), .obi_req_o ( cluster_obi_data_req[i] ) ); - obi2data_rsp i_cluster_obi2data ( + cv32e40p_obi2data_rsp i_cluster_obi2data ( .obi_rsp_i ( cluster_obi_data_rsp[i] ), .data_rsp_o ( cluster_data_rsp[i] ) ); diff --git a/hw/tile/magia_tile_pkg.sv b/hw/tile/magia_tile_pkg.sv index 65d911dc..52ac2854 100644 --- a/hw/tile/magia_tile_pkg.sv +++ b/hw/tile/magia_tile_pkg.sv @@ -266,25 +266,10 @@ package magia_tile_pkg; parameter bit CLIC_EN = 1'b0; // Specifies whether Smclic, Smclicshv and Smclicconfig are supported // Parameters used by cv32e40p core - parameter int unsigned N_EXT_PERF_COUNTERS = 0; // Number of external performance counters - parameter int unsigned INSTR_RDATA_WIDTH = 32; // Instruction data width - parameter bit PULP_SECURE = 1'b1; // PULP security features (must be 1 for writable mtvec; PULP_SECURE=0 hardwires mtvec_q to boot_addr_i) - parameter int unsigned N_PMP_ENTRIES = 16; // Number of PMP entries - parameter bit USE_PMP = 1'b1; // Enable PMP parameter bit PULP_CLUSTER = 1'b1; // PULP cluster mode parameter bit FPU = 1'b1; // Enable FPU (main feature) - parameter bit ZFINX = 1'b1; // Zfinx extension (integer FP in GPR) - Must be 0 for standard FPU + parameter bit ZFINX_CV32E40P = 1'b1; // Zfinx extension (integer FP in GPR) of the CV32E40P cores (control and cluster) parameter bit FP_DIVSQRT = 1'b1; // FP division and square root - parameter bit SHARED_FP = 1'b0; // Shared FP unit - parameter bit SHARED_DSP_MULT = 1'b0; // Shared DSP multiplier - parameter bit SHARED_INT_MULT = 1'b0; // Shared integer multiplier - parameter bit SHARED_INT_DIV = 1'b0; // Shared integer divider - parameter bit SHARED_FP_DIVSQRT = 1'b0; // Shared FP div/sqrt - parameter int unsigned WAPUTYPE = 0; // APU type width - parameter int unsigned APU_NARGS_CPU = 3; // APU number of arguments - parameter int unsigned APU_WOP_CPU = 6; // APU operation width - parameter int unsigned APU_NDSFLAGS_CPU = 15; // APU data side flags - parameter int unsigned APU_NUSFLAGS_CPU = 5; // APU user side flags parameter logic[31:0] DM_HALT_ADDR = 32'h1A110800; // Debug module halt address `ifdef CV32E40X @@ -294,6 +279,7 @@ package magia_tile_pkg; parameter int unsigned X_NUM_RS = 2; // Number of register file read ports (R-type instructions have 2 source operands) parameter int unsigned CLIC_ID_W = 5; // CLIC interrupt ID width (5 bits for 32 interrupts) `endif + parameter int unsigned CLIC_ID_W_CLUSTER = 5; // cv32e40p irq_id_o/irq_id_i width (fixed, independent of the ctrl core's CLIC_ID_W) // Parameters used by Event Unit parameter int unsigned EVENT_UNIT_IRQ_WIDTH = 5; // Width of Event Unit IRQ ID signals (supports up to 32 different event types) @@ -308,31 +294,24 @@ package magia_tile_pkg; parameter int unsigned REDMULE_UW = UWH; // RedMulE User Width // Parameters used by OBI - parameter int unsigned AUSER_WIDTH = 1; // Width of the auser signal (see OBI documentation): not used by the CV32E40X - parameter int unsigned WUSER_WIDTH = 1; // Width of the wuser signal (see OBI documentation): not used by the CV32E40X - parameter int unsigned ACHK_WIDTH = 1; // Width of the achk signal (see OBI documentation): not used by the CV32E40X - parameter int unsigned RUSER_WIDTH = 1; // Width of the ruser signal (see OBI documentation): not used by the CV32E40X - parameter int unsigned RCHK_WIDTH = 1; // Width of the rchk signal (see OBI documentation): not used by the CV32E40X - parameter int unsigned AID_WIDTH = 1; // Width of the aid signal (address channel identifier, see OBI documentation) - parameter int unsigned RID_WIDTH = 1; // Width of the rid signal (response channel identifier, see OBI documentation) - parameter int unsigned MID_WIDTH = 1; // Width of the mid signal (manager identifier, see OBI documentation) - parameter int unsigned OBI_ID_WIDTH = 1; // Width of the id - configuration - parameter int unsigned N_CLUSTER_CORES = 8; // Number of cores in the cluster (cntrl core not considered) -`ifdef CV32E40X - parameter int unsigned N_SBR = 5; // Number of slaves (HCI, AXI XBAR, Event_Unit, Tile_CSR, + unused RESERVED alias) -`else - parameter int unsigned N_SBR = 7; // Number of OBI slaves (HCI, AXI XBAR, RedMulE_Ctrl, iDMA_Ctrl, FSync_Ctrl, Event_Unit, Tile_CSR) -`endif + parameter int unsigned AUSER_WIDTH = 1; // Width of the auser signal (see OBI documentation): not used by the CV32E40X + parameter int unsigned WUSER_WIDTH = 1; // Width of the wuser signal (see OBI documentation): not used by the CV32E40X + parameter int unsigned ACHK_WIDTH = 1; // Width of the achk signal (see OBI documentation): not used by the CV32E40X + parameter int unsigned RUSER_WIDTH = 1; // Width of the ruser signal (see OBI documentation): not used by the CV32E40X + parameter int unsigned RCHK_WIDTH = 1; // Width of the rchk signal (see OBI documentation): not used by the CV32E40X + parameter int unsigned AID_WIDTH = 1; // Width of the aid signal (address channel identifier, see OBI documentation) + parameter int unsigned RID_WIDTH = 1; // Width of the rid signal (response channel identifier, see OBI documentation) + parameter int unsigned MID_WIDTH = 1; // Width of the mid signal (manager identifier, see OBI documentation) + parameter int unsigned OBI_ID_WIDTH = 1; + parameter int unsigned N_CLUSTER_CORES = 8; // Width of the id - configuration + parameter int unsigned N_SBR = 7; // Number of OBI slaves (HCI, AXI XBAR, RedMulE_Ctrl, iDMA_Ctrl, FSync_Ctrl, Event_Unit, Spatz_Ctrl) parameter int unsigned N_MGR = 3 + N_CLUSTER_CORES; // Number of masters (Core, AXI XBAR, Spatz CC) parameter int unsigned N_MAX_TRAN = 1; // Number of maximum outstanding transactions -`ifdef CV32E40X - parameter int unsigned N_ADDR_RULE = 6; // Number of address rules (L2, L1, Stack, Reserved, Event_Unit, Tile_CSR) -`else - parameter int unsigned N_ADDR_RULE = 9; // Number of OBI address rules (L2, L1, Stack, Reserved, RedMulE_Ctrl, iDMA_Ctrl, FSync_Ctrl, Event_Unit, Tile_CSR) -`endif + parameter int unsigned N_ADDR_RULE = 9; // Number of OBI address rules (L2, L1, Stack, Reserved, RedMulE_Ctrl, iDMA_Ctrl, FSync_Ctrl, Event_Unit, Spatz_Ctrl) localparam int unsigned N_BIT_SBR = $clog2(N_SBR); // Number of bits required to identify each slave localparam int unsigned N_BIT_MGR = $clog2(N_MGR); // Number of bits required to identify each master - localparam int unsigned N_BIT_CLUSTER_CORES = $clog2(N_CLUSTER_CORES); // Number of bits required to identify each core in the cluster + localparam int unsigned N_BIT_CLUSTER_CORES = $clog2(N_CLUSTER_CORES); // Number of bits required to identify each slave + // Parameters used by AXI parameter int unsigned AXI_DATA_ID_W = 3; // Width of the AXI Data ID (3 bits for 5 slave ports on crossbar: 2^3=8) parameter int unsigned AXI_INSTR_ID_W = 3; // Width of the AXI Instruction ID (3 bits for 5 slave ports on crossbar) @@ -373,85 +352,7 @@ package magia_tile_pkg; OBI2AXI = 1'b1 } idma_transfer_ch_e; // iDMA type of transfer channel - // Parameters used by the Xif Instruction Dispatcher - parameter int unsigned N_COPROC = 4; // RedMulE, iDMA, Fractal Sync and FPU - parameter int unsigned N_RULES = N_COPROC-1; // RedMulE, iDMA and Fractal Sync all have custom Xif instructions but not FPU - parameter int unsigned N_REDMULE_SIGN = 9; // Number of signitures (= {opcode, func3}) in the programming model of RedMulE - parameter int unsigned N_IDMA_SIGN = 5; // Number of signitures (= {opcode, func3}) in the programming model of the iDMA decoder - parameter int unsigned N_FSYNC_SIGN = 1; // Number of signitures (= {opcode, func3}) in the programming model of Fractal Sync - parameter int unsigned N_SIGN = 9; // Number of opcodes = max{RedMulE_signitures, iDMA_signitures, FractalSync_signitures} - typedef enum logic[1:0]{ - XIF_REDMULE_IDX = 2'b00, - XIF_IDMA_IDX = 2'b01, - XIF_FSYNC_IDX = 2'b10, - XIF_FPU_IDX = 2'b11 - } xif_inst_dispatch_idx_e; - parameter int unsigned DEFAULT_IDX = XIF_FPU_IDX; // FPU will handle the instructions by default - parameter int unsigned OPCODE_W = 7; // ISA OPCODE Width - parameter int unsigned OPCODE_OFF = 0; // ISA OPCODE Offset - parameter int unsigned FUNC3_W = 3; // ISA FUNC3 Width - parameter int unsigned FUNC3_OFF = 12; // ISA FUNC3 Offset - parameter int unsigned SIGN_W = OPCODE_W + FUNC3_W; // Width of the instruction signiture - parameter bit PRIORITY = 0; // Indicates that the dispatcher should rout the instruction to only 1 coprocessor (with highest priority) - - // Parameters used by the iDMA instruction decoder - parameter int unsigned DMA_INSTR_W = magia_pkg::INSTR_W; // iDMA Decoder instruction width - parameter int unsigned DMA_DATA_W = magia_pkg::DATA_W; // iDMA Decoder data width - parameter int unsigned DMA_ADDR_W = magia_pkg::ADDR_W; // iDMA Decoder address width - parameter int unsigned DMA_N_RF_PORTS = X_NUM_RS; // iDMA Decoder number of register file read ports - parameter int unsigned DMA_OPCODE_W = OPCODE_W; // iDMA Decoder OPCODE field width - parameter int unsigned DMA_FUNC3_W = FUNC3_W; // iDMA Decoder FUNC3 field width - parameter int unsigned DMA_ND_EN_W = 2; // iDMA Decoder ND_EN field width - parameter int unsigned DMA_DST_MAX_LOG_LEN_W = 3; // iDMA Decoder DST_MAX_LOG_LEN field width - parameter int unsigned DMA_SRC_MAX_LOG_LEN_W = 3; // iDMA Decoder SRC_MAX_LOG_LEN field width - parameter int unsigned DMA_DST_REDUCE_LEN_W = 1; // iDMA Decoder DST_REDUCE_LEN field width - parameter int unsigned DMA_SRC_REDUCE_LEN_W = 1; // iDMA Decoder SRC_REDUCE_LEN field width - parameter int unsigned DMA_DECOUPLE_R_W_W = 1; // iDMA Decoder DECOUPLE_R_W field width - parameter int unsigned DMA_DECOUPLE_R_AW_W = 1; // iDMA Decoder DECOUPLE_R_AW field width - parameter int unsigned DMA_DIRECTION_W = 1; // iDMA Decoder DIRECTION field width - parameter int unsigned DMA_OPCODE_OFF = OPCODE_OFF; // iDMA Decoder OPCODE field offset - parameter int unsigned DMA_FUNC3_OFF = FUNC3_OFF; // iDMA Decoder FUNC3 field offset - parameter int unsigned DMA_ND_EN_OFF = 26; // iDMA Decoder ND_EN field offset - parameter int unsigned DMA_DST_MAX_LOG_LEN_OFF = 22; // iDMA Decoder DST_MAX_LOG_LEN field offset - parameter int unsigned DMA_SRC_MAX_LOG_LEN_OFF = 19; // iDMA Decoder SRC_MAX_LOG_LEN field offset - parameter int unsigned DMA_DST_REDUCE_LEN_OFF = 18; // iDMA Decoder DST_REDUCE_LEN field offset - parameter int unsigned DMA_SRC_REDUCE_LEN_OFF = 17; // iDMA Decoder SRC_REDUCE_LEN field offset - parameter int unsigned DMA_DECOUPLE_R_W_OFF = 16; // iDMA Decoder DECOUPLE_R_W field offset - parameter int unsigned DMA_DECOUPLE_R_AW_OFF = 15; // iDMA Decoder DECOUPLE_R_AW field offset - parameter int unsigned DMA_DIRECTION_OFF = 25; // iDMA Decoder DIRECTION field offset - parameter int unsigned DMA_N_CFG_REG = 10; // iDMA Decoder number of configuration registers of the iDMA forntend: CONF, DST_ADDR, SRC_ADDR, LENGTH, DST_STRIDE_2, SRC_STRIDE_2, REPS_2, DST_STRIDE_3, SRC_STRIDE_3, REPS_3 - parameter int unsigned DMA_CONF_IDX = 0; // iDMA Decoder CONF cofiguration register index - parameter int unsigned DMA_DST_ADDR_IDX = 1; // iDMA Decoder DST_ADDR cofiguration register index - parameter int unsigned DMA_SRC_ADDR_IDX = 2; // iDMA Decoder SRC_ADDR cofiguration register index - parameter int unsigned DMA_LENGTH_IDX = 3; // iDMA Decoder LENGTH cofiguration register index - parameter int unsigned DMA_DST_STRIDE_2_IDX = 4; // iDMA Decoder DST_STRIDE_2 cofiguration register index - parameter int unsigned DMA_SRC_STRIDE_2_IDX = 5; // iDMA Decoder SRC_STRIDE_2 cofiguration register index - parameter int unsigned DMA_REPS_2_IDX = 6; // iDMA Decoder REPS_2 configuration register index - parameter int unsigned DMA_DST_STRIDE_3_IDX = 7; // iDMA Decoder DST_STRIDE_3 cofiguration register index - parameter int unsigned DMA_SRC_STRIDE_3_IDX = 8; // iDMA Decoder SRC_STRIDE_3 cofiguration register index - parameter int unsigned DMA_REPS_3_IDX = 9; // iDMA Decoder REPS_3 configuration register index - parameter logic[DMA_OPCODE_W-1:0] CONF_OPCODE = 7'b101_1011; // iDMA Decoder CONF instruction OPCODE - parameter logic[ DMA_FUNC3_W-1:0] CONF_FUNC3 = 3'b000; // iDMA Decoder CONF instruction FUNC3 - parameter logic[DMA_OPCODE_W-1:0] SET_OPCODE = 7'b111_1011; // iDMA Decoder SET (ADDR/LEN, STD_2/REP_2, STD_3/REP_3, START) instruction OPCODE - parameter logic[ DMA_FUNC3_W-1:0] SET_AL_FUNC3 = 3'b000; // iDMA Decoder ADDR/LEN instruction FUNC3 - parameter logic[ DMA_FUNC3_W-1:0] SET_SR2_FUNC3 = 3'b001; // iDMA Decoder STD_2/REP_2 instruction FUNC3 - parameter logic[ DMA_FUNC3_W-1:0] SET_SR3_FUNC3 = 3'b010; // iDMA Decoder STD_3/REP_3 instruction FUNC3 - parameter logic[ DMA_FUNC3_W-1:0] SET_S_FUNC3 = 3'b111; // iDMA Decoder START instruction FUNC3 - - // Parameters used by the Fractal Sync instruction decoder - parameter int unsigned FSYNC_INSTR_W = magia_pkg::INSTR_W; // Fractal Sync Decoder instruction width - parameter int unsigned FSYNC_DATA_W = magia_pkg::DATA_W; // Fractal Sync Decoder data width - parameter int unsigned FSYNC_ADDR_W = magia_pkg::ADDR_W; // Fractal Sync Decoder address width - parameter int unsigned FSYNC_N_RF_PORTS = X_NUM_RS; // Fractal Sync Decoder number of register file read ports - parameter int unsigned FSYNC_OPCODE_W = OPCODE_W; // Fractal Sync Decoder OPCODE field width - parameter int unsigned FSYNC_FUNC3_W = FUNC3_W; // Fractal Sync Decoder FUNC3 field width - parameter int unsigned FSYNC_OPCODE_OFF = OPCODE_OFF; // Fractal Sync Decoder OPCODE field offset - parameter int unsigned FSYNC_FUNC3_OFF = FUNC3_OFF; // Fractal Sync Decoder FUNC3 field offset - parameter int unsigned FSYNC_N_CFG_REG = 2; // Fractal Sync Decoder number of configuration registers: AGGR, ID - parameter int unsigned FSYNC_AGGR_IDX = 0; // Fractal Sync Decoder AGGR cofiguration register index - parameter int unsigned FSYNC_ID_IDX = 1; // Fractal Sync Decoder ID cofiguration register index - parameter logic[FSYNC_OPCODE_W-1:0] FSYNC_OPCODE = 7'b101_1011; // Fractal Sync Decoder instruction OPCODE - parameter logic[ FSYNC_FUNC3_W-1:0] FSYNC_FUNC3 = 3'b010; // Fractal Sync Decoder instruction FUNC3 + // Parameters used by Fractal Sync (memory-mapped interface) parameter int unsigned FSYNC_AGGR_W = magia_pkg::TILE_FSYNC_AGGR_W; // Fractal Sync Aggr. width for non-neighbor nodes parameter int unsigned FSYNC_LVL_W = magia_pkg::TILE_FSYNC_LVL_W; // Fractal Sync Level width for non-neighbor nodes parameter int unsigned FSYNC_ID_W = magia_pkg::TILE_FSYNC_ID_W; // Fractal Sync Id width for non-neighbor nodes @@ -507,7 +408,7 @@ package magia_tile_pkg; parameter int unsigned CLUSTER_FILL_DW = magia_pkg::DATA_W; // i$ Fill interface data width. Power of two; >= 8. // Parameters used by the FPU - parameter bit FPU_ZFINX = 1; // FPU use Zfinx extension instead of the F ISA extention + parameter bit ZFINX_CV32E40X = 0; // fpu_ss uses the F ISA extension, not Zfinx: CV32E40X is built with rv32imafc parameter int unsigned FPU_BUFFER_DEPTH = 8; // FPU FIFO depth that buffers instructions coming from core parameter bit FPU_BUFFER_FT = 0; // FPU FIFO fall through that buffers instructions coming from core parameter bit FPU_OOO = 1; // FPU enable out-of-order execution @@ -559,41 +460,47 @@ package magia_tile_pkg; logic err; } core_instr_rsp_t; -`ifdef CV32E40X typedef struct packed { logic req; logic[magia_pkg::ADDR_W-1:0] addr; - logic[5 :0] atop; logic[3 :0] be; - logic[1 :0] memtype; - logic[2 :0] prot; - logic dbg; logic[magia_pkg::DATA_W-1:0] wdata; logic we; - } core_data_req_t; + } cv32e40p_core_data_req_t; typedef struct packed { logic gnt; logic rvalid; logic[magia_pkg::DATA_W-1:0] rdata; logic err; - logic exokay; - } core_data_rsp_t; -`else + } cv32e40p_core_data_rsp_t; + typedef struct packed { logic req; logic[magia_pkg::ADDR_W-1:0] addr; + logic[5 :0] atop; logic[3 :0] be; + logic[1 :0] memtype; + logic[2 :0] prot; + logic dbg; logic[magia_pkg::DATA_W-1:0] wdata; logic we; - } core_data_req_t; + } cv32e40x_core_data_req_t; typedef struct packed { logic gnt; logic rvalid; logic[magia_pkg::DATA_W-1:0] rdata; logic err; - } core_data_rsp_t; + logic exokay; + } cv32e40x_core_data_rsp_t; + +`ifdef CV32E40X + typedef cv32e40x_core_data_req_t core_data_req_t; + typedef cv32e40x_core_data_rsp_t core_data_rsp_t; +`else + typedef cv32e40p_core_data_req_t core_data_req_t; + typedef cv32e40p_core_data_rsp_t core_data_rsp_t; `endif // EU Direct Link interface types @@ -624,16 +531,6 @@ package magia_tile_pkg; logic[NR_FETCH_PORTS-1:0] rerror; } core_cache_instr_rsp_t; -`ifdef CV32E40X - typedef enum logic[2:0]{ - OBI_XBAR_STACK_IDX = 5, - OBI_XBAR_TILE_CSR_IDX = 4, - OBI_XBAR_EVENT_UNIT_IDX = 3, - OBI_XBAR_RESERVED_IDX = 2, - OBI_XBAR_L1SPM_IDX = 1, - OBI_XBAR_L2_IDX = 0 - } obi_mem_array_idx_e; -`else typedef enum logic[3:0]{ OBI_XBAR_STACK_IDX = 8, OBI_XBAR_RESERVED_IDX = 7, @@ -645,7 +542,6 @@ package magia_tile_pkg; OBI_XBAR_L1SPM_IDX = 1, OBI_XBAR_L2_IDX = 0 } obi_mem_array_idx_e; -`endif typedef enum logic[2:0]{ AXI_XBAR_STACK_IDX = 4, @@ -670,9 +566,6 @@ package magia_tile_pkg; AXI_MST_BOOTROM_IDX = 2 } axi_xbar_mst_idx_e; - typedef struct packed { - logic[N_SIGN-1:0][SIGN_W-1:0] sign_list; - } xif_inst_rule_t; typedef logic[iDMA_AddrWidth-1:0] idma_addr_t; diff --git a/hw/tile/xif_inst_dispatcher.sv b/hw/tile/xif_inst_dispatcher.sv deleted file mode 100644 index c82fb6c6..00000000 --- a/hw/tile/xif_inst_dispatcher.sv +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Solderpad Hardware License, Version 0.51 - * (the "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: SHL-0.51 - * - * Authors: Victor Isachi - * - * Xif Instruction Dispatcher - */ - -module xif_inst_dispatcher - import magia_tile_pkg::*; - import cv32e40x_pkg::*; -#( - parameter int unsigned N_COPROC = magia_tile_pkg::N_COPROC, - parameter int unsigned N_RULES = magia_tile_pkg::N_RULES, - parameter int unsigned N_SIGN = magia_tile_pkg::N_SIGN, - parameter int unsigned DEFAULT_IDX = magia_tile_pkg::DEFAULT_IDX, - parameter int unsigned OPCODE_OFF = magia_tile_pkg::OPCODE_OFF, - parameter int unsigned FUNC3_OFF = magia_tile_pkg::FUNC3_OFF, - parameter int unsigned OPCODE_W = magia_tile_pkg::OPCODE_W, - parameter int unsigned FUNC3_W = magia_tile_pkg::FUNC3_W, - parameter int unsigned SIGN_W = magia_tile_pkg::SIGN_W, - parameter type xif_inst_rule_t = magia_tile_pkg::xif_inst_rule_t -)( - input logic clk_i, - input logic rst_ni, - - cv32e40x_if_xif.coproc_issue xif_issue_if_i, - cv32e40x_if_xif.cpu_issue xif_issue_if_o[N_COPROC], - - cv32e40x_if_xif.coproc_result xif_result_if_o, - cv32e40x_if_xif.cpu_result xif_result_if_i, - - input magia_tile_pkg::xif_inst_rule_t[N_RULES-1:0] rules_i -); - -/*******************************************************/ -/** Parameters and Definitions Beginning **/ -/*******************************************************/ - - // IMPORTANT NOTE: must mirror what is found in cv32e40x_if_xif.sv - typedef struct packed { - logic accept; - logic writeback; - logic dualwrite; - logic[2:0] dualread; - logic loadstore; - logic ecswrite ; - logic exc; - } x_issue_resp_t; - - typedef enum logic[1:0] { - IDLE, - WAIT, - PROP - } result_state_e; - -/*******************************************************/ -/** Parameters and Definitions End **/ -/*******************************************************/ -/** Internal Signals Beginning **/ -/*******************************************************/ - - logic[OPCODE_W-1:0] opcode; - logic[ FUNC3_W-1:0] func3; - logic[ SIGN_W-1:0] sign; - logic[N_COPROC-1:0] coproc_sign; // Indicates which coprocessor expects detected signiture - logic[N_COPROC-1:0] coproc_issue; // Indicates to which coprocessor the instruction should be dispatched - logic[N_COPROC-1:0] coproc_issue_pr; // Priority encoded version of the above signal: used to ensure the instruction is dispatched to only 1 coprocessor - logic default_issue; // Indicates that the instruction should be dispatched to the default coprocessor - - logic [N_COPROC-1:0] issue_ready; - x_issue_resp_t[N_COPROC-1:0] issue_resp; - - result_state_e c_result_state, n_result_state; - -/*******************************************************/ -/** Internal Signals End **/ -/*******************************************************/ -/** Hardwired Signals Beginning **/ -/*******************************************************/ - - assign opcode = xif_issue_if_i.issue_req.instr[OPCODE_OFF+OPCODE_W-1:OPCODE_OFF]; - assign func3 = xif_issue_if_i.issue_req.instr[ FUNC3_OFF+FUNC3_W-1:FUNC3_OFF]; - assign sign = {opcode, func3}; - assign default_issue = ~(|coproc_sign); - assign coproc_issue = default_issue ? (1 << DEFAULT_IDX) : coproc_sign; - -/*******************************************************/ -/** Hardwired Signals End **/ -/*******************************************************/ -/** IF to Struct Beginning **/ -/*******************************************************/ - - for (genvar i = 0; i < N_COPROC; i++) begin: gen_if2signal - assign issue_ready[i] = xif_issue_if_o[i].issue_ready; - assign issue_resp[i].accept = xif_issue_if_o[i].issue_resp.accept; - assign issue_resp[i].writeback = xif_issue_if_o[i].issue_resp.writeback; - assign issue_resp[i].dualwrite = xif_issue_if_o[i].issue_resp.dualwrite; - assign issue_resp[i].dualread = xif_issue_if_o[i].issue_resp.dualread; - assign issue_resp[i].loadstore = xif_issue_if_o[i].issue_resp.loadstore; - assign issue_resp[i].ecswrite = xif_issue_if_o[i].issue_resp.ecswrite; - assign issue_resp[i].exc = xif_issue_if_o[i].issue_resp.exc; - end - -/*******************************************************/ -/** IF to Struct End **/ -/*******************************************************/ -/** Instruction Dispatcher Beginning **/ -/*******************************************************/ - - always_comb begin: sign_detector - for (int i = 0; i < N_COPROC; i++) begin - coproc_sign[i] = 1'b0; - if (i < N_RULES) begin // Only check first N_RULES coprocessors, the rest do not have associated rule - for (int j = 0; j < N_SIGN; j++) begin - coproc_sign[i] |= (sign == rules_i[i].sign_list[j]) ? 1'b1 : 1'b0; - end - end - end - end - - always_comb begin: priority_encoder - coproc_issue_pr = '0; - for (int i = 0; i < N_COPROC; i++) begin - if (coproc_issue[i]) begin - coproc_issue_pr = 1 << i; - break; - end - end - end - - for (genvar i = 0; i < N_COPROC; i++) begin: gen_issue_out - always_comb begin - if (coproc_issue_pr[i]) begin - xif_issue_if_o[i].issue_valid = xif_issue_if_i.issue_valid; - xif_issue_if_o[i].issue_req = xif_issue_if_i.issue_req; - end else begin - xif_issue_if_o[i].issue_valid = '0; - xif_issue_if_o[i].issue_req = '0; - end - end - end - - always_comb begin: issue_in - xif_issue_if_i.issue_ready = '0; - xif_issue_if_i.issue_resp = '0; - for (int i = 0; i < N_COPROC; i++) begin - if (coproc_issue_pr[i]) begin - xif_issue_if_i.issue_ready = issue_ready[i]; - xif_issue_if_i.issue_resp.accept = issue_resp[i].accept; - xif_issue_if_i.issue_resp.writeback = issue_resp[i].writeback; - xif_issue_if_i.issue_resp.dualwrite = issue_resp[i].dualwrite; - xif_issue_if_i.issue_resp.dualread = issue_resp[i].dualread; - xif_issue_if_i.issue_resp.loadstore = issue_resp[i].loadstore; - xif_issue_if_i.issue_resp.ecswrite = issue_resp[i].ecswrite; - xif_issue_if_i.issue_resp.exc = issue_resp[i].exc; - break; - end - end - end - - always_ff @(posedge clk_i, negedge rst_ni) begin: result_state_register - if (!rst_ni) c_result_state <= IDLE; - else c_result_state <= n_result_state; - end - - always_comb begin: result_state_logic - n_result_state = c_result_state; - case (c_result_state) - IDLE: if (!default_issue) n_result_state = WAIT; - WAIT: if (xif_result_if_o.result_ready) n_result_state = PROP; - PROP: if (!xif_result_if_o.result_ready) n_result_state = default_issue ? IDLE : WAIT; - endcase - end - - always_comb begin: result_handler - xif_result_if_o.result_valid = xif_result_if_i.result_valid; - xif_result_if_i.result_ready = xif_result_if_o.result_ready; - xif_result_if_o.result = xif_result_if_i.result; - if (c_result_state == PROP) begin - xif_result_if_o.result_valid = xif_result_if_o.result_ready; - xif_result_if_i.result_ready = 1'b0; - xif_result_if_o.result = '0; - end - end - -/*******************************************************/ -/** Instruction Dispatcher End **/ -/*******************************************************/ - -endmodule: xif_inst_dispatcher \ No newline at end of file diff --git a/setup_env.sh b/setup_env.sh index 21a963f6..9eb40bc2 100644 --- a/setup_env.sh +++ b/setup_env.sh @@ -10,13 +10,15 @@ export PATH=$BENDER_DIR:$PATH unset BENDER_DIR echo "Exporting SDK and GCC Toolchain paths" export XLEN=32 -if [[ "$core" == "CV32E40P" ]] || [[ "$core" == "RI5CY" ]]; then - echo "Exporting ISA extentions: I, M, C, PULP" - export XTEN=imfc +if [[ "$core" == "CV32E40X" ]]; then + echo "Exporting control core (CV32E40X) ISA extensions: I, M, A, F, C" + export CTRL_XTEN=imafc else - echo "Exporting ISA extentions: I, M, A, F, C" - export XTEN=imafc + echo "Exporting control core (CV32E40P) ISA extensions: I, M, C, PULP (Zfinx)" + export CTRL_XTEN=imc_xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw_zfinx_zhinxmin fi +echo "Exporting PULP cluster core (CV32E40P) ISA extensions: I, M, C, PULP (Zfinx)" +export CLUSTER_XTEN=imc_xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw_zfinx_zhinxmin echo "Sourcing python virtual environment" source ./magia_venv/bin/activate echo "Finished setting up the environment" \ No newline at end of file diff --git a/sw/kernel_pulp/Makefile b/sw/kernel_pulp/Makefile index 47b04cac..f426dfb5 100644 --- a/sw/kernel_pulp/Makefile +++ b/sw/kernel_pulp/Makefile @@ -29,29 +29,12 @@ ARCH ?= rv XLEN ?= 32 core ?= CV32E40P -ifeq ($(core), CV32E40X) - XTEN := imafc - CC = $(ISA)$(XLEN)-unknown-elf-gcc - OBJCOPY = $(ISA)$(XLEN)-unknown-elf-objcopy - OBJDUMP = $(ISA)$(XLEN)-unknown-elf-objdump - XABI :=f - ABI := ilp -else ifeq ($(core), RI5CY) - XTEN := imcxgap9 - CC = riscv$(XLEN)-unknown-elf-gcc - OBJCOPY = riscv$(XLEN)-unknown-elf-objcopy - OBJDUMP = riscv$(XLEN)-unknown-elf-objdump - XABI := - ABI := ilp -else - # CV32E40P with ZFINX=1 (FP ops on GPRs) — see top Makefile. - XTEN := imc_xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw_zfinx_zhinxmin - CC = riscv64-unknown-elf-gcc - OBJCOPY = riscv64-unknown-elf-objcopy - OBJDUMP = riscv64-unknown-elf-objdump - XABI := - ABI := ilp -endif +XTEN := imc_xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw_zfinx_zhinxmin +CC = riscv64-unknown-elf-gcc +OBJCOPY = riscv64-unknown-elf-objcopy +OBJDUMP = riscv64-unknown-elf-objdump +XABI := +ABI := ilp TEST_NAME ?= base_pulp_test task ?= @@ -72,7 +55,7 @@ ARCH_FLAGS = -march=$(ARCH)$(XLEN)$(XTEN) -mabi=$(ABI)$(XLEN)$(XABI) # is never fixed up: the indirect jump lands in unmapped space and the # cluster icache stalls forever on a fill that loops in the NoC. # Forcing compare-chains keeps every branch PC-relative (PIC-safe). -# Affects all cores (CV32E40P/RI5CY) and both mesh_dv settings. +# Affects both mesh_dv settings. CFLAGS = $(ARCH_FLAGS) -O2 -g -Wall -Wextra -Wno-unused-parameter \ -Wno-unused-variable -Wno-unused-function -Wundef \ -ffunction-sections -fdata-sections \ @@ -83,13 +66,6 @@ CFLAGS = $(ARCH_FLAGS) -O2 -g -Wall -Wextra -Wno-unused-parameter \ -DPULP_CORE_COUNT=$(PULP_CORE_COUNT) \ -D$(core) -U__riscv__ CFLAGS += -I../utils -I../../hw/include -I. -# RI5CY toolchain (riscv32-unknown-elf-gcc / gap9 binutils) uses an older -# assembler that does not recognise the 3-operand FLW pseudo-instruction -# `flw rd, symbol, rt` emitted by newer gcc when rv32*f* is in the march. -# -mexplicit-relocs forces gcc to emit lui+flw(%hi/%lo) instead. -ifeq ($(core), RI5CY) -CFLAGS += -mexplicit-relocs -endif LDFLAGS = $(ARCH_FLAGS) -nostartfiles -nostdlib \ -Wl,--gc-sections -Wl,--allow-multiple-definition \ diff --git a/sw/tests/cluster_tests/hello_pulp/main.c b/sw/tests/cluster_tests/hello_pulp/main.c index c33bed62..f97cacf7 100644 --- a/sw/tests/cluster_tests/hello_pulp/main.c +++ b/sw/tests/cluster_tests/hello_pulp/main.c @@ -43,18 +43,7 @@ static inline uint32_t get_hartid(void) { uint32_t hartid; asm volatile("csrr %0, mhartid" :"=r"(hartid):); - #ifndef RI5CY - return hartid; - #else - // RI5CY mhartid CSR: { 21'b0, cluster_id_i[5:0], 1'b0, core_id_i[3:0] } - // cluster_id_i = mhartid_tile + 1 (which tile/cluster, 1-indexed; 0 = standalone main core) - // core_id_i = i (which core within the cluster, 0-indexed) - uint32_t cluster_id = (hartid >> 5) & 0x3F; // = tile_hartid + 1 (same for all cores in a tile) - uint32_t core_id = hartid & 0xF; // = i (unique per core within tile) - if (cluster_id == 0) - return core_id; // standalone main tile core - return PULP_HARTID_BASE + (cluster_id - 1) * PULP_CORE_COUNT + core_id; - #endif + return hartid; } int main(void) { diff --git a/sw/tests/cluster_tests/hello_pulp/pulp_task/hello_pulp_task.c b/sw/tests/cluster_tests/hello_pulp/pulp_task/hello_pulp_task.c index 4abe95da..4cd12428 100644 --- a/sw/tests/cluster_tests/hello_pulp/pulp_task/hello_pulp_task.c +++ b/sw/tests/cluster_tests/hello_pulp/pulp_task/hello_pulp_task.c @@ -36,18 +36,7 @@ static inline uint32_t get_hartid(void) { uint32_t hartid; asm volatile("csrr %0, mhartid" :"=r"(hartid):); - #ifndef RI5CY - return hartid; - #else - // RI5CY mhartid CSR: { 21'b0, cluster_id_i[5:0], 1'b0, core_id_i[3:0] } - // cluster_id_i = mhartid_tile + 1 (which tile/cluster, 1-indexed; 0 = standalone main core) - // core_id_i = i (which core within the cluster, 0-indexed) - uint32_t cluster_id = (hartid >> 5) & 0x3F; // = tile_hartid + 1 (same for all cores in a tile) - uint32_t core_id = hartid & 0xF; // = i (unique per core within tile) - if (cluster_id == 0) - return core_id; // standalone main tile core - return PULP_HARTID_BASE + (cluster_id - 1) * PULP_CORE_COUNT + core_id; - #endif + return hartid; } void hello_pulp_task(void *data) { diff --git a/sw/tests/fpu_test.c b/sw/tests/fpu_test.c index 70019034..20ab7ff0 100644 --- a/sw/tests/fpu_test.c +++ b/sw/tests/fpu_test.c @@ -24,15 +24,15 @@ #define A_VAL (12.34f) #define B_VAL (56.78f) #define C_EXP (69.12f) +#define F_EXP 0x428A3D70 #ifdef CV32E40P #define FP_TH (1e-45f) #else -#ifdef RI5CY -#define FP_TH (8e-6f) -#endif +#define FP_TH (0.1f) #endif + #define abs_diff(x, y) (((x) > (y)) ? ((x) - (y)) : ((y) - (x))) inline uint32_t f_add(volatile uint32_t op_a, volatile uint32_t op_b){ @@ -60,11 +60,11 @@ int main(void) { printf("Test PASSED\n"); } #else - uint32_t a, b, c; - a = 0x414570A4; // Binary for 12.34f - b = 0x42631EB8; // Binary for 56.78f - c = f_add(a, b); - printf("Float operation result: 0x%0x [expected: 0x428A3D71(69.12f)]\n", c); + uint32_t D, E, F; + D = 0x414570A4; // Binary for 12.34f + E = 0x42631EB8; // Binary for 56.78f + F = f_add(D, E); + printf("Float operation result: 0x%08x [expected: 0x%08x]\n", F, F_EXP); #endif return error; diff --git a/sw/tests/xif_tests/fsync_extended_test.c b/sw/tests/xif_tests/fsync_extended_test.c deleted file mode 100644 index 4a1064f9..00000000 --- a/sw/tests/xif_tests/fsync_extended_test.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Authors: Victor Isachi - * - * MAGIA Extended FractalSync Synchronization Test - */ - -#include "magia_tile_utils.h" -#include "magia_utils.h" -#include "fsync_isa_utils.h" -#include "fsync_api.h" -#include "event_unit_utils.h" -#include "cache_fill.h" - -#define VERBOSE (0) - -int main(void) { - uint32_t aggregates[NUM_HARTS]; - uint32_t ids[NUM_HARTS]; - - // Initialize Event Unit once - eu_init(); - -#if NUM_HARTS == 16 - /// Custom 4x4 synch. - switch (get_hartid()){ - case 0: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 1: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 2: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 3: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 4: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 5: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 6: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 7: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 8: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 9: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 10: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 11: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 12: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 13: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 14: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - case 15: aggregates[get_hartid()] = 0b1111; ids[get_hartid()] = 7; break; - } - - printf("FractalSync aggregate: 0x%0x, id: %0d...\n", aggregates[get_hartid()], ids[get_hartid()]); - - // Clear Event Unit and ensure FSync mask is enabled - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - - fsync(ids[get_hartid()], aggregates[get_hartid()]); - - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - - sentinel_instr_id(); -#endif - - printf("[FractalSync] Horizontal neighbor test starting\n"); - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_hnbr(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - sentinel_instr_id(); - printf("[FractalSync] Horizontal neighbor test ending\n"); - - printf("[FractalSync] Horizontal ring neighbor test starting\n"); - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_hring(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - sentinel_instr_id(); - printf("[FractalSync] Horizontal ring neighbor test ending\n"); - - printf("[FractalSync] Vertical neighbor test starting\n"); - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_vnbr(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - sentinel_instr_id(); - printf("[FractalSync] Vertical neighbor test ending\n"); - - printf("[FractalSync] Vertical ring neighbor test starting\n"); - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_vring(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - sentinel_instr_id(); - printf("[FractalSync] Vertical ring neighbor test ending\n"); - - printf("[FractalSync] Row test starting\n"); - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_rows(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - sentinel_instr_id(); - printf("[FractalSync] Row test ending\n"); - - printf("[FractalSync] Column test starting\n"); - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_cols(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - sentinel_instr_id(); - printf("[FractalSync] Column test ending\n"); - - printf("[FractalSync] Global test starting\n"); - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_global(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - sentinel_instr_id(); - printf("[FractalSync] Global test ending\n"); - - printf("FractalSync test finished...\n"); - - return 0; -} \ No newline at end of file diff --git a/sw/tests/xif_tests/fsync_test.c b/sw/tests/xif_tests/fsync_test.c deleted file mode 100644 index 6ca2b6dc..00000000 --- a/sw/tests/xif_tests/fsync_test.c +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Authors: Victor Isachi - * - * MAGIA FractalSync Synchronization Test - */ - -#include "magia_tile_utils.h" -#include "magia_utils.h" -#include "fsync_isa_utils.h" -#include "fsync_api.h" -#include "event_unit_utils.h" -#include "cache_fill.h" - -#define VERBOSE (0) - -#define CLIB_FS_TEST -// #define GLOBAL_FS_TEST -// #define ROW_FS_TEST -// #define COL_FS_TEST -// #define HNBR_FS_TEST -// #define VNBR_FS_TEST -// #define HRING_FS_TEST -// #define VRING_FS_TEST - -#define NUM_LEVELS (31-__builtin_clz(NUM_HARTS)) - -#define CACHE_HEAT_CYCLES (3) - -int main(void) { - uint32_t tile_hartid = get_hartid(); - uint32_t tile_xhartid = GET_X_ID(tile_hartid); - uint32_t tile_yhartid = GET_Y_ID(tile_hartid); - - // Initialize Event Unit once - eu_init(); - - printf("Starting Fractal Sync test...\n"); - - // Filling up the cache - fill_icache(); - - // Execute synchronization multiple times to pre-heat the cache - for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { -#ifdef CLIB_FS_TEST - // Climb FS tree test - for (int i = 0; i < NUM_LEVELS; i++){ - printf("Fractal Sync at level %0d...\n", i+1); - - uint32_t aggregates = (1 << (i+1))-1; - uint32_t ids = 0; -#if VERBOSE > 10 - printf("aggregate: 0x%0x\n", aggregates); - printf("id: 0x%0x\n", ids); -#endif - - // Instruction immediately preceding synchronization: indicates start of the synchronization region - sentinel_start(); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync(ids, aggregates); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - - // Instruction immediately following synchronization: indicates end of the synchronization region - sentinel_end(); - - printf("Synchronized...\n"); - } -#endif - -#ifdef GLOBAL_FS_TEST -#if VERBOSE > 1 - printf("Fractal Sync global synchrnonization test...\n"); -#endif - -#if VERBOSE > 10 - printf("aggregate: 0x%0x\n", _FS_GLOBAL_AGGR); - printf("id: 0x%0x\n", _FS_GLOBAL_ID); -#endif - - // Instruction immediately preceding synchronization: indicates start of the synchronization region - sentinel_start(); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_global(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - - // Instruction immediately following synchronization: indicates end of the synchronization region - sentinel_end(); - -#if VERBOSE > 1 - printf("Synchronized...\n"); -#endif -#endif - -#ifdef HNBR_FS_TEST -#if VERBOSE > 1 - printf("Fractal Sync horizontal neighbor synchrnonization test...\n"); -#endif - -#if VERBOSE > 10 - printf("aggregate: 0x%0x\n", _FS_HNBR_AGGR); - printf("id: 0x%0x\n", _FS_HNBR_ID); -#endif - - // Instruction immediately preceding synchronization: indicates start of the synchronization region - sentinel_start(); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_hnbr(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - - // Instruction immediately following synchronization: indicates end of the synchronization region - sentinel_end(); - -#if VERBOSE > 1 - printf("Synchronized...\n"); -#endif -#endif - -#ifdef VNBR_FS_TEST -#if VERBOSE > 1 - printf("Fractal Sync vertical neighbor synchrnonization test...\n"); -#endif - -#if VERBOSE > 10 - printf("aggregate: 0x%0x\n", _FS_VNBR_AGGR); - printf("id: 0x%0x\n", _FS_VNBR_ID); -#endif - - // Instruction immediately preceding synchronization: indicates start of the synchronization region - sentinel_start(); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_vnbr(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - - // Instruction immediately following synchronization: indicates end of the synchronization region - sentinel_end(); - -#if VERBOSE > 1 - printf("Synchronized...\n"); -#endif -#endif - -#ifdef HRING_FS_TEST -#if VERBOSE > 1 - printf("Fractal Sync horizontal ring synchrnonization test...\n"); -#endif - -#if VERBOSE > 10 - if ((tile_xhartid == 0) || (tile_xhartid == MESH_X_TILES-1)){ - uint32_t id = row_id_lookup(tile_yhartid); - printf("aggregate: 0x%0x\n", _FS_RC_LVL); - printf("id: 0x%0x\n", id); - } else { - printf("aggregate: 0x%0x\n", _FS_HRING_AGGR); - printf("id: 0x%0x\n", _FS_HRING_ID); - } -#endif - - // Instruction immediately preceding synchronization: indicates start of the synchronization region - sentinel_start(); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_hring(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - - // Instruction immediately following synchronization: indicates end of the synchronization region - sentinel_end(); - -#if VERBOSE > 1 - printf("Synchronized...\n"); -#endif -#endif - -#ifdef VRING_FS_TEST -#if VERBOSE > 1 - printf("Fractal Sync vertical ring synchrnonization test...\n"); -#endif - -#if VERBOSE > 10 - if ((tile_yhartid == 0) || (tile_yhartid == MESH_Y_TILES-1)){ - uint32_t id = col_id_lookup(tile_xhartid); - printf("aggregate: 0x%0x\n", _FS_RC_LVL); - printf("id: 0x%0x\n", id); - } else { - printf("aggregate: 0x%0x\n", _FS_VRING_AGGR); - printf("id: 0x%0x\n", _FS_VRING_ID); - } -#endif - - // Instruction immediately preceding synchronization: indicates start of the synchronization region - sentinel_start(); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_vring(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - - // Instruction immediately following synchronization: indicates end of the synchronization region - sentinel_end(); - -#if VERBOSE > 1 - printf("Synchronized...\n"); -#endif -#endif - -#ifdef ROW_FS_TEST -#if VERBOSE > 1 - printf("Fractal Sync row synchrnonization test...\n"); -#endif - -#if VERBOSE > 10 - uint32_t id = row_id_lookup(tile_yhartid); - printf("aggregate: 0x%0x\n", _FS_RC_AGGR); - printf("id: 0x%0x\n", id); -#endif - - // Instruction immediately preceding synchronization: indicates start of the synchronization region - sentinel_start(); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_rows(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - - // Instruction immediately following synchronization: indicates end of the synchronization region - sentinel_end(); - -#if VERBOSE > 1 - printf("Synchronized...\n"); -#endif -#endif - -#ifdef COL_FS_TEST -#if VERBOSE > 1 - printf("Fractal Sync column synchrnonization test...\n"); -#endif - -#if VERBOSE > 10 - uint32_t id = col_id_lookup(tile_xhartid); - printf("aggregate: 0x%0x\n", _FS_RC_AGGR); - printf("id: 0x%0x\n", id); -#endif - - // Instruction immediately preceding synchronization: indicates start of the synchronization region - sentinel_start(); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_FSYNC_DONE_MASK); - fsync_cols(); - eu_fsync_wait_completion(EU_WAIT_MODE_POLLING); - - // Instruction immediately following synchronization: indicates end of the synchronization region - sentinel_end(); - -#if VERBOSE > 1 - printf("Synchronized...\n"); -#endif -#endif - } - - printf("Fractal Sync test finished...\n"); - - return 0; -} diff --git a/sw/tests/xif_tests/idma_test.c b/sw/tests/xif_tests/idma_test.c deleted file mode 100644 index 8f85b7f4..00000000 --- a/sw/tests/xif_tests/idma_test.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Authors: Victor Isachi - * - * MAGIA iDMA Test - */ - -#include "magia_tile_utils.h" -#include "idma_isa_utils.h" -#include "event_unit_utils.h" - -#include "x_input.h" - -#define X_BASE (L1_BASE + 0x00012048) -#define Y_BASE (L1_BASE + 0x00016048) -#define Z_BASE (L2_BASE + 0x00001000) -#define W_BASE (L2_BASE + 0x00005000) - -#define M_SIZE (96) -#define N_SIZE (64) - -#define VERBOSE (0) - -#define WAIT_CYCLES (10) - -#define CONCURRENT - -int main(void) { - uint32_t dst_addr; - uint32_t src_addr; - uint32_t len; - - uint32_t dst_std_2; - uint32_t src_std_2; - uint32_t reps_2; - - uint32_t dst_std_3; - uint32_t src_std_3; - uint32_t reps_3; - - // Initialize Event Unit once - eu_init(); - - // Z - golden (reference) - for (int i = 0; i < M_SIZE*N_SIZE; i++) - mmio16(Z_BASE + 2*i) = x_inp[i]; -#if VERBOSE > 100 - for (int i = 0; i < M_SIZE*N_SIZE; i++) - printf("Z[%8x]: 0x%4x\n", Z_BASE + 2*i, mmio16(Z_BASE + 2*i)); -#endif - - idma_conf_in(); - - dst_addr = (uint32_t)X_BASE; - src_addr = (uint32_t)Z_BASE; - len = (uint32_t)(M_SIZE*N_SIZE*2); // 2 Bytes per element -#if VERBOSE > 10 - printf("dst_addr: 0x%8x (X_BASE)\n", dst_addr); - printf("src_addr: 0x%8x (Z_BASE)\n", src_addr); - printf("len: %0d\n", len); -#endif - idma_set_addr_len_in(dst_addr, src_addr, len); - - dst_std_2 = 0; - src_std_2 = 0; - reps_2 = 1; -#if VERBOSE > 10 - printf("dst_std_2: 0x%8x\n", dst_std_2); - printf("src_std_2: 0x%8x\n", src_std_2); - printf("reps_2: 0x%8x\n", reps_2); -#endif - idma_set_std2_rep2_in(dst_std_2, src_std_2, reps_2); - - dst_std_3 = 0; - src_std_3 = 0; - reps_3 = 1; -#if VERBOSE > 10 - printf("dst_std_3: 0x%8x\n", dst_std_3); - printf("src_std_3: 0x%8x\n", src_std_3); - printf("reps_3: 0x%8x\n", reps_3); -#endif - idma_set_std3_rep3_in(dst_std_3, src_std_3, reps_3); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_IDMA_A2O_DONE_MASK); - - idma_start_in(); - printf("iDMA moving data from L2 to L1...\n"); - - eu_idma_wait_a2o_completion(EU_WAIT_MODE_POLLING); - - idma_conf_out(); - - dst_addr = (uint32_t)W_BASE; - src_addr = (uint32_t)X_BASE; - len = (uint32_t)(M_SIZE*N_SIZE*2); // 2 Bytes per element -#if VERBOSE > 10 - printf("dst_addr: 0x%8x (W_BASE)\n", dst_addr); - printf("src_addr: 0x%8x (X_BASE)\n", src_addr); - printf("len: %0d\n", len); -#endif - idma_set_addr_len_out(dst_addr, src_addr, len); - - dst_std_2 = 0; - src_std_2 = 0; - reps_2 = 1; -#if VERBOSE > 10 - printf("dst_std_2: 0x%8x\n", dst_std_2); - printf("src_std_2: 0x%8x\n", src_std_2); - printf("reps_2: 0x%8x\n", reps_2); -#endif - idma_set_std2_rep2_out(dst_std_2, src_std_2, reps_2); - - dst_std_3 = 0; - src_std_3 = 0; - reps_3 = 1; -#if VERBOSE > 10 - printf("dst_std_3: 0x%8x\n", dst_std_3); - printf("src_std_3: 0x%8x\n", src_std_3); - printf("reps_3: 0x%8x\n", reps_3); -#endif - idma_set_std3_rep3_out(dst_std_3, src_std_3, reps_3); - -#ifdef CONCURRENT - idma_conf_in(); - - dst_addr = (uint32_t)Y_BASE; - src_addr = (uint32_t)Z_BASE; - len = (uint32_t)(M_SIZE*N_SIZE*2); // 2 Bytes per element -#if VERBOSE > 10 - printf("dst_addr: 0x%8x (Y_BASE)\n", dst_addr); - printf("src_addr: 0x%8x (Z_BASE)\n", src_addr); - printf("len: %0d\n", len); -#endif - idma_set_addr_len_in(dst_addr, src_addr, len); - - dst_std_2 = 0; - src_std_2 = 0; - reps_2 = 1; -#if VERBOSE > 10 - printf("dst_std_2: 0x%8x\n", dst_std_2); - printf("src_std_2: 0x%8x\n", src_std_2); - printf("reps_2: 0x%8x\n", reps_2); -#endif - idma_set_std2_rep2_in(dst_std_2, src_std_2, reps_2); - - dst_std_3 = 0; - src_std_3 = 0; - reps_3 = 1; -#if VERBOSE > 10 - printf("dst_std_3: 0x%8x\n", dst_std_3); - printf("src_std_3: 0x%8x\n", src_std_3); - printf("reps_3: 0x%8x\n", reps_3); -#endif - idma_set_std3_rep3_in(dst_std_3, src_std_3, reps_3); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_IDMA_ALL_DONE_MASK); - - idma_start_out(); - - idma_start_in(); - - eu_idma_wait_completion(EU_WAIT_MODE_POLLING); - - printf("iDMA moving concurrently data from L1 to L2 and from L2 to L1...\n"); -#else - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_IDMA_O2A_DONE_MASK); - - idma_start_out(); - - eu_idma_wait_o2a_completion(EU_WAIT_MODE_POLLING); - - printf("iDMA moving data from L1 to L2...\n"); -#endif - - printf("Verifying results...\n"); - - unsigned int num_errors = 0; - - uint16_t detected_l1, detected_l2, expected; - for(int i = 0; i < M_SIZE*N_SIZE; i++){ - detected_l2 = mmio16(W_BASE + 2*i); -#ifdef CONCURRENT - detected_l1 = mmio16(Y_BASE + 2*i); -#else - detected_l1 = mmio16(X_BASE + 2*i); -#endif - expected = mmio16(Z_BASE + 2*i); - if((detected_l2 != expected) || (detected_l1 != expected)){ - num_errors++; - printf("**ERROR**: DETECTED L2[%0d](=0x%4x) || DETECTED L1[%0d](=0x%4x) != EXPECTED[%0d](=0x%4x)\n", i, detected_l2, i, detected_l1, i, expected); - } - } - printf("Finished test with %0d errors\n", num_errors); - - return num_errors; -} diff --git a/sw/tests/xif_tests/mesh_test.c b/sw/tests/xif_tests/mesh_test.c deleted file mode 100644 index d548f795..00000000 --- a/sw/tests/xif_tests/mesh_test.c +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Authors: Victor Isachi - * - * MAGIA Mesh Test - */ - -#include "magia_tile_utils.h" -#include "magia_utils.h" -#include "redmule_isa_utils.h" -#include "idma_isa_utils.h" -#include "event_unit_utils.h" - -#include "x_input.h" -#include "w_input.h" -#include "y_input.h" -#include "z_output.h" - -#define X_BASE (L1_BASE + 0x00012048) -#define W_BASE (L1_BASE + 0x00016048) -#define Y_BASE (L1_BASE + 0x0001A048) -#define Z_BASE (L2_BASE + 0x00042000) // Note: for a large number of tiles (e.g. 64x64 mesh) we might exceed memory range of L2 -#define V_BASE (L2_BASE + 0x00046000) // Note: for a large number of tiles (e.g. 64x64 mesh) we might exceed memory range of L2 -#define T_BASE (L2_BASE + 0x0004A000) // Note: for a large number of tiles (e.g. 64x64 mesh) we might exceed memory range of L2 - -#define MHARTID_OFFSET (0x00010000) - -#define M_SIZE (96) -#define N_SIZE (64) -#define K_SIZE (64) - -#define VERBOSE (0) - -#define WAIT_CYCLES (10) - -#define DIFF_TH (0x0011) - -#define CONCURRENT - -void idma_mv_in(unsigned int x_dim, unsigned int y_dim, uint16_t src_data[], uint32_t dst_address){ - uint32_t dst_addr; - uint32_t src_addr; - uint32_t len; - - uint32_t dst_std_2; - uint32_t src_std_2; - uint32_t reps_2; - - uint32_t dst_std_3; - uint32_t src_std_3; - uint32_t reps_3; - - for (int i = 0; i < x_dim*y_dim; i++) - mmio16(T_BASE + get_hartid()*MHARTID_OFFSET + 2*i) = src_data[i]; - - idma_conf_in(); - - dst_addr = (uint32_t)dst_address; - src_addr = (uint32_t)(T_BASE + get_hartid()*MHARTID_OFFSET); - len = (uint32_t)(x_dim*y_dim*2); // 2 Bytes per element -#if VERBOSE > 10 - printf("dst_addr: 0x%0x\n", dst_addr); - printf("src_addr: 0x%0x\n", src_addr); - printf("len: %0d\n", len); -#endif - idma_set_addr_len_in(dst_addr, src_addr, len); - - dst_std_2 = 0; - src_std_2 = 0; - reps_2 = 1; -#if VERBOSE > 100 - printf("dst_std_2: 0x%0x\n", dst_std_2); - printf("src_std_2: 0x%0x\n", src_std_2); - printf("reps_2: 0x%0x\n", reps_2); -#endif - idma_set_std2_rep2_in(dst_std_2, src_std_2, reps_2); - - dst_std_3 = 0; - src_std_3 = 0; - reps_3 = 1; -#if VERBOSE > 100 - printf("dst_std_3: 0x%0x\n", dst_std_3); - printf("src_std_3: 0x%0x\n", src_std_3); - printf("reps_3: 0x%0x\n", reps_3); -#endif - idma_set_std3_rep3_in(dst_std_3, src_std_3, reps_3); - - idma_start_in(); - - // Clear Event Unit and ensure A2O mask is enabled - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_IDMA_A2O_DONE_MASK); - - // Use direction-specific wait for L2->L1 (A2O) - eu_wait_events_polling(EU_IDMA_A2O_DONE_MASK, 10000000); - -#if VERBOSE > 100 - for (int i = 0; i < x_dim*y_dim; i++){ - printf("DST[0x%0x]: 0x%0x\n", dst_addr + 2*i, mmio16(dst_addr + 2*i)); - } -#endif - -#if VERBOSE > 10 - unsigned int num_errors; - num_errors = 0; - for (int i = 0; i < x_dim*y_dim; i++) { - if (mmio16(dst_addr + 2*i) != src_data[i]) { - num_errors++; - printf("DST[0x%0x]: 0x%0x != SRC[%0d]: 0x%0x\n", dst_addr + 2*i, mmio16(dst_addr + 2*i), i, src_data[i]); - } - } - printf("Detected %0d error(s) in the transfer...\n", num_errors); -#endif -} - -void idma_mv_out(unsigned int x_dim, unsigned int y_dim, uint32_t src_address, uint32_t dst_address){ - uint32_t dst_addr; - uint32_t src_addr; - uint32_t len; - - uint32_t dst_std_2; - uint32_t src_std_2; - uint32_t reps_2; - - uint32_t dst_std_3; - uint32_t src_std_3; - uint32_t reps_3; - - idma_conf_out(); - - dst_addr = (uint32_t)dst_address; - src_addr = (uint32_t)src_address; - len = (uint32_t)(x_dim*y_dim*2); // 2 Bytes per element -#if VERBOSE > 10 - printf("dst_addr: 0x%0x\n", dst_addr); - printf("src_addr: 0x%0x\n", src_addr); - printf("len: %0d\n", len); -#endif - idma_set_addr_len_out(dst_addr, src_addr, len); - - dst_std_2 = 0; - src_std_2 = 0; - reps_2 = 1; -#if VERBOSE > 100 - printf("dst_std_2: 0x%0x\n", dst_std_2); - printf("src_std_2: 0x%0x\n", src_std_2); - printf("reps_2: 0x%0x\n", reps_2); -#endif - idma_set_std2_rep2_out(dst_std_2, src_std_2, reps_2); - - dst_std_3 = 0; - src_std_3 = 0; - reps_3 = 1; -#if VERBOSE > 100 - printf("dst_std_3: 0x%0x\n", dst_std_3); - printf("src_std_3: 0x%0x\n", src_std_3); - printf("reps_3: 0x%0x\n", reps_3); -#endif - idma_set_std3_rep3_out(dst_std_3, src_std_3, reps_3); - - idma_start_out(); - - // Clear Event Unit and ensure O2A mask is enabled - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_IDMA_O2A_DONE_MASK); - - // Use direction-specific wait for L1->L2 (O2A) - eu_wait_events_polling(EU_IDMA_O2A_DONE_MASK, 10000000); - -#if VERBOSE > 100 - for (int i = 0; i < x_dim*y_dim; i++){ - printf("DST[0x%0x]: 0x%0x\n", dst_addr + 2*i, mmio16(dst_addr + 2*i)); - } -#endif - -#if VERBOSE > 10 - unsigned int num_errors; - num_errors = 0; - for (int i = 0; i < x_dim*y_dim; i++) { - if (mmio16(dst_addr + 2*i) != mmio16(src_addr + 2*i)) { - num_errors++; - printf("DST[0x%0x]: 0x%0x != SRC[%0d]: 0x%0x\n", dst_addr + 2*i, mmio16(dst_addr + 2*i), i, mmio16(src_addr + 2*i)); - } - } - printf("Detected %0d error(s) in the transfer...\n", num_errors); -#endif -} - -int main(void) { - // Initialize event unit - eu_init(); - - // X - printf("Initializing X through iDMA...\n"); - idma_mv_in(M_SIZE, N_SIZE, x_inp, (X_BASE + get_hartid()*L1_TILE_OFFSET)); - - // W - printf("Initializing W through iDMA...\n"); - idma_mv_in(N_SIZE, K_SIZE, w_inp, (W_BASE + get_hartid()*L1_TILE_OFFSET)); - - // Y - printf("Initializing Y through iDMA...\n"); - idma_mv_in(M_SIZE, K_SIZE, y_inp, (Y_BASE + get_hartid()*L1_TILE_OFFSET)); - -#if VERBOSE > 10 - printf("K_SIZE: 0x%0x\n", K_SIZE); - printf("M_SIZE: 0x%0x\n", M_SIZE); - printf("N_SIZE: 0x%0x\n", N_SIZE); -#endif - - printf("Testing matrix multiplication with RedMulE...\n"); - - redmule_mcnfig(K_SIZE, M_SIZE, N_SIZE); - - redmule_marith(Y_BASE + get_hartid()*L1_TILE_OFFSET, W_BASE + get_hartid()*L1_TILE_OFFSET, X_BASE + get_hartid()*L1_TILE_OFFSET); - - // Clear Event Unit and ensure RedMulE mask is enabled - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_REDMULE_DONE_MASK); - - // Wait for HWPE completion - eu_wait_events_polling(EU_REDMULE_DONE_MASK, 10000000); - - printf("Moving results through iDMA...\n"); - idma_mv_out(M_SIZE, K_SIZE, Y_BASE + get_hartid()*L1_TILE_OFFSET, V_BASE + get_hartid()*MHARTID_OFFSET); - - printf("Verifying results...\n"); - - unsigned int num_errors[NUM_HARTS]; - num_errors[get_hartid()] = 0; - - uint16_t computed[NUM_HARTS], expected[NUM_HARTS], diff[NUM_HARTS]; - for(int i = 0; i < M_SIZE*K_SIZE; i++){ - computed[get_hartid()] = mmio16(V_BASE + get_hartid()*MHARTID_OFFSET + 2*i); - expected[get_hartid()] = z_oup[i]; - diff[get_hartid()] = (computed[get_hartid()] > expected[get_hartid()]) ? (computed[get_hartid()] - expected[get_hartid()]) : (expected[get_hartid()] - computed[get_hartid()]); - if(diff[get_hartid()] > DIFF_TH){ - num_errors[get_hartid()]++; - printf("**ERROR**: V[0x%0x](=0x%0x) != Z[%0d](=0x%0x)\n", V_BASE + get_hartid()*MHARTID_OFFSET + 2*i, computed[get_hartid()], i, expected[get_hartid()]); - } - } - printf("Finished test with %0d error(s)\n", num_errors[get_hartid()]); - - uint32_t exit_code[NUM_HARTS]; - if(num_errors[get_hartid()]) - exit_code[get_hartid()] = FAIL_EXIT_CODE; - else - exit_code[get_hartid()] = PASS_EXIT_CODE; - - return exit_code; -} diff --git a/sw/tests/xif_tests/redmule_test.c b/sw/tests/xif_tests/redmule_test.c deleted file mode 100644 index 4b4ca57e..00000000 --- a/sw/tests/xif_tests/redmule_test.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Authors: Victor Isachi - * - * MAGIA RedMulE Test - */ - -#include "magia_tile_utils.h" -#include "redmule_isa_utils.h" -#include "event_unit_utils.h" - -#include "x_input.h" -#include "w_input.h" -#include "y_input.h" -#include "z_output.h" - -#define X_BASE (L1_BASE + 0x00012048) -#define W_BASE (L1_BASE + 0x00016048) -#define Y_BASE (L1_BASE + 0x0001A048) -#define Z_BASE (L2_BASE + 0x00042000) - -#define M_SIZE (96) -#define N_SIZE (64) -#define K_SIZE (64) - -#define VERBOSE (0) - -#define WAIT_CYCLES (10) - -#define DIFF_TH (0x0011) - -int main(void) { - // Initialize Event Unit for RedMulE - eu_redmule_init(); - - // X - for (int i = 0; i < M_SIZE*N_SIZE; i++) - mmio16(X_BASE + 2*i) = x_inp[i]; -#if VERBOSE > 10 - for (int i = 0; i < M_SIZE*N_SIZE; i++) - printf("X[%8x]: 0x%4x\n", X_BASE + 2*i, mmio16(X_BASE + 2*i)); -#endif - - // W - for (int i = 0; i < N_SIZE*K_SIZE; i++) - mmio16(W_BASE + 2*i) = w_inp[i]; -#if VERBOSE > 10 - for (int i = 0; i < N_SIZE*K_SIZE; i++) - printf("W[%8x]: 0x%4x\n", W_BASE + 2*i, mmio16(W_BASE + 2*i)); -#endif - - // Y - for (int i = 0; i < M_SIZE*K_SIZE; i++) - mmio16(Y_BASE + 2*i) = y_inp[i]; -#if VERBOSE > 10 - for (int i = 0; i < M_SIZE*K_SIZE; i++) - printf("Y[%8x]: 0x%4x\n", Y_BASE + 2*i, mmio16(Y_BASE + 2*i)); -#endif - - // Z - golden (reference) - for (int i = 0; i < M_SIZE*K_SIZE; i++) - mmio16(Z_BASE + 2*i) = z_oup[i]; -#if VERBOSE > 10 - for (int i = 0; i < M_SIZE*K_SIZE; i++) - printf("Z[%8x]: 0x%4x\n", Z_BASE + 2*i, mmio16(Z_BASE + 2*i)); -#endif - -#if VERBOSE > 10 - printf("K_SIZE: %4x\n", K_SIZE); - printf("M_SIZE: %4x\n", M_SIZE); - printf("N_SIZE: %4x\n", N_SIZE); -#endif - - // Wait for end of computation - printf("Testing matrix multiplication with RedMulE...\n"); - - redmule_mcnfig(K_SIZE, M_SIZE, N_SIZE); - redmule_marith(Y_BASE, W_BASE, X_BASE); - - eu_redmule_wait_completion(EU_WAIT_MODE_POLLING); - - printf("Verifying results...\n"); - - unsigned int num_errors = 0; - - uint16_t computed, expected, diff; - for(int i = 0; i < M_SIZE*K_SIZE; i++){ - computed = mmio16(Y_BASE + 2*i); - expected = mmio16(Z_BASE + 2*i); - diff = (computed > expected) ? (computed - expected) : (expected - computed); - if(diff > DIFF_TH){ - num_errors++; - printf("**ERROR**: Y[%8x](=0x%4x) != Z[%8x](=0x%4x)\n", Y_BASE + 2*i, computed, Z_BASE + 2*i, expected); - } - } - printf("Finished test with %0d errors\n", num_errors); - - return num_errors; -} diff --git a/sw/tests/xif_tests/tile_test.c b/sw/tests/xif_tests/tile_test.c deleted file mode 100644 index e7cf1baf..00000000 --- a/sw/tests/xif_tests/tile_test.c +++ /dev/null @@ -1,255 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Authors: Victor Isachi - * - * MAGIA Tile Test - */ - -#include "magia_tile_utils.h" -#include "redmule_isa_utils.h" -#include "idma_isa_utils.h" -#include "event_unit_utils.h" - -#include "x_input.h" -#include "w_input.h" -#include "y_input.h" -#include "z_output.h" - -#define X_BASE (L1_BASE + 0x00012048) -#define W_BASE (L1_BASE + 0x00016048) -#define Y_BASE (L1_BASE + 0x0001A048) -#define Z_BASE (L2_BASE + 0x00042000) -#define V_BASE (L2_BASE + 0x00046000) -#define T_BASE (L2_BASE + 0x0004A000) - -#define M_SIZE (96) -#define N_SIZE (64) -#define K_SIZE (64) - -#define VERBOSE (0) - -#define WAIT_CYCLES (10) - -#define DIFF_TH (0x0011) - -#define CONCURRENT - -void idma_mv_in(unsigned int x_dim, unsigned int y_dim, uint16_t src_data[], uint32_t dst_address){ - uint32_t dst_addr; - uint32_t src_addr; - uint32_t len; - - uint32_t dst_std_2; - uint32_t src_std_2; - uint32_t reps_2; - - uint32_t dst_std_3; - uint32_t src_std_3; - uint32_t reps_3; - - for (int i = 0; i < x_dim*y_dim; i++) - mmio16(T_BASE + 2*i) = src_data[i]; - - idma_conf_in(); - - dst_addr = (uint32_t)dst_address; - src_addr = (uint32_t)T_BASE; - len = (uint32_t)(x_dim*y_dim*2); // 2 Bytes per element -#if VERBOSE > 10 - printf("dst_addr: 0x%8x\n", dst_addr); - printf("src_addr: 0x%8x\n", src_addr); - printf("len: %0d\n", len); -#endif - idma_set_addr_len_in(dst_addr, src_addr, len); - - dst_std_2 = 0; - src_std_2 = 0; - reps_2 = 1; -#if VERBOSE > 100 - printf("dst_std_2: 0x%8x\n", dst_std_2); - printf("src_std_2: 0x%8x\n", src_std_2); - printf("reps_2: 0x%8x\n", reps_2); -#endif - idma_set_std2_rep2_in(dst_std_2, src_std_2, reps_2); - - dst_std_3 = 0; - src_std_3 = 0; - reps_3 = 1; -#if VERBOSE > 100 - printf("dst_std_3: 0x%8x\n", dst_std_3); - printf("src_std_3: 0x%8x\n", src_std_3); - printf("reps_3: 0x%8x\n", reps_3); -#endif - idma_set_std3_rep3_in(dst_std_3, src_std_3, reps_3); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_IDMA_A2O_DONE_MASK); - - idma_start_in(); - - eu_wait_events_polling(EU_IDMA_A2O_DONE_MASK, 10000000); - -#if VERBOSE > 100 - for (int i = 0; i < x_dim*y_dim; i++) - printf("DST[%8x]: 0x%4x\n", dst_address + 2*i, mmio16(dst_address + 2*i)); -#endif - -#if VERBOSE > 10 - unsigned int num_errors; - num_errors = 0; - for (int i = 0; i < x_dim*y_dim; i++) { - if (mmio16(dst_address + 2*i) != src_data[i]) { - num_errors++; - printf("DST[%8x]: 0x%4x != SRC[%0d]: 0x%4x\n", dst_address + 2*i, mmio16(dst_address + 2*i), i, src_data[i]); - } - } - printf("Detected %0d error(s) in the transfer...\n", num_errors); -#endif -} - -void idma_mv_out(unsigned int x_dim, unsigned int y_dim, uint32_t src_address, uint32_t dst_address){ - uint32_t dst_addr; - uint32_t src_addr; - uint32_t len; - - uint32_t dst_std_2; - uint32_t src_std_2; - uint32_t reps_2; - - uint32_t dst_std_3; - uint32_t src_std_3; - uint32_t reps_3; - - idma_conf_out(); - - dst_addr = (uint32_t)dst_address; - src_addr = (uint32_t)src_address; - len = (uint32_t)(x_dim*y_dim*2); // 2 Bytes per element -#if VERBOSE > 10 - printf("dst_addr: 0x%8x\n", dst_addr); - printf("src_addr: 0x%8x\n", src_addr); - printf("len: %0d\n", len); -#endif - idma_set_addr_len_out(dst_addr, src_addr, len); - - dst_std_2 = 0; - src_std_2 = 0; - reps_2 = 1; -#if VERBOSE > 100 - printf("dst_std_2: 0x%8x\n", dst_std_2); - printf("src_std_2: 0x%8x\n", src_std_2); - printf("reps_2: 0x%8x\n", reps_2); -#endif - idma_set_std2_rep2_out(dst_std_2, src_std_2, reps_2); - - dst_std_3 = 0; - src_std_3 = 0; - reps_3 = 1; -#if VERBOSE > 100 - printf("dst_std_3: 0x%8x\n", dst_std_3); - printf("src_std_3: 0x%8x\n", src_std_3); - printf("reps_3: 0x%8x\n", reps_3); -#endif - idma_set_std3_rep3_out(dst_std_3, src_std_3, reps_3); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_IDMA_O2A_DONE_MASK); - - idma_start_out(); - - eu_wait_events_polling(EU_IDMA_O2A_DONE_MASK, 10000000); - -#if VERBOSE > 100 - for (int i = 0; i < x_dim*y_dim; i++) - printf("DST[%8x]: 0x%4x\n", dst_address + 2*i, mmio16(dst_address + 2*i)); -#endif - -#if VERBOSE > 10 - unsigned int num_errors; - num_errors = 0; - for (int i = 0; i < x_dim*y_dim; i++) { - if (mmio16(dst_address + 2*i) != mmio16(src_address + 2*i)) { - num_errors++; - printf("DST[%8x]: 0x%4x != SRC[%8x]: 0x%4x\n", dst_address + 2*i, mmio16(dst_address + 2*i), src_address + 2*i, mmio16(src_address + 2*i)); - } - } - printf("Detected %0d error(s) in the transfer...\n", num_errors); -#endif -} - -int main(void) { - // Initialize event unit - eu_init(); - - // X - printf("Initializing X through iDMA...\n"); - idma_mv_in(M_SIZE, N_SIZE, x_inp, X_BASE); - - // W - printf("Initializing W through iDMA...\n"); - idma_mv_in(N_SIZE, K_SIZE, w_inp, W_BASE); - - // Y - printf("Initializing Y through iDMA...\n"); - idma_mv_in(M_SIZE, K_SIZE, y_inp, Y_BASE); - - // Z - golden (reference) - printf("Initializing Z - golden...\n"); - for (int i = 0; i < M_SIZE*K_SIZE; i++) - mmio16(Z_BASE + 2*i) = z_oup[i]; -#if VERBOSE > 100 - for (int i = 0; i < M_SIZE*K_SIZE; i++) - printf("Z[%8x]: 0x%4x\n", Z_BASE + 2*i, mmio16(Z_BASE + 2*i)); -#endif - -#if VERBOSE > 10 - printf("K_SIZE: %4x\n", K_SIZE); - printf("M_SIZE: %4x\n", M_SIZE); - printf("N_SIZE: %4x\n", N_SIZE); -#endif - - printf("Testing matrix multiplication with RedMulE...\n"); - - eu_clear_events(0xFFFFFFFF); - eu_enable_events(EU_REDMULE_DONE_MASK); - - redmule_mcnfig(K_SIZE, M_SIZE, N_SIZE); - redmule_marith(Y_BASE, W_BASE, X_BASE); - - eu_wait_events_polling(EU_REDMULE_DONE_MASK, 10000000); - - printf("Moving results through iDMA...\n"); - idma_mv_out(M_SIZE, K_SIZE, Y_BASE, V_BASE); - - printf("Verifying results...\n"); - - unsigned int num_errors = 0; - - uint16_t computed, expected, diff; - for(int i = 0; i < M_SIZE*K_SIZE; i++){ - computed = mmio16(V_BASE + 2*i); - expected = mmio16(Z_BASE + 2*i); - diff = (computed > expected) ? (computed - expected) : (expected - computed); - if(diff > DIFF_TH){ - num_errors++; - printf("**ERROR**: V[%8x](=0x%4x) != Z[%8x](=0x%4x)\n", V_BASE + 2*i, computed, Z_BASE + 2*i, expected); - } - } - printf("Finished test with %0d errors\n", num_errors); - - return num_errors; -} diff --git a/sw/utils/event_unit_utils.h b/sw/utils/event_unit_utils.h index 3bdf421e..5e746ba3 100644 --- a/sw/utils/event_unit_utils.h +++ b/sw/utils/event_unit_utils.h @@ -17,7 +17,7 @@ * Authors: Luca Balboni * * MAGIA Event Unit Utilities - * Two modes: POLLING (non-blocking) and WFE (blocking with p.elw sleep) + * Two modes: POLLING (non-blocking) and WFE (blocking with cv.elw sleep or standard lw) */ #ifndef EVENT_UNIT_UTILS_H @@ -45,7 +45,7 @@ #define EU_CORE_BUFFER_IRQ_MASKED (EU_BASE + 0x24) #define EU_CORE_BUFFER_CLEAR (EU_BASE + 0x28) -// Wait registers (blocking with p.elw) +// Wait registers (blocking event load - cv.elw if pulp extensions are activated) #define EU_CORE_EVENT_WAIT (EU_BASE + 0x38) #define EU_CORE_EVENT_WAIT_CLEAR (EU_BASE + 0x3C) @@ -137,7 +137,7 @@ typedef enum { static inline unsigned int evt_read32(unsigned int base, unsigned int offset) { unsigned int value; unsigned int addr = base + offset; -#if defined(__cv32e40p__) || defined(CV32E40P) +#if defined(CV32E40P) __asm__ __volatile__ ( "cv.elw %0, 0(%1)" : "=r" (value) @@ -145,8 +145,9 @@ static inline unsigned int evt_read32(unsigned int base, unsigned int offset) { : "memory" ); #else + // Standard lw for cores without PULP extensions (CV32E40X, etc.) __asm__ __volatile__ ( - "p.elw %0, 0(%1)" + "lw %0, 0(%1)" : "=r" (value) : "r" (addr) : "memory" @@ -221,7 +222,7 @@ static inline uint32_t eu_wait_events_polling(uint32_t event_mask, uint32_t time return 0; } -// WFE mode: blocking sleep with p.elw +// WFE mode: blocking event load (cv.elw or lw depending on if pulp extensions are activated) static inline uint32_t eu_wait_events_wfe(uint32_t event_mask) { eu_enable_events(event_mask); return evt_read32(EU_BASE, EU_CORE_EVENT_WAIT_CLEAR - EU_BASE); diff --git a/sw/utils/magia_utils.h b/sw/utils/magia_utils.h index 22c42765..7f1c4843 100644 --- a/sw/utils/magia_utils.h +++ b/sw/utils/magia_utils.h @@ -47,19 +47,7 @@ static inline uint32_t get_hartid(void) { uint32_t hartid; asm volatile("csrr %0, mhartid" :"=r"(hartid):); - #ifndef RI5CY - return hartid; - #else - // RI5CY mhartid CSR: { 21'b0, cluster_id_i[5:0], 1'b0, core_id_i[3:0] } - // cluster_id_i = mhartid_tile + 1 (which tile/cluster, 1-indexed; 0 = standalone main core) - // core_id_i = i (which core within the cluster, 0-indexed) - uint32_t cluster_id = (hartid >> 5) & 0x3F; // = tile_hartid + 1 (same for all cores in a tile) - uint32_t core_id = hartid & 0xF; // = i (unique per core within tile) - //printf ("%d\n",PULP_HARTID_BASE + (cluster_id - 1) * PULP_CORE_COUNT + core_id); - if (cluster_id == 0) - return core_id; // standalone main tile core - return PULP_HARTID_BASE + (cluster_id - 1) * PULP_CORE_COUNT + core_id; - #endif + return hartid; } static inline void amo_increment(volatile uint32_t addr, volatile uint32_t amnt){ From 53431d563b49af11214e0a095e985e207b523e55 Mon Sep 17 00:00:00 2001 From: Luca Balboni Date: Thu, 6 Aug 2026 13:47:07 +0200 Subject: [PATCH 02/26] zfinx parametrized and fixed crt0.s (for CV32E40X zfinx is always = 0, it has issue for =1 with fpu_ss) --- Makefile | 42 +++++++++++++---------- hw/tile/converters/cv32e40p_data2obi.sv | 4 --- hw/tile/converters/cv32e40p_obi2data.sv | 2 -- hw/tile/converters/cv32e40x_data2obi.sv | 2 -- hw/tile/converters/cv32e40x_obi2data.sv | 2 -- hw/tile/magia_tile.sv | 12 +++---- hw/tile/magia_tile_pkg.sv | 15 +++++++-- setup_env.sh | 12 ------- sw/kernel/crt0.S | 5 +++ sw/kernel_pulp/Makefile | 11 +++++-- sw/kernel_pulp/pulp_crt0.S | 5 +++ sw/tests/fpu_test.c | 44 +++++++++++++++++++++---- 12 files changed, 99 insertions(+), 57 deletions(-) diff --git a/Makefile b/Makefile index 83418b07..ea5e801b 100644 --- a/Makefile +++ b/Makefile @@ -41,16 +41,28 @@ BENDER_DIR ?= . ARCH ?= rv XLEN ?= 32 +zfinx := 1 +cluster_zfinx := 1 + +PULP_XTEN_BASE := xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw + ifeq ($(core), CV32E40X) - XTEN = imafc + #CV32E40X has a problem with zfinx=1, so is not a free parameter and it is forced to 0 (F extension) ISA = riscv + XTEN = imafc ABI ?= ilp XABI ?= f else - XTEN = imc_xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw_zfinx_zhinxmin ISA = cv32e40p - ABI ?= ilp - XABI ?= + ifeq ($(zfinx),1) + XTEN = imc_$(PULP_XTEN_BASE)_zfinx_zhinxmin + ABI ?= ilp + XABI ?= + else + XTEN = imfc_$(PULP_XTEN_BASE) + ABI ?= ilp + XABI ?= f + endif endif # Auto-detect test location under sw/tests/ recursively — no cluster= flag needed. @@ -146,15 +158,9 @@ LINKSCRIPT := sw/kernel/link.ld PULP_SW_DIR := sw/kernel_pulp -ifneq ($(core), CV32E40P) - CC=$(ISA)$(XLEN)-unknown-elf-gcc - OBJDUMP=$(ISA)$(XLEN)-unknown-elf-objdump - NM=$(ISA)$(XLEN)-unknown-elf-nm -else - CC=riscv64-unknown-elf-gcc - OBJDUMP=riscv64-unknown-elf-objdump - NM=riscv64-unknown-elf-nm -endif +CC=riscv64-unknown-elf-gcc +OBJDUMP=riscv64-unknown-elf-objdump +NM=riscv64-unknown-elf-nm LD=$(CC) ifneq ($(core), CV32E40P) CC_OPTS=-march=$(ARCH)$(XLEN)$(XTEN) -mabi=$(ABI)$(XLEN)$(XABI) -D__$(ISA)__ -O2 -g -Wextra -Wall -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wundef -fdata-sections -ffunction-sections -MMD -MP @@ -214,14 +220,12 @@ spatz-header: # Build PULP cluster binary (magia-sdk style): produces # sw/kernel_pulp/headers_bin/_pulp_task_bin.h # embedding the position-independent flat binary in section .pulp_binary. -# PULP cluster cores are always CV32E40P (see magia_tile.sv), independent of -# which core is selected for the control core via $(core) — so core=CV32E40P -# is hardcoded here rather than forwarding $(core). +# PULP cluster cores are always CV32E40P (see magia_tile.sv), independent of which core is selected via $(core) .PHONY: pulp-header pulp-header: @if [ -n "$(PULP_TASKS)" ]; then \ echo "[PULP] Auto-detected tasks: $(PULP_TASKS)"; \ - $(MAKE) -C $(PULP_SW_DIR) TEST_NAME=$(test) task="$(PULP_TASKS)" PULP_TASK_DIR=$(ROOT_DIR)/$(PULP_TASK_DIR_PATH) core=CV32E40P all; \ + $(MAKE) -C $(PULP_SW_DIR) TEST_NAME=$(test) task="$(PULP_TASKS)" PULP_TASK_DIR=$(ROOT_DIR)/$(PULP_TASK_DIR_PATH) core=CV32E40P zfinx=$(cluster_zfinx) all; \ else \ echo "[PULP] No pulp_task/ directory — skipping PULP cluster compilation"; \ fi @@ -349,6 +353,10 @@ else $(error Detected unsupported core, must choose among CV32E40X or CV32E40P ) endif +effective_ctrl_zfinx := $(if $(filter CV32E40X,$(core)),0,$(zfinx)) +bender_defs += -D ZFINX_CTRL=$(effective_ctrl_zfinx) +bender_defs += -D ZFINX_CLUSTER=$(cluster_zfinx) + bender_targs += -t rtl bender_targs += -t test bender_targs += -t cv32e40p_include_tracer diff --git a/hw/tile/converters/cv32e40p_data2obi.sv b/hw/tile/converters/cv32e40p_data2obi.sv index 1e1d030a..be33970c 100644 --- a/hw/tile/converters/cv32e40p_data2obi.sv +++ b/hw/tile/converters/cv32e40p_data2obi.sv @@ -18,10 +18,6 @@ * Luca Balboni * * CV32E40P Core Data - OBI REQ Converter - * - * CV32E40P has no atop/memtype/prot/dbg on its data channel, so those OBI - * optional fields are tied to their inactive defaults. Used by the PULP - * cluster cores (always CV32E40P) and by the control core when it is CV32E40P. */ module cv32e40p_data2obi_req diff --git a/hw/tile/converters/cv32e40p_obi2data.sv b/hw/tile/converters/cv32e40p_obi2data.sv index 5bb9ebf6..1c318593 100644 --- a/hw/tile/converters/cv32e40p_obi2data.sv +++ b/hw/tile/converters/cv32e40p_obi2data.sv @@ -19,8 +19,6 @@ * * OBI - CV32E40P Core Data RSP Converter * - * CV32E40P has no exokay on its data response. Used by the PULP cluster cores - * (always CV32E40P) and by the control core when it is CV32E40P. */ module cv32e40p_obi2data_rsp diff --git a/hw/tile/converters/cv32e40x_data2obi.sv b/hw/tile/converters/cv32e40x_data2obi.sv index f09e68db..522bd6cb 100644 --- a/hw/tile/converters/cv32e40x_data2obi.sv +++ b/hw/tile/converters/cv32e40x_data2obi.sv @@ -19,8 +19,6 @@ * * CV32E40X Core Data - OBI REQ Converter * - * CV32E40X drives atop/memtype/prot/dbg on its data channel, which are mapped - * onto the OBI optional fields. Used by the control core when it is CV32E40X. */ module cv32e40x_data2obi_req diff --git a/hw/tile/converters/cv32e40x_obi2data.sv b/hw/tile/converters/cv32e40x_obi2data.sv index b1c88e34..e99f6b1d 100644 --- a/hw/tile/converters/cv32e40x_obi2data.sv +++ b/hw/tile/converters/cv32e40x_obi2data.sv @@ -19,8 +19,6 @@ * * OBI - CV32E40X Core Data RSP Converter * - * CV32E40X consumes the exokay response bit. Used by the control core when it - * is CV32E40X. */ module cv32e40x_obi2data_rsp diff --git a/hw/tile/magia_tile.sv b/hw/tile/magia_tile.sv index 353995af..29e97462 100644 --- a/hw/tile/magia_tile.sv +++ b/hw/tile/magia_tile.sv @@ -402,11 +402,7 @@ module magia_tile magia_tile_pkg::eu_direct_req_t eu_direct_req; magia_tile_pkg::eu_direct_rsp_t eu_direct_rsp; - // Cluster core data interface (converted directly to OBI xbar). - // Cluster cores are always CV32E40P, so these are typed on the CV32E40P - // flavour and not on core_data_req_t, which follows the control core: with - // core=CV32E40X the extra atop/memtype/prot/dbg fields would never be driven - // and would propagate X into the OBI crossbar. + // Cluster core data interface (converted directly to OBI xbar) magia_tile_pkg::cv32e40p_core_data_req_t [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_data_req; magia_tile_pkg::cv32e40p_core_data_rsp_t [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_data_rsp; @@ -1297,7 +1293,7 @@ module magia_tile .COREV_PULP ( 1 ), // For now this is a no .COREV_CLUSTER ( 1 ), .FPU ( FPU ), - .ZFINX ( magia_tile_pkg::ZFINX_CV32E40P ), + .ZFINX ( magia_tile_pkg::ZFINX_CTRL ), .FPU_ADDMUL_LAT ( 1 ), // Match C_LAT_FP32=1 in fpnew wrapper .FPU_OTHERS_LAT ( 1 ), // Match C_LAT_NONCOMP=1 in fpnew wrapper .NUM_MHPMCOUNTERS ( 29 ) @@ -1816,7 +1812,7 @@ module magia_tile `ifdef CV32E40X fpu_ss #( - .PULP_ZFINX ( magia_tile_pkg::ZFINX_CV32E40X ), + .PULP_ZFINX ( magia_tile_pkg::ZFINX_CTRL ), .INPUT_BUFFER_DEPTH ( magia_tile_pkg::FPU_BUFFER_DEPTH ), .INPUT_BUFFER_FALL_THROUGH ( magia_tile_pkg::FPU_BUFFER_FT ), .OUT_OF_ORDER ( magia_tile_pkg::FPU_OOO ), @@ -2239,7 +2235,7 @@ generate .COREV_PULP ( 1 ), // For now this is a no .COREV_CLUSTER ( 1 ), .FPU ( FPU ), - .ZFINX ( magia_tile_pkg::ZFINX_CV32E40P ), + .ZFINX ( magia_tile_pkg::ZFINX_CLUSTER ), .FPU_ADDMUL_LAT ( 1 ), // Match C_LAT_FP32=1 in fpnew wrapper .FPU_OTHERS_LAT ( 1 ), // Match C_LAT_NONCOMP=1 in fpnew wrapper .NUM_MHPMCOUNTERS ( 29 ) diff --git a/hw/tile/magia_tile_pkg.sv b/hw/tile/magia_tile_pkg.sv index 52ac2854..34d47b1a 100644 --- a/hw/tile/magia_tile_pkg.sv +++ b/hw/tile/magia_tile_pkg.sv @@ -268,10 +268,22 @@ package magia_tile_pkg; // Parameters used by cv32e40p core parameter bit PULP_CLUSTER = 1'b1; // PULP cluster mode parameter bit FPU = 1'b1; // Enable FPU (main feature) - parameter bit ZFINX_CV32E40P = 1'b1; // Zfinx extension (integer FP in GPR) of the CV32E40P cores (control and cluster) parameter bit FP_DIVSQRT = 1'b1; // FP division and square root parameter logic[31:0] DM_HALT_ADDR = 32'h1A110800; // Debug module halt address + `ifdef ZFINX_CTRL + localparam bit ZFINX_CTRL_PARAM = `ZFINX_CTRL; + `else + localparam bit ZFINX_CTRL_PARAM = 1'b1; + `endif + `ifdef ZFINX_CLUSTER + localparam bit ZFINX_CLUSTER_PARAM = `ZFINX_CLUSTER; + `else + localparam bit ZFINX_CLUSTER_PARAM = 1'b1; + `endif + parameter bit ZFINX_CTRL = ZFINX_CTRL_PARAM; // Zfinx for the control core + parameter bit ZFINX_CLUSTER = ZFINX_CLUSTER_PARAM; // Zfinx for the PULP cluster cores + `ifdef CV32E40X parameter int unsigned X_NUM_RS = 3; // Number of register file read ports that can be used by the eXtension interface parameter int unsigned CLIC_ID_W = 1; // Width of clic_irq_id_i and clic_irq_id_o. The maximum number of supported interrupts in CLIC mode is 2^CLIC_ID_WIDTH. Trap vector table alignment is restricted as described in Machine Trap Vector Table Base Address (mtvt) @@ -408,7 +420,6 @@ package magia_tile_pkg; parameter int unsigned CLUSTER_FILL_DW = magia_pkg::DATA_W; // i$ Fill interface data width. Power of two; >= 8. // Parameters used by the FPU - parameter bit ZFINX_CV32E40X = 0; // fpu_ss uses the F ISA extension, not Zfinx: CV32E40X is built with rv32imafc parameter int unsigned FPU_BUFFER_DEPTH = 8; // FPU FIFO depth that buffers instructions coming from core parameter bit FPU_BUFFER_FT = 0; // FPU FIFO fall through that buffers instructions coming from core parameter bit FPU_OOO = 1; // FPU enable out-of-order execution diff --git a/setup_env.sh b/setup_env.sh index 9eb40bc2..18e6617d 100644 --- a/setup_env.sh +++ b/setup_env.sh @@ -1,5 +1,3 @@ -core="$1" -echo "Selected core: $core" export MAGIA_DIR=$(pwd) echo "Exporting MAGIA path to $MAGIA_DIR" @@ -9,16 +7,6 @@ echo "Exporting bender path to $BENDER_DIR" export PATH=$BENDER_DIR:$PATH unset BENDER_DIR echo "Exporting SDK and GCC Toolchain paths" -export XLEN=32 -if [[ "$core" == "CV32E40X" ]]; then - echo "Exporting control core (CV32E40X) ISA extensions: I, M, A, F, C" - export CTRL_XTEN=imafc -else - echo "Exporting control core (CV32E40P) ISA extensions: I, M, C, PULP (Zfinx)" - export CTRL_XTEN=imc_xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw_zfinx_zhinxmin -fi -echo "Exporting PULP cluster core (CV32E40P) ISA extensions: I, M, C, PULP (Zfinx)" -export CLUSTER_XTEN=imc_xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw_zfinx_zhinxmin echo "Sourcing python virtual environment" source ./magia_venv/bin/activate echo "Finished setting up the environment" \ No newline at end of file diff --git a/sw/kernel/crt0.S b/sw/kernel/crt0.S index e43adfa6..12fd86aa 100644 --- a/sw/kernel/crt0.S +++ b/sw/kernel/crt0.S @@ -74,6 +74,11 @@ _start: li t0, 0x8 csrrs zero, mie, t0 +#if defined(__riscv_f) && defined(__cv32e40p__) + li t0, 0x2000 + csrrs zero, mstatus, t0 +#endif + # Clear the BSS segment. la t0, _bss_start la t1, _bss_end diff --git a/sw/kernel_pulp/Makefile b/sw/kernel_pulp/Makefile index f426dfb5..b20f2b6d 100644 --- a/sw/kernel_pulp/Makefile +++ b/sw/kernel_pulp/Makefile @@ -29,11 +29,18 @@ ARCH ?= rv XLEN ?= 32 core ?= CV32E40P -XTEN := imc_xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw_zfinx_zhinxmin +zfinx ?= 1 +XTEN_BASE := xcvalu_xcvbi_xcvbitmanip_xcvhwlp_xcvmac_xcvmem_xcvsimd_xcvelw +ifeq ($(zfinx),1) + XTEN := imc_$(XTEN_BASE)_zfinx_zhinxmin + XABI := +else + XTEN := imfc_$(XTEN_BASE) + XABI := f +endif CC = riscv64-unknown-elf-gcc OBJCOPY = riscv64-unknown-elf-objcopy OBJDUMP = riscv64-unknown-elf-objdump -XABI := ABI := ilp TEST_NAME ?= base_pulp_test diff --git a/sw/kernel_pulp/pulp_crt0.S b/sw/kernel_pulp/pulp_crt0.S index 510ac453..14dda5a8 100644 --- a/sw/kernel_pulp/pulp_crt0.S +++ b/sw/kernel_pulp/pulp_crt0.S @@ -121,6 +121,11 @@ _start: li t0, 0x8 csrrs zero, mstatus, t0 +#ifdef __riscv_f + li t0, 0x2000 + csrrs zero, mstatus, t0 +#endif + /* Signal "core armed": write 1 to PULP_READY. CV32's pulp_init() polls * this until ClusterRegs has counted N_CLUSTER_CORES writes. */ li t0, PULP_READY_ADDR diff --git a/sw/tests/fpu_test.c b/sw/tests/fpu_test.c index 20ab7ff0..59b2e2e4 100644 --- a/sw/tests/fpu_test.c +++ b/sw/tests/fpu_test.c @@ -35,6 +35,11 @@ #define abs_diff(x, y) (((x) > (y)) ? ((x) - (y)) : ((y) - (x))) +static inline uint32_t f32_bits(float f){ + uint32_t *p = (volatile uint32_t *)&f; + return *p; +} + inline uint32_t f_add(volatile uint32_t op_a, volatile uint32_t op_b){ uint32_t result; asm volatile("fmv.s.x ft0, %0" ::"r"(op_a)); @@ -44,9 +49,26 @@ inline uint32_t f_add(volatile uint32_t op_a, volatile uint32_t op_b){ return result; } +inline uint32_t f_sub(volatile uint32_t op_a, volatile uint32_t op_b){ + uint32_t result; + asm volatile("fmv.s.x ft2, %0" ::"r"(op_a)); + asm volatile("fmv.s.x ft3, %0" ::"r"(op_b)); + asm volatile("fsub.s ft2,ft2,ft3" ::); + asm volatile("fmv.x.s %0,ft2" :"=r"(result):); + return result; +} + +inline uint32_t f_lt(volatile uint32_t op_a, volatile uint32_t op_b){ + volatile uint32_t result; + asm volatile("fmv.s.x ft4, %0" ::"r"(op_a)); + asm volatile("fmv.s.x ft5, %0" ::"r"(op_b)); + asm volatile("flt.s %0,ft4,ft5" :"=r"(result):); + return result; +} + int main(void) { uint32_t error = 0; - + #ifndef CV32E40X volatile float a, b, c; a = A_VAL; @@ -60,11 +82,21 @@ int main(void) { printf("Test PASSED\n"); } #else - uint32_t D, E, F; - D = 0x414570A4; // Binary for 12.34f - E = 0x42631EB8; // Binary for 56.78f - F = f_add(D, E); - printf("Float operation result: 0x%08x [expected: 0x%08x]\n", F, F_EXP); + volatile uint32_t a, b, c; + a = f32_bits(A_VAL); + b = f32_bits(B_VAL); + c = f_add(a, b); + + uint32_t diff = f_sub(c, f32_bits(C_EXP)); + if (f_lt(diff, 0)) + diff = f_sub(0, diff); + + if (f_lt(diff, f32_bits(FP_TH))){ + printf("Test PASSED\n"); + }else{ + printf("Test FAILED\n"); + error++; + } #endif return error; From cb9077682eceeca18dd56bc820dbe95c5c9a6781 Mon Sep 17 00:00:00 2001 From: Luca Balboni Date: Fri, 21 Aug 2026 15:19:08 +0200 Subject: [PATCH 03/26] Updated NON_FREE_COMMIT --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ea5e801b..6ff8a49a 100644 --- a/Makefile +++ b/Makefile @@ -547,7 +547,7 @@ hw-all: hw-clean hw-lib hw-compile hw-opt # Nonfree components MAGIA_NONFREE_REMOTE ?= $(GITLAB_UNIBO_SSH_STRING)/magia/nonfree.git MAGIA_NONFREE_DIR ?= nonfree -MAGIA_NONFREE_COMMIT ?= 85b1df9cedbe7a52a361c05fea9181e084e2b4c8 +MAGIA_NONFREE_COMMIT ?= b394453ada24c84d5dcb7fd7b30d35fbf5cff4b1 MAGIA_NONFREE_DEPS ?= 1 .PHONY: magia-nonfree-init From b3632817e980f49ad912d347d3cc5839da87d30a Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Mon, 8 Jun 2026 17:18:31 +0200 Subject: [PATCH 04/26] [WIP] MAGIA supports broadcast operations over the narrow and wide channel in a 2x2 and 4x4 NoC; the LsbAnd reduction support is switched on --- Bender.yml | 6 +- Makefile | 1 + hw/mesh/magia.sv | 52 ++-- hw/mesh/magia_pkg.sv | 9 +- hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv | 132 +++++++- hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv | 294 +++++++++++++++++- hw/mesh/noc/magia_noc_pkg.sv | 134 +++++++- .../floonoc_axi_nw_mesh_2x2_config.yml | 22 +- hw/tile/idma_obi_ctrl_decoder.sv | 7 +- hw/tile/magia_tile.sv | 64 ++-- hw/tile/magia_tile_pkg.sv | 11 +- hw/tile/mcast_gen.sv | 57 ++++ sw/utils/idma_mm_utils.h | 48 ++- target/sim/src/mesh/magia_l2_mem_wrapper.sv | 20 +- 14 files changed, 745 insertions(+), 112 deletions(-) create mode 100644 hw/tile/mcast_gen.sv diff --git a/Bender.yml b/Bender.yml index ef0ad7ed..f94144d8 100644 --- a/Bender.yml +++ b/Bender.yml @@ -28,7 +28,7 @@ dependencies: cv32e40x : { git: "https://github.com/pulp-platform/cv32e40x.git" , rev: a90101211048ba1a16cedbe4db963ab6e12569d7 } # branch: vi/redmule_scaleup cv32e40p : { git: "https://github.com/FondazioneChipsIT/cv32e40p.git" , rev: 65c6961d8acf9698e09c976228c43692d700e697 } # branch: ng/pulp_cluster spatz : { git: "https://github.com/pulp-platform/spatz.git" , rev: 9380883fd36a4794d7f31e2c22e3fed3202aeb81 } # branch: lb/magia-spatz_cc - idma : { git: "https://github.com/pulp-platform/iDMA.git" , rev: ff5d56fffb3767814db88d6bf8f381974ea33aa5 } # version: 0.6.4 + idma : { git: "https://github.com/FondazioneChipsIT/iDMA.git" , rev: 9c5775af4b71140d83028da5f5c5c0a1a6d42eb0 } # branch: cc/mcast_magia hwpe-stream : { git: "https://github.com/pulp-platform/hwpe-stream.git" , version: 1.6 } hwpe-ctrl : { git: "https://github.com/pulp-platform/hwpe-ctrl.git" , version: 3.1.1 } hci : { git: "https://github.com/pulp-platform/hci.git" , version: 2.3.0 } @@ -42,7 +42,7 @@ dependencies: common_cells : { git: "https://github.com/pulp-platform/common_cells.git" , version: 1.21.0 } tech_cells_generic: { git: "https://github.com/pulp-platform/tech_cells_generic.git", version: 0.2.11 } fractal_sync : { git: "https://github.com/VictorIsachi/fractal_sync" , rev: df8e21b7e2b0e2d3198bf44a60b4ca67c334bcc2 } # branch: main - floo_noc : { git: "https://github.com/pulp-platform/FlooNoC.git" , version: 0.6.1 } + floo_noc : { git: "https://github.com/pulp-platform/FlooNoC.git" , version: 0.8.0 } event_unit_flex : { git: "https://github.com/pulp-platform/event_unit_flex.git" , rev: 763c3b9977970f656326c70a96debfb2ac0f85b2 } export_include_dirs: @@ -99,6 +99,7 @@ sources: - hw/tile/eu_direct_cut.sv - hw/tile/magia_tile_icache_wrap.sv - hw/tile/magia_redmule_wrap.sv + - hw/tile/mcast_gen.sv - hw/tile/magia_tile.sv # MAGIA DV - target/sim/src/tile/magia_tile_tb_pkg.sv @@ -163,6 +164,7 @@ sources: - hw/tile/eu_direct_cut.sv - hw/tile/magia_tile_icache_wrap.sv - hw/tile/magia_redmule_wrap.sv + - hw/tile/mcast_gen.sv - hw/tile/magia_tile.sv - target: all(magia_dv, not(standalone_tile), verilator) diff --git a/Makefile b/Makefile index 6ff8a49a..3a93f799 100644 --- a/Makefile +++ b/Makefile @@ -408,6 +408,7 @@ bender_defs += -D SPATZ_RVV=$(SPATZ_RVV) update-ips: $(BENDER) update + $(MAKE) -C $(IDMA_ROOT) idma_hw_all IDMA_ADD_IDS=$(IDMA_ADD_IDS) $(BENDER) script vsim \ --vlog-arg="$(compile_flag)" \ --vcom-arg="-pedanticerrors" \ diff --git a/hw/mesh/magia.sv b/hw/mesh/magia.sv index 7731af21..df4101e5 100644 --- a/hw/mesh/magia.sv +++ b/hw/mesh/magia.sv @@ -194,18 +194,18 @@ module magia .test_mode_i , .tile_enable_i , - .noc_south_req_o ( tile_south_req_out[i*N_TILES_X+j] ), - .noc_south_rsp_i ( tile_south_rsp_in[i*N_TILES_X+j] ), - .noc_south_wide_o ( tile_south_wide_out[i*N_TILES_X+j] ), - .noc_east_req_o ( tile_east_req_out[i*N_TILES_X+j] ), - .noc_east_rsp_i ( tile_east_rsp_in[i*N_TILES_X+j] ), - .noc_east_wide_o ( tile_east_wide_out[i*N_TILES_X+j] ), - .noc_north_req_o ( tile_north_req_out[i*N_TILES_X+j] ), - .noc_north_rsp_i ( tile_north_rsp_in[i*N_TILES_X+j] ), - .noc_north_wide_o ( tile_north_wide_out[i*N_TILES_X+j] ), - .noc_west_req_o ( tile_west_req_out[i*N_TILES_X+j] ), - .noc_west_rsp_i ( tile_west_rsp_in[i*N_TILES_X+j] ), - .noc_west_wide_o ( tile_west_wide_out[i*N_TILES_X+j] ), + .noc_south_req_o ( tile_south_req_out[i*N_TILES_X+j] ), + .noc_south_rsp_i ( tile_south_rsp_in[i*N_TILES_X+j] ), + .noc_south_wide_o ( tile_south_wide_out[i*N_TILES_X+j] ), + .noc_east_req_o ( tile_east_req_out[i*N_TILES_X+j] ), + .noc_east_rsp_i ( tile_east_rsp_in[i*N_TILES_X+j] ), + .noc_east_wide_o ( tile_east_wide_out[i*N_TILES_X+j] ), + .noc_north_req_o ( tile_north_req_out[i*N_TILES_X+j] ), + .noc_north_rsp_i ( tile_north_rsp_in[i*N_TILES_X+j] ), + .noc_north_wide_o ( tile_north_wide_out[i*N_TILES_X+j] ), + .noc_west_req_o ( tile_west_req_out[i*N_TILES_X+j] ), + .noc_west_rsp_i ( tile_west_rsp_in[i*N_TILES_X+j] ), + .noc_west_wide_o ( tile_west_wide_out[i*N_TILES_X+j] ), .noc_south_req_i ( tile_south_req_in[i*N_TILES_X+j] ), .noc_south_rsp_o ( tile_south_rsp_out[i*N_TILES_X+j] ), @@ -220,8 +220,8 @@ module magia .noc_west_rsp_o ( tile_west_rsp_out[i*N_TILES_X+j] ), .noc_west_wide_i ( tile_west_wide_in[i*N_TILES_X+j] ), - .x_id_i ( j ), - .y_id_i ( i ), + .x_id_i ( CollectiveSam[j*N_TILES_Y+i].idx.id.x ), + .y_id_i ( CollectiveSam[j*N_TILES_Y+i].idx.id.y ), `ifdef VERILATOR .ht_fsync_req_o ( ht_tile_fsync_req[i*N_TILES_X+j][0] ), @@ -239,19 +239,19 @@ module magia .vn_fsync_if_o ( vn_fsync_if[i*N_TILES_X+j] ), `endif - .scan_cg_en_i , + .scan_cg_en_i , - .boot_addr_i , - .mtvec_addr_i , - .dm_halt_addr_i , - .dm_exception_addr_i , - .mhartid_i ( mhartid[i*N_TILES_X+j] ), - .mimpid_patch_i , + .boot_addr_i , + .mtvec_addr_i , + .dm_halt_addr_i , + .dm_exception_addr_i , + .mhartid_i ( mhartid[j*N_TILES_Y+i] ), + .mimpid_patch_i , - .mcycle_o ( mcycle_o[i*N_TILES_X+j] ), - .time_i , + .mcycle_o ( mcycle_o[i*N_TILES_X+j] ), + .time_i , - .irq_i ( irq_i[i*N_TILES_X+j] ), + .irq_i ( irq_i[i*N_TILES_X+j] ), // Tile expects [N_CLUSTER_CORES:0] (1 main + 8 cluster cores). // Replicate the single top-level debug_req_i bit across all cores; @@ -265,8 +265,8 @@ module magia .debug_pc_valid_o ( debug_pc_valid_o[i*N_TILES_X+j] ), .debug_pc_o ( debug_pc_o[i*N_TILES_X+j] ), - .fetch_enable_i , - .core_sleep_o ( core_sleep_o[i*N_TILES_X+j] ), + .fetch_enable_i , + .core_sleep_o ( core_sleep_o[i*N_TILES_X+j] ), .wu_wfe_i `ifdef VERILATOR , .observe_o ( tile_observe_o[i*N_TILES_X+j] ) diff --git a/hw/mesh/magia_pkg.sv b/hw/mesh/magia_pkg.sv index 44e582e2..c90d63c9 100644 --- a/hw/mesh/magia_pkg.sv +++ b/hw/mesh/magia_pkg.sv @@ -36,14 +36,15 @@ package magia_pkg; localparam int unsigned WIDE_STRB_W = WIDE_DATA_W/BYTE_W; // System-wide wide communication strobe Width localparam int unsigned N_MEM_BANKS = 32; // Number of TCDM banks (1 extra bank for missaligned accesses) localparam int unsigned N_WORDS_BANK = 8192; // Number of words per TCDM bank - localparam int unsigned N_TILES_Y = 4; // Number of Tile rowns - localparam int unsigned N_TILES_X = 4; // Number of Tile columns + localparam int unsigned N_TILES_Y = 2; // Number of Tile rowns + localparam int unsigned N_TILES_X = 2; // Number of Tile columns localparam int unsigned N_TILES = N_TILES_Y*N_TILES_X; // Number of Tiles in the Mesh localparam int unsigned N_IRQ = 32; // Number of IRQs localparam int unsigned IRQ_ID_W = $clog2(N_IRQ); // IRQ ID Width localparam int unsigned ID_W_OFFSET = 1; // Offset to be added to ID Width localparam int unsigned ID_W = 1; // Default ID Width - localparam int unsigned USR_W = 1; // Default User Width + localparam int unsigned COLLECTIVE_OP_W = 4; // Collective operation encoding (0: Unicast, 1: Multicast) + localparam int unsigned USR_W = ADDR_W+COLLECTIVE_OP_W; // The User Width encodes the collective operation // Parameters used by the NoC parameter int unsigned AXI_NOC_ID_W = 6; // AXI NoC ID Width: matches slave side id_width (6 bits) @@ -51,7 +52,7 @@ package magia_pkg; // Parameters used by the L2 parameter int unsigned L2_ID_W = 3; // The ID Width reflects the slave ID Width of the Tile AXI XBAR (for 5 ports: log2(5)=3) - parameter int unsigned L2_U_W = 1; + parameter int unsigned L2_U_W = USR_W; // Parameter used for the Fractal Sync network parameter int unsigned FSYNC_LVL = (N_TILES_X == N_TILES_Y) ? diff --git a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv index fb4995bc..9a40ca50 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv @@ -24,28 +24,39 @@ package floo_axi_nw_mesh_2x2_noc_pkg; L21 = 5, NumEndpoints = 6} ep_id_e; - + typedef enum logic[2:0] { + MagiaTileX0Y0SamIdx = 0, + MagiaTileX0Y1SamIdx = 1, + MagiaTileX1Y0SamIdx = 2, + MagiaTileX1Y1SamIdx = 3, + L20SamIdx = 4, + L21SamIdx = 5} sam_idx_e; typedef logic[0:0] rob_idx_t; -typedef logic[0:0] port_id_t; -typedef logic[1:0] x_bits_t; -typedef logic[0:0] y_bits_t; -typedef struct packed { + typedef logic[0:0] port_id_t; + typedef logic[1:0] x_bits_t; + typedef logic[0:0] y_bits_t; + typedef struct packed { x_bits_t x; y_bits_t y; port_id_t port_id; -} id_t; + } id_t; -typedef logic route_t; + typedef logic route_t; + typedef struct packed { + id_t idx; + id_t start_addr; + id_t end_addr; + } route_map_rule_t; localparam int unsigned SamNumRules = 6; -typedef struct packed { - id_t idx; - logic [31:0] start_addr; - logic [31:0] end_addr; -} sam_rule_t; + typedef struct packed { + id_t idx; + logic [31:0] start_addr; + logic [31:0] end_addr; + } sam_rule_t; localparam sam_rule_t[SamNumRules-1:0] Sam = '{ '{idx: '{x: 0, y: 1, port_id: 0}, start_addr: 32'he0000000, end_addr: 32'hffffffff},// L2_1_sam_idx @@ -58,14 +69,107 @@ localparam sam_rule_t[SamNumRules-1:0] Sam = '{ }; + localparam int unsigned CollectiveSamNumRules = 6; + + typedef struct packed { + int unsigned offset; + int unsigned len; + int unsigned base_id; + } collective_mask_sel_t; + + typedef struct packed { + id_t id; + collective_mask_sel_t mask_x; + collective_mask_sel_t mask_y; + } collective_idx_t; + + typedef struct packed { + collective_idx_t idx; + logic [31:0] start_addr; + logic [31:0] end_addr; + } collective_sam_rule_t; + + +localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ +'{ idx: '{ id: '{x: 0, y: 1, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he0000000, + end_addr: 32'h100000000},// L21 +'{ idx: '{ id: '{x: 0, y: 0, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc0000000, + end_addr: 32'he0000000},// L20 +'{ idx: '{ id: '{x: 3, y: 1, port_id: 0}, + mask_x: '{ offset: 21, + len: 2, + base_id: 2}, + mask_y: '{ offset: 20, + len: 1, + base_id: 0}}, + start_addr: 32'h00300000, + end_addr: 32'h00400000},// MagiaTileX1Y1 +'{ idx: '{ id: '{x: 3, y: 0, port_id: 0}, + mask_x: '{ offset: 21, + len: 2, + base_id: 2}, + mask_y: '{ offset: 20, + len: 1, + base_id: 0}}, + start_addr: 32'h00200000, + end_addr: 32'h00300000},// MagiaTileX1Y0 +'{ idx: '{ id: '{x: 2, y: 1, port_id: 0}, + mask_x: '{ offset: 21, + len: 2, + base_id: 2}, + mask_y: '{ offset: 20, + len: 1, + base_id: 0}}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX0Y1 +'{ idx: '{ id: '{x: 2, y: 0, port_id: 0}, + mask_x: '{ offset: 21, + len: 2, + base_id: 2}, + mask_y: '{ offset: 20, + len: 1, + base_id: 0}}, + start_addr: 32'h00000000, + end_addr: 32'h00100000} // MagiaTileX0Y0 - localparam route_cfg_t RouteCfg = '{ RouteAlgo: XYRouting, +}; + + localparam route_cfg_t RouteCfg = '{ + RouteAlgo: XYRouting, UseIdTable: 1'b1, XYAddrOffsetX: 32, XYAddrOffsetY: 34, IdAddrOffset: 0, NumSamRules: 6, - NumRoutes: 0}; + NumRoutes: 0, + CollectiveCfg: '{ + OpCfg: '{ + EnNarrowMulticast: 1'b1, + EnWideMulticast: 1'b1, + EnLsbAnd: 1'b1, + EnFpAdd: 1'b0, + EnFpMul: 1'b0, + EnFpMin: 1'b0, + EnFpMax: 1'b0, + EnIntAdd: 1'b0, + EnIntMul: 1'b0, + EnIntMinS: 1'b0, + EnIntMinU: 1'b0, + EnIntMaxS: 1'b0, + EnIntMaxU: 1'b0 + }, + NarrRedCfg: RedDefaultCfg, + WideRedCfg: RedDefaultCfg + } + }; + + typedef logic[31:0] axi_narrow_data_mst_addr_t; diff --git a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv index 56952493..43c5ba04 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv @@ -1,4 +1,4 @@ -// Copyright 2025 ETH Zurich and University of Bologna. +// Copyright 2026 ETH Zurich and University of Bologna. // Solderpad Hardware License, Version 0.51, see LICENSE for details. // SPDX-License-Identifier: SHL-0.51 @@ -40,6 +40,30 @@ package floo_axi_nw_mesh_4x4_noc_pkg; + typedef enum logic[4:0] { + MagiaTileX0Y0SamIdx = 0, + MagiaTileX0Y1SamIdx = 1, + MagiaTileX0Y2SamIdx = 2, + MagiaTileX0Y3SamIdx = 3, + MagiaTileX1Y0SamIdx = 4, + MagiaTileX1Y1SamIdx = 5, + MagiaTileX1Y2SamIdx = 6, + MagiaTileX1Y3SamIdx = 7, + MagiaTileX2Y0SamIdx = 8, + MagiaTileX2Y1SamIdx = 9, + MagiaTileX2Y2SamIdx = 10, + MagiaTileX2Y3SamIdx = 11, + MagiaTileX3Y0SamIdx = 12, + MagiaTileX3Y1SamIdx = 13, + MagiaTileX3Y2SamIdx = 14, + MagiaTileX3Y3SamIdx = 15, + L20SamIdx = 16, + L21SamIdx = 17, + L22SamIdx = 18, + L23SamIdx = 19} sam_idx_e; + + + typedef logic[0:0] rob_idx_t; typedef logic[0:0] port_id_t; typedef logic[2:0] x_bits_t; @@ -53,6 +77,12 @@ typedef struct packed { typedef logic route_t; + typedef struct packed { + id_t idx; + id_t start_addr; + id_t end_addr; + } route_map_rule_t; + localparam int unsigned SamNumRules = 20; typedef struct packed { @@ -83,6 +113,192 @@ localparam sam_rule_t[SamNumRules-1:0] Sam = '{ '{idx: '{x: 2, y: 0, port_id: 0}, start_addr: 32'h00100000, end_addr: 32'h00200000},// magia_tile_x1_y0_sam_idx '{idx: '{x: 1, y: 0, port_id: 0}, start_addr: 32'h00000000, end_addr: 32'h00100000} // magia_tile_x0_y0_sam_idx + localparam int unsigned CollectiveSamNumRules = 20; + +typedef struct packed { + int unsigned offset; + int unsigned len; + int unsigned base_id; +} collective_mask_sel_t; + +typedef struct packed { + id_t id; + collective_mask_sel_t mask_x; + collective_mask_sel_t mask_y; +} collective_idx_t; + +typedef struct packed { + collective_idx_t idx; + logic [31:0] start_addr; + logic [31:0] end_addr; +} collective_sam_rule_t; + +localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ +'{ idx: '{ id: '{x: 0, y: 3, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf0000000, + end_addr: 32'h100000000},// L23 +'{ idx: '{ id: '{x: 0, y: 2, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he0000000, + end_addr: 32'hf0000000},// L22 +'{ idx: '{ id: '{x: 0, y: 1, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd0000000, + end_addr: 32'he0000000},// L21 +'{ idx: '{ id: '{x: 0, y: 0, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc0000000, + end_addr: 32'hd0000000},// L20 +'{ idx: '{ id: '{x: 7, y: 3, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00f00000, + end_addr: 32'h01000000},// MagiaTileX3Y3 +'{ idx: '{ id: '{x: 7, y: 2, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00e00000, + end_addr: 32'h00f00000},// MagiaTileX3Y2 +'{ idx: '{ id: '{x: 7, y: 1, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00d00000, + end_addr: 32'h00e00000},// MagiaTileX3Y1 +'{ idx: '{ id: '{x: 7, y: 0, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00c00000, + end_addr: 32'h00d00000},// MagiaTileX3Y0 +'{ idx: '{ id: '{x: 6, y: 3, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00b00000, + end_addr: 32'h00c00000},// MagiaTileX2Y3 +'{ idx: '{ id: '{x: 6, y: 2, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00a00000, + end_addr: 32'h00b00000},// MagiaTileX2Y2 +'{ idx: '{ id: '{x: 6, y: 1, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00900000, + end_addr: 32'h00a00000},// MagiaTileX2Y1 +'{ idx: '{ id: '{x: 6, y: 0, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00800000, + end_addr: 32'h00900000},// MagiaTileX2Y0 +'{ idx: '{ id: '{x: 5, y: 3, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00700000, + end_addr: 32'h00800000},// MagiaTileX1Y3 +'{ idx: '{ id: '{x: 5, y: 2, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00600000, + end_addr: 32'h00700000},// MagiaTileX1Y2 +'{ idx: '{ id: '{x: 5, y: 1, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00500000, + end_addr: 32'h00600000},// MagiaTileX1Y1 +'{ idx: '{ id: '{x: 5, y: 0, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00400000, + end_addr: 32'h00500000},// MagiaTileX1Y0 +'{ idx: '{ id: '{x: 4, y: 3, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00300000, + end_addr: 32'h00400000},// MagiaTileX0Y3 +'{ idx: '{ id: '{x: 4, y: 2, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00200000, + end_addr: 32'h00300000},// MagiaTileX0Y2 +'{ idx: '{ id: '{x: 4, y: 1, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX0Y1 +'{ idx: '{ id: '{x: 4, y: 0, port_id: 0}, + mask_x: '{ offset: 22, + len: 3, + base_id: 4}, + mask_y: '{ offset: 20, + len: 2, + base_id: 0}}, + start_addr: 32'h00000000, + end_addr: 32'h00100000} // MagiaTileX0Y0 + }; @@ -93,10 +309,38 @@ localparam sam_rule_t[SamNumRules-1:0] Sam = '{ XYAddrOffsetY: 35, IdAddrOffset: 0, NumSamRules: 20, - NumRoutes: 0}; + NumRoutes: 0, + CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, + EnWideMulticast: 1'b1, + EnLsbAnd: 1'b0, + EnFpAdd: 1'b0, + EnFpMul: 1'b0, + EnFpMin: 1'b0, + EnFpMax: 1'b0, + EnIntAdd: 1'b0, + EnIntMul: 1'b0, + EnIntMinS: 1'b0, + EnIntMinU: 1'b0, + EnIntMaxS: 1'b0, + EnIntMaxU: 1'b0}, + NarrRedCfg: RedDefaultCfg, + WideRedCfg: RedDefaultCfg}}; + + + + typedef logic[31:0] collective_axi_narrow_data_mst_addr_t; +typedef logic[31:0] collective_axi_narrow_data_mst_data_t; +typedef logic[3:0] collective_axi_narrow_data_mst_strb_t; +typedef logic[1:0] collective_axi_narrow_data_mst_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_narrow_data_mst_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_mst, collective_axi_narrow_data_mst_req_t, collective_axi_narrow_data_mst_rsp_t, collective_axi_narrow_data_mst_addr_t, collective_axi_narrow_data_mst_id_t, collective_axi_narrow_data_mst_data_t, collective_axi_narrow_data_mst_strb_t, collective_axi_narrow_data_mst_user_t) - typedef logic[31:0] axi_narrow_data_mst_addr_t; + typedef logic[31:0] axi_narrow_data_mst_addr_t; typedef logic[31:0] axi_narrow_data_mst_data_t; typedef logic[3:0] axi_narrow_data_mst_strb_t; typedef logic[2:0] axi_narrow_data_mst_id_t; @@ -104,7 +348,19 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_mst, axi_narrow_data_mst_req_t, axi_narrow_data_mst_rsp_t, axi_narrow_data_mst_addr_t, axi_narrow_data_mst_id_t, axi_narrow_data_mst_data_t, axi_narrow_data_mst_strb_t, axi_narrow_data_mst_user_t) - typedef logic[31:0] axi_narrow_data_slv_addr_t; + typedef logic[31:0] collective_axi_narrow_data_slv_addr_t; +typedef logic[31:0] collective_axi_narrow_data_slv_data_t; +typedef logic[3:0] collective_axi_narrow_data_slv_strb_t; +typedef logic[3:0] collective_axi_narrow_data_slv_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_narrow_data_slv_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_slv, collective_axi_narrow_data_slv_req_t, collective_axi_narrow_data_slv_rsp_t, collective_axi_narrow_data_slv_addr_t, collective_axi_narrow_data_slv_id_t, collective_axi_narrow_data_slv_data_t, collective_axi_narrow_data_slv_strb_t, collective_axi_narrow_data_slv_user_t) + + + typedef logic[31:0] axi_narrow_data_slv_addr_t; typedef logic[31:0] axi_narrow_data_slv_data_t; typedef logic[3:0] axi_narrow_data_slv_strb_t; typedef logic[5:0] axi_narrow_data_slv_id_t; @@ -112,7 +368,19 @@ typedef logic[0:0] axi_narrow_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_slv, axi_narrow_data_slv_req_t, axi_narrow_data_slv_rsp_t, axi_narrow_data_slv_addr_t, axi_narrow_data_slv_id_t, axi_narrow_data_slv_data_t, axi_narrow_data_slv_strb_t, axi_narrow_data_slv_user_t) - typedef logic[31:0] axi_wide_data_mst_addr_t; + typedef logic[31:0] collective_axi_wide_data_mst_addr_t; +typedef logic[255:0] collective_axi_wide_data_mst_data_t; +typedef logic[31:0] collective_axi_wide_data_mst_strb_t; +typedef logic[1:0] collective_axi_wide_data_mst_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_wide_data_mst_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_mst, collective_axi_wide_data_mst_req_t, collective_axi_wide_data_mst_rsp_t, collective_axi_wide_data_mst_addr_t, collective_axi_wide_data_mst_id_t, collective_axi_wide_data_mst_data_t, collective_axi_wide_data_mst_strb_t, collective_axi_wide_data_mst_user_t) + + + typedef logic[31:0] axi_wide_data_mst_addr_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; typedef logic[2:0] axi_wide_data_mst_id_t; @@ -120,7 +388,19 @@ typedef logic[0:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) - typedef logic[31:0] axi_wide_data_slv_addr_t; + typedef logic[31:0] collective_axi_wide_data_slv_addr_t; +typedef logic[255:0] collective_axi_wide_data_slv_data_t; +typedef logic[31:0] collective_axi_wide_data_slv_strb_t; +typedef logic[1:0] collective_axi_wide_data_slv_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_wide_data_slv_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_slv, collective_axi_wide_data_slv_req_t, collective_axi_wide_data_slv_rsp_t, collective_axi_wide_data_slv_addr_t, collective_axi_wide_data_slv_id_t, collective_axi_wide_data_slv_data_t, collective_axi_wide_data_slv_strb_t, collective_axi_wide_data_slv_user_t) + + + typedef logic[31:0] axi_wide_data_slv_addr_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; typedef logic[2:0] axi_wide_data_slv_id_t; @@ -129,7 +409,7 @@ typedef logic[0:0] axi_wide_data_slv_user_t; - `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t) + `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: 32, DataWidth: 32, UserWidth: 1, diff --git a/hw/mesh/noc/magia_noc_pkg.sv b/hw/mesh/noc/magia_noc_pkg.sv index 30a04b48..68e3d665 100644 --- a/hw/mesh/noc/magia_noc_pkg.sv +++ b/hw/mesh/noc/magia_noc_pkg.sv @@ -48,6 +48,25 @@ package magia_noc_pkg; logic [ADDR_W-1:0] end_addr; } sam_rule_t; + typedef struct packed { + int unsigned offset; + int unsigned len; + int unsigned base_id; + } collective_mask_sel_t; + + typedef struct packed { + id_t id; + collective_mask_sel_t mask_x; + collective_mask_sel_t mask_y; + } collective_idx_t; + + typedef struct packed { + collective_idx_t idx; + logic [31:0] start_addr; + logic [31:0] end_addr; + } collective_sam_rule_t; + + /********************************** ** ROUTING TABLE ** **********************************/ @@ -76,8 +95,34 @@ package magia_noc_pkg; return Sam; endfunction + // Helper function to get the correct routing table + function automatic collective_sam_rule_t[SamNumRules-1:0] gen_collective_sam_table(int unsigned num_tiles); + collective_sam_rule_t[SamNumRules-1:0] CollectiveSam; + + case (num_tiles) + 32'd4: begin + CollectiveSam = floo_axi_nw_mesh_2x2_noc_pkg::CollectiveSam; + end + 32'd16: begin + CollectiveSam = floo_axi_nw_mesh_4x4_noc_pkg::CollectiveSam; + end + 32'd64: begin + CollectiveSam = floo_axi_nw_mesh_8x8_noc_pkg::Sam; + end + 32'd256: begin + CollectiveSam = floo_axi_nw_mesh_16x16_noc_pkg::Sam; + end + 32'd1024: begin + CollectiveSam = floo_axi_nw_mesh_32x32_noc_pkg::Sam; + end + endcase + + return CollectiveSam; + endfunction + // Actual declaration of the Sam rules localparam sam_rule_t[SamNumRules-1:0] Sam = gen_sam_table(N_TILES); + localparam collective_sam_rule_t[SamNumRules-1:0] CollectiveSam = gen_collective_sam_table(N_TILES); // Helper function to get the correct route configuration function automatic route_cfg_t gen_route_config(int unsigned num_tiles); @@ -107,18 +152,54 @@ package magia_noc_pkg; // Actual declaration of RouteCfg localparam route_cfg_t RouteCfg = gen_route_config(N_TILES); + + /********************************** + ** BROADCAST MASK ** + **********************************/ + // Helper function to get the broadcast mask + function automatic logic[31:0] gen_broadcast_mask(int unsigned num_tiles); + logic[31:0] mask; + + case (num_tiles) + 32'd4: begin + mask = 32'h00300000; + end + 32'd16: begin + mask = 32'h00F00000; + end + 32'd64: begin + mask = 32'h00300000; + end + 32'd256: begin + mask = 32'h00300000; + end + 32'd1024: begin + mask = 32'h00300000; + end + endcase + + return mask; + endfunction + + // Actual declaration of the Broadcast Mask + localparam logic[31:0] BroadcastMask = gen_broadcast_mask(N_TILES); + localparam logic[3:0] CollectiveOp = 4'b0001; // 0x0 Unicast; 0x1 Multicast; 0x2 Barrier + + //********** STANDARD AXI STRUCTS **********// typedef logic[ADDR_W-1:0] axi_narrow_data_mst_addr_t; typedef logic[DATA_W-1:0] axi_narrow_data_mst_data_t; typedef logic[STRB_W-1:0] axi_narrow_data_mst_strb_t; typedef logic[L2_ID_W-1:0] axi_narrow_data_mst_id_t; - typedef logic[L2_U_W-1:0] axi_narrow_data_mst_user_t; + typedef logic[iDMA_UserWidth-1:0] axi_narrow_data_mst_user_t; + `AXI_TYPEDEF_ALL_CT(axi_narrow_data_mst, axi_narrow_data_mst_req_t, axi_narrow_data_mst_rsp_t, axi_narrow_data_mst_addr_t, axi_narrow_data_mst_id_t, axi_narrow_data_mst_data_t, axi_narrow_data_mst_strb_t, axi_narrow_data_mst_user_t) typedef logic[ADDR_W-1:0] axi_narrow_data_slv_addr_t; typedef logic[DATA_W-1:0] axi_narrow_data_slv_data_t; typedef logic[STRB_W-1:0] axi_narrow_data_slv_strb_t; typedef logic[AXI_NOC_ID_W-1:0] axi_narrow_data_slv_id_t; - typedef logic[AXI_NOC_U_W-1:0] axi_narrow_data_slv_user_t; + typedef logic[iDMA_UserWidth-1:0] axi_narrow_data_slv_user_t; + `AXI_TYPEDEF_ALL_CT(axi_narrow_data_slv, axi_narrow_data_slv_req_t, axi_narrow_data_slv_rsp_t, axi_narrow_data_slv_addr_t, axi_narrow_data_slv_id_t, axi_narrow_data_slv_data_t, axi_narrow_data_slv_strb_t, axi_narrow_data_slv_user_t) typedef logic[ADDR_W-1:0] axi_wide_data_mst_addr_t; @@ -135,11 +216,55 @@ package magia_noc_pkg; typedef logic[iDMA_UserWidth-1:0] axi_wide_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_slv, axi_wide_data_slv_req_t, axi_wide_data_slv_rsp_t, axi_wide_data_slv_addr_t, axi_wide_data_slv_id_t, axi_wide_data_slv_data_t, axi_wide_data_slv_strb_t, axi_wide_data_slv_user_t) - `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t) + + //********** COLLECTIVE AXI STRUCTS **********// + typedef logic[ADDR_W-1:0] collective_axi_narrow_data_mst_addr_t; + typedef logic[DATA_W-1:0] collective_axi_narrow_data_mst_data_t; + typedef logic[STRB_W-1:0] collective_axi_narrow_data_mst_strb_t; + typedef logic[L2_ID_W-1:0] collective_axi_narrow_data_mst_id_t; + typedef struct packed { + logic [ADDR_W-1:0] collective_mask; + logic [COLLECTIVE_OP_W-1:0] collective_op; + } collective_axi_narrow_data_mst_user_t; + `AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_mst, collective_axi_narrow_data_mst_req_t, collective_axi_narrow_data_mst_rsp_t, collective_axi_narrow_data_mst_addr_t, collective_axi_narrow_data_mst_id_t, collective_axi_narrow_data_mst_data_t, collective_axi_narrow_data_mst_strb_t, collective_axi_narrow_data_mst_user_t) + + typedef logic[ADDR_W-1:0] collective_axi_narrow_data_slv_addr_t; + typedef logic[DATA_W-1:0] collective_axi_narrow_data_slv_data_t; + typedef logic[STRB_W-1:0] collective_axi_narrow_data_slv_strb_t; + typedef logic[AXI_NOC_ID_W-1:0] collective_axi_narrow_data_slv_id_t; + typedef struct packed { + logic [ADDR_W-1:0] collective_mask; + logic [COLLECTIVE_OP_W-1:0] collective_op; + } collective_axi_narrow_data_slv_user_t; + `AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_slv, collective_axi_narrow_data_slv_req_t, collective_axi_narrow_data_slv_rsp_t, collective_axi_narrow_data_slv_addr_t, collective_axi_narrow_data_slv_id_t, collective_axi_narrow_data_slv_data_t, collective_axi_narrow_data_slv_strb_t, collective_axi_narrow_data_slv_user_t) + + typedef logic[ADDR_W-1:0] collective_axi_wide_data_mst_addr_t; + typedef logic[WIDE_DATA_W-1:0] collective_axi_wide_data_mst_data_t; + typedef logic[WIDE_STRB_W-1:0] collective_axi_wide_data_mst_strb_t; + typedef logic[iDMA_AxiIdWidth-1:0] collective_axi_wide_data_mst_id_t; + typedef struct packed { + logic [ADDR_W-1:0] collective_mask; + logic [COLLECTIVE_OP_W-1:0] collective_op; + } collective_axi_wide_data_mst_user_t; + `AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_mst, collective_axi_wide_data_mst_req_t, collective_axi_wide_data_mst_rsp_t, collective_axi_wide_data_mst_addr_t, collective_axi_wide_data_mst_id_t, collective_axi_wide_data_mst_data_t, collective_axi_wide_data_mst_strb_t, collective_axi_wide_data_mst_user_t) + + typedef logic[ADDR_W-1:0] collective_axi_wide_data_slv_addr_t; + typedef logic[WIDE_DATA_W-1:0] collective_axi_wide_data_slv_data_t; + typedef logic[WIDE_STRB_W-1:0] collective_axi_wide_data_slv_strb_t; + typedef logic[iDMA_AxiIdWidth-1:0] collective_axi_wide_data_slv_id_t; + typedef struct packed { + logic [ADDR_W-1:0] collective_mask; + logic [COLLECTIVE_OP_W-1:0] collective_op; + } collective_axi_wide_data_slv_user_t; + `AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_slv, collective_axi_wide_data_slv_req_t, collective_axi_wide_data_slv_rsp_t, collective_axi_wide_data_slv_addr_t, collective_axi_wide_data_slv_id_t, collective_axi_wide_data_slv_data_t, collective_axi_wide_data_slv_strb_t, collective_axi_wide_data_slv_user_t) + + + + `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: ADDR_W, DataWidth: DATA_W, - UserWidth: AXI_U_W, + UserWidth: iDMA_UserWidth, InIdWidth: AXI_NOC_ID_W, OutIdWidth: L2_ID_W }; @@ -152,7 +277,6 @@ package magia_noc_pkg; }; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) - `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) endpackage \ No newline at end of file diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml index 374a86d0..0911ae7c 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml @@ -5,6 +5,9 @@ network_type: "narrow-wide" routing: route_algo: "XY" use_id_table: true + collective: + en_narrow_multicast: true + en_wide_multicast: true protocols: - name: "narrow_data_mst" @@ -13,28 +16,38 @@ protocols: data_width: 32 addr_width: 32 id_width: 3 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 + user: 5 - name: "narrow_data_slv" type: "narrow" protocol: "AXI4" data_width: 32 addr_width: 32 id_width: 6 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 + user: 5 - name: "wide_data_mst" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "wide_data_slv" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 endpoints: - name: "magia_tile" @@ -42,6 +55,7 @@ endpoints: addr_range: base: 0x0000_0000 size: 0x0010_0000 + en_collective: true mgr_port_protocol: - "narrow_data_slv" - "wide_data_slv" diff --git a/hw/tile/idma_obi_ctrl_decoder.sv b/hw/tile/idma_obi_ctrl_decoder.sv index 99396591..d6ecb0c8 100644 --- a/hw/tile/idma_obi_ctrl_decoder.sv +++ b/hw/tile/idma_obi_ctrl_decoder.sv @@ -67,6 +67,9 @@ module idma_obi_ctrl_decoder localparam logic [11:0] IDMA_DONE_ID_0_OFFSET = 12'h84; + localparam logic [11:0] IDMA_MULTICAST_MASK_OFFSET = 12'hc4; + localparam logic [11:0] IDMA_COLLECTIVE_SEL_OFFSET = 12'hc8; + localparam logic [11:0] IDMA_DST_ADDR_LOW_OFFSET = 12'hd0; localparam logic [11:0] IDMA_SRC_ADDR_LOW_OFFSET = 12'hd8; localparam logic [11:0] IDMA_LENGTH_LOW_OFFSET = 12'he0; @@ -119,7 +122,9 @@ module idma_obi_ctrl_decoder (reg_offset == IDMA_REPS_2_LOW_OFFSET) || (reg_offset == IDMA_DST_STRIDE_3_LOW_OFFSET) || (reg_offset == IDMA_SRC_STRIDE_3_LOW_OFFSET) || - (reg_offset == IDMA_REPS_3_LOW_OFFSET) + (reg_offset == IDMA_REPS_3_LOW_OFFSET) || + (reg_offset == IDMA_MULTICAST_MASK_OFFSET) || + (reg_offset == IDMA_COLLECTIVE_SEL_OFFSET) ); /*******************************************************/ diff --git a/hw/tile/magia_tile.sv b/hw/tile/magia_tile.sv index 29e97462..fee59da0 100644 --- a/hw/tile/magia_tile.sv +++ b/hw/tile/magia_tile.sv @@ -219,6 +219,7 @@ module magia_tile magia_tile_pkg::core_hci_data_rsp_t core_l1_data_rsp; magia_tile_pkg::core_axi_data_req_t core_l2_data_req; + magia_tile_pkg::core_axi_data_req_t core_l2_data_req_unfiltered; magia_tile_pkg::core_axi_data_rsp_t core_l2_data_rsp; magia_tile_pkg::core_instr_req_t core_instr_req; @@ -576,7 +577,7 @@ module magia_tile assign en_default_mst_port = '1; - assign floo_id = '{x: (x_id_i+1), y: y_id_i, port_id: 0}; + assign floo_id = '{x: x_id_i, y: y_id_i, port_id: 0}; assign hci_clear = 1'b0; assign hci_ctrl = '0; @@ -684,7 +685,7 @@ module magia_tile .obi_req_i ( core_mem_data_req[magia_tile_pkg::OBI_XBAR_L2_IDX] ), .obi_rsp_o ( core_mem_data_rsp[magia_tile_pkg::OBI_XBAR_L2_IDX] ), .user_i ( axi_data_user ), - .axi_req_o ( core_l2_data_req ), + .axi_req_o ( core_l2_data_req_unfiltered ), .axi_rsp_i ( core_l2_data_rsp ), .axi_rsp_channel_sel ( ), .axi_rsp_b_user_o ( ), @@ -692,6 +693,13 @@ module magia_tile .obi_rsp_user_i ( obi_rsp_data_user ) ); + + mcast_gen i_mcast_gen ( + .data_req_i ( core_l2_data_req_unfiltered ), + .data_req_o ( core_l2_data_req ) + ); + + instr2cache_req i_core_instr2cache_req ( .instr_req_i ( core_instr_req ), .cache_req_o ( core_cache_instr_req ) @@ -1657,19 +1665,21 @@ module magia_tile /*******************************************************/ floo_nw_router #( - .AxiCfgN ( AxiCfgN ), - .AxiCfgW ( AxiCfgW ), - .RouteAlgo ( XYRouting ), - .NumRoutes ( 5 ), - .NumInputs ( 5 ), - .NumOutputs ( 5 ), - .InFifoDepth ( 2 ), - .OutFifoDepth ( 2 ), - .id_t ( id_t ), - .hdr_t ( hdr_t ), - .floo_req_t ( floo_req_t ), - .floo_rsp_t ( floo_rsp_t ), - .floo_wide_t ( floo_wide_t ) + .AxiCfgN ( AxiCfgN ), + .AxiCfgW ( AxiCfgW ), + .RouteAlgo ( XYRouting ), + .NumRoutes ( 5 ), + .NumInputs ( 5 ), + .NumOutputs ( 5 ), + .InFifoDepth ( 2 ), + .OutFifoDepth ( 2 ), + .NoLoopback ( 1'b0 ), + .CollectiveCfg( RouteCfg.CollectiveCfg ), + .id_t ( id_t ), + .hdr_t ( hdr_t ), + .floo_req_t ( floo_req_t ), + .floo_rsp_t ( floo_rsp_t ), + .floo_wide_t ( floo_wide_t ) ) i_magia_tile_router ( .clk_i ( sys_clk ), .rst_ni ( rst_ni ), @@ -1727,16 +1737,20 @@ module magia_tile .id_t ( id_t ), .rob_idx_t ( rob_idx_t ), .hdr_t ( hdr_t ), - .sam_rule_t ( sam_rule_t ), - .Sam ( Sam ), - .axi_narrow_in_req_t ( axi_narrow_data_slv_req_t ), - .axi_narrow_in_rsp_t ( axi_narrow_data_slv_rsp_t ), - .axi_narrow_out_req_t ( axi_narrow_data_mst_req_t ), - .axi_narrow_out_rsp_t ( axi_narrow_data_mst_rsp_t ), - .axi_wide_in_req_t ( axi_wide_data_slv_req_t ), - .axi_wide_in_rsp_t ( axi_wide_data_slv_rsp_t ), - .axi_wide_out_req_t ( axi_wide_data_mst_req_t ), - .axi_wide_out_rsp_t ( axi_wide_data_mst_rsp_t ), + .sam_rule_t ( collective_sam_rule_t ), + .sam_idx_t ( collective_idx_t ), + .mask_sel_t ( collective_mask_sel_t ), + .Sam ( CollectiveSam ), + .user_wide_struct_t ( collective_axi_wide_data_slv_user_t ), + .user_narrow_struct_t ( collective_axi_narrow_data_slv_user_t ), + .axi_narrow_in_req_t ( collective_axi_narrow_data_slv_req_t ), + .axi_narrow_in_rsp_t ( collective_axi_narrow_data_slv_rsp_t ), + .axi_narrow_out_req_t ( collective_axi_narrow_data_mst_req_t ), + .axi_narrow_out_rsp_t ( collective_axi_narrow_data_mst_rsp_t ), + .axi_wide_in_req_t ( collective_axi_wide_data_slv_req_t ), + .axi_wide_in_rsp_t ( collective_axi_wide_data_slv_rsp_t ), + .axi_wide_out_req_t ( collective_axi_wide_data_mst_req_t ), + .axi_wide_out_rsp_t ( collective_axi_wide_data_mst_rsp_t ), .floo_req_t ( floo_req_t ), .floo_rsp_t ( floo_rsp_t ), .floo_wide_t ( floo_wide_t ) diff --git a/hw/tile/magia_tile_pkg.sv b/hw/tile/magia_tile_pkg.sv index 34d47b1a..f0f27525 100644 --- a/hw/tile/magia_tile_pkg.sv +++ b/hw/tile/magia_tile_pkg.sv @@ -338,7 +338,7 @@ package magia_tile_pkg; localparam int unsigned NumDim = iDMA_NumDims; // Needed by the iDMA typedef (wtf?) parameter int unsigned iDMA_DataWidth = magia_pkg::WIDE_DATA_W; // iDMA Data Width parameter int unsigned iDMA_AddrWidth = magia_pkg::ADDR_W; // iDMA Address Width - parameter int unsigned iDMA_UserWidth = AXI_DATA_U_W; // iDMA AXI User Width + parameter int unsigned iDMA_UserWidth = magia_pkg::USR_W; // iDMA AXI User Width parameter int unsigned iDMA_StrbWidth = magia_pkg::WIDE_STRB_W; // iDMA AXI Strobe Width parameter int unsigned iDMA_AxiIdWidth = AXI_DATA_ID_W; // iDMA AXI ID Width parameter int unsigned iDMA_NumAxInFlight = 16; // iDMA Number of transaction that can be in-flight concurrently @@ -621,11 +621,16 @@ package magia_tile_pkg; `REG_BUS_TYPEDEF_ALL(reg_dma, logic[magia_pkg::ADDR_W-1:0], logic[magia_pkg::DATA_W-1:0], logic[magia_pkg::STRB_W-1:0]) `REG_BUS_TYPEDEF_ALL(idma_fe_reg, logic[magia_pkg::ADDR_W-1:0], logic[magia_pkg::DATA_W-1:0], logic[magia_pkg::STRB_W-1:0]) - `IDMA_TYPEDEF_FULL_REQ_T(idma_be_req_t, logic[iDMA_AxiIdWidth-1:0], idma_addr_t, logic[iDMA_TFLenWidth-1:0]) + `IDMA_TYPEDEF_FULL_REQ_T(idma_be_req_t, logic[iDMA_AxiIdWidth-1:0], idma_addr_t, logic[iDMA_TFLenWidth-1:0], logic[35:0]) `IDMA_TYPEDEF_FULL_RSP_T(idma_be_rsp_t, idma_addr_t) `IDMA_TYPEDEF_FULL_ND_REQ_T(idma_nd_req_t, idma_be_req_t, logic[iDMA_RepWidth-1:0], logic[iDMA_StrideWidth-1:0]) - `AXI_TYPEDEF_ALL_CT(idma_axi, idma_axi_req_t, idma_axi_rsp_t, logic[iDMA_AddrWidth-1:0], logic[iDMA_AxiIdWidth-1:0], logic[iDMA_DataWidth-1:0], logic[iDMA_StrbWidth-1:0], logic[iDMA_UserWidth-1:0]) + typedef struct packed { + logic [magia_pkg::ADDR_W-1:0] collective_mask; + logic [3:0] collective_op; + } axi_wide_data_slv_user_t; + + `AXI_TYPEDEF_ALL_CT(idma_axi, idma_axi_req_t, idma_axi_rsp_t, logic[iDMA_AddrWidth-1:0], logic[iDMA_AxiIdWidth-1:0], logic[iDMA_DataWidth-1:0], logic[iDMA_StrbWidth-1:0], axi_wide_data_slv_user_t) localparam obi_pkg::obi_optional_cfg_t obi_idma_optional_cfg = obi_pkg::obi_all_optional_config(AUSER_WIDTH, WUSER_WIDTH, RUSER_WIDTH, MID_WIDTH, ACHK_WIDTH, RCHK_WIDTH); localparam obi_pkg::obi_cfg_t obi_idma_cfg = obi_pkg::obi_default_cfg(iDMA_AddrWidth, iDMA_DataWidth, iDMA_AxiIdWidth, obi_idma_optional_cfg); diff --git a/hw/tile/mcast_gen.sv b/hw/tile/mcast_gen.sv new file mode 100644 index 00000000..f99e6d12 --- /dev/null +++ b/hw/tile/mcast_gen.sv @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2023-2024 ETH Zurich and University of Bologna + * + * Licensed under the Solderpad Hardware License, Version 0.51 + * (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: SHL-0.51 + * Authors: Carlotta Chiarini + + * Mcast Generator + + * This module sets up the user field for a broadcast operation. + * If the MSB is B, the transaction is recognized as a broadcast operation. + */ + +module mcast_gen + import magia_noc_pkg::*; +( + input magia_tile_pkg::core_axi_data_req_t data_req_i, + output magia_tile_pkg::core_axi_data_req_t data_req_o +); + + +// w chan +assign data_req_o.w = data_req_i.w; +assign data_req_o.w_valid = data_req_i.w_valid; +assign data_req_o.b_ready = data_req_i.b_ready; + +// ar chan +assign data_req_o.ar = data_req_i.ar; +assign data_req_o.ar_valid = data_req_i.ar_valid; +assign data_req_o.r_ready = data_req_i.r_ready; + +// aw chan +assign data_req_o.aw_valid = data_req_i.aw_valid; +assign data_req_o.aw.id = data_req_i.aw.id; +assign data_req_o.aw.addr = (data_req_i.aw.addr[31:28] == 4'hb) ? (data_req_i.aw.addr & 32'h0FFFFFFF) : data_req_i.aw.addr; +assign data_req_o.aw.len = data_req_i.aw.len; +assign data_req_o.aw.size = data_req_i.aw.size; +assign data_req_o.aw.burst = data_req_i.aw.burst; +assign data_req_o.aw.lock = data_req_i.aw.lock; +assign data_req_o.aw.cache = data_req_i.aw.cache; +assign data_req_o.aw.prot = data_req_i.aw.prot; +assign data_req_o.aw.qos = data_req_i.aw.qos; +assign data_req_o.aw.region = data_req_i.aw.region; +assign data_req_o.aw.atop = data_req_i.aw.atop; +assign data_req_o.aw.user = (data_req_i.aw.addr[31:28] == 4'hb) ? {magia_noc_pkg::BroadcastMask, magia_noc_pkg::CollectiveOp} : '0; + +endmodule: mcast_gen \ No newline at end of file diff --git a/sw/utils/idma_mm_utils.h b/sw/utils/idma_mm_utils.h index 31b6aa28..fecf92db 100644 --- a/sw/utils/idma_mm_utils.h +++ b/sw/utils/idma_mm_utils.h @@ -35,19 +35,21 @@ #define IDMA_MM_BASE_AXI2OBI (IDMA_BASE) // direction=0, L2 to L1 #define IDMA_MM_BASE_OBI2AXI (IDMA_BASE + IDMA_MM_DIRECTION_OFFSET) // direction=1, L1 to L2 -#define IDMA_CONF_OFFSET (0x00) -#define IDMA_STATUS_OFFSET (0x04) -#define IDMA_NEXT_ID_OFFSET (0x44) -#define IDMA_DONE_ID_OFFSET (0x84) -#define IDMA_DST_ADDR_LOW_OFFSET (0xD0) -#define IDMA_SRC_ADDR_LOW_OFFSET (0xD8) -#define IDMA_LENGTH_LOW_OFFSET (0xE0) -#define IDMA_DST_STRIDE_2_LOW_OFFSET (0xE8) -#define IDMA_SRC_STRIDE_2_LOW_OFFSET (0xF0) -#define IDMA_REPS_2_LOW_OFFSET (0xF8) -#define IDMA_DST_STRIDE_3_LOW_OFFSET (0x100) -#define IDMA_SRC_STRIDE_3_LOW_OFFSET (0x108) -#define IDMA_REPS_3_LOW_OFFSET (0x110) +#define IDMA_CONF_OFFSET (0x00) +#define IDMA_STATUS_OFFSET (0x04) +#define IDMA_NEXT_ID_OFFSET (0x44) +#define IDMA_DONE_ID_OFFSET (0x84) +#define IDMA_MULTICAST_MASK_OFFSET (0xc4) +#define IDMA_COLLECTIVE_SEL_OFFSET (0xc8) +#define IDMA_DST_ADDR_LOW_OFFSET (0xD0) +#define IDMA_SRC_ADDR_LOW_OFFSET (0xD8) +#define IDMA_LENGTH_LOW_OFFSET (0xE0) +#define IDMA_DST_STRIDE_2_LOW_OFFSET (0xE8) +#define IDMA_SRC_STRIDE_2_LOW_OFFSET (0xF0) +#define IDMA_REPS_2_LOW_OFFSET (0xF8) +#define IDMA_DST_STRIDE_3_LOW_OFFSET (0x100) +#define IDMA_SRC_STRIDE_3_LOW_OFFSET (0x108) +#define IDMA_REPS_3_LOW_OFFSET (0x110) // Register Addresses - now direction-aware #define IDMA_CONF_ADDR(is_l1_to_l2) ((is_l1_to_l2) ? (IDMA_MM_BASE_OBI2AXI + IDMA_CONF_OFFSET) : (IDMA_MM_BASE_AXI2OBI + IDMA_CONF_OFFSET)) @@ -63,6 +65,8 @@ #define IDMA_DST_STRIDE_3_LOW_ADDR(is_l1_to_l2) ((is_l1_to_l2) ? (IDMA_MM_BASE_OBI2AXI + IDMA_DST_STRIDE_3_LOW_OFFSET) : (IDMA_MM_BASE_AXI2OBI + IDMA_DST_STRIDE_3_LOW_OFFSET)) #define IDMA_SRC_STRIDE_3_LOW_ADDR(is_l1_to_l2) ((is_l1_to_l2) ? (IDMA_MM_BASE_OBI2AXI + IDMA_SRC_STRIDE_3_LOW_OFFSET) : (IDMA_MM_BASE_AXI2OBI + IDMA_SRC_STRIDE_3_LOW_OFFSET)) #define IDMA_REPS_3_LOW_ADDR(is_l1_to_l2) ((is_l1_to_l2) ? (IDMA_MM_BASE_OBI2AXI + IDMA_REPS_3_LOW_OFFSET) : (IDMA_MM_BASE_AXI2OBI + IDMA_REPS_3_LOW_OFFSET)) +#define IDMA_MULTICAST_MASK_ADDR(is_l1_to_l2) ((is_l1_to_l2) ? (IDMA_MM_BASE_OBI2AXI + IDMA_MULTICAST_MASK_OFFSET) : (IDMA_MM_BASE_AXI2OBI + IDMA_MULTICAST_MASK_OFFSET)) +#define IDMA_COLLECTIVE_SEL_ADDR(is_l1_to_l2) ((is_l1_to_l2) ? (IDMA_MM_BASE_OBI2AXI + IDMA_COLLECTIVE_SEL_OFFSET) : (IDMA_MM_BASE_AXI2OBI + IDMA_COLLECTIVE_SEL_OFFSET)) // Configuration Register Bit Fields #define IDMA_CONF_DECOUPLE_AW_BIT (0) @@ -149,6 +153,14 @@ static inline uint32_t idma_mm_start_transfer_dir(uint32_t is_l1_to_l2, uint32_t return transfer_id; } +static inline void idma_mm_set_multicast_mask(uint32_t is_l1_to_l2, uint32_t mask) { + mmio32(IDMA_MULTICAST_MASK_ADDR(is_l1_to_l2)) = mask; +} + +static inline void idma_mm_set_collective_sel(uint32_t is_l1_to_l2, uint32_t collective_op) { + mmio32(IDMA_COLLECTIVE_SEL_ADDR(is_l1_to_l2)) = collective_op; +} + static inline uint32_t idma_mm_get_done_id_dir(uint32_t is_l1_to_l2, uint32_t stream_id) { if (stream_id >= 16) return 0; return mmio32(IDMA_DONE_ID_ADDR(is_l1_to_l2, stream_id)); @@ -245,6 +257,16 @@ static inline int idma_L1ToL2(unsigned int src, unsigned int dst, unsigned short return idma_mm_start_transfer_dir(1, 0); } +static inline int broadcast(unsigned int src, unsigned int dst, unsigned short size, uint32_t mask, uint32_t collective_op) { + idma_mm_conf_default_dir(1); + idma_mm_set_addr_len_dir(1, dst, src, size); + idma_mm_set_2d_params_dir(1, 0, 0, 1); + idma_mm_set_3d_params_dir(1, 0, 0, 1); + idma_mm_set_multicast_mask(1, mask); + idma_mm_set_collective_sel(1, collective_op); + return idma_mm_start_transfer_dir(1, 0); +} + static inline int idma_L2ToL1(unsigned int src, unsigned int dst, unsigned short size) { idma_mm_conf_default_dir(0); idma_mm_set_addr_len_dir(0, dst, src, size); diff --git a/target/sim/src/mesh/magia_l2_mem_wrapper.sv b/target/sim/src/mesh/magia_l2_mem_wrapper.sv index 15ea4759..cdfec042 100644 --- a/target/sim/src/mesh/magia_l2_mem_wrapper.sv +++ b/target/sim/src/mesh/magia_l2_mem_wrapper.sv @@ -50,9 +50,9 @@ module magia_l2_mem_wrapper // AXI bus for L2 memory magia_pkg::axi_narrow_l2_req_t [NumPorts-1:0] l2_narrow_data_req; magia_pkg::axi_narrow_l2_rsp_t [NumPorts-1:0] l2_narrow_data_rsp; - magia_pkg::axi_wide_l2_req_t [NumPorts-1:0] l2_wide_data_req; - magia_pkg::axi_wide_l2_rsp_t [NumPorts-1:0] l2_wide_data_rsp; + collective_axi_wide_data_mst_req_t [NumPorts-1:0] l2_wide_data_req; + collective_axi_wide_data_mst_rsp_t [NumPorts-1:0] l2_wide_data_rsp; // AXI bus narrow channel upsized magia_pkg::axi_wide_l2_req_t [NumPorts-1:0] l2_upsize_data_req; magia_pkg::axi_wide_l2_rsp_t [NumPorts-1:0] l2_upsize_data_rsp; @@ -104,16 +104,20 @@ module magia_l2_mem_wrapper .id_t ( id_t ), .rob_idx_t ( rob_idx_t ), .hdr_t ( hdr_t ), - .sam_rule_t ( sam_rule_t ), - .Sam ( Sam ), + .sam_rule_t ( collective_sam_rule_t ), + .sam_idx_t ( collective_idx_t ), + .mask_sel_t ( collective_mask_sel_t ), + .Sam ( CollectiveSam ), .axi_narrow_in_req_t ( axi_narrow_data_slv_req_t ), .axi_narrow_in_rsp_t ( axi_narrow_data_slv_rsp_t ), .axi_narrow_out_req_t ( axi_narrow_data_mst_req_t ), .axi_narrow_out_rsp_t ( axi_narrow_data_mst_rsp_t ), - .axi_wide_in_req_t ( axi_wide_data_slv_req_t ), - .axi_wide_in_rsp_t ( axi_wide_data_slv_rsp_t ), - .axi_wide_out_req_t ( axi_wide_data_mst_req_t ), - .axi_wide_out_rsp_t ( axi_wide_data_mst_rsp_t ), + .user_narrow_struct_t ( collective_axi_narrow_data_slv_user_t ), + .axi_wide_in_req_t ( collective_axi_wide_data_slv_req_t ), + .axi_wide_in_rsp_t ( collective_axi_wide_data_slv_rsp_t ), + .axi_wide_out_req_t ( collective_axi_wide_data_mst_req_t ), + .axi_wide_out_rsp_t ( collective_axi_wide_data_mst_rsp_t ), + .user_wide_struct_t ( collective_axi_wide_data_slv_user_t ), .floo_req_t ( floo_req_t ), .floo_rsp_t ( floo_rsp_t ), .floo_wide_t ( floo_wide_t ) From 85e68d9cca7585f2bb7c7747fff4ee0a6fde9df1 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Mon, 22 Jun 2026 10:12:00 +0200 Subject: [PATCH 05/26] Minor changes: the mhartid ordering is now following the floonoc_id ordering; the registers are now initialized --- sw/utils/magia_utils.h | 6 +++--- target/sim/src/mesh/magia_vip.sv | 11 +++++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/sw/utils/magia_utils.h b/sw/utils/magia_utils.h index 7f1c4843..e59a9f99 100644 --- a/sw/utils/magia_utils.h +++ b/sw/utils/magia_utils.h @@ -34,9 +34,9 @@ #define MESH_X_TILES (4) #define NUM_HARTS (MESH_Y_TILES*MESH_X_TILES) -#define GET_Y_ID(mhartid) ((mhartid)/MESH_X_TILES) -#define GET_X_ID(mhartid) ((mhartid)%MESH_X_TILES) -#define GET_ID(y_id, x_id) (((y_id)*MESH_X_TILES)+(x_id)) +#define GET_Y_ID(mhartid) ((mhartid)/MESH_Y_TILES) +#define GET_X_ID(mhartid) ((mhartid)%MESH_Y_TILES) +#define GET_ID(y_id, x_id) (((x_id)*MESH_X_TILES)+(y_id)) #define h_pprintf(x) (h_psprint(get_hartid(), x)) #define n_pprintf(x) (n_psprint(get_hartid(), x)) diff --git a/target/sim/src/mesh/magia_vip.sv b/target/sim/src/mesh/magia_vip.sv index d67dd631..c79eb264 100644 --- a/target/sim/src/mesh/magia_vip.sv +++ b/target/sim/src/mesh/magia_vip.sv @@ -251,12 +251,11 @@ module magia_vip end for (int k = 0; k < 2**magia_tb_pkg::L2_ID_W; k++) begin if (print_line[k] == 1'b1) begin - $write("[mhartid %0d] ", i*magia_tb_pkg::N_TILES_X+j); - for (int ch_idx = 0; ch_idx < chars.size(); ch_idx++) begin - if (chars[ch_idx].id == k) begin - $write("%c", chars[ch_idx].data); - chars.delete(ch_idx); - ch_idx--; + $write("[mhartid %0d] ", j*magia_tb_pkg::N_TILES_Y+i); + for (int j = 0; j < chars.size(); j++) begin + if (chars[j].id == k) begin + $write("%c", chars[j].data); + chars.delete(j--); end end print_line[k] = 1'b0; From fb5a690ebde623692dbdc8901d73e5024a6cebb5 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Thu, 25 Jun 2026 14:19:05 +0200 Subject: [PATCH 06/26] [WIP] Add support for configuring a broadcast or reduction operation (narrow channel) via software --- Bender.yml | 3 +- hw/mesh/magia_pkg.sv | 4 +- hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv | 2 +- hw/mesh/noc/magia_noc_pkg.sv | 2 +- hw/tile/{mcast_gen.sv => collective_gen.sv} | 20 ++- hw/tile/magia_tile.sv | 34 +++-- hw/tile/magia_tile_pkg.sv | 6 +- hw/tile/obi_slave_ctrl_coll.sv | 139 ++++++++++++++++++++ hw/tile/tile_csr.sv | 32 ++++- sw/tests/mm_tests/idma_broadcast_mm.c | 104 +++++++++++++++ sw/tests/mm_tests/narrow_broadcast_mm.c | 56 ++++++++ sw/tests/mm_tests/narrow_reduction_mm.c | 42 ++++++ sw/utils/magia_coll_utils.h | 55 ++++++++ sw/utils/magia_tile_utils.h | 6 +- 14 files changed, 470 insertions(+), 35 deletions(-) rename hw/tile/{mcast_gen.sv => collective_gen.sv} (73%) create mode 100644 hw/tile/obi_slave_ctrl_coll.sv create mode 100644 sw/tests/mm_tests/idma_broadcast_mm.c create mode 100644 sw/tests/mm_tests/narrow_broadcast_mm.c create mode 100644 sw/tests/mm_tests/narrow_reduction_mm.c create mode 100644 sw/utils/magia_coll_utils.h diff --git a/Bender.yml b/Bender.yml index f94144d8..3056d035 100644 --- a/Bender.yml +++ b/Bender.yml @@ -99,7 +99,8 @@ sources: - hw/tile/eu_direct_cut.sv - hw/tile/magia_tile_icache_wrap.sv - hw/tile/magia_redmule_wrap.sv - - hw/tile/mcast_gen.sv + - hw/tile/collective_gen.sv + - hw/tile/obi_slave_ctrl_coll.sv - hw/tile/magia_tile.sv # MAGIA DV - target/sim/src/tile/magia_tile_tb_pkg.sv diff --git a/hw/mesh/magia_pkg.sv b/hw/mesh/magia_pkg.sv index c90d63c9..06a8bf6f 100644 --- a/hw/mesh/magia_pkg.sv +++ b/hw/mesh/magia_pkg.sv @@ -36,8 +36,8 @@ package magia_pkg; localparam int unsigned WIDE_STRB_W = WIDE_DATA_W/BYTE_W; // System-wide wide communication strobe Width localparam int unsigned N_MEM_BANKS = 32; // Number of TCDM banks (1 extra bank for missaligned accesses) localparam int unsigned N_WORDS_BANK = 8192; // Number of words per TCDM bank - localparam int unsigned N_TILES_Y = 2; // Number of Tile rowns - localparam int unsigned N_TILES_X = 2; // Number of Tile columns + localparam int unsigned N_TILES_Y = 4; // Number of Tile rowns + localparam int unsigned N_TILES_X = 4; // Number of Tile columns localparam int unsigned N_TILES = N_TILES_Y*N_TILES_X; // Number of Tiles in the Mesh localparam int unsigned N_IRQ = 32; // Number of IRQs localparam int unsigned IRQ_ID_W = $clog2(N_IRQ); // IRQ ID Width diff --git a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv index 43c5ba04..130c9346 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv @@ -312,7 +312,7 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ NumRoutes: 0, CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, - EnLsbAnd: 1'b0, + EnLsbAnd: 1'b1, EnFpAdd: 1'b0, EnFpMul: 1'b0, EnFpMin: 1'b0, diff --git a/hw/mesh/noc/magia_noc_pkg.sv b/hw/mesh/noc/magia_noc_pkg.sv index 68e3d665..00533c76 100644 --- a/hw/mesh/noc/magia_noc_pkg.sv +++ b/hw/mesh/noc/magia_noc_pkg.sv @@ -183,7 +183,7 @@ package magia_noc_pkg; // Actual declaration of the Broadcast Mask localparam logic[31:0] BroadcastMask = gen_broadcast_mask(N_TILES); - localparam logic[3:0] CollectiveOp = 4'b0001; // 0x0 Unicast; 0x1 Multicast; 0x2 Barrier + localparam logic[3:0] CollectiveOp = 4'b0010; // 0x0 Unicast; 0x1 Multicast; 0x2 Barrier //********** STANDARD AXI STRUCTS **********// typedef logic[ADDR_W-1:0] axi_narrow_data_mst_addr_t; diff --git a/hw/tile/mcast_gen.sv b/hw/tile/collective_gen.sv similarity index 73% rename from hw/tile/mcast_gen.sv rename to hw/tile/collective_gen.sv index f99e6d12..c5b8fc0d 100644 --- a/hw/tile/mcast_gen.sv +++ b/hw/tile/collective_gen.sv @@ -17,15 +17,21 @@ * Mcast Generator - * This module sets up the user field for a broadcast operation. - * If the MSB is B, the transaction is recognized as a broadcast operation. + * This module sets up the user field for a collective operation. + * If the MSB is B, the transaction is recognized as a collective operation. + * Currently the only the Broadcast (coll_op = 0x0) and LsbAnd (coll_op = 0x1) reduce are supported. + * The collective_mask is used to identify the tiles that take part to the collective operation. */ -module mcast_gen +module collective_gen import magia_noc_pkg::*; ( - input magia_tile_pkg::core_axi_data_req_t data_req_i, - output magia_tile_pkg::core_axi_data_req_t data_req_o + input clk_i, + input rst_ni, + input logic[31:0] collective_mask_i; + output logic[3:0] collective_op_i; + input magia_pkg::axi_xbar_mst_req_t data_req_i, + output magia_pkg::axi_xbar_mst_req_t data_req_o ); @@ -52,6 +58,6 @@ assign data_req_o.aw.prot = data_req_i.aw.prot; assign data_req_o.aw.qos = data_req_i.aw.qos; assign data_req_o.aw.region = data_req_i.aw.region; assign data_req_o.aw.atop = data_req_i.aw.atop; -assign data_req_o.aw.user = (data_req_i.aw.addr[31:28] == 4'hb) ? {magia_noc_pkg::BroadcastMask, magia_noc_pkg::CollectiveOp} : '0; +assign data_req_o.aw.user = (data_req_i.aw.addr[31:28] == 4'hb) ? {collective_mask_i, collective_op_i} : '0; -endmodule: mcast_gen \ No newline at end of file +endmodule: collective_gen \ No newline at end of file diff --git a/hw/tile/magia_tile.sv b/hw/tile/magia_tile.sv index fee59da0..bce07acc 100644 --- a/hw/tile/magia_tile.sv +++ b/hw/tile/magia_tile.sv @@ -219,7 +219,6 @@ module magia_tile magia_tile_pkg::core_hci_data_rsp_t core_l1_data_rsp; magia_tile_pkg::core_axi_data_req_t core_l2_data_req; - magia_tile_pkg::core_axi_data_req_t core_l2_data_req_unfiltered; magia_tile_pkg::core_axi_data_rsp_t core_l2_data_rsp; magia_tile_pkg::core_instr_req_t core_instr_req; @@ -279,6 +278,8 @@ module magia_tile magia_pkg::axi_xbar_mst_req_t[magia_tile_pkg::AxiXbarNoMstPorts-1:0] axi_xbar_mst_req; // Index 0 -> ext, Index 1 -> OBI XBAR, Index 2 -> Spatz bootrom magia_pkg::axi_xbar_mst_rsp_t[magia_tile_pkg::AxiXbarNoMstPorts-1:0] axi_xbar_mst_rsp; // Index 0 -> ext, Index 1 -> OBI XBAR, Index 2 -> Spatz bootrom + magia_pkg::axi_xbar_mst_req_t collective_filter; + logic[magia_tile_pkg::axi_xbar_cfg.NoSlvPorts-1:0] en_default_mst_port; logic hci_clear; // Can be used to manage HCI clear at top-level @@ -453,9 +454,12 @@ module magia_tile magia_tile_pkg::core_axi_instr_rsp_t spatz_icache_axi_rsp; logic spatz_start; logic spatz_done; - logic spatz_clk_en; - logic spatz_clk; + logic spatz_clk_en; + logic spatz_clk; + // Collective signals + logic[31:0] collective_mask; + logic[3:0] collective_op; // Cluster signals logic [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_clk; @@ -685,7 +689,7 @@ module magia_tile .obi_req_i ( core_mem_data_req[magia_tile_pkg::OBI_XBAR_L2_IDX] ), .obi_rsp_o ( core_mem_data_rsp[magia_tile_pkg::OBI_XBAR_L2_IDX] ), .user_i ( axi_data_user ), - .axi_req_o ( core_l2_data_req_unfiltered ), + .axi_req_o ( core_l2_data_req ), .axi_rsp_i ( core_l2_data_rsp ), .axi_rsp_channel_sel ( ), .axi_rsp_b_user_o ( ), @@ -693,13 +697,6 @@ module magia_tile .obi_rsp_user_i ( obi_rsp_data_user ) ); - - mcast_gen i_mcast_gen ( - .data_req_i ( core_l2_data_req_unfiltered ), - .data_req_o ( core_l2_data_req ) - ); - - instr2cache_req i_core_instr2cache_req ( .instr_req_i ( core_instr_req ), .cache_req_o ( core_cache_instr_req ) @@ -1728,6 +1725,15 @@ module magia_tile assign noc_west_rsp_o = floo_router_rsp_out[3]; assign floo_router_wide_in[3] = noc_west_wide_i; + collective_gen i_coll_gen ( + .clk_i ( sys_clk ), + .rst_ni ( rst_ni ), + .collective_mask_i ( collective_mask ), + .collective_op_i ( collective_op ), + .data_req_i ( axi_xbar_mst_req[magia_tile_pkg::AXI_MST_EXT_IDX] ), + .data_req_o ( collective_filter ) + ); + floo_nw_chimney #( .AxiCfgN ( AxiCfgN ), .AxiCfgW ( AxiCfgW ), @@ -1759,7 +1765,7 @@ module magia_tile .rst_ni ( rst_ni ), .test_enable_i ( test_mode_i ), .sram_cfg_i ( '0 ), - .axi_narrow_in_req_i ( axi_xbar_mst_req[magia_tile_pkg::AXI_MST_EXT_IDX] ), + .axi_narrow_in_req_i ( collective_filter ), .axi_narrow_in_rsp_o ( axi_xbar_mst_rsp[magia_tile_pkg::AXI_MST_EXT_IDX] ), .axi_narrow_out_req_o ( axi_xbar_slv_req[magia_tile_pkg::AXI_SLV_EXT_IDX] ), .axi_narrow_out_rsp_i ( axi_xbar_slv_rsp[magia_tile_pkg::AXI_SLV_EXT_IDX] ), @@ -1907,7 +1913,7 @@ module magia_tile */ tile_csr #( - .BaseAddr ( magia_tile_pkg::TILE_CSR_START ) + .BaseAddr ( magia_tile_pkg::TILE_CSR_START ) ) i_tile_csr ( .clk_i ( sys_clk ), .rst_ni ( rst_ni ), @@ -1916,6 +1922,8 @@ module magia_tile .spatz_clk_en_o ( spatz_clk_en ), .spatz_start_o ( spatz_start ), .spatz_done_o ( spatz_done ), + .collective_mask_o ( collective_mask ), + .collective_op_o ( collective_op ), .cluster_clk_en_o ( cluster_clk_en ), .cluster_boot_addr_o ( cluster_boot_addr ), .cluster_fetch_en_o ( cluster_fetch_enable ), diff --git a/hw/tile/magia_tile_pkg.sv b/hw/tile/magia_tile_pkg.sv index f0f27525..b2209015 100644 --- a/hw/tile/magia_tile_pkg.sv +++ b/hw/tile/magia_tile_pkg.sv @@ -68,7 +68,7 @@ package magia_tile_pkg; localparam logic [magia_pkg::ADDR_W-1:0] TILE_CSR_END = TILE_CSR_START + TILE_CSR_SIZE; localparam logic [magia_pkg::ADDR_W-1:0] RESERVED_ADDR_START = TILE_CSR_END; localparam logic [magia_pkg::ADDR_W-1:0] RESERVED_SIZE = 32'h0000_E800; - localparam logic [magia_pkg::ADDR_W-1:0] RESERVED_ADDR_END = RESERVED_ADDR_START + RESERVED_SIZE; + localparam logic [magia_pkg::ADDR_W-1:0] RESERVED_ADDR_END = 32'h0000_FFFF; localparam logic [magia_pkg::ADDR_W-1:0] STACK_ADDR_START = RESERVED_ADDR_END; localparam logic [magia_pkg::ADDR_W-1:0] STACK_SIZE = 32'h0001_0000; localparam logic [magia_pkg::ADDR_W-1:0] STACK_ADDR_END = STACK_ADDR_START + STACK_SIZE; @@ -76,8 +76,8 @@ package magia_tile_pkg; localparam logic [magia_pkg::ADDR_W-1:0] L1_SIZE = 32'h000E_0000; localparam logic [magia_pkg::ADDR_W-1:0] L1_ADDR_END = L1_ADDR_START + L1_SIZE; localparam logic [magia_pkg::ADDR_W-1:0] L1_TILE_OFFSET = 32'h0010_0000; - localparam logic [magia_pkg::ADDR_W-1:0] L2_ADDR_START = 32'hC000_0000; - localparam logic [magia_pkg::ADDR_W-1:0] L2_SIZE = 32'h4000_0000; + localparam logic [magia_pkg::ADDR_W-1:0] L2_ADDR_START = 32'hB000_0000; + localparam logic [magia_pkg::ADDR_W-1:0] L2_SIZE = 32'h5000_0000; localparam logic [magia_pkg::ADDR_W-1:0] L2_ADDR_END = L2_ADDR_START + L2_SIZE; // Instruction region for Spatz code (cacheable region) diff --git a/hw/tile/obi_slave_ctrl_coll.sv b/hw/tile/obi_slave_ctrl_coll.sv new file mode 100644 index 00000000..914012c2 --- /dev/null +++ b/hw/tile/obi_slave_ctrl_coll.sv @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Solderpad Hardware License, Version 0.51 + * (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: SHL-0.51 + * + * Authors: Carlotta Chiarini + * based on obi_slave_ctrl_spatz by Luca Balboni + * + * OBI Slave Control Registers for the Collective Generator module + * + */ + +module obi_slave_ctrl_coll + import magia_tile_pkg::*; +#( + parameter logic [31:0] BaseAddr = 32'h00001800 // Base address for control registers +) ( + input logic clk_i, + input logic rst_ni, + + // OBI slave interface + input core_obi_data_req_t obi_req_i, + output core_obi_data_rsp_t obi_rsp_o, + + // Control outputs + output logic[31:0] collective_mask_o, + output logic[3:0] collective_op_o +); + + // Register offsets + localparam logic [3:0] COLLECTIVE_MASK_OFFSET = 4'h0; // +0x00 + localparam logic [3:0] COLLECTIVE_OP_OFFSET = 4'h4; // +0x04 + + // Registers + logic [31:0] collective_mask_q; + logic [3:0] collective_op_q; + + // Response pipeline + logic rvalid_q, rvalid_d; + logic [31:0] rdata_q, rdata_d; + + // Address decode (offset from base) + logic [4:0] addr_offset; + logic addr_valid; + + assign addr_offset = obi_req_i.a.addr[4:0]; + + // Check if address is in valid range + assign addr_valid = (obi_req_i.a.addr >= BaseAddr) && + (obi_req_i.a.addr < (BaseAddr + 8)); // 2 registers * 4 bytes + + // Grant only if address is valid + assign obi_rsp_o.gnt = obi_req_i.req && addr_valid; + assign obi_rsp_o.r.err = 1'b0; + + // ============================================ + // Register write logic (combinational) + // ============================================ + logic[31:0] collective_mask_d; + logic[3:0] collective_op_d; + + always_comb begin + // Default: keep current values + collective_mask_d = collective_mask_q; + collective_op_d = collective_op_q; + + // Update registers on write only if address is valid + if (obi_req_i.req && obi_req_i.a.we && addr_valid) begin + case (addr_offset) + COLLECTIVE_MASK_OFFSET: collective_mask_d = obi_req_i.a.wdata; + COLLECTIVE_OP_OFFSET: collective_op_d = obi_req_i.a.wdata[3:0]; + endcase + end + end + + // ============================================ + // Register sequential logic + // ============================================ + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + collective_mask_q <= 32'b0; + collective_op_q <= 4'b0; + end else begin + collective_mask_q <= collective_mask_d; + collective_op_q <= collective_op_d; + end + end + + // ============================================ + // OBI read response logic (combinational) + // ============================================ + always_comb begin + rdata_d = 32'h0; + rvalid_d = obi_req_i.req && addr_valid; + + if (obi_req_i.req && !obi_req_i.a.we && addr_valid) begin + case (addr_offset) + COLLECTIVE_MASK_OFFSET: rdata_d = collective_mask_q; + COLLECTIVE_OP_OFFSET: rdata_d = {28'h0, collective_op_q}; + default: rdata_d = 32'hDEADBEEF; + endcase + end + end + + // ============================================ + // OBI response sequential logic + // ============================================ + always_ff @(posedge clk_i or negedge rst_ni) begin + if (!rst_ni) begin + rvalid_q <= 1'b0; + rdata_q <= 32'h0; + end else begin + rvalid_q <= rvalid_d; + rdata_q <= rdata_d; + end + end + + // Output assignments + assign obi_rsp_o.rvalid = rvalid_q; + assign obi_rsp_o.r.rdata = rdata_q; + assign obi_rsp_o.r.rid = obi_req_i.a.aid; + assign obi_rsp_o.r.r_optional = '0; + + assign collective_mask_o = collective_mask_q; + assign collective_op_o = collective_op_q; + + +endmodule diff --git a/hw/tile/tile_csr.sv b/hw/tile/tile_csr.sv index 8fe512cd..713b3232 100644 --- a/hw/tile/tile_csr.sv +++ b/hw/tile/tile_csr.sv @@ -23,6 +23,7 @@ * Register map (offsets from BaseAddr): * 0x00–0x18 Spatz registers (handled by obi_slave_ctrl_spatz) * 0x40–0x44 PULP/Cluster regs (handled by obi_slave_ctrl_cluster) + * 0x100–0x104 Collective registers (handled by obi_slave_ctrl_coll) */ module tile_csr import magia_tile_pkg::*; @@ -42,6 +43,10 @@ module tile_csr output logic spatz_start_o, output logic spatz_done_o, + // Collective Control outputs + output logic[31:0] collective_mask_o, + output logic[3:0] collective_op_o, + // Cluster Control outputs output logic [magia_tile_pkg::N_CLUSTER_CORES-1:0] cluster_clk_en_o, output logic [31:0] cluster_boot_addr_o [magia_tile_pkg::N_CLUSTER_CORES-1:0], @@ -55,9 +60,10 @@ module tile_csr // Internal OBI signals for sub-modules // ============================================ core_obi_data_rsp_t spatz_obi_rsp; + core_obi_data_rsp_t collective_obi_rsp; core_obi_data_rsp_t cluster_obi_rsp; - // Both sub-modules receive the same OBI request. + // All the sub-modules receive the same OBI request. // Each checks addr_valid against its own BaseAddr/range, // so only one will grant at a time. @@ -76,6 +82,7 @@ module tile_csr .done_o ( spatz_done_o ) ); + // ============================================ // Cluster control registers (offset 0x40–0x44) // ============================================ @@ -93,16 +100,31 @@ module tile_csr .start_irq_o ( cluster_start_irq_o) ); + // ============================================ + // Collective control registers (offset 0x100–0x104) + // ============================================ + obi_slave_ctrl_coll #( + .BaseAddr ( BaseAddr + 32'h100) + ) i_collective_ctrl ( + .clk_i ( clk_i ), + .rst_ni ( rst_ni ), + .obi_req_i ( obi_req_i ), + .obi_rsp_o ( collective_obi_rsp ), + .collective_mask_o ( collective_mask_o ), + .collective_op_o ( collective_op_o ) + ); + + // ============================================ // OBI response mux // ============================================ // Non-overlapping address ranges guarantee at most one // sub-module grants/responds at a time. - assign obi_rsp_o.gnt = spatz_obi_rsp.gnt | cluster_obi_rsp.gnt; - assign obi_rsp_o.rvalid = spatz_obi_rsp.rvalid | cluster_obi_rsp.rvalid; - assign obi_rsp_o.r.rdata = spatz_obi_rsp.rvalid ? spatz_obi_rsp.r.rdata : cluster_obi_rsp.r.rdata; + assign obi_rsp_o.gnt = spatz_obi_rsp.gnt | collective_obi_rsp.gnt | cluster_obi_rsp.gnt; + assign obi_rsp_o.rvalid = spatz_obi_rsp.rvalid | collective_obi_rsp.rvalid | cluster_obi_rsp.rvalid; + assign obi_rsp_o.r.rdata = spatz_obi_rsp.rvalid ? spatz_obi_rsp.r.rdata : collective_obi_rsp.rvalid ? collective_obi_rsp.r.rdata : cluster_obi_rsp.r.rdata; assign obi_rsp_o.r.rid = '0; - assign obi_rsp_o.r.err = spatz_obi_rsp.r.err | cluster_obi_rsp.r.err; + assign obi_rsp_o.r.err = spatz_obi_rsp.r.err | collective_obi_rsp.r.err | cluster_obi_rsp.r.err; assign obi_rsp_o.r.r_optional = '0; endmodule \ No newline at end of file diff --git a/sw/tests/mm_tests/idma_broadcast_mm.c b/sw/tests/mm_tests/idma_broadcast_mm.c new file mode 100644 index 00000000..c4234675 --- /dev/null +++ b/sw/tests/mm_tests/idma_broadcast_mm.c @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2023-2024 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Luca Balboni + * Based on idma_test.c by Victor Isachi + * + * MAGIA Broscast test over iDMA using Memory-Mapped Control + */ +#include "magia_utils.h" +#include "magia_tile_utils.h" +#include "idma_mm_utils.h" + +#include "x_input.h" + +//#define X_BASE (L1_BASE + 0x00012048) +#define X_BASE (L1_BASE + 0x00112048) +#define Y_BASE (L1_BASE + 0x00016048) +#define Z_BASE (L2_BASE + 0x00001000) +#define W_BASE (L2_BASE + 0x00005000) + +#define M_SIZE (16) +#define N_SIZE (16) + +#define VERBOSE (0) + +#define WAIT_CYCLES (10) + +#define CONCURRENT + +#define MEM_OFFSET (0x1000) +#define MHARTID_OFFSET (0x00100000) + +int main(void) { + + uint32_t dst_addr; + uint32_t src_addr; + uint32_t broad_addr; + uint32_t len; + uint32_t mask; + uint32_t collective_op; + + if(get_hartid() == 0) { + + // ******** WRITING DATA TO L2 MEMORY ******** // + printf("Before writing data to memory...\n"); + for (int i = 0; i < M_SIZE*N_SIZE; i++) + mmio16(Z_BASE + 2*i) = x_inp[i]; + + dst_addr = (uint32_t)(X_BASE); + src_addr = (uint32_t)Z_BASE; + len = (uint32_t)(M_SIZE*N_SIZE*2); // 2 Bytes per element + broad_addr = (uint32_t)(X_BASE); + + // ******** MOVING DATA FROM L2 TO L1 TILE 0 MEMORY ******** // + #if VERBOSE > 10 + printf("dst_addr: 0x%8x (X_BASE)\n", dst_addr); + printf("src_addr: 0x%8x (Z_BASE)\n", src_addr); + printf("len: %0d\n", len); + #endif + + uint32_t transfer_id_0 = idma_L2ToL1(src_addr, dst_addr, len); + printf("iDMA moving data from L2 to L1...\n"); + + // Use polling to wait for completion + dma_wait(transfer_id_0); + + + // **************** BROADCASTING ************** // + if(NUM_HARTS==4) + mask = 0x00300000; + else if(NUM_HARTS==16) + mask = 0x00F00000; + else if(NUM_HARTS==64) + mask = 0x00F00000; + else if(NUM_HARTS==256) + mask = 0x00F00000; + else + mask = 0x00F00000; + + collective_op = 0x1; // 0x0 Unicast; 0x1 Multicast + uint32_t transfer_id_1 = broadcast(dst_addr, broad_addr, len, mask, collective_op); + printf("Broadcasting...\n"); + + // Use polling to wait for completion + dma_wait(transfer_id_1); + + printf("End of test...\n"); + + } + return 0; +} \ No newline at end of file diff --git a/sw/tests/mm_tests/narrow_broadcast_mm.c b/sw/tests/mm_tests/narrow_broadcast_mm.c new file mode 100644 index 00000000..3a921c46 --- /dev/null +++ b/sw/tests/mm_tests/narrow_broadcast_mm.c @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Carlotta Chiarini + * + * MAGIA Broadcast test over the narrow channel + */ + +#include "magia_utils.h" +#include "magia_coll_utils.h" + +#define MEM_OFFSET (0x1000) +#define END_OF_TEST_OFFSET (0x0) +#define END_PATTERN (0xCCAA) +#define BROADCAST_WORD (0x12345678) +#define SOURCE_HART_ID 3 + +int main() { + + set_collective_mask(gen_collective_mask()); + set_collective_op(BROADCAST); + + if(get_hartid() == SOURCE_HART_ID) { + + printf("Source of the broadcast\n"); + + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + L1_TILE_OFFSET + MEM_OFFSET) = (int) BROADCAST_WORD; + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + L1_TILE_OFFSET + END_OF_TEST_OFFSET) = (int) END_PATTERN; + + } else { + + printf("Destination of the broadcast\n"); + + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + + if(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) == BROADCAST_WORD) + printf("TEST PASSED\n"); + else + printf("ERROR: Expected 0x%x; Actual: 0x%x\n", BROADCAST_WORD, *(volatile int *)(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET)); + } + + return 0; +} diff --git a/sw/tests/mm_tests/narrow_reduction_mm.c b/sw/tests/mm_tests/narrow_reduction_mm.c new file mode 100644 index 00000000..36cf98ea --- /dev/null +++ b/sw/tests/mm_tests/narrow_reduction_mm.c @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Carlotta Chiarini + * + * MAGIA Reduction test over the narrow channel + */ + +#include "magia_utils.h" +#include "magia_coll_utils.h" + +#define MEM_OFFSET (0x1000) +#define DESTINATION_HART_ID 4 + +int main() { + + set_collective_mask(gen_collective_mask()); + set_collective_op(REDUCE); + + // Data to be reduced (LsbAND) + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; + + if(get_hartid() == DESTINATION_HART_ID){ + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != 3) {}; + printf("TEST PASSED\n"); + } + + return 0; +} diff --git a/sw/utils/magia_coll_utils.h b/sw/utils/magia_coll_utils.h new file mode 100644 index 00000000..762dcce5 --- /dev/null +++ b/sw/utils/magia_coll_utils.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Carlotta Chiarini + * + * Collective Utility Functions + */ +#ifndef MAGIA_COLL_UTILS_H +#define MAGIA_COLL_UTILS_H + +#include +#include "magia_utils.h" + +#define COLLECTIVE_MASK_OFFSET (COLL_CTRL_BASE + 0x00) +#define COLLECTIVE_OP_OFFSET (COLL_CTRL_BASE + 0x04) + +#define COLLECTIVE_ADDR_OFFSET (0xB0000000) + +#define MASK_OFFSET 20 + +#define BROADCAST 1 +#define REDUCE 2 + +#define mmio32(x) (*(volatile uint32_t *)(x)) + +static inline void set_collective_mask(uint32_t collective_mask) { + mmio32(COLLECTIVE_MASK_OFFSET) = collective_mask; +} + +static inline void set_collective_op(uint32_t collective_op) { + mmio32(COLLECTIVE_OP_OFFSET) = collective_op; +} + +// The collective mask is composed of an Y_FIELD starting from MASK_OFFSET, followed by an X_FIELD +static inline uint32_t gen_collective_mask() { + if(NUM_HARTS == 4) + return (1 << (MASK_OFFSET)) | (1 << (MASK_OFFSET + 1)); + else if (NUM_HARTS == 16) + return (3 << (MASK_OFFSET)) | (3 << (MASK_OFFSET + 2)); +} + +#endif diff --git a/sw/utils/magia_tile_utils.h b/sw/utils/magia_tile_utils.h index d2e15859..54b07c99 100644 --- a/sw/utils/magia_tile_utils.h +++ b/sw/utils/magia_tile_utils.h @@ -73,8 +73,10 @@ #define PULP_CTRL_END (0x000017FF) #define PULP_CORE_COUNT (8) #define PULP_HARTID_BASE (32) /* 2 * NUM_CLUSTERS (16) */ -#define RESERVED_START (0x00001800) -#define RESERVED_END (0x0000FFFF) +#define COLL_CTRL_BASE (0x00001800) +#define COLL_CTRL_END (0x000018FF) +#define RESERVED_START (0x00001900) +#define RESERVED_END (0x0000FFFF) #define STACK_START (0x00010000) #define STACK_END (0x0001FFFF) #define L1_BASE (0x00020000) From 5e56cb11e7e58e7da1d6c9c55fe50a40de55909e Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Fri, 3 Jul 2026 15:21:37 +0200 Subject: [PATCH 07/26] [HW] Add collective support to 8x8 and 16x16 networks --- hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv | 2778 ++++++++++++++++++++- hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv | 810 +++++- hw/mesh/noc/magia_noc_pkg.sv | 36 +- 3 files changed, 3564 insertions(+), 60 deletions(-) diff --git a/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv index b7254bbb..c100ec1a 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv @@ -1,4 +1,4 @@ -// Copyright 2025 ETH Zurich and University of Bologna. +// Copyright 2026 ETH Zurich and University of Bologna. // Solderpad Hardware License, Version 0.51, see LICENSE for details. // SPDX-License-Identifier: SHL-0.51 @@ -292,6 +292,282 @@ package floo_axi_nw_mesh_16x16_noc_pkg; + typedef enum logic[8:0] { + MagiaTileX0Y0SamIdx = 0, + MagiaTileX0Y1SamIdx = 1, + MagiaTileX0Y2SamIdx = 2, + MagiaTileX0Y3SamIdx = 3, + MagiaTileX0Y4SamIdx = 4, + MagiaTileX0Y5SamIdx = 5, + MagiaTileX0Y6SamIdx = 6, + MagiaTileX0Y7SamIdx = 7, + MagiaTileX0Y8SamIdx = 8, + MagiaTileX0Y9SamIdx = 9, + MagiaTileX0Y10SamIdx = 10, + MagiaTileX0Y11SamIdx = 11, + MagiaTileX0Y12SamIdx = 12, + MagiaTileX0Y13SamIdx = 13, + MagiaTileX0Y14SamIdx = 14, + MagiaTileX0Y15SamIdx = 15, + MagiaTileX1Y0SamIdx = 16, + MagiaTileX1Y1SamIdx = 17, + MagiaTileX1Y2SamIdx = 18, + MagiaTileX1Y3SamIdx = 19, + MagiaTileX1Y4SamIdx = 20, + MagiaTileX1Y5SamIdx = 21, + MagiaTileX1Y6SamIdx = 22, + MagiaTileX1Y7SamIdx = 23, + MagiaTileX1Y8SamIdx = 24, + MagiaTileX1Y9SamIdx = 25, + MagiaTileX1Y10SamIdx = 26, + MagiaTileX1Y11SamIdx = 27, + MagiaTileX1Y12SamIdx = 28, + MagiaTileX1Y13SamIdx = 29, + MagiaTileX1Y14SamIdx = 30, + MagiaTileX1Y15SamIdx = 31, + MagiaTileX2Y0SamIdx = 32, + MagiaTileX2Y1SamIdx = 33, + MagiaTileX2Y2SamIdx = 34, + MagiaTileX2Y3SamIdx = 35, + MagiaTileX2Y4SamIdx = 36, + MagiaTileX2Y5SamIdx = 37, + MagiaTileX2Y6SamIdx = 38, + MagiaTileX2Y7SamIdx = 39, + MagiaTileX2Y8SamIdx = 40, + MagiaTileX2Y9SamIdx = 41, + MagiaTileX2Y10SamIdx = 42, + MagiaTileX2Y11SamIdx = 43, + MagiaTileX2Y12SamIdx = 44, + MagiaTileX2Y13SamIdx = 45, + MagiaTileX2Y14SamIdx = 46, + MagiaTileX2Y15SamIdx = 47, + MagiaTileX3Y0SamIdx = 48, + MagiaTileX3Y1SamIdx = 49, + MagiaTileX3Y2SamIdx = 50, + MagiaTileX3Y3SamIdx = 51, + MagiaTileX3Y4SamIdx = 52, + MagiaTileX3Y5SamIdx = 53, + MagiaTileX3Y6SamIdx = 54, + MagiaTileX3Y7SamIdx = 55, + MagiaTileX3Y8SamIdx = 56, + MagiaTileX3Y9SamIdx = 57, + MagiaTileX3Y10SamIdx = 58, + MagiaTileX3Y11SamIdx = 59, + MagiaTileX3Y12SamIdx = 60, + MagiaTileX3Y13SamIdx = 61, + MagiaTileX3Y14SamIdx = 62, + MagiaTileX3Y15SamIdx = 63, + MagiaTileX4Y0SamIdx = 64, + MagiaTileX4Y1SamIdx = 65, + MagiaTileX4Y2SamIdx = 66, + MagiaTileX4Y3SamIdx = 67, + MagiaTileX4Y4SamIdx = 68, + MagiaTileX4Y5SamIdx = 69, + MagiaTileX4Y6SamIdx = 70, + MagiaTileX4Y7SamIdx = 71, + MagiaTileX4Y8SamIdx = 72, + MagiaTileX4Y9SamIdx = 73, + MagiaTileX4Y10SamIdx = 74, + MagiaTileX4Y11SamIdx = 75, + MagiaTileX4Y12SamIdx = 76, + MagiaTileX4Y13SamIdx = 77, + MagiaTileX4Y14SamIdx = 78, + MagiaTileX4Y15SamIdx = 79, + MagiaTileX5Y0SamIdx = 80, + MagiaTileX5Y1SamIdx = 81, + MagiaTileX5Y2SamIdx = 82, + MagiaTileX5Y3SamIdx = 83, + MagiaTileX5Y4SamIdx = 84, + MagiaTileX5Y5SamIdx = 85, + MagiaTileX5Y6SamIdx = 86, + MagiaTileX5Y7SamIdx = 87, + MagiaTileX5Y8SamIdx = 88, + MagiaTileX5Y9SamIdx = 89, + MagiaTileX5Y10SamIdx = 90, + MagiaTileX5Y11SamIdx = 91, + MagiaTileX5Y12SamIdx = 92, + MagiaTileX5Y13SamIdx = 93, + MagiaTileX5Y14SamIdx = 94, + MagiaTileX5Y15SamIdx = 95, + MagiaTileX6Y0SamIdx = 96, + MagiaTileX6Y1SamIdx = 97, + MagiaTileX6Y2SamIdx = 98, + MagiaTileX6Y3SamIdx = 99, + MagiaTileX6Y4SamIdx = 100, + MagiaTileX6Y5SamIdx = 101, + MagiaTileX6Y6SamIdx = 102, + MagiaTileX6Y7SamIdx = 103, + MagiaTileX6Y8SamIdx = 104, + MagiaTileX6Y9SamIdx = 105, + MagiaTileX6Y10SamIdx = 106, + MagiaTileX6Y11SamIdx = 107, + MagiaTileX6Y12SamIdx = 108, + MagiaTileX6Y13SamIdx = 109, + MagiaTileX6Y14SamIdx = 110, + MagiaTileX6Y15SamIdx = 111, + MagiaTileX7Y0SamIdx = 112, + MagiaTileX7Y1SamIdx = 113, + MagiaTileX7Y2SamIdx = 114, + MagiaTileX7Y3SamIdx = 115, + MagiaTileX7Y4SamIdx = 116, + MagiaTileX7Y5SamIdx = 117, + MagiaTileX7Y6SamIdx = 118, + MagiaTileX7Y7SamIdx = 119, + MagiaTileX7Y8SamIdx = 120, + MagiaTileX7Y9SamIdx = 121, + MagiaTileX7Y10SamIdx = 122, + MagiaTileX7Y11SamIdx = 123, + MagiaTileX7Y12SamIdx = 124, + MagiaTileX7Y13SamIdx = 125, + MagiaTileX7Y14SamIdx = 126, + MagiaTileX7Y15SamIdx = 127, + MagiaTileX8Y0SamIdx = 128, + MagiaTileX8Y1SamIdx = 129, + MagiaTileX8Y2SamIdx = 130, + MagiaTileX8Y3SamIdx = 131, + MagiaTileX8Y4SamIdx = 132, + MagiaTileX8Y5SamIdx = 133, + MagiaTileX8Y6SamIdx = 134, + MagiaTileX8Y7SamIdx = 135, + MagiaTileX8Y8SamIdx = 136, + MagiaTileX8Y9SamIdx = 137, + MagiaTileX8Y10SamIdx = 138, + MagiaTileX8Y11SamIdx = 139, + MagiaTileX8Y12SamIdx = 140, + MagiaTileX8Y13SamIdx = 141, + MagiaTileX8Y14SamIdx = 142, + MagiaTileX8Y15SamIdx = 143, + MagiaTileX9Y0SamIdx = 144, + MagiaTileX9Y1SamIdx = 145, + MagiaTileX9Y2SamIdx = 146, + MagiaTileX9Y3SamIdx = 147, + MagiaTileX9Y4SamIdx = 148, + MagiaTileX9Y5SamIdx = 149, + MagiaTileX9Y6SamIdx = 150, + MagiaTileX9Y7SamIdx = 151, + MagiaTileX9Y8SamIdx = 152, + MagiaTileX9Y9SamIdx = 153, + MagiaTileX9Y10SamIdx = 154, + MagiaTileX9Y11SamIdx = 155, + MagiaTileX9Y12SamIdx = 156, + MagiaTileX9Y13SamIdx = 157, + MagiaTileX9Y14SamIdx = 158, + MagiaTileX9Y15SamIdx = 159, + MagiaTileX10Y0SamIdx = 160, + MagiaTileX10Y1SamIdx = 161, + MagiaTileX10Y2SamIdx = 162, + MagiaTileX10Y3SamIdx = 163, + MagiaTileX10Y4SamIdx = 164, + MagiaTileX10Y5SamIdx = 165, + MagiaTileX10Y6SamIdx = 166, + MagiaTileX10Y7SamIdx = 167, + MagiaTileX10Y8SamIdx = 168, + MagiaTileX10Y9SamIdx = 169, + MagiaTileX10Y10SamIdx = 170, + MagiaTileX10Y11SamIdx = 171, + MagiaTileX10Y12SamIdx = 172, + MagiaTileX10Y13SamIdx = 173, + MagiaTileX10Y14SamIdx = 174, + MagiaTileX10Y15SamIdx = 175, + MagiaTileX11Y0SamIdx = 176, + MagiaTileX11Y1SamIdx = 177, + MagiaTileX11Y2SamIdx = 178, + MagiaTileX11Y3SamIdx = 179, + MagiaTileX11Y4SamIdx = 180, + MagiaTileX11Y5SamIdx = 181, + MagiaTileX11Y6SamIdx = 182, + MagiaTileX11Y7SamIdx = 183, + MagiaTileX11Y8SamIdx = 184, + MagiaTileX11Y9SamIdx = 185, + MagiaTileX11Y10SamIdx = 186, + MagiaTileX11Y11SamIdx = 187, + MagiaTileX11Y12SamIdx = 188, + MagiaTileX11Y13SamIdx = 189, + MagiaTileX11Y14SamIdx = 190, + MagiaTileX11Y15SamIdx = 191, + MagiaTileX12Y0SamIdx = 192, + MagiaTileX12Y1SamIdx = 193, + MagiaTileX12Y2SamIdx = 194, + MagiaTileX12Y3SamIdx = 195, + MagiaTileX12Y4SamIdx = 196, + MagiaTileX12Y5SamIdx = 197, + MagiaTileX12Y6SamIdx = 198, + MagiaTileX12Y7SamIdx = 199, + MagiaTileX12Y8SamIdx = 200, + MagiaTileX12Y9SamIdx = 201, + MagiaTileX12Y10SamIdx = 202, + MagiaTileX12Y11SamIdx = 203, + MagiaTileX12Y12SamIdx = 204, + MagiaTileX12Y13SamIdx = 205, + MagiaTileX12Y14SamIdx = 206, + MagiaTileX12Y15SamIdx = 207, + MagiaTileX13Y0SamIdx = 208, + MagiaTileX13Y1SamIdx = 209, + MagiaTileX13Y2SamIdx = 210, + MagiaTileX13Y3SamIdx = 211, + MagiaTileX13Y4SamIdx = 212, + MagiaTileX13Y5SamIdx = 213, + MagiaTileX13Y6SamIdx = 214, + MagiaTileX13Y7SamIdx = 215, + MagiaTileX13Y8SamIdx = 216, + MagiaTileX13Y9SamIdx = 217, + MagiaTileX13Y10SamIdx = 218, + MagiaTileX13Y11SamIdx = 219, + MagiaTileX13Y12SamIdx = 220, + MagiaTileX13Y13SamIdx = 221, + MagiaTileX13Y14SamIdx = 222, + MagiaTileX13Y15SamIdx = 223, + MagiaTileX14Y0SamIdx = 224, + MagiaTileX14Y1SamIdx = 225, + MagiaTileX14Y2SamIdx = 226, + MagiaTileX14Y3SamIdx = 227, + MagiaTileX14Y4SamIdx = 228, + MagiaTileX14Y5SamIdx = 229, + MagiaTileX14Y6SamIdx = 230, + MagiaTileX14Y7SamIdx = 231, + MagiaTileX14Y8SamIdx = 232, + MagiaTileX14Y9SamIdx = 233, + MagiaTileX14Y10SamIdx = 234, + MagiaTileX14Y11SamIdx = 235, + MagiaTileX14Y12SamIdx = 236, + MagiaTileX14Y13SamIdx = 237, + MagiaTileX14Y14SamIdx = 238, + MagiaTileX14Y15SamIdx = 239, + MagiaTileX15Y0SamIdx = 240, + MagiaTileX15Y1SamIdx = 241, + MagiaTileX15Y2SamIdx = 242, + MagiaTileX15Y3SamIdx = 243, + MagiaTileX15Y4SamIdx = 244, + MagiaTileX15Y5SamIdx = 245, + MagiaTileX15Y6SamIdx = 246, + MagiaTileX15Y7SamIdx = 247, + MagiaTileX15Y8SamIdx = 248, + MagiaTileX15Y9SamIdx = 249, + MagiaTileX15Y10SamIdx = 250, + MagiaTileX15Y11SamIdx = 251, + MagiaTileX15Y12SamIdx = 252, + MagiaTileX15Y13SamIdx = 253, + MagiaTileX15Y14SamIdx = 254, + MagiaTileX15Y15SamIdx = 255, + L20SamIdx = 256, + L21SamIdx = 257, + L22SamIdx = 258, + L23SamIdx = 259, + L24SamIdx = 260, + L25SamIdx = 261, + L26SamIdx = 262, + L27SamIdx = 263, + L28SamIdx = 264, + L29SamIdx = 265, + L210SamIdx = 266, + L211SamIdx = 267, + L212SamIdx = 268, + L213SamIdx = 269, + L214SamIdx = 270, + L215SamIdx = 271} sam_idx_e; + + + typedef logic[0:0] rob_idx_t; typedef logic[0:0] port_id_t; typedef logic[4:0] x_bits_t; @@ -305,6 +581,12 @@ typedef struct packed { typedef logic route_t; + typedef struct packed { + id_t idx; + id_t start_addr; + id_t end_addr; + } route_map_rule_t; + localparam int unsigned SamNumRules = 272; typedef struct packed { @@ -587,6 +869,2412 @@ localparam sam_rule_t[SamNumRules-1:0] Sam = '{ '{idx: '{x: 2, y: 0, port_id: 0}, start_addr: 32'h00100000, end_addr: 32'h00200000},// magia_tile_x1_y0_sam_idx '{idx: '{x: 1, y: 0, port_id: 0}, start_addr: 32'h00000000, end_addr: 32'h00100000} // magia_tile_x0_y0_sam_idx + localparam int unsigned CollectiveSamNumRules = 272; + +typedef struct packed { + int unsigned offset; + int unsigned len; + int unsigned base_id; +} collective_mask_sel_t; + +typedef struct packed { + id_t id; + collective_mask_sel_t mask_x; + collective_mask_sel_t mask_y; +} collective_idx_t; + +typedef struct packed { + collective_idx_t idx; + logic [31:0] start_addr; + logic [31:0] end_addr; +} collective_sam_rule_t; + +localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ +'{ idx: '{ id: '{x: 0, y: 15, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hfc000000, + end_addr: 32'h100000000},// L215 +'{ idx: '{ id: '{x: 0, y: 14, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf8000000, + end_addr: 32'hfc000000},// L214 +'{ idx: '{ id: '{x: 0, y: 13, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf4000000, + end_addr: 32'hf8000000},// L213 +'{ idx: '{ id: '{x: 0, y: 12, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf0000000, + end_addr: 32'hf4000000},// L212 +'{ idx: '{ id: '{x: 0, y: 11, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hec000000, + end_addr: 32'hf0000000},// L211 +'{ idx: '{ id: '{x: 0, y: 10, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he8000000, + end_addr: 32'hec000000},// L210 +'{ idx: '{ id: '{x: 0, y: 9, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he4000000, + end_addr: 32'he8000000},// L29 +'{ idx: '{ id: '{x: 0, y: 8, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he0000000, + end_addr: 32'he4000000},// L28 +'{ idx: '{ id: '{x: 0, y: 7, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hdc000000, + end_addr: 32'he0000000},// L27 +'{ idx: '{ id: '{x: 0, y: 6, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd8000000, + end_addr: 32'hdc000000},// L26 +'{ idx: '{ id: '{x: 0, y: 5, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd4000000, + end_addr: 32'hd8000000},// L25 +'{ idx: '{ id: '{x: 0, y: 4, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd0000000, + end_addr: 32'hd4000000},// L24 +'{ idx: '{ id: '{x: 0, y: 3, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hcc000000, + end_addr: 32'hd0000000},// L23 +'{ idx: '{ id: '{x: 0, y: 2, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc8000000, + end_addr: 32'hcc000000},// L22 +'{ idx: '{ id: '{x: 0, y: 1, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc4000000, + end_addr: 32'hc8000000},// L21 +'{ idx: '{ id: '{x: 0, y: 0, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc0000000, + end_addr: 32'hc4000000},// L20 +'{ idx: '{ id: '{x: 31, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ff00000, + end_addr: 32'h10000000},// MagiaTileX15Y15 +'{ idx: '{ id: '{x: 31, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0fe00000, + end_addr: 32'h0ff00000},// MagiaTileX15Y14 +'{ idx: '{ id: '{x: 31, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0fd00000, + end_addr: 32'h0fe00000},// MagiaTileX15Y13 +'{ idx: '{ id: '{x: 31, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0fc00000, + end_addr: 32'h0fd00000},// MagiaTileX15Y12 +'{ idx: '{ id: '{x: 31, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0fb00000, + end_addr: 32'h0fc00000},// MagiaTileX15Y11 +'{ idx: '{ id: '{x: 31, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0fa00000, + end_addr: 32'h0fb00000},// MagiaTileX15Y10 +'{ idx: '{ id: '{x: 31, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0f900000, + end_addr: 32'h0fa00000},// MagiaTileX15Y9 +'{ idx: '{ id: '{x: 31, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0f800000, + end_addr: 32'h0f900000},// MagiaTileX15Y8 +'{ idx: '{ id: '{x: 31, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0f700000, + end_addr: 32'h0f800000},// MagiaTileX15Y7 +'{ idx: '{ id: '{x: 31, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0f600000, + end_addr: 32'h0f700000},// MagiaTileX15Y6 +'{ idx: '{ id: '{x: 31, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0f500000, + end_addr: 32'h0f600000},// MagiaTileX15Y5 +'{ idx: '{ id: '{x: 31, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0f400000, + end_addr: 32'h0f500000},// MagiaTileX15Y4 +'{ idx: '{ id: '{x: 31, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0f300000, + end_addr: 32'h0f400000},// MagiaTileX15Y3 +'{ idx: '{ id: '{x: 31, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0f200000, + end_addr: 32'h0f300000},// MagiaTileX15Y2 +'{ idx: '{ id: '{x: 31, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0f100000, + end_addr: 32'h0f200000},// MagiaTileX15Y1 +'{ idx: '{ id: '{x: 31, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0f000000, + end_addr: 32'h0f100000},// MagiaTileX15Y0 +'{ idx: '{ id: '{x: 30, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ef00000, + end_addr: 32'h0f000000},// MagiaTileX14Y15 +'{ idx: '{ id: '{x: 30, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ee00000, + end_addr: 32'h0ef00000},// MagiaTileX14Y14 +'{ idx: '{ id: '{x: 30, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ed00000, + end_addr: 32'h0ee00000},// MagiaTileX14Y13 +'{ idx: '{ id: '{x: 30, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ec00000, + end_addr: 32'h0ed00000},// MagiaTileX14Y12 +'{ idx: '{ id: '{x: 30, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0eb00000, + end_addr: 32'h0ec00000},// MagiaTileX14Y11 +'{ idx: '{ id: '{x: 30, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ea00000, + end_addr: 32'h0eb00000},// MagiaTileX14Y10 +'{ idx: '{ id: '{x: 30, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0e900000, + end_addr: 32'h0ea00000},// MagiaTileX14Y9 +'{ idx: '{ id: '{x: 30, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0e800000, + end_addr: 32'h0e900000},// MagiaTileX14Y8 +'{ idx: '{ id: '{x: 30, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0e700000, + end_addr: 32'h0e800000},// MagiaTileX14Y7 +'{ idx: '{ id: '{x: 30, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0e600000, + end_addr: 32'h0e700000},// MagiaTileX14Y6 +'{ idx: '{ id: '{x: 30, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0e500000, + end_addr: 32'h0e600000},// MagiaTileX14Y5 +'{ idx: '{ id: '{x: 30, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0e400000, + end_addr: 32'h0e500000},// MagiaTileX14Y4 +'{ idx: '{ id: '{x: 30, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0e300000, + end_addr: 32'h0e400000},// MagiaTileX14Y3 +'{ idx: '{ id: '{x: 30, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0e200000, + end_addr: 32'h0e300000},// MagiaTileX14Y2 +'{ idx: '{ id: '{x: 30, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0e100000, + end_addr: 32'h0e200000},// MagiaTileX14Y1 +'{ idx: '{ id: '{x: 30, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0e000000, + end_addr: 32'h0e100000},// MagiaTileX14Y0 +'{ idx: '{ id: '{x: 29, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0df00000, + end_addr: 32'h0e000000},// MagiaTileX13Y15 +'{ idx: '{ id: '{x: 29, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0de00000, + end_addr: 32'h0df00000},// MagiaTileX13Y14 +'{ idx: '{ id: '{x: 29, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0dd00000, + end_addr: 32'h0de00000},// MagiaTileX13Y13 +'{ idx: '{ id: '{x: 29, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0dc00000, + end_addr: 32'h0dd00000},// MagiaTileX13Y12 +'{ idx: '{ id: '{x: 29, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0db00000, + end_addr: 32'h0dc00000},// MagiaTileX13Y11 +'{ idx: '{ id: '{x: 29, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0da00000, + end_addr: 32'h0db00000},// MagiaTileX13Y10 +'{ idx: '{ id: '{x: 29, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0d900000, + end_addr: 32'h0da00000},// MagiaTileX13Y9 +'{ idx: '{ id: '{x: 29, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0d800000, + end_addr: 32'h0d900000},// MagiaTileX13Y8 +'{ idx: '{ id: '{x: 29, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0d700000, + end_addr: 32'h0d800000},// MagiaTileX13Y7 +'{ idx: '{ id: '{x: 29, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0d600000, + end_addr: 32'h0d700000},// MagiaTileX13Y6 +'{ idx: '{ id: '{x: 29, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0d500000, + end_addr: 32'h0d600000},// MagiaTileX13Y5 +'{ idx: '{ id: '{x: 29, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0d400000, + end_addr: 32'h0d500000},// MagiaTileX13Y4 +'{ idx: '{ id: '{x: 29, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0d300000, + end_addr: 32'h0d400000},// MagiaTileX13Y3 +'{ idx: '{ id: '{x: 29, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0d200000, + end_addr: 32'h0d300000},// MagiaTileX13Y2 +'{ idx: '{ id: '{x: 29, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0d100000, + end_addr: 32'h0d200000},// MagiaTileX13Y1 +'{ idx: '{ id: '{x: 29, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0d000000, + end_addr: 32'h0d100000},// MagiaTileX13Y0 +'{ idx: '{ id: '{x: 28, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0cf00000, + end_addr: 32'h0d000000},// MagiaTileX12Y15 +'{ idx: '{ id: '{x: 28, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ce00000, + end_addr: 32'h0cf00000},// MagiaTileX12Y14 +'{ idx: '{ id: '{x: 28, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0cd00000, + end_addr: 32'h0ce00000},// MagiaTileX12Y13 +'{ idx: '{ id: '{x: 28, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0cc00000, + end_addr: 32'h0cd00000},// MagiaTileX12Y12 +'{ idx: '{ id: '{x: 28, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0cb00000, + end_addr: 32'h0cc00000},// MagiaTileX12Y11 +'{ idx: '{ id: '{x: 28, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ca00000, + end_addr: 32'h0cb00000},// MagiaTileX12Y10 +'{ idx: '{ id: '{x: 28, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0c900000, + end_addr: 32'h0ca00000},// MagiaTileX12Y9 +'{ idx: '{ id: '{x: 28, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0c800000, + end_addr: 32'h0c900000},// MagiaTileX12Y8 +'{ idx: '{ id: '{x: 28, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0c700000, + end_addr: 32'h0c800000},// MagiaTileX12Y7 +'{ idx: '{ id: '{x: 28, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0c600000, + end_addr: 32'h0c700000},// MagiaTileX12Y6 +'{ idx: '{ id: '{x: 28, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0c500000, + end_addr: 32'h0c600000},// MagiaTileX12Y5 +'{ idx: '{ id: '{x: 28, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0c400000, + end_addr: 32'h0c500000},// MagiaTileX12Y4 +'{ idx: '{ id: '{x: 28, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0c300000, + end_addr: 32'h0c400000},// MagiaTileX12Y3 +'{ idx: '{ id: '{x: 28, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0c200000, + end_addr: 32'h0c300000},// MagiaTileX12Y2 +'{ idx: '{ id: '{x: 28, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0c100000, + end_addr: 32'h0c200000},// MagiaTileX12Y1 +'{ idx: '{ id: '{x: 28, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0c000000, + end_addr: 32'h0c100000},// MagiaTileX12Y0 +'{ idx: '{ id: '{x: 27, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0bf00000, + end_addr: 32'h0c000000},// MagiaTileX11Y15 +'{ idx: '{ id: '{x: 27, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0be00000, + end_addr: 32'h0bf00000},// MagiaTileX11Y14 +'{ idx: '{ id: '{x: 27, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0bd00000, + end_addr: 32'h0be00000},// MagiaTileX11Y13 +'{ idx: '{ id: '{x: 27, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0bc00000, + end_addr: 32'h0bd00000},// MagiaTileX11Y12 +'{ idx: '{ id: '{x: 27, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0bb00000, + end_addr: 32'h0bc00000},// MagiaTileX11Y11 +'{ idx: '{ id: '{x: 27, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ba00000, + end_addr: 32'h0bb00000},// MagiaTileX11Y10 +'{ idx: '{ id: '{x: 27, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0b900000, + end_addr: 32'h0ba00000},// MagiaTileX11Y9 +'{ idx: '{ id: '{x: 27, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0b800000, + end_addr: 32'h0b900000},// MagiaTileX11Y8 +'{ idx: '{ id: '{x: 27, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0b700000, + end_addr: 32'h0b800000},// MagiaTileX11Y7 +'{ idx: '{ id: '{x: 27, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0b600000, + end_addr: 32'h0b700000},// MagiaTileX11Y6 +'{ idx: '{ id: '{x: 27, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0b500000, + end_addr: 32'h0b600000},// MagiaTileX11Y5 +'{ idx: '{ id: '{x: 27, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0b400000, + end_addr: 32'h0b500000},// MagiaTileX11Y4 +'{ idx: '{ id: '{x: 27, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0b300000, + end_addr: 32'h0b400000},// MagiaTileX11Y3 +'{ idx: '{ id: '{x: 27, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0b200000, + end_addr: 32'h0b300000},// MagiaTileX11Y2 +'{ idx: '{ id: '{x: 27, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0b100000, + end_addr: 32'h0b200000},// MagiaTileX11Y1 +'{ idx: '{ id: '{x: 27, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0b000000, + end_addr: 32'h0b100000},// MagiaTileX11Y0 +'{ idx: '{ id: '{x: 26, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0af00000, + end_addr: 32'h0b000000},// MagiaTileX10Y15 +'{ idx: '{ id: '{x: 26, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ae00000, + end_addr: 32'h0af00000},// MagiaTileX10Y14 +'{ idx: '{ id: '{x: 26, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ad00000, + end_addr: 32'h0ae00000},// MagiaTileX10Y13 +'{ idx: '{ id: '{x: 26, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ac00000, + end_addr: 32'h0ad00000},// MagiaTileX10Y12 +'{ idx: '{ id: '{x: 26, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0ab00000, + end_addr: 32'h0ac00000},// MagiaTileX10Y11 +'{ idx: '{ id: '{x: 26, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0aa00000, + end_addr: 32'h0ab00000},// MagiaTileX10Y10 +'{ idx: '{ id: '{x: 26, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0a900000, + end_addr: 32'h0aa00000},// MagiaTileX10Y9 +'{ idx: '{ id: '{x: 26, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0a800000, + end_addr: 32'h0a900000},// MagiaTileX10Y8 +'{ idx: '{ id: '{x: 26, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0a700000, + end_addr: 32'h0a800000},// MagiaTileX10Y7 +'{ idx: '{ id: '{x: 26, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0a600000, + end_addr: 32'h0a700000},// MagiaTileX10Y6 +'{ idx: '{ id: '{x: 26, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0a500000, + end_addr: 32'h0a600000},// MagiaTileX10Y5 +'{ idx: '{ id: '{x: 26, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0a400000, + end_addr: 32'h0a500000},// MagiaTileX10Y4 +'{ idx: '{ id: '{x: 26, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0a300000, + end_addr: 32'h0a400000},// MagiaTileX10Y3 +'{ idx: '{ id: '{x: 26, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0a200000, + end_addr: 32'h0a300000},// MagiaTileX10Y2 +'{ idx: '{ id: '{x: 26, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0a100000, + end_addr: 32'h0a200000},// MagiaTileX10Y1 +'{ idx: '{ id: '{x: 26, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h0a000000, + end_addr: 32'h0a100000},// MagiaTileX10Y0 +'{ idx: '{ id: '{x: 25, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09f00000, + end_addr: 32'h0a000000},// MagiaTileX9Y15 +'{ idx: '{ id: '{x: 25, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09e00000, + end_addr: 32'h09f00000},// MagiaTileX9Y14 +'{ idx: '{ id: '{x: 25, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09d00000, + end_addr: 32'h09e00000},// MagiaTileX9Y13 +'{ idx: '{ id: '{x: 25, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09c00000, + end_addr: 32'h09d00000},// MagiaTileX9Y12 +'{ idx: '{ id: '{x: 25, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09b00000, + end_addr: 32'h09c00000},// MagiaTileX9Y11 +'{ idx: '{ id: '{x: 25, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09a00000, + end_addr: 32'h09b00000},// MagiaTileX9Y10 +'{ idx: '{ id: '{x: 25, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09900000, + end_addr: 32'h09a00000},// MagiaTileX9Y9 +'{ idx: '{ id: '{x: 25, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09800000, + end_addr: 32'h09900000},// MagiaTileX9Y8 +'{ idx: '{ id: '{x: 25, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09700000, + end_addr: 32'h09800000},// MagiaTileX9Y7 +'{ idx: '{ id: '{x: 25, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09600000, + end_addr: 32'h09700000},// MagiaTileX9Y6 +'{ idx: '{ id: '{x: 25, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09500000, + end_addr: 32'h09600000},// MagiaTileX9Y5 +'{ idx: '{ id: '{x: 25, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09400000, + end_addr: 32'h09500000},// MagiaTileX9Y4 +'{ idx: '{ id: '{x: 25, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09300000, + end_addr: 32'h09400000},// MagiaTileX9Y3 +'{ idx: '{ id: '{x: 25, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09200000, + end_addr: 32'h09300000},// MagiaTileX9Y2 +'{ idx: '{ id: '{x: 25, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09100000, + end_addr: 32'h09200000},// MagiaTileX9Y1 +'{ idx: '{ id: '{x: 25, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h09000000, + end_addr: 32'h09100000},// MagiaTileX9Y0 +'{ idx: '{ id: '{x: 24, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08f00000, + end_addr: 32'h09000000},// MagiaTileX8Y15 +'{ idx: '{ id: '{x: 24, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08e00000, + end_addr: 32'h08f00000},// MagiaTileX8Y14 +'{ idx: '{ id: '{x: 24, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08d00000, + end_addr: 32'h08e00000},// MagiaTileX8Y13 +'{ idx: '{ id: '{x: 24, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08c00000, + end_addr: 32'h08d00000},// MagiaTileX8Y12 +'{ idx: '{ id: '{x: 24, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08b00000, + end_addr: 32'h08c00000},// MagiaTileX8Y11 +'{ idx: '{ id: '{x: 24, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08a00000, + end_addr: 32'h08b00000},// MagiaTileX8Y10 +'{ idx: '{ id: '{x: 24, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08900000, + end_addr: 32'h08a00000},// MagiaTileX8Y9 +'{ idx: '{ id: '{x: 24, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08800000, + end_addr: 32'h08900000},// MagiaTileX8Y8 +'{ idx: '{ id: '{x: 24, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08700000, + end_addr: 32'h08800000},// MagiaTileX8Y7 +'{ idx: '{ id: '{x: 24, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08600000, + end_addr: 32'h08700000},// MagiaTileX8Y6 +'{ idx: '{ id: '{x: 24, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08500000, + end_addr: 32'h08600000},// MagiaTileX8Y5 +'{ idx: '{ id: '{x: 24, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08400000, + end_addr: 32'h08500000},// MagiaTileX8Y4 +'{ idx: '{ id: '{x: 24, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08300000, + end_addr: 32'h08400000},// MagiaTileX8Y3 +'{ idx: '{ id: '{x: 24, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08200000, + end_addr: 32'h08300000},// MagiaTileX8Y2 +'{ idx: '{ id: '{x: 24, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08100000, + end_addr: 32'h08200000},// MagiaTileX8Y1 +'{ idx: '{ id: '{x: 24, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h08000000, + end_addr: 32'h08100000},// MagiaTileX8Y0 +'{ idx: '{ id: '{x: 23, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07f00000, + end_addr: 32'h08000000},// MagiaTileX7Y15 +'{ idx: '{ id: '{x: 23, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07e00000, + end_addr: 32'h07f00000},// MagiaTileX7Y14 +'{ idx: '{ id: '{x: 23, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07d00000, + end_addr: 32'h07e00000},// MagiaTileX7Y13 +'{ idx: '{ id: '{x: 23, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07c00000, + end_addr: 32'h07d00000},// MagiaTileX7Y12 +'{ idx: '{ id: '{x: 23, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07b00000, + end_addr: 32'h07c00000},// MagiaTileX7Y11 +'{ idx: '{ id: '{x: 23, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07a00000, + end_addr: 32'h07b00000},// MagiaTileX7Y10 +'{ idx: '{ id: '{x: 23, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07900000, + end_addr: 32'h07a00000},// MagiaTileX7Y9 +'{ idx: '{ id: '{x: 23, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07800000, + end_addr: 32'h07900000},// MagiaTileX7Y8 +'{ idx: '{ id: '{x: 23, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07700000, + end_addr: 32'h07800000},// MagiaTileX7Y7 +'{ idx: '{ id: '{x: 23, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07600000, + end_addr: 32'h07700000},// MagiaTileX7Y6 +'{ idx: '{ id: '{x: 23, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07500000, + end_addr: 32'h07600000},// MagiaTileX7Y5 +'{ idx: '{ id: '{x: 23, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07400000, + end_addr: 32'h07500000},// MagiaTileX7Y4 +'{ idx: '{ id: '{x: 23, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07300000, + end_addr: 32'h07400000},// MagiaTileX7Y3 +'{ idx: '{ id: '{x: 23, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07200000, + end_addr: 32'h07300000},// MagiaTileX7Y2 +'{ idx: '{ id: '{x: 23, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07100000, + end_addr: 32'h07200000},// MagiaTileX7Y1 +'{ idx: '{ id: '{x: 23, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h07000000, + end_addr: 32'h07100000},// MagiaTileX7Y0 +'{ idx: '{ id: '{x: 22, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06f00000, + end_addr: 32'h07000000},// MagiaTileX6Y15 +'{ idx: '{ id: '{x: 22, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06e00000, + end_addr: 32'h06f00000},// MagiaTileX6Y14 +'{ idx: '{ id: '{x: 22, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06d00000, + end_addr: 32'h06e00000},// MagiaTileX6Y13 +'{ idx: '{ id: '{x: 22, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06c00000, + end_addr: 32'h06d00000},// MagiaTileX6Y12 +'{ idx: '{ id: '{x: 22, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06b00000, + end_addr: 32'h06c00000},// MagiaTileX6Y11 +'{ idx: '{ id: '{x: 22, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06a00000, + end_addr: 32'h06b00000},// MagiaTileX6Y10 +'{ idx: '{ id: '{x: 22, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06900000, + end_addr: 32'h06a00000},// MagiaTileX6Y9 +'{ idx: '{ id: '{x: 22, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06800000, + end_addr: 32'h06900000},// MagiaTileX6Y8 +'{ idx: '{ id: '{x: 22, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06700000, + end_addr: 32'h06800000},// MagiaTileX6Y7 +'{ idx: '{ id: '{x: 22, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06600000, + end_addr: 32'h06700000},// MagiaTileX6Y6 +'{ idx: '{ id: '{x: 22, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06500000, + end_addr: 32'h06600000},// MagiaTileX6Y5 +'{ idx: '{ id: '{x: 22, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06400000, + end_addr: 32'h06500000},// MagiaTileX6Y4 +'{ idx: '{ id: '{x: 22, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06300000, + end_addr: 32'h06400000},// MagiaTileX6Y3 +'{ idx: '{ id: '{x: 22, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06200000, + end_addr: 32'h06300000},// MagiaTileX6Y2 +'{ idx: '{ id: '{x: 22, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06100000, + end_addr: 32'h06200000},// MagiaTileX6Y1 +'{ idx: '{ id: '{x: 22, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h06000000, + end_addr: 32'h06100000},// MagiaTileX6Y0 +'{ idx: '{ id: '{x: 21, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05f00000, + end_addr: 32'h06000000},// MagiaTileX5Y15 +'{ idx: '{ id: '{x: 21, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05e00000, + end_addr: 32'h05f00000},// MagiaTileX5Y14 +'{ idx: '{ id: '{x: 21, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05d00000, + end_addr: 32'h05e00000},// MagiaTileX5Y13 +'{ idx: '{ id: '{x: 21, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05c00000, + end_addr: 32'h05d00000},// MagiaTileX5Y12 +'{ idx: '{ id: '{x: 21, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05b00000, + end_addr: 32'h05c00000},// MagiaTileX5Y11 +'{ idx: '{ id: '{x: 21, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05a00000, + end_addr: 32'h05b00000},// MagiaTileX5Y10 +'{ idx: '{ id: '{x: 21, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05900000, + end_addr: 32'h05a00000},// MagiaTileX5Y9 +'{ idx: '{ id: '{x: 21, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05800000, + end_addr: 32'h05900000},// MagiaTileX5Y8 +'{ idx: '{ id: '{x: 21, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05700000, + end_addr: 32'h05800000},// MagiaTileX5Y7 +'{ idx: '{ id: '{x: 21, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05600000, + end_addr: 32'h05700000},// MagiaTileX5Y6 +'{ idx: '{ id: '{x: 21, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05500000, + end_addr: 32'h05600000},// MagiaTileX5Y5 +'{ idx: '{ id: '{x: 21, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05400000, + end_addr: 32'h05500000},// MagiaTileX5Y4 +'{ idx: '{ id: '{x: 21, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05300000, + end_addr: 32'h05400000},// MagiaTileX5Y3 +'{ idx: '{ id: '{x: 21, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05200000, + end_addr: 32'h05300000},// MagiaTileX5Y2 +'{ idx: '{ id: '{x: 21, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05100000, + end_addr: 32'h05200000},// MagiaTileX5Y1 +'{ idx: '{ id: '{x: 21, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h05000000, + end_addr: 32'h05100000},// MagiaTileX5Y0 +'{ idx: '{ id: '{x: 20, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04f00000, + end_addr: 32'h05000000},// MagiaTileX4Y15 +'{ idx: '{ id: '{x: 20, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04e00000, + end_addr: 32'h04f00000},// MagiaTileX4Y14 +'{ idx: '{ id: '{x: 20, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04d00000, + end_addr: 32'h04e00000},// MagiaTileX4Y13 +'{ idx: '{ id: '{x: 20, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04c00000, + end_addr: 32'h04d00000},// MagiaTileX4Y12 +'{ idx: '{ id: '{x: 20, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04b00000, + end_addr: 32'h04c00000},// MagiaTileX4Y11 +'{ idx: '{ id: '{x: 20, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04a00000, + end_addr: 32'h04b00000},// MagiaTileX4Y10 +'{ idx: '{ id: '{x: 20, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04900000, + end_addr: 32'h04a00000},// MagiaTileX4Y9 +'{ idx: '{ id: '{x: 20, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04800000, + end_addr: 32'h04900000},// MagiaTileX4Y8 +'{ idx: '{ id: '{x: 20, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04700000, + end_addr: 32'h04800000},// MagiaTileX4Y7 +'{ idx: '{ id: '{x: 20, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04600000, + end_addr: 32'h04700000},// MagiaTileX4Y6 +'{ idx: '{ id: '{x: 20, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04500000, + end_addr: 32'h04600000},// MagiaTileX4Y5 +'{ idx: '{ id: '{x: 20, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04400000, + end_addr: 32'h04500000},// MagiaTileX4Y4 +'{ idx: '{ id: '{x: 20, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04300000, + end_addr: 32'h04400000},// MagiaTileX4Y3 +'{ idx: '{ id: '{x: 20, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04200000, + end_addr: 32'h04300000},// MagiaTileX4Y2 +'{ idx: '{ id: '{x: 20, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04100000, + end_addr: 32'h04200000},// MagiaTileX4Y1 +'{ idx: '{ id: '{x: 20, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h04000000, + end_addr: 32'h04100000},// MagiaTileX4Y0 +'{ idx: '{ id: '{x: 19, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03f00000, + end_addr: 32'h04000000},// MagiaTileX3Y15 +'{ idx: '{ id: '{x: 19, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03e00000, + end_addr: 32'h03f00000},// MagiaTileX3Y14 +'{ idx: '{ id: '{x: 19, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03d00000, + end_addr: 32'h03e00000},// MagiaTileX3Y13 +'{ idx: '{ id: '{x: 19, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03c00000, + end_addr: 32'h03d00000},// MagiaTileX3Y12 +'{ idx: '{ id: '{x: 19, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03b00000, + end_addr: 32'h03c00000},// MagiaTileX3Y11 +'{ idx: '{ id: '{x: 19, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03a00000, + end_addr: 32'h03b00000},// MagiaTileX3Y10 +'{ idx: '{ id: '{x: 19, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03900000, + end_addr: 32'h03a00000},// MagiaTileX3Y9 +'{ idx: '{ id: '{x: 19, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03800000, + end_addr: 32'h03900000},// MagiaTileX3Y8 +'{ idx: '{ id: '{x: 19, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03700000, + end_addr: 32'h03800000},// MagiaTileX3Y7 +'{ idx: '{ id: '{x: 19, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03600000, + end_addr: 32'h03700000},// MagiaTileX3Y6 +'{ idx: '{ id: '{x: 19, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03500000, + end_addr: 32'h03600000},// MagiaTileX3Y5 +'{ idx: '{ id: '{x: 19, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03400000, + end_addr: 32'h03500000},// MagiaTileX3Y4 +'{ idx: '{ id: '{x: 19, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03300000, + end_addr: 32'h03400000},// MagiaTileX3Y3 +'{ idx: '{ id: '{x: 19, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03200000, + end_addr: 32'h03300000},// MagiaTileX3Y2 +'{ idx: '{ id: '{x: 19, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03100000, + end_addr: 32'h03200000},// MagiaTileX3Y1 +'{ idx: '{ id: '{x: 19, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h03000000, + end_addr: 32'h03100000},// MagiaTileX3Y0 +'{ idx: '{ id: '{x: 18, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02f00000, + end_addr: 32'h03000000},// MagiaTileX2Y15 +'{ idx: '{ id: '{x: 18, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02e00000, + end_addr: 32'h02f00000},// MagiaTileX2Y14 +'{ idx: '{ id: '{x: 18, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02d00000, + end_addr: 32'h02e00000},// MagiaTileX2Y13 +'{ idx: '{ id: '{x: 18, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02c00000, + end_addr: 32'h02d00000},// MagiaTileX2Y12 +'{ idx: '{ id: '{x: 18, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02b00000, + end_addr: 32'h02c00000},// MagiaTileX2Y11 +'{ idx: '{ id: '{x: 18, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02a00000, + end_addr: 32'h02b00000},// MagiaTileX2Y10 +'{ idx: '{ id: '{x: 18, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02900000, + end_addr: 32'h02a00000},// MagiaTileX2Y9 +'{ idx: '{ id: '{x: 18, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02800000, + end_addr: 32'h02900000},// MagiaTileX2Y8 +'{ idx: '{ id: '{x: 18, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02700000, + end_addr: 32'h02800000},// MagiaTileX2Y7 +'{ idx: '{ id: '{x: 18, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02600000, + end_addr: 32'h02700000},// MagiaTileX2Y6 +'{ idx: '{ id: '{x: 18, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02500000, + end_addr: 32'h02600000},// MagiaTileX2Y5 +'{ idx: '{ id: '{x: 18, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02400000, + end_addr: 32'h02500000},// MagiaTileX2Y4 +'{ idx: '{ id: '{x: 18, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02300000, + end_addr: 32'h02400000},// MagiaTileX2Y3 +'{ idx: '{ id: '{x: 18, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02200000, + end_addr: 32'h02300000},// MagiaTileX2Y2 +'{ idx: '{ id: '{x: 18, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02100000, + end_addr: 32'h02200000},// MagiaTileX2Y1 +'{ idx: '{ id: '{x: 18, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h02000000, + end_addr: 32'h02100000},// MagiaTileX2Y0 +'{ idx: '{ id: '{x: 17, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01f00000, + end_addr: 32'h02000000},// MagiaTileX1Y15 +'{ idx: '{ id: '{x: 17, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01e00000, + end_addr: 32'h01f00000},// MagiaTileX1Y14 +'{ idx: '{ id: '{x: 17, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01d00000, + end_addr: 32'h01e00000},// MagiaTileX1Y13 +'{ idx: '{ id: '{x: 17, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01c00000, + end_addr: 32'h01d00000},// MagiaTileX1Y12 +'{ idx: '{ id: '{x: 17, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01b00000, + end_addr: 32'h01c00000},// MagiaTileX1Y11 +'{ idx: '{ id: '{x: 17, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01a00000, + end_addr: 32'h01b00000},// MagiaTileX1Y10 +'{ idx: '{ id: '{x: 17, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01900000, + end_addr: 32'h01a00000},// MagiaTileX1Y9 +'{ idx: '{ id: '{x: 17, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01800000, + end_addr: 32'h01900000},// MagiaTileX1Y8 +'{ idx: '{ id: '{x: 17, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01700000, + end_addr: 32'h01800000},// MagiaTileX1Y7 +'{ idx: '{ id: '{x: 17, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01600000, + end_addr: 32'h01700000},// MagiaTileX1Y6 +'{ idx: '{ id: '{x: 17, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01500000, + end_addr: 32'h01600000},// MagiaTileX1Y5 +'{ idx: '{ id: '{x: 17, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01400000, + end_addr: 32'h01500000},// MagiaTileX1Y4 +'{ idx: '{ id: '{x: 17, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01300000, + end_addr: 32'h01400000},// MagiaTileX1Y3 +'{ idx: '{ id: '{x: 17, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01200000, + end_addr: 32'h01300000},// MagiaTileX1Y2 +'{ idx: '{ id: '{x: 17, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01100000, + end_addr: 32'h01200000},// MagiaTileX1Y1 +'{ idx: '{ id: '{x: 17, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h01000000, + end_addr: 32'h01100000},// MagiaTileX1Y0 +'{ idx: '{ id: '{x: 16, y: 15, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00f00000, + end_addr: 32'h01000000},// MagiaTileX0Y15 +'{ idx: '{ id: '{x: 16, y: 14, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00e00000, + end_addr: 32'h00f00000},// MagiaTileX0Y14 +'{ idx: '{ id: '{x: 16, y: 13, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00d00000, + end_addr: 32'h00e00000},// MagiaTileX0Y13 +'{ idx: '{ id: '{x: 16, y: 12, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00c00000, + end_addr: 32'h00d00000},// MagiaTileX0Y12 +'{ idx: '{ id: '{x: 16, y: 11, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00b00000, + end_addr: 32'h00c00000},// MagiaTileX0Y11 +'{ idx: '{ id: '{x: 16, y: 10, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00a00000, + end_addr: 32'h00b00000},// MagiaTileX0Y10 +'{ idx: '{ id: '{x: 16, y: 9, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00900000, + end_addr: 32'h00a00000},// MagiaTileX0Y9 +'{ idx: '{ id: '{x: 16, y: 8, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00800000, + end_addr: 32'h00900000},// MagiaTileX0Y8 +'{ idx: '{ id: '{x: 16, y: 7, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00700000, + end_addr: 32'h00800000},// MagiaTileX0Y7 +'{ idx: '{ id: '{x: 16, y: 6, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00600000, + end_addr: 32'h00700000},// MagiaTileX0Y6 +'{ idx: '{ id: '{x: 16, y: 5, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00500000, + end_addr: 32'h00600000},// MagiaTileX0Y5 +'{ idx: '{ id: '{x: 16, y: 4, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00400000, + end_addr: 32'h00500000},// MagiaTileX0Y4 +'{ idx: '{ id: '{x: 16, y: 3, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00300000, + end_addr: 32'h00400000},// MagiaTileX0Y3 +'{ idx: '{ id: '{x: 16, y: 2, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00200000, + end_addr: 32'h00300000},// MagiaTileX0Y2 +'{ idx: '{ id: '{x: 16, y: 1, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX0Y1 +'{ idx: '{ id: '{x: 16, y: 0, port_id: 0}, + mask_x: '{ offset: 24, + len: 5, + base_id: 16}, + mask_y: '{ offset: 20, + len: 4, + base_id: 0}}, + start_addr: 32'h00000000, + end_addr: 32'h00100000} // MagiaTileX0Y0 + }; @@ -597,10 +3285,38 @@ localparam sam_rule_t[SamNumRules-1:0] Sam = '{ XYAddrOffsetY: 37, IdAddrOffset: 0, NumSamRules: 272, - NumRoutes: 0}; + NumRoutes: 0, + CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, + EnWideMulticast: 1'b1, + EnLsbAnd: 1'b1, + EnFpAdd: 1'b0, + EnFpMul: 1'b0, + EnFpMin: 1'b0, + EnFpMax: 1'b0, + EnIntAdd: 1'b0, + EnIntMul: 1'b0, + EnIntMinS: 1'b0, + EnIntMinU: 1'b0, + EnIntMaxS: 1'b0, + EnIntMaxU: 1'b0}, + NarrRedCfg: RedDefaultCfg, + WideRedCfg: RedDefaultCfg}}; + - typedef logic[31:0] axi_narrow_data_mst_addr_t; + typedef logic[31:0] collective_axi_narrow_data_mst_addr_t; +typedef logic[31:0] collective_axi_narrow_data_mst_data_t; +typedef logic[3:0] collective_axi_narrow_data_mst_strb_t; +typedef logic[1:0] collective_axi_narrow_data_mst_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_narrow_data_mst_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_mst, collective_axi_narrow_data_mst_req_t, collective_axi_narrow_data_mst_rsp_t, collective_axi_narrow_data_mst_addr_t, collective_axi_narrow_data_mst_id_t, collective_axi_narrow_data_mst_data_t, collective_axi_narrow_data_mst_strb_t, collective_axi_narrow_data_mst_user_t) + + + typedef logic[31:0] axi_narrow_data_mst_addr_t; typedef logic[31:0] axi_narrow_data_mst_data_t; typedef logic[3:0] axi_narrow_data_mst_strb_t; typedef logic[2:0] axi_narrow_data_mst_id_t; @@ -608,7 +3324,19 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_mst, axi_narrow_data_mst_req_t, axi_narrow_data_mst_rsp_t, axi_narrow_data_mst_addr_t, axi_narrow_data_mst_id_t, axi_narrow_data_mst_data_t, axi_narrow_data_mst_strb_t, axi_narrow_data_mst_user_t) - typedef logic[31:0] axi_narrow_data_slv_addr_t; + typedef logic[31:0] collective_axi_narrow_data_slv_addr_t; +typedef logic[31:0] collective_axi_narrow_data_slv_data_t; +typedef logic[3:0] collective_axi_narrow_data_slv_strb_t; +typedef logic[3:0] collective_axi_narrow_data_slv_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_narrow_data_slv_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_slv, collective_axi_narrow_data_slv_req_t, collective_axi_narrow_data_slv_rsp_t, collective_axi_narrow_data_slv_addr_t, collective_axi_narrow_data_slv_id_t, collective_axi_narrow_data_slv_data_t, collective_axi_narrow_data_slv_strb_t, collective_axi_narrow_data_slv_user_t) + + + typedef logic[31:0] axi_narrow_data_slv_addr_t; typedef logic[31:0] axi_narrow_data_slv_data_t; typedef logic[3:0] axi_narrow_data_slv_strb_t; typedef logic[5:0] axi_narrow_data_slv_id_t; @@ -616,7 +3344,19 @@ typedef logic[0:0] axi_narrow_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_slv, axi_narrow_data_slv_req_t, axi_narrow_data_slv_rsp_t, axi_narrow_data_slv_addr_t, axi_narrow_data_slv_id_t, axi_narrow_data_slv_data_t, axi_narrow_data_slv_strb_t, axi_narrow_data_slv_user_t) - typedef logic[31:0] axi_wide_data_mst_addr_t; + typedef logic[31:0] collective_axi_wide_data_mst_addr_t; +typedef logic[255:0] collective_axi_wide_data_mst_data_t; +typedef logic[31:0] collective_axi_wide_data_mst_strb_t; +typedef logic[1:0] collective_axi_wide_data_mst_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_wide_data_mst_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_mst, collective_axi_wide_data_mst_req_t, collective_axi_wide_data_mst_rsp_t, collective_axi_wide_data_mst_addr_t, collective_axi_wide_data_mst_id_t, collective_axi_wide_data_mst_data_t, collective_axi_wide_data_mst_strb_t, collective_axi_wide_data_mst_user_t) + + + typedef logic[31:0] axi_wide_data_mst_addr_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; typedef logic[2:0] axi_wide_data_mst_id_t; @@ -624,7 +3364,19 @@ typedef logic[0:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) - typedef logic[31:0] axi_wide_data_slv_addr_t; + typedef logic[31:0] collective_axi_wide_data_slv_addr_t; +typedef logic[255:0] collective_axi_wide_data_slv_data_t; +typedef logic[31:0] collective_axi_wide_data_slv_strb_t; +typedef logic[1:0] collective_axi_wide_data_slv_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_wide_data_slv_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_slv, collective_axi_wide_data_slv_req_t, collective_axi_wide_data_slv_rsp_t, collective_axi_wide_data_slv_addr_t, collective_axi_wide_data_slv_id_t, collective_axi_wide_data_slv_data_t, collective_axi_wide_data_slv_strb_t, collective_axi_wide_data_slv_user_t) + + + typedef logic[31:0] axi_wide_data_slv_addr_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; typedef logic[2:0] axi_wide_data_slv_id_t; @@ -633,17 +3385,17 @@ typedef logic[0:0] axi_wide_data_slv_user_t; - `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t) + `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: 32, DataWidth: 32, - UserWidth: 1, - InIdWidth: 6, - OutIdWidth: 3}; + InIdWidth: 4, + OutIdWidth: 2, + UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - UserWidth: 1, - InIdWidth: 3, - OutIdWidth: 3}; + InIdWidth: 2, + OutIdWidth: 2, + UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) diff --git a/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv index 15060161..248ddcb3 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv @@ -1,4 +1,4 @@ -// Copyright 2025 ETH Zurich and University of Bologna. +// Copyright 2026 ETH Zurich and University of Bologna. // Solderpad Hardware License, Version 0.51, see LICENSE for details. // SPDX-License-Identifier: SHL-0.51 @@ -92,6 +92,82 @@ package floo_axi_nw_mesh_8x8_noc_pkg; + typedef enum logic[6:0] { + MagiaTileX0Y0SamIdx = 0, + MagiaTileX0Y1SamIdx = 1, + MagiaTileX0Y2SamIdx = 2, + MagiaTileX0Y3SamIdx = 3, + MagiaTileX0Y4SamIdx = 4, + MagiaTileX0Y5SamIdx = 5, + MagiaTileX0Y6SamIdx = 6, + MagiaTileX0Y7SamIdx = 7, + MagiaTileX1Y0SamIdx = 8, + MagiaTileX1Y1SamIdx = 9, + MagiaTileX1Y2SamIdx = 10, + MagiaTileX1Y3SamIdx = 11, + MagiaTileX1Y4SamIdx = 12, + MagiaTileX1Y5SamIdx = 13, + MagiaTileX1Y6SamIdx = 14, + MagiaTileX1Y7SamIdx = 15, + MagiaTileX2Y0SamIdx = 16, + MagiaTileX2Y1SamIdx = 17, + MagiaTileX2Y2SamIdx = 18, + MagiaTileX2Y3SamIdx = 19, + MagiaTileX2Y4SamIdx = 20, + MagiaTileX2Y5SamIdx = 21, + MagiaTileX2Y6SamIdx = 22, + MagiaTileX2Y7SamIdx = 23, + MagiaTileX3Y0SamIdx = 24, + MagiaTileX3Y1SamIdx = 25, + MagiaTileX3Y2SamIdx = 26, + MagiaTileX3Y3SamIdx = 27, + MagiaTileX3Y4SamIdx = 28, + MagiaTileX3Y5SamIdx = 29, + MagiaTileX3Y6SamIdx = 30, + MagiaTileX3Y7SamIdx = 31, + MagiaTileX4Y0SamIdx = 32, + MagiaTileX4Y1SamIdx = 33, + MagiaTileX4Y2SamIdx = 34, + MagiaTileX4Y3SamIdx = 35, + MagiaTileX4Y4SamIdx = 36, + MagiaTileX4Y5SamIdx = 37, + MagiaTileX4Y6SamIdx = 38, + MagiaTileX4Y7SamIdx = 39, + MagiaTileX5Y0SamIdx = 40, + MagiaTileX5Y1SamIdx = 41, + MagiaTileX5Y2SamIdx = 42, + MagiaTileX5Y3SamIdx = 43, + MagiaTileX5Y4SamIdx = 44, + MagiaTileX5Y5SamIdx = 45, + MagiaTileX5Y6SamIdx = 46, + MagiaTileX5Y7SamIdx = 47, + MagiaTileX6Y0SamIdx = 48, + MagiaTileX6Y1SamIdx = 49, + MagiaTileX6Y2SamIdx = 50, + MagiaTileX6Y3SamIdx = 51, + MagiaTileX6Y4SamIdx = 52, + MagiaTileX6Y5SamIdx = 53, + MagiaTileX6Y6SamIdx = 54, + MagiaTileX6Y7SamIdx = 55, + MagiaTileX7Y0SamIdx = 56, + MagiaTileX7Y1SamIdx = 57, + MagiaTileX7Y2SamIdx = 58, + MagiaTileX7Y3SamIdx = 59, + MagiaTileX7Y4SamIdx = 60, + MagiaTileX7Y5SamIdx = 61, + MagiaTileX7Y6SamIdx = 62, + MagiaTileX7Y7SamIdx = 63, + L20SamIdx = 64, + L21SamIdx = 65, + L22SamIdx = 66, + L23SamIdx = 67, + L24SamIdx = 68, + L25SamIdx = 69, + L26SamIdx = 70, + L27SamIdx = 71} sam_idx_e; + + + typedef logic[0:0] rob_idx_t; typedef logic[0:0] port_id_t; typedef logic[3:0] x_bits_t; @@ -105,6 +181,12 @@ typedef struct packed { typedef logic route_t; + typedef struct packed { + id_t idx; + id_t start_addr; + id_t end_addr; + } route_map_rule_t; + localparam int unsigned SamNumRules = 72; typedef struct packed { @@ -187,6 +269,644 @@ localparam sam_rule_t[SamNumRules-1:0] Sam = '{ '{idx: '{x: 2, y: 0, port_id: 0}, start_addr: 32'h00100000, end_addr: 32'h00200000},// magia_tile_x1_y0_sam_idx '{idx: '{x: 1, y: 0, port_id: 0}, start_addr: 32'h00000000, end_addr: 32'h00100000} // magia_tile_x0_y0_sam_idx + localparam int unsigned CollectiveSamNumRules = 72; + +typedef struct packed { + int unsigned offset; + int unsigned len; + int unsigned base_id; +} collective_mask_sel_t; + +typedef struct packed { + id_t id; + collective_mask_sel_t mask_x; + collective_mask_sel_t mask_y; +} collective_idx_t; + +typedef struct packed { + collective_idx_t idx; + logic [31:0] start_addr; + logic [31:0] end_addr; +} collective_sam_rule_t; + +localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ +'{ idx: '{ id: '{x: 0, y: 7, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf8000000, + end_addr: 32'h100000000},// L27 +'{ idx: '{ id: '{x: 0, y: 6, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf0000000, + end_addr: 32'hf8000000},// L26 +'{ idx: '{ id: '{x: 0, y: 5, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he8000000, + end_addr: 32'hf0000000},// L25 +'{ idx: '{ id: '{x: 0, y: 4, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he0000000, + end_addr: 32'he8000000},// L24 +'{ idx: '{ id: '{x: 0, y: 3, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd8000000, + end_addr: 32'he0000000},// L23 +'{ idx: '{ id: '{x: 0, y: 2, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd0000000, + end_addr: 32'hd8000000},// L22 +'{ idx: '{ id: '{x: 0, y: 1, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc8000000, + end_addr: 32'hd0000000},// L21 +'{ idx: '{ id: '{x: 0, y: 0, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc0000000, + end_addr: 32'hc8000000},// L20 +'{ idx: '{ id: '{x: 15, y: 7, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03f00000, + end_addr: 32'h04000000},// MagiaTileX7Y7 +'{ idx: '{ id: '{x: 15, y: 6, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03e00000, + end_addr: 32'h03f00000},// MagiaTileX7Y6 +'{ idx: '{ id: '{x: 15, y: 5, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03d00000, + end_addr: 32'h03e00000},// MagiaTileX7Y5 +'{ idx: '{ id: '{x: 15, y: 4, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03c00000, + end_addr: 32'h03d00000},// MagiaTileX7Y4 +'{ idx: '{ id: '{x: 15, y: 3, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03b00000, + end_addr: 32'h03c00000},// MagiaTileX7Y3 +'{ idx: '{ id: '{x: 15, y: 2, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03a00000, + end_addr: 32'h03b00000},// MagiaTileX7Y2 +'{ idx: '{ id: '{x: 15, y: 1, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03900000, + end_addr: 32'h03a00000},// MagiaTileX7Y1 +'{ idx: '{ id: '{x: 15, y: 0, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03800000, + end_addr: 32'h03900000},// MagiaTileX7Y0 +'{ idx: '{ id: '{x: 14, y: 7, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03700000, + end_addr: 32'h03800000},// MagiaTileX6Y7 +'{ idx: '{ id: '{x: 14, y: 6, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03600000, + end_addr: 32'h03700000},// MagiaTileX6Y6 +'{ idx: '{ id: '{x: 14, y: 5, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03500000, + end_addr: 32'h03600000},// MagiaTileX6Y5 +'{ idx: '{ id: '{x: 14, y: 4, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03400000, + end_addr: 32'h03500000},// MagiaTileX6Y4 +'{ idx: '{ id: '{x: 14, y: 3, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03300000, + end_addr: 32'h03400000},// MagiaTileX6Y3 +'{ idx: '{ id: '{x: 14, y: 2, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03200000, + end_addr: 32'h03300000},// MagiaTileX6Y2 +'{ idx: '{ id: '{x: 14, y: 1, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03100000, + end_addr: 32'h03200000},// MagiaTileX6Y1 +'{ idx: '{ id: '{x: 14, y: 0, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h03000000, + end_addr: 32'h03100000},// MagiaTileX6Y0 +'{ idx: '{ id: '{x: 13, y: 7, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02f00000, + end_addr: 32'h03000000},// MagiaTileX5Y7 +'{ idx: '{ id: '{x: 13, y: 6, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02e00000, + end_addr: 32'h02f00000},// MagiaTileX5Y6 +'{ idx: '{ id: '{x: 13, y: 5, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02d00000, + end_addr: 32'h02e00000},// MagiaTileX5Y5 +'{ idx: '{ id: '{x: 13, y: 4, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02c00000, + end_addr: 32'h02d00000},// MagiaTileX5Y4 +'{ idx: '{ id: '{x: 13, y: 3, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02b00000, + end_addr: 32'h02c00000},// MagiaTileX5Y3 +'{ idx: '{ id: '{x: 13, y: 2, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02a00000, + end_addr: 32'h02b00000},// MagiaTileX5Y2 +'{ idx: '{ id: '{x: 13, y: 1, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02900000, + end_addr: 32'h02a00000},// MagiaTileX5Y1 +'{ idx: '{ id: '{x: 13, y: 0, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02800000, + end_addr: 32'h02900000},// MagiaTileX5Y0 +'{ idx: '{ id: '{x: 12, y: 7, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02700000, + end_addr: 32'h02800000},// MagiaTileX4Y7 +'{ idx: '{ id: '{x: 12, y: 6, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02600000, + end_addr: 32'h02700000},// MagiaTileX4Y6 +'{ idx: '{ id: '{x: 12, y: 5, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02500000, + end_addr: 32'h02600000},// MagiaTileX4Y5 +'{ idx: '{ id: '{x: 12, y: 4, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02400000, + end_addr: 32'h02500000},// MagiaTileX4Y4 +'{ idx: '{ id: '{x: 12, y: 3, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02300000, + end_addr: 32'h02400000},// MagiaTileX4Y3 +'{ idx: '{ id: '{x: 12, y: 2, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02200000, + end_addr: 32'h02300000},// MagiaTileX4Y2 +'{ idx: '{ id: '{x: 12, y: 1, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02100000, + end_addr: 32'h02200000},// MagiaTileX4Y1 +'{ idx: '{ id: '{x: 12, y: 0, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h02000000, + end_addr: 32'h02100000},// MagiaTileX4Y0 +'{ idx: '{ id: '{x: 11, y: 7, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01f00000, + end_addr: 32'h02000000},// MagiaTileX3Y7 +'{ idx: '{ id: '{x: 11, y: 6, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01e00000, + end_addr: 32'h01f00000},// MagiaTileX3Y6 +'{ idx: '{ id: '{x: 11, y: 5, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01d00000, + end_addr: 32'h01e00000},// MagiaTileX3Y5 +'{ idx: '{ id: '{x: 11, y: 4, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01c00000, + end_addr: 32'h01d00000},// MagiaTileX3Y4 +'{ idx: '{ id: '{x: 11, y: 3, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01b00000, + end_addr: 32'h01c00000},// MagiaTileX3Y3 +'{ idx: '{ id: '{x: 11, y: 2, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01a00000, + end_addr: 32'h01b00000},// MagiaTileX3Y2 +'{ idx: '{ id: '{x: 11, y: 1, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01900000, + end_addr: 32'h01a00000},// MagiaTileX3Y1 +'{ idx: '{ id: '{x: 11, y: 0, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01800000, + end_addr: 32'h01900000},// MagiaTileX3Y0 +'{ idx: '{ id: '{x: 10, y: 7, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01700000, + end_addr: 32'h01800000},// MagiaTileX2Y7 +'{ idx: '{ id: '{x: 10, y: 6, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01600000, + end_addr: 32'h01700000},// MagiaTileX2Y6 +'{ idx: '{ id: '{x: 10, y: 5, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01500000, + end_addr: 32'h01600000},// MagiaTileX2Y5 +'{ idx: '{ id: '{x: 10, y: 4, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01400000, + end_addr: 32'h01500000},// MagiaTileX2Y4 +'{ idx: '{ id: '{x: 10, y: 3, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01300000, + end_addr: 32'h01400000},// MagiaTileX2Y3 +'{ idx: '{ id: '{x: 10, y: 2, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01200000, + end_addr: 32'h01300000},// MagiaTileX2Y2 +'{ idx: '{ id: '{x: 10, y: 1, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01100000, + end_addr: 32'h01200000},// MagiaTileX2Y1 +'{ idx: '{ id: '{x: 10, y: 0, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h01000000, + end_addr: 32'h01100000},// MagiaTileX2Y0 +'{ idx: '{ id: '{x: 9, y: 7, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00f00000, + end_addr: 32'h01000000},// MagiaTileX1Y7 +'{ idx: '{ id: '{x: 9, y: 6, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00e00000, + end_addr: 32'h00f00000},// MagiaTileX1Y6 +'{ idx: '{ id: '{x: 9, y: 5, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00d00000, + end_addr: 32'h00e00000},// MagiaTileX1Y5 +'{ idx: '{ id: '{x: 9, y: 4, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00c00000, + end_addr: 32'h00d00000},// MagiaTileX1Y4 +'{ idx: '{ id: '{x: 9, y: 3, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00b00000, + end_addr: 32'h00c00000},// MagiaTileX1Y3 +'{ idx: '{ id: '{x: 9, y: 2, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00a00000, + end_addr: 32'h00b00000},// MagiaTileX1Y2 +'{ idx: '{ id: '{x: 9, y: 1, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00900000, + end_addr: 32'h00a00000},// MagiaTileX1Y1 +'{ idx: '{ id: '{x: 9, y: 0, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00800000, + end_addr: 32'h00900000},// MagiaTileX1Y0 +'{ idx: '{ id: '{x: 8, y: 7, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00700000, + end_addr: 32'h00800000},// MagiaTileX0Y7 +'{ idx: '{ id: '{x: 8, y: 6, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00600000, + end_addr: 32'h00700000},// MagiaTileX0Y6 +'{ idx: '{ id: '{x: 8, y: 5, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00500000, + end_addr: 32'h00600000},// MagiaTileX0Y5 +'{ idx: '{ id: '{x: 8, y: 4, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00400000, + end_addr: 32'h00500000},// MagiaTileX0Y4 +'{ idx: '{ id: '{x: 8, y: 3, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00300000, + end_addr: 32'h00400000},// MagiaTileX0Y3 +'{ idx: '{ id: '{x: 8, y: 2, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00200000, + end_addr: 32'h00300000},// MagiaTileX0Y2 +'{ idx: '{ id: '{x: 8, y: 1, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX0Y1 +'{ idx: '{ id: '{x: 8, y: 0, port_id: 0}, + mask_x: '{ offset: 23, + len: 4, + base_id: 8}, + mask_y: '{ offset: 20, + len: 3, + base_id: 0}}, + start_addr: 32'h00000000, + end_addr: 32'h00100000} // MagiaTileX0Y0 + }; @@ -197,10 +917,38 @@ localparam sam_rule_t[SamNumRules-1:0] Sam = '{ XYAddrOffsetY: 36, IdAddrOffset: 0, NumSamRules: 72, - NumRoutes: 0}; + NumRoutes: 0, + CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, + EnWideMulticast: 1'b1, + EnLsbAnd: 1'b1, + EnFpAdd: 1'b0, + EnFpMul: 1'b0, + EnFpMin: 1'b0, + EnFpMax: 1'b0, + EnIntAdd: 1'b0, + EnIntMul: 1'b0, + EnIntMinS: 1'b0, + EnIntMinU: 1'b0, + EnIntMaxS: 1'b0, + EnIntMaxU: 1'b0}, + NarrRedCfg: RedDefaultCfg, + WideRedCfg: RedDefaultCfg}}; + - typedef logic[31:0] axi_narrow_data_mst_addr_t; + typedef logic[31:0] collective_axi_narrow_data_mst_addr_t; +typedef logic[31:0] collective_axi_narrow_data_mst_data_t; +typedef logic[3:0] collective_axi_narrow_data_mst_strb_t; +typedef logic[1:0] collective_axi_narrow_data_mst_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_narrow_data_mst_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_mst, collective_axi_narrow_data_mst_req_t, collective_axi_narrow_data_mst_rsp_t, collective_axi_narrow_data_mst_addr_t, collective_axi_narrow_data_mst_id_t, collective_axi_narrow_data_mst_data_t, collective_axi_narrow_data_mst_strb_t, collective_axi_narrow_data_mst_user_t) + + + typedef logic[31:0] axi_narrow_data_mst_addr_t; typedef logic[31:0] axi_narrow_data_mst_data_t; typedef logic[3:0] axi_narrow_data_mst_strb_t; typedef logic[2:0] axi_narrow_data_mst_id_t; @@ -208,7 +956,19 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_mst, axi_narrow_data_mst_req_t, axi_narrow_data_mst_rsp_t, axi_narrow_data_mst_addr_t, axi_narrow_data_mst_id_t, axi_narrow_data_mst_data_t, axi_narrow_data_mst_strb_t, axi_narrow_data_mst_user_t) - typedef logic[31:0] axi_narrow_data_slv_addr_t; + typedef logic[31:0] collective_axi_narrow_data_slv_addr_t; +typedef logic[31:0] collective_axi_narrow_data_slv_data_t; +typedef logic[3:0] collective_axi_narrow_data_slv_strb_t; +typedef logic[3:0] collective_axi_narrow_data_slv_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_narrow_data_slv_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_slv, collective_axi_narrow_data_slv_req_t, collective_axi_narrow_data_slv_rsp_t, collective_axi_narrow_data_slv_addr_t, collective_axi_narrow_data_slv_id_t, collective_axi_narrow_data_slv_data_t, collective_axi_narrow_data_slv_strb_t, collective_axi_narrow_data_slv_user_t) + + + typedef logic[31:0] axi_narrow_data_slv_addr_t; typedef logic[31:0] axi_narrow_data_slv_data_t; typedef logic[3:0] axi_narrow_data_slv_strb_t; typedef logic[5:0] axi_narrow_data_slv_id_t; @@ -216,7 +976,19 @@ typedef logic[0:0] axi_narrow_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_slv, axi_narrow_data_slv_req_t, axi_narrow_data_slv_rsp_t, axi_narrow_data_slv_addr_t, axi_narrow_data_slv_id_t, axi_narrow_data_slv_data_t, axi_narrow_data_slv_strb_t, axi_narrow_data_slv_user_t) - typedef logic[31:0] axi_wide_data_mst_addr_t; + typedef logic[31:0] collective_axi_wide_data_mst_addr_t; +typedef logic[255:0] collective_axi_wide_data_mst_data_t; +typedef logic[31:0] collective_axi_wide_data_mst_strb_t; +typedef logic[1:0] collective_axi_wide_data_mst_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_wide_data_mst_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_mst, collective_axi_wide_data_mst_req_t, collective_axi_wide_data_mst_rsp_t, collective_axi_wide_data_mst_addr_t, collective_axi_wide_data_mst_id_t, collective_axi_wide_data_mst_data_t, collective_axi_wide_data_mst_strb_t, collective_axi_wide_data_mst_user_t) + + + typedef logic[31:0] axi_wide_data_mst_addr_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; typedef logic[2:0] axi_wide_data_mst_id_t; @@ -224,7 +996,19 @@ typedef logic[0:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) - typedef logic[31:0] axi_wide_data_slv_addr_t; + typedef logic[31:0] collective_axi_wide_data_slv_addr_t; +typedef logic[255:0] collective_axi_wide_data_slv_data_t; +typedef logic[31:0] collective_axi_wide_data_slv_strb_t; +typedef logic[1:0] collective_axi_wide_data_slv_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_wide_data_slv_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_slv, collective_axi_wide_data_slv_req_t, collective_axi_wide_data_slv_rsp_t, collective_axi_wide_data_slv_addr_t, collective_axi_wide_data_slv_id_t, collective_axi_wide_data_slv_data_t, collective_axi_wide_data_slv_strb_t, collective_axi_wide_data_slv_user_t) + + + typedef logic[31:0] axi_wide_data_slv_addr_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; typedef logic[2:0] axi_wide_data_slv_id_t; @@ -233,17 +1017,17 @@ typedef logic[0:0] axi_wide_data_slv_user_t; - `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t) + `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: 32, DataWidth: 32, - UserWidth: 1, - InIdWidth: 6, - OutIdWidth: 3}; + InIdWidth: 4, + OutIdWidth: 2, + UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - UserWidth: 1, - InIdWidth: 3, - OutIdWidth: 3}; + InIdWidth: 2, + OutIdWidth: 2, + UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) diff --git a/hw/mesh/noc/magia_noc_pkg.sv b/hw/mesh/noc/magia_noc_pkg.sv index 00533c76..f664f7ad 100644 --- a/hw/mesh/noc/magia_noc_pkg.sv +++ b/hw/mesh/noc/magia_noc_pkg.sv @@ -107,10 +107,10 @@ package magia_noc_pkg; CollectiveSam = floo_axi_nw_mesh_4x4_noc_pkg::CollectiveSam; end 32'd64: begin - CollectiveSam = floo_axi_nw_mesh_8x8_noc_pkg::Sam; + CollectiveSam = floo_axi_nw_mesh_8x8_noc_pkg::CollectiveSam; end 32'd256: begin - CollectiveSam = floo_axi_nw_mesh_16x16_noc_pkg::Sam; + CollectiveSam = floo_axi_nw_mesh_16x16_noc_pkg::CollectiveSam; end 32'd1024: begin CollectiveSam = floo_axi_nw_mesh_32x32_noc_pkg::Sam; @@ -153,38 +153,6 @@ package magia_noc_pkg; localparam route_cfg_t RouteCfg = gen_route_config(N_TILES); - /********************************** - ** BROADCAST MASK ** - **********************************/ - // Helper function to get the broadcast mask - function automatic logic[31:0] gen_broadcast_mask(int unsigned num_tiles); - logic[31:0] mask; - - case (num_tiles) - 32'd4: begin - mask = 32'h00300000; - end - 32'd16: begin - mask = 32'h00F00000; - end - 32'd64: begin - mask = 32'h00300000; - end - 32'd256: begin - mask = 32'h00300000; - end - 32'd1024: begin - mask = 32'h00300000; - end - endcase - - return mask; - endfunction - - // Actual declaration of the Broadcast Mask - localparam logic[31:0] BroadcastMask = gen_broadcast_mask(N_TILES); - localparam logic[3:0] CollectiveOp = 4'b0010; // 0x0 Unicast; 0x1 Multicast; 0x2 Barrier - //********** STANDARD AXI STRUCTS **********// typedef logic[ADDR_W-1:0] axi_narrow_data_mst_addr_t; typedef logic[DATA_W-1:0] axi_narrow_data_mst_data_t; From 69f4bd40545683cd9b20724640bafcc1c6fa9919 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Fri, 3 Jul 2026 15:23:51 +0200 Subject: [PATCH 08/26] [SW] Added new tests: row/column multicast and synchronization --- .../narrow_broadcast_mm.c | 5 +- .../collectives/narrow_multicast_column_mm.c | 58 +++++++++++++++++++ .../collectives/narrow_multicast_row_mm.c | 58 +++++++++++++++++++ sw/tests/collectives/narrow_sync_column_mm.c | 51 ++++++++++++++++ .../narrow_sync_mesh_mm.c} | 13 +++-- sw/tests/collectives/narrow_sync_row_mm.c | 50 ++++++++++++++++ sw/utils/magia_coll_utils.h | 46 +++++++++++++-- sw/utils/magia_utils.h | 4 +- 8 files changed, 271 insertions(+), 14 deletions(-) rename sw/tests/{mm_tests => collectives}/narrow_broadcast_mm.c (95%) create mode 100644 sw/tests/collectives/narrow_multicast_column_mm.c create mode 100644 sw/tests/collectives/narrow_multicast_row_mm.c create mode 100644 sw/tests/collectives/narrow_sync_column_mm.c rename sw/tests/{mm_tests/narrow_reduction_mm.c => collectives/narrow_sync_mesh_mm.c} (73%) create mode 100644 sw/tests/collectives/narrow_sync_row_mm.c diff --git a/sw/tests/mm_tests/narrow_broadcast_mm.c b/sw/tests/collectives/narrow_broadcast_mm.c similarity index 95% rename from sw/tests/mm_tests/narrow_broadcast_mm.c rename to sw/tests/collectives/narrow_broadcast_mm.c index 3a921c46..4e1f1ab3 100644 --- a/sw/tests/mm_tests/narrow_broadcast_mm.c +++ b/sw/tests/collectives/narrow_broadcast_mm.c @@ -26,12 +26,13 @@ #define END_OF_TEST_OFFSET (0x0) #define END_PATTERN (0xCCAA) #define BROADCAST_WORD (0x12345678) + #define SOURCE_HART_ID 3 int main() { - set_collective_mask(gen_collective_mask()); - set_collective_op(BROADCAST); + set_collective_mask(gen_collective_mask(ALL)); + set_collective_op(MULTICAST); if(get_hartid() == SOURCE_HART_ID) { diff --git a/sw/tests/collectives/narrow_multicast_column_mm.c b/sw/tests/collectives/narrow_multicast_column_mm.c new file mode 100644 index 00000000..b3ed7daa --- /dev/null +++ b/sw/tests/collectives/narrow_multicast_column_mm.c @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Carlotta Chiarini + * + * MAGIA Column multicast test over the narrow channel. + */ + +#include "magia_utils.h" +#include "magia_coll_utils.h" + +#define MEM_OFFSET (0x1000) +#define END_OF_TEST_OFFSET (0x0) +#define END_PATTERN (0xCCAA) +#define BROADCAST_WORD (0x12345678) + +#define SOURCE_HART_ID 3 + +int main() { + + set_collective_mask(gen_collective_mask(COLUMN)); + set_collective_op(MULTICAST); + + if(get_hartid() == SOURCE_HART_ID) { + + printf("Source of the broadcast\n"); + + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + MEM_OFFSET) = (int) BROADCAST_WORD; + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; + + } else { + if(GET_X_ID(get_hartid()) == GET_X_ID(SOURCE_HART_ID)){ + printf("Destination of the multicast\n"); + + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + + if(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) == BROADCAST_WORD) + printf("TEST PASSED\n"); + else + printf("ERROR: Expected 0x%x; Actual: 0x%x\n", BROADCAST_WORD, *(volatile int *)(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET)); + } + } + + return 0; +} diff --git a/sw/tests/collectives/narrow_multicast_row_mm.c b/sw/tests/collectives/narrow_multicast_row_mm.c new file mode 100644 index 00000000..7a0a902f --- /dev/null +++ b/sw/tests/collectives/narrow_multicast_row_mm.c @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Carlotta Chiarini + * + * MAGIA Column multicast test over the narrow channel. + */ + +#include "magia_utils.h" +#include "magia_coll_utils.h" + +#define MEM_OFFSET (0x1000) +#define END_OF_TEST_OFFSET (0x0) +#define END_PATTERN (0xCCAA) +#define BROADCAST_WORD (0x12345678) + +#define SOURCE_HART_ID 3 + +int main() { + + set_collective_mask(gen_collective_mask(ROW)); + set_collective_op(MULTICAST); + + if(get_hartid() == SOURCE_HART_ID) { + + printf("Source of the broadcast\n"); + + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + MEM_OFFSET) = (int) BROADCAST_WORD; + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; + + } else { + if(GET_Y_ID(get_hartid()) == GET_Y_ID(SOURCE_HART_ID)){ + printf("Destination of the multicast\n"); + + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + + if(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) == BROADCAST_WORD) + printf("TEST PASSED\n"); + else + printf("ERROR: Expected 0x%x; Actual: 0x%x\n", BROADCAST_WORD, *(volatile int *)(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET)); + } + } + + return 0; +} diff --git a/sw/tests/collectives/narrow_sync_column_mm.c b/sw/tests/collectives/narrow_sync_column_mm.c new file mode 100644 index 00000000..86677c95 --- /dev/null +++ b/sw/tests/collectives/narrow_sync_column_mm.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Carlotta Chiarini + * + * MAGIA Column synchronization test over the narrow channel + * using the built-in FlooNoC collectives + */ + +#include "magia_utils.h" +#include "magia_coll_utils.h" + +#define MEM_OFFSET (0x1000) +#define DESTINATION_HART_ID 6 +#define CACHE_HEAT_CYCLES (5) + +int main() { + + set_collective_mask(gen_collective_mask(COLUMN)); + set_collective_op(REDUCE); + + if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)){ + printf("Synchronizing...\n"); + // Execute synchronization multiple times to pre-heat the cache + for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { + // Data to be reduced (LsbAND) + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; + magia_fence(); + } + } + + if(get_hartid() == DESTINATION_HART_ID){ + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != 3) {}; + printf("TEST PASSED\n"); + } + + return 0; +} diff --git a/sw/tests/mm_tests/narrow_reduction_mm.c b/sw/tests/collectives/narrow_sync_mesh_mm.c similarity index 73% rename from sw/tests/mm_tests/narrow_reduction_mm.c rename to sw/tests/collectives/narrow_sync_mesh_mm.c index 36cf98ea..cbfb91af 100644 --- a/sw/tests/mm_tests/narrow_reduction_mm.c +++ b/sw/tests/collectives/narrow_sync_mesh_mm.c @@ -23,15 +23,20 @@ #include "magia_coll_utils.h" #define MEM_OFFSET (0x1000) -#define DESTINATION_HART_ID 4 +#define DESTINATION_HART_ID 6 +#define CACHE_HEAT_CYCLES (5) int main() { - set_collective_mask(gen_collective_mask()); + set_collective_mask(gen_collective_mask(ALL)); set_collective_op(REDUCE); - // Data to be reduced (LsbAND) - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; + // Execute synchronization multiple times to pre-heat the cache + for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { + // Data to be reduced (LsbAND) + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; + magia_fence(); + } if(get_hartid() == DESTINATION_HART_ID){ while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != 3) {}; diff --git a/sw/tests/collectives/narrow_sync_row_mm.c b/sw/tests/collectives/narrow_sync_row_mm.c new file mode 100644 index 00000000..8c51cbb0 --- /dev/null +++ b/sw/tests/collectives/narrow_sync_row_mm.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Carlotta Chiarini + * + * MAGIA Reduction test over the narrow channel + */ + +#include "magia_utils.h" +#include "magia_coll_utils.h" + +#define MEM_OFFSET (0x1000) +#define DESTINATION_HART_ID 6 +#define CACHE_HEAT_CYCLES (5) + +int main() { + + set_collective_mask(gen_collective_mask(ROW)); + set_collective_op(REDUCE); + + if(GET_Y_ID(get_hartid()) == GET_Y_ID(DESTINATION_HART_ID)){ + printf("Synchronizing...\n"); + // Execute synchronization multiple times to pre-heat the cache + for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { + // Data to be reduced (LsbAND) + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; + magia_fence(); + } + } + + if(get_hartid() == DESTINATION_HART_ID){ + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != 3) {}; + printf("TEST PASSED\n"); + } + + return 0; +} diff --git a/sw/utils/magia_coll_utils.h b/sw/utils/magia_coll_utils.h index 762dcce5..f0af4358 100644 --- a/sw/utils/magia_coll_utils.h +++ b/sw/utils/magia_coll_utils.h @@ -31,9 +31,13 @@ #define MASK_OFFSET 20 -#define BROADCAST 1 +#define MULTICAST 1 #define REDUCE 2 +#define ALL 1 +#define COLUMN 2 +#define ROW 3 + #define mmio32(x) (*(volatile uint32_t *)(x)) static inline void set_collective_mask(uint32_t collective_mask) { @@ -45,11 +49,41 @@ static inline void set_collective_op(uint32_t collective_op) { } // The collective mask is composed of an Y_FIELD starting from MASK_OFFSET, followed by an X_FIELD -static inline uint32_t gen_collective_mask() { - if(NUM_HARTS == 4) - return (1 << (MASK_OFFSET)) | (1 << (MASK_OFFSET + 1)); - else if (NUM_HARTS == 16) - return (3 << (MASK_OFFSET)) | (3 << (MASK_OFFSET + 2)); +static inline uint32_t gen_collective_mask(uint32_t geometry) { + if(NUM_HARTS == 4){ + if (geometry == ALL) + return (1 << (MASK_OFFSET)) | (1 << (MASK_OFFSET + 1)); + else if (geometry == COLUMN) + return (1 << (MASK_OFFSET)); + else if (geometry == ROW) + return (1 << (MASK_OFFSET + 1)); + } else if (NUM_HARTS == 16){ + if (geometry == ALL) + return (3 << (MASK_OFFSET)) | (3 << (MASK_OFFSET + 2)); + else if (geometry == COLUMN) + return (3 << (MASK_OFFSET)); + else if (geometry == ROW) + return (3 << (MASK_OFFSET + 2)); + } else if (NUM_HARTS == 64){ + if (geometry == ALL) + return (7 << (MASK_OFFSET)) | (7 << (MASK_OFFSET + 3)); + else if (geometry == COLUMN) + return (7 << (MASK_OFFSET)); + else if (geometry == ROW) + return (7 << (MASK_OFFSET + 3)); + } else if (NUM_HARTS == 256){ + if (geometry == ALL) + return (15 << (MASK_OFFSET)) | (15 << (MASK_OFFSET + 4)); + else if (geometry == COLUMN) + return (15 << (MASK_OFFSET)); + else if (geometry == ROW) + return (15 << (MASK_OFFSET + 4)); + } + +} + +static inline void magia_fence() { + asm volatile("fence" ::: "memory"); } #endif diff --git a/sw/utils/magia_utils.h b/sw/utils/magia_utils.h index e59a9f99..c182ec29 100644 --- a/sw/utils/magia_utils.h +++ b/sw/utils/magia_utils.h @@ -34,8 +34,8 @@ #define MESH_X_TILES (4) #define NUM_HARTS (MESH_Y_TILES*MESH_X_TILES) -#define GET_Y_ID(mhartid) ((mhartid)/MESH_Y_TILES) -#define GET_X_ID(mhartid) ((mhartid)%MESH_Y_TILES) +#define GET_Y_ID(mhartid) ((mhartid)%MESH_Y_TILES) +#define GET_X_ID(mhartid) ((mhartid)/MESH_Y_TILES) #define GET_ID(y_id, x_id) (((x_id)*MESH_X_TILES)+(y_id)) #define h_pprintf(x) (h_psprint(get_hartid(), x)) From cbffcdee14b3e7fa22f6b362db4a23f8d4591185 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Thu, 9 Jul 2026 08:30:28 +0200 Subject: [PATCH 09/26] [SW] Add wide multicast tests; add sentinels to measure synchronization latency --- .../collectives/narrow_multicast_row_mm.c | 16 +-- sw/tests/collectives/narrow_sync_column_mm.c | 4 +- sw/tests/collectives/narrow_sync_mesh_mm.c | 4 +- sw/tests/collectives/narrow_sync_row_mm.c | 4 +- .../wide_broadcast_mm.c} | 62 +++++----- .../collectives/wide_multicast_column_mm.c | 113 ++++++++++++++++++ sw/tests/collectives/wide_multicast_row_mm.c | 113 ++++++++++++++++++ 7 files changed, 278 insertions(+), 38 deletions(-) rename sw/tests/{mm_tests/idma_broadcast_mm.c => collectives/wide_broadcast_mm.c} (58%) create mode 100644 sw/tests/collectives/wide_multicast_column_mm.c create mode 100644 sw/tests/collectives/wide_multicast_row_mm.c diff --git a/sw/tests/collectives/narrow_multicast_row_mm.c b/sw/tests/collectives/narrow_multicast_row_mm.c index 7a0a902f..4683ae80 100644 --- a/sw/tests/collectives/narrow_multicast_row_mm.c +++ b/sw/tests/collectives/narrow_multicast_row_mm.c @@ -42,16 +42,16 @@ int main() { *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; } else { - if(GET_Y_ID(get_hartid()) == GET_Y_ID(SOURCE_HART_ID)){ - printf("Destination of the multicast\n"); + if(GET_Y_ID(get_hartid()) == GET_Y_ID(SOURCE_HART_ID)){ + printf("Destination of the multicast\n"); - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; - if(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) == BROADCAST_WORD) - printf("TEST PASSED\n"); - else - printf("ERROR: Expected 0x%x; Actual: 0x%x\n", BROADCAST_WORD, *(volatile int *)(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET)); - } + if(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) == BROADCAST_WORD) + printf("TEST PASSED\n"); + else + printf("ERROR: Expected 0x%x; Actual: 0x%x\n", BROADCAST_WORD, *(volatile int *)(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET)); + } } return 0; diff --git a/sw/tests/collectives/narrow_sync_column_mm.c b/sw/tests/collectives/narrow_sync_column_mm.c index 86677c95..e93d4ce3 100644 --- a/sw/tests/collectives/narrow_sync_column_mm.c +++ b/sw/tests/collectives/narrow_sync_column_mm.c @@ -24,7 +24,7 @@ #include "magia_coll_utils.h" #define MEM_OFFSET (0x1000) -#define DESTINATION_HART_ID 6 +#define DESTINATION_HART_ID 0 #define CACHE_HEAT_CYCLES (5) int main() { @@ -37,8 +37,10 @@ int main() { // Execute synchronization multiple times to pre-heat the cache for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { // Data to be reduced (LsbAND) + sentinel_start(); *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; magia_fence(); + sentinel_end(); } } diff --git a/sw/tests/collectives/narrow_sync_mesh_mm.c b/sw/tests/collectives/narrow_sync_mesh_mm.c index cbfb91af..a98befe8 100644 --- a/sw/tests/collectives/narrow_sync_mesh_mm.c +++ b/sw/tests/collectives/narrow_sync_mesh_mm.c @@ -23,7 +23,7 @@ #include "magia_coll_utils.h" #define MEM_OFFSET (0x1000) -#define DESTINATION_HART_ID 6 +#define DESTINATION_HART_ID 0 #define CACHE_HEAT_CYCLES (5) int main() { @@ -34,8 +34,10 @@ int main() { // Execute synchronization multiple times to pre-heat the cache for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { // Data to be reduced (LsbAND) + sentinel_start(); *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; magia_fence(); + sentinel_end(); } if(get_hartid() == DESTINATION_HART_ID){ diff --git a/sw/tests/collectives/narrow_sync_row_mm.c b/sw/tests/collectives/narrow_sync_row_mm.c index 8c51cbb0..55821ebf 100644 --- a/sw/tests/collectives/narrow_sync_row_mm.c +++ b/sw/tests/collectives/narrow_sync_row_mm.c @@ -23,7 +23,7 @@ #include "magia_coll_utils.h" #define MEM_OFFSET (0x1000) -#define DESTINATION_HART_ID 6 +#define DESTINATION_HART_ID 0 #define CACHE_HEAT_CYCLES (5) int main() { @@ -36,8 +36,10 @@ int main() { // Execute synchronization multiple times to pre-heat the cache for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { // Data to be reduced (LsbAND) + sentinel_start(); *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; magia_fence(); + sentinel_end(); } } diff --git a/sw/tests/mm_tests/idma_broadcast_mm.c b/sw/tests/collectives/wide_broadcast_mm.c similarity index 58% rename from sw/tests/mm_tests/idma_broadcast_mm.c rename to sw/tests/collectives/wide_broadcast_mm.c index c4234675..6d01e990 100644 --- a/sw/tests/mm_tests/idma_broadcast_mm.c +++ b/sw/tests/collectives/wide_broadcast_mm.c @@ -17,31 +17,28 @@ * Authors: Luca Balboni * Based on idma_test.c by Victor Isachi * - * MAGIA Broscast test over iDMA using Memory-Mapped Control + * MAGIA Broadcast test over iDMA using Memory-Mapped Control */ #include "magia_utils.h" #include "magia_tile_utils.h" #include "idma_mm_utils.h" +#include "magia_coll_utils.h" #include "x_input.h" -//#define X_BASE (L1_BASE + 0x00012048) -#define X_BASE (L1_BASE + 0x00112048) +#define X_BASE (L1_BASE + 0x00012048) #define Y_BASE (L1_BASE + 0x00016048) #define Z_BASE (L2_BASE + 0x00001000) -#define W_BASE (L2_BASE + 0x00005000) #define M_SIZE (16) #define N_SIZE (16) #define VERBOSE (0) -#define WAIT_CYCLES (10) +#define END_OF_TEST_OFFSET (0x0) +#define END_PATTERN (0xCCAA) -#define CONCURRENT - -#define MEM_OFFSET (0x1000) -#define MHARTID_OFFSET (0x00100000) +#define SOURCE_HART_ID 3 int main(void) { @@ -52,17 +49,17 @@ int main(void) { uint32_t mask; uint32_t collective_op; - if(get_hartid() == 0) { + if(get_hartid() == SOURCE_HART_ID) { // ******** WRITING DATA TO L2 MEMORY ******** // printf("Before writing data to memory...\n"); for (int i = 0; i < M_SIZE*N_SIZE; i++) mmio16(Z_BASE + 2*i) = x_inp[i]; - dst_addr = (uint32_t)(X_BASE); - src_addr = (uint32_t)Z_BASE; + dst_addr = (uint32_t)(X_BASE + get_hartid()*L1_TILE_OFFSET); + src_addr = (uint32_t)(Z_BASE); len = (uint32_t)(M_SIZE*N_SIZE*2); // 2 Bytes per element - broad_addr = (uint32_t)(X_BASE); + broad_addr = (uint32_t)(X_BASE + get_hartid()*L1_TILE_OFFSET); // ******** MOVING DATA FROM L2 TO L1 TILE 0 MEMORY ******** // #if VERBOSE > 10 @@ -79,25 +76,36 @@ int main(void) { // **************** BROADCASTING ************** // - if(NUM_HARTS==4) - mask = 0x00300000; - else if(NUM_HARTS==16) - mask = 0x00F00000; - else if(NUM_HARTS==64) - mask = 0x00F00000; - else if(NUM_HARTS==256) - mask = 0x00F00000; - else - mask = 0x00F00000; - - collective_op = 0x1; // 0x0 Unicast; 0x1 Multicast - uint32_t transfer_id_1 = broadcast(dst_addr, broad_addr, len, mask, collective_op); + uint32_t transfer_id_1 = broadcast(dst_addr, broad_addr, len, gen_collective_mask(ALL), MULTICAST); printf("Broadcasting...\n"); // Use polling to wait for completion dma_wait(transfer_id_1); - printf("End of test...\n"); + // Inform all the cores about the newly arrived data + printf("Sending end of test signal...\n"); + set_collective_mask(gen_collective_mask(ALL)); + set_collective_op(MULTICAST); + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; + + } else { + + printf("Destination of the broadcast...\n"); + // Polling on the end_of_test address offset + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + + uint16_t detected_l1, detected_l2, expected; + unsigned int num_errors = 0; + for(int i = 0; i < M_SIZE*N_SIZE; i++){ + detected_l1 = mmio16(X_BASE + get_hartid()*L1_TILE_OFFSET + 2*i); + expected = mmio16(Z_BASE + 2*i); + if(detected_l1 != expected){ + num_errors++; + printf("**ERROR**: DETECTED L1[%0d](=0x%4x) != EXPECTED[%0d](=0x%4x)\n", i, detected_l1, i, expected); + } + } + printf("Finished test with %0d errors\n", num_errors); + } return 0; diff --git a/sw/tests/collectives/wide_multicast_column_mm.c b/sw/tests/collectives/wide_multicast_column_mm.c new file mode 100644 index 00000000..b26fcc6d --- /dev/null +++ b/sw/tests/collectives/wide_multicast_column_mm.c @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2023-2024 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Luca Balboni + * Based on idma_test.c by Victor Isachi + * + * MAGIA Columns multicast test over iDMA using Memory-Mapped Control + */ +#include "magia_utils.h" +#include "magia_tile_utils.h" +#include "idma_mm_utils.h" +#include "magia_coll_utils.h" + +#include "x_input.h" + +#define X_BASE (L1_BASE + 0x00012048) +#define Y_BASE (L1_BASE + 0x00016048) +#define Z_BASE (L2_BASE + 0x00001000) + +#define M_SIZE (16) +#define N_SIZE (16) + +#define VERBOSE (0) + +#define END_OF_TEST_OFFSET (0x0) +#define END_PATTERN (0xCCAA) + +#define SOURCE_HART_ID 3 + +int main(void) { + + uint32_t dst_addr; + uint32_t src_addr; + uint32_t broad_addr; + uint32_t len; + uint32_t mask; + uint32_t collective_op; + + if(get_hartid() == SOURCE_HART_ID) { + + // ******** WRITING DATA TO L2 MEMORY ******** // + printf("Before writing data to memory...\n"); + for (int i = 0; i < M_SIZE*N_SIZE; i++) + mmio16(Z_BASE + 2*i) = x_inp[i]; + + dst_addr = (uint32_t)(X_BASE + get_hartid()*L1_TILE_OFFSET); + src_addr = (uint32_t)(Z_BASE); + len = (uint32_t)(M_SIZE*N_SIZE*2); // 2 Bytes per element + broad_addr = (uint32_t)(X_BASE + get_hartid()*L1_TILE_OFFSET); + + // ******** MOVING DATA FROM L2 TO L1 TILE 0 MEMORY ******** // + #if VERBOSE > 10 + printf("dst_addr: 0x%8x (X_BASE)\n", dst_addr); + printf("src_addr: 0x%8x (Z_BASE)\n", src_addr); + printf("len: %0d\n", len); + #endif + + uint32_t transfer_id_0 = idma_L2ToL1(src_addr, dst_addr, len); + printf("iDMA moving data from L2 to L1...\n"); + + // Use polling to wait for completion + dma_wait(transfer_id_0); + + + // **************** BROADCASTING ************** // + uint32_t transfer_id_1 = broadcast(dst_addr, broad_addr, len, gen_collective_mask(COLUMN), MULTICAST); + printf("Multicast over the column...\n"); + + // Use polling to wait for completion + dma_wait(transfer_id_1); + + // Inform all the cores about the newly arrived data + printf("Sending end of test signal...\n"); + set_collective_mask(gen_collective_mask(COLUMN)); + set_collective_op(MULTICAST); + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; + + + } else { + if(GET_X_ID(get_hartid()) == GET_X_ID(SOURCE_HART_ID)){ + + printf("Destination of the multicast...\n"); + // Polling on the end_of_test address offset + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + + uint16_t detected_l1, detected_l2, expected; + unsigned int num_errors = 0; + for(int i = 0; i < M_SIZE*N_SIZE; i++){ + detected_l1 = mmio16(X_BASE + get_hartid()*L1_TILE_OFFSET + 2*i); + expected = mmio16(Z_BASE + 2*i); + if(detected_l1 != expected){ + num_errors++; + printf("**ERROR**: DETECTED L1[%0d](=0x%4x) != EXPECTED[%0d](=0x%4x)\n", i, detected_l1, i, expected); + } + } + printf("Finished test with %0d errors\n", num_errors); + } + } + return 0; +} \ No newline at end of file diff --git a/sw/tests/collectives/wide_multicast_row_mm.c b/sw/tests/collectives/wide_multicast_row_mm.c new file mode 100644 index 00000000..fd9f8575 --- /dev/null +++ b/sw/tests/collectives/wide_multicast_row_mm.c @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2023-2024 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Luca Balboni + * Based on idma_test.c by Victor Isachi + * + * MAGIA Broscast test over iDMA using Memory-Mapped Control + */ +#include "magia_utils.h" +#include "magia_tile_utils.h" +#include "idma_mm_utils.h" +#include "magia_coll_utils.h" + +#include "x_input.h" + +#define X_BASE (L1_BASE + 0x00012048) +#define Y_BASE (L1_BASE + 0x00016048) +#define Z_BASE (L2_BASE + 0x00001000) + +#define M_SIZE (16) +#define N_SIZE (16) + +#define VERBOSE (0) + +#define END_OF_TEST_OFFSET (0x0) +#define END_PATTERN (0xCCAA) + +#define SOURCE_HART_ID 3 + +int main(void) { + + uint32_t dst_addr; + uint32_t src_addr; + uint32_t broad_addr; + uint32_t len; + uint32_t mask; + uint32_t collective_op; + + if(get_hartid() == SOURCE_HART_ID) { + + // ******** WRITING DATA TO L2 MEMORY ******** // + printf("Before writing data to memory...\n"); + for (int i = 0; i < M_SIZE*N_SIZE; i++) + mmio16(Z_BASE + 2*i) = x_inp[i]; + + dst_addr = (uint32_t)(X_BASE + get_hartid()*L1_TILE_OFFSET); + src_addr = (uint32_t)(Z_BASE); + len = (uint32_t)(M_SIZE*N_SIZE*2); // 2 Bytes per element + broad_addr = (uint32_t)(X_BASE + get_hartid()*L1_TILE_OFFSET); + + // ******** MOVING DATA FROM L2 TO L1 TILE 0 MEMORY ******** // + #if VERBOSE > 10 + printf("dst_addr: 0x%8x (X_BASE)\n", dst_addr); + printf("src_addr: 0x%8x (Z_BASE)\n", src_addr); + printf("len: %0d\n", len); + #endif + + uint32_t transfer_id_0 = idma_L2ToL1(src_addr, dst_addr, len); + printf("iDMA moving data from L2 to L1...\n"); + + // Use polling to wait for completion + dma_wait(transfer_id_0); + + + // **************** BROADCASTING ************** // + uint32_t transfer_id_1 = broadcast(dst_addr, broad_addr, len, gen_collective_mask(ROW), MULTICAST); + printf("Multicast over the row...\n"); + + // Use polling to wait for completion + dma_wait(transfer_id_1); + + // Inform all the cores about the newly arrived data + printf("Sending end of test signal...\n"); + set_collective_mask(gen_collective_mask(ROW)); + set_collective_op(MULTICAST); + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; + + + } else { + if(GET_Y_ID(get_hartid()) == GET_Y_ID(SOURCE_HART_ID)){ + + printf("Destination of the multicast...\n"); + // Polling on the end_of_test address offset + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + + uint16_t detected_l1, detected_l2, expected; + unsigned int num_errors = 0; + for(int i = 0; i < M_SIZE*N_SIZE; i++){ + detected_l1 = mmio16(X_BASE + get_hartid()*L1_TILE_OFFSET + 2*i); + expected = mmio16(Z_BASE + 2*i); + if(detected_l1 != expected){ + num_errors++; + printf("**ERROR**: DETECTED L1[%0d](=0x%4x) != EXPECTED[%0d](=0x%4x)\n", i, detected_l1, i, expected); + } + } + printf("Finished test with %0d errors\n", num_errors); + } + } + return 0; +} \ No newline at end of file From 43f800f10abe838aca35927e5f2e81f7a4326d6f Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Thu, 9 Jul 2026 08:35:50 +0200 Subject: [PATCH 10/26] [HW] Remove collective_ prefix from the axi signals --- hw/mesh/magia.sv | 4 +- hw/mesh/noc/magia_noc_pkg.sv | 57 ++++++++++----------- hw/tile/magia_tile.sv | 24 ++++----- hw/tile/magia_tile_pkg.sv | 7 +-- target/sim/src/mesh/magia_l2_mem_wrapper.sv | 16 +++--- 5 files changed, 51 insertions(+), 57 deletions(-) diff --git a/hw/mesh/magia.sv b/hw/mesh/magia.sv index df4101e5..e45bfe3c 100644 --- a/hw/mesh/magia.sv +++ b/hw/mesh/magia.sv @@ -220,8 +220,8 @@ module magia .noc_west_rsp_o ( tile_west_rsp_out[i*N_TILES_X+j] ), .noc_west_wide_i ( tile_west_wide_in[i*N_TILES_X+j] ), - .x_id_i ( CollectiveSam[j*N_TILES_Y+i].idx.id.x ), - .y_id_i ( CollectiveSam[j*N_TILES_Y+i].idx.id.y ), + .x_id_i ( {{(32-$clog2(N_TILES_X+1)){1'b0}}, CollectiveSam[j*N_TILES_Y+i].idx.id.x} ), + .y_id_i ( {{(32-$clog2(N_TILES_Y)){1'b0}}, CollectiveSam[j*N_TILES_Y+i].idx.id.y} ), `ifdef VERILATOR .ht_fsync_req_o ( ht_tile_fsync_req[i*N_TILES_X+j][0] ), diff --git a/hw/mesh/noc/magia_noc_pkg.sv b/hw/mesh/noc/magia_noc_pkg.sv index f664f7ad..9969020b 100644 --- a/hw/mesh/noc/magia_noc_pkg.sv +++ b/hw/mesh/noc/magia_noc_pkg.sv @@ -152,8 +152,8 @@ package magia_noc_pkg; // Actual declaration of RouteCfg localparam route_cfg_t RouteCfg = gen_route_config(N_TILES); +/* - //********** STANDARD AXI STRUCTS **********// typedef logic[ADDR_W-1:0] axi_narrow_data_mst_addr_t; typedef logic[DATA_W-1:0] axi_narrow_data_mst_data_t; typedef logic[STRB_W-1:0] axi_narrow_data_mst_strb_t; @@ -183,48 +183,47 @@ package magia_noc_pkg; typedef logic[iDMA_AxiIdWidth-1:0] axi_wide_data_slv_id_t; typedef logic[iDMA_UserWidth-1:0] axi_wide_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_slv, axi_wide_data_slv_req_t, axi_wide_data_slv_rsp_t, axi_wide_data_slv_addr_t, axi_wide_data_slv_id_t, axi_wide_data_slv_data_t, axi_wide_data_slv_strb_t, axi_wide_data_slv_user_t) +*/ - - //********** COLLECTIVE AXI STRUCTS **********// - typedef logic[ADDR_W-1:0] collective_axi_narrow_data_mst_addr_t; - typedef logic[DATA_W-1:0] collective_axi_narrow_data_mst_data_t; - typedef logic[STRB_W-1:0] collective_axi_narrow_data_mst_strb_t; - typedef logic[L2_ID_W-1:0] collective_axi_narrow_data_mst_id_t; + typedef logic[ADDR_W-1:0] axi_narrow_data_mst_addr_t; + typedef logic[DATA_W-1:0] axi_narrow_data_mst_data_t; + typedef logic[STRB_W-1:0] axi_narrow_data_mst_strb_t; + typedef logic[L2_ID_W-1:0] axi_narrow_data_mst_id_t; typedef struct packed { logic [ADDR_W-1:0] collective_mask; logic [COLLECTIVE_OP_W-1:0] collective_op; - } collective_axi_narrow_data_mst_user_t; - `AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_mst, collective_axi_narrow_data_mst_req_t, collective_axi_narrow_data_mst_rsp_t, collective_axi_narrow_data_mst_addr_t, collective_axi_narrow_data_mst_id_t, collective_axi_narrow_data_mst_data_t, collective_axi_narrow_data_mst_strb_t, collective_axi_narrow_data_mst_user_t) + } axi_narrow_data_mst_user_t; + `AXI_TYPEDEF_ALL_CT(axi_narrow_data_mst, axi_narrow_data_mst_req_t, axi_narrow_data_mst_rsp_t, axi_narrow_data_mst_addr_t, axi_narrow_data_mst_id_t, axi_narrow_data_mst_data_t, axi_narrow_data_mst_strb_t, axi_narrow_data_mst_user_t) - typedef logic[ADDR_W-1:0] collective_axi_narrow_data_slv_addr_t; - typedef logic[DATA_W-1:0] collective_axi_narrow_data_slv_data_t; - typedef logic[STRB_W-1:0] collective_axi_narrow_data_slv_strb_t; - typedef logic[AXI_NOC_ID_W-1:0] collective_axi_narrow_data_slv_id_t; + typedef logic[ADDR_W-1:0] axi_narrow_data_slv_addr_t; + typedef logic[DATA_W-1:0] axi_narrow_data_slv_data_t; + typedef logic[STRB_W-1:0] axi_narrow_data_slv_strb_t; + typedef logic[AXI_NOC_ID_W-1:0] axi_narrow_data_slv_id_t; typedef struct packed { logic [ADDR_W-1:0] collective_mask; logic [COLLECTIVE_OP_W-1:0] collective_op; - } collective_axi_narrow_data_slv_user_t; - `AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_slv, collective_axi_narrow_data_slv_req_t, collective_axi_narrow_data_slv_rsp_t, collective_axi_narrow_data_slv_addr_t, collective_axi_narrow_data_slv_id_t, collective_axi_narrow_data_slv_data_t, collective_axi_narrow_data_slv_strb_t, collective_axi_narrow_data_slv_user_t) + } axi_narrow_data_slv_user_t; + `AXI_TYPEDEF_ALL_CT(axi_narrow_data_slv, axi_narrow_data_slv_req_t, axi_narrow_data_slv_rsp_t, axi_narrow_data_slv_addr_t, axi_narrow_data_slv_id_t, axi_narrow_data_slv_data_t, axi_narrow_data_slv_strb_t, axi_narrow_data_slv_user_t) - typedef logic[ADDR_W-1:0] collective_axi_wide_data_mst_addr_t; - typedef logic[WIDE_DATA_W-1:0] collective_axi_wide_data_mst_data_t; - typedef logic[WIDE_STRB_W-1:0] collective_axi_wide_data_mst_strb_t; - typedef logic[iDMA_AxiIdWidth-1:0] collective_axi_wide_data_mst_id_t; + typedef logic[ADDR_W-1:0] axi_wide_data_mst_addr_t; + typedef logic[WIDE_DATA_W-1:0] axi_wide_data_mst_data_t; + typedef logic[WIDE_STRB_W-1:0] axi_wide_data_mst_strb_t; + typedef logic[iDMA_AxiIdWidth-1:0] axi_wide_data_mst_id_t; typedef struct packed { logic [ADDR_W-1:0] collective_mask; logic [COLLECTIVE_OP_W-1:0] collective_op; - } collective_axi_wide_data_mst_user_t; - `AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_mst, collective_axi_wide_data_mst_req_t, collective_axi_wide_data_mst_rsp_t, collective_axi_wide_data_mst_addr_t, collective_axi_wide_data_mst_id_t, collective_axi_wide_data_mst_data_t, collective_axi_wide_data_mst_strb_t, collective_axi_wide_data_mst_user_t) + } axi_wide_data_mst_user_t; + `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) - typedef logic[ADDR_W-1:0] collective_axi_wide_data_slv_addr_t; - typedef logic[WIDE_DATA_W-1:0] collective_axi_wide_data_slv_data_t; - typedef logic[WIDE_STRB_W-1:0] collective_axi_wide_data_slv_strb_t; - typedef logic[iDMA_AxiIdWidth-1:0] collective_axi_wide_data_slv_id_t; + typedef logic[ADDR_W-1:0] axi_wide_data_slv_addr_t; + typedef logic[WIDE_DATA_W-1:0] axi_wide_data_slv_data_t; + typedef logic[WIDE_STRB_W-1:0] axi_wide_data_slv_strb_t; + typedef logic[iDMA_AxiIdWidth-1:0] axi_wide_data_slv_id_t; typedef struct packed { logic [ADDR_W-1:0] collective_mask; logic [COLLECTIVE_OP_W-1:0] collective_op; - } collective_axi_wide_data_slv_user_t; - `AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_slv, collective_axi_wide_data_slv_req_t, collective_axi_wide_data_slv_rsp_t, collective_axi_wide_data_slv_addr_t, collective_axi_wide_data_slv_id_t, collective_axi_wide_data_slv_data_t, collective_axi_wide_data_slv_strb_t, collective_axi_wide_data_slv_user_t) + } axi_wide_data_slv_user_t; + `AXI_TYPEDEF_ALL_CT(axi_wide_data_slv, axi_wide_data_slv_req_t, axi_wide_data_slv_rsp_t, axi_wide_data_slv_addr_t, axi_wide_data_slv_id_t, axi_wide_data_slv_data_t, axi_wide_data_slv_strb_t, axi_wide_data_slv_user_t) @@ -232,14 +231,14 @@ package magia_noc_pkg; localparam axi_cfg_t AxiCfgN = '{ AddrWidth: ADDR_W, DataWidth: DATA_W, - UserWidth: iDMA_UserWidth, + UserWidth: ADDR_W + COLLECTIVE_OP_W, InIdWidth: AXI_NOC_ID_W, OutIdWidth: L2_ID_W }; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: ADDR_W, DataWidth: WIDE_DATA_W, - UserWidth: iDMA_UserWidth, + UserWidth: ADDR_W + COLLECTIVE_OP_W, InIdWidth: iDMA_AxiIdWidth, OutIdWidth: iDMA_AxiIdWidth }; diff --git a/hw/tile/magia_tile.sv b/hw/tile/magia_tile.sv index bce07acc..a053ae07 100644 --- a/hw/tile/magia_tile.sv +++ b/hw/tile/magia_tile.sv @@ -305,8 +305,8 @@ module magia_tile logic[magia_tile_pkg::AID_WIDTH-1:0] axi2obi_req_read_aid; logic[magia_tile_pkg::AUSER_WIDTH-1:0] axi2obi_req_read_auser; - logic axi2obi_rsp_b_user; - logic axi2obi_rsp_r_user; + logic[magia_pkg::AXI_NOC_U_W-1:0] axi2obi_rsp_b_user; + logic[magia_pkg::AXI_NOC_U_W] axi2obi_rsp_r_user; logic idma_clear; // Can be used to manage iDMA clear at top-level logic idma_axi2obi_start; @@ -1747,16 +1747,16 @@ module magia_tile .sam_idx_t ( collective_idx_t ), .mask_sel_t ( collective_mask_sel_t ), .Sam ( CollectiveSam ), - .user_wide_struct_t ( collective_axi_wide_data_slv_user_t ), - .user_narrow_struct_t ( collective_axi_narrow_data_slv_user_t ), - .axi_narrow_in_req_t ( collective_axi_narrow_data_slv_req_t ), - .axi_narrow_in_rsp_t ( collective_axi_narrow_data_slv_rsp_t ), - .axi_narrow_out_req_t ( collective_axi_narrow_data_mst_req_t ), - .axi_narrow_out_rsp_t ( collective_axi_narrow_data_mst_rsp_t ), - .axi_wide_in_req_t ( collective_axi_wide_data_slv_req_t ), - .axi_wide_in_rsp_t ( collective_axi_wide_data_slv_rsp_t ), - .axi_wide_out_req_t ( collective_axi_wide_data_mst_req_t ), - .axi_wide_out_rsp_t ( collective_axi_wide_data_mst_rsp_t ), + .user_wide_struct_t ( axi_wide_data_slv_user_t ), + .user_narrow_struct_t ( axi_narrow_data_slv_user_t ), + .axi_narrow_in_req_t ( axi_narrow_data_slv_req_t ), + .axi_narrow_in_rsp_t ( axi_narrow_data_slv_rsp_t ), + .axi_narrow_out_req_t ( axi_narrow_data_mst_req_t ), + .axi_narrow_out_rsp_t ( axi_narrow_data_mst_rsp_t ), + .axi_wide_in_req_t ( axi_wide_data_slv_req_t ), + .axi_wide_in_rsp_t ( axi_wide_data_slv_rsp_t ), + .axi_wide_out_req_t ( axi_wide_data_mst_req_t ), + .axi_wide_out_rsp_t ( axi_wide_data_mst_rsp_t ), .floo_req_t ( floo_req_t ), .floo_rsp_t ( floo_rsp_t ), .floo_wide_t ( floo_wide_t ) diff --git a/hw/tile/magia_tile_pkg.sv b/hw/tile/magia_tile_pkg.sv index b2209015..45aec446 100644 --- a/hw/tile/magia_tile_pkg.sv +++ b/hw/tile/magia_tile_pkg.sv @@ -625,12 +625,7 @@ package magia_tile_pkg; `IDMA_TYPEDEF_FULL_RSP_T(idma_be_rsp_t, idma_addr_t) `IDMA_TYPEDEF_FULL_ND_REQ_T(idma_nd_req_t, idma_be_req_t, logic[iDMA_RepWidth-1:0], logic[iDMA_StrideWidth-1:0]) - typedef struct packed { - logic [magia_pkg::ADDR_W-1:0] collective_mask; - logic [3:0] collective_op; - } axi_wide_data_slv_user_t; - - `AXI_TYPEDEF_ALL_CT(idma_axi, idma_axi_req_t, idma_axi_rsp_t, logic[iDMA_AddrWidth-1:0], logic[iDMA_AxiIdWidth-1:0], logic[iDMA_DataWidth-1:0], logic[iDMA_StrbWidth-1:0], axi_wide_data_slv_user_t) + `AXI_TYPEDEF_ALL_CT(idma_axi, idma_axi_req_t, idma_axi_rsp_t, logic[iDMA_AddrWidth-1:0], logic[iDMA_AxiIdWidth-1:0], logic[iDMA_DataWidth-1:0], logic[iDMA_StrbWidth-1:0], logic[iDMA_UserWidth-1:0]) localparam obi_pkg::obi_optional_cfg_t obi_idma_optional_cfg = obi_pkg::obi_all_optional_config(AUSER_WIDTH, WUSER_WIDTH, RUSER_WIDTH, MID_WIDTH, ACHK_WIDTH, RCHK_WIDTH); localparam obi_pkg::obi_cfg_t obi_idma_cfg = obi_pkg::obi_default_cfg(iDMA_AddrWidth, iDMA_DataWidth, iDMA_AxiIdWidth, obi_idma_optional_cfg); diff --git a/target/sim/src/mesh/magia_l2_mem_wrapper.sv b/target/sim/src/mesh/magia_l2_mem_wrapper.sv index cdfec042..bb3e546a 100644 --- a/target/sim/src/mesh/magia_l2_mem_wrapper.sv +++ b/target/sim/src/mesh/magia_l2_mem_wrapper.sv @@ -51,8 +51,8 @@ module magia_l2_mem_wrapper magia_pkg::axi_narrow_l2_req_t [NumPorts-1:0] l2_narrow_data_req; magia_pkg::axi_narrow_l2_rsp_t [NumPorts-1:0] l2_narrow_data_rsp; - collective_axi_wide_data_mst_req_t [NumPorts-1:0] l2_wide_data_req; - collective_axi_wide_data_mst_rsp_t [NumPorts-1:0] l2_wide_data_rsp; + axi_wide_data_mst_req_t [NumPorts-1:0] l2_wide_data_req; + axi_wide_data_mst_rsp_t [NumPorts-1:0] l2_wide_data_rsp; // AXI bus narrow channel upsized magia_pkg::axi_wide_l2_req_t [NumPorts-1:0] l2_upsize_data_req; magia_pkg::axi_wide_l2_rsp_t [NumPorts-1:0] l2_upsize_data_rsp; @@ -112,12 +112,12 @@ module magia_l2_mem_wrapper .axi_narrow_in_rsp_t ( axi_narrow_data_slv_rsp_t ), .axi_narrow_out_req_t ( axi_narrow_data_mst_req_t ), .axi_narrow_out_rsp_t ( axi_narrow_data_mst_rsp_t ), - .user_narrow_struct_t ( collective_axi_narrow_data_slv_user_t ), - .axi_wide_in_req_t ( collective_axi_wide_data_slv_req_t ), - .axi_wide_in_rsp_t ( collective_axi_wide_data_slv_rsp_t ), - .axi_wide_out_req_t ( collective_axi_wide_data_mst_req_t ), - .axi_wide_out_rsp_t ( collective_axi_wide_data_mst_rsp_t ), - .user_wide_struct_t ( collective_axi_wide_data_slv_user_t ), + .user_narrow_struct_t ( axi_narrow_data_slv_user_t ), + .axi_wide_in_req_t ( axi_wide_data_slv_req_t ), + .axi_wide_in_rsp_t ( axi_wide_data_slv_rsp_t ), + .axi_wide_out_req_t ( axi_wide_data_mst_req_t ), + .axi_wide_out_rsp_t ( axi_wide_data_mst_rsp_t ), + .user_wide_struct_t ( axi_wide_data_slv_user_t ), .floo_req_t ( floo_req_t ), .floo_rsp_t ( floo_rsp_t ), .floo_wide_t ( floo_wide_t ) From c7fa6efb0d4fc28a3aace1c332d3e2d9df682b02 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Mon, 13 Jul 2026 11:07:33 +0200 Subject: [PATCH 11/26] [WIP] Add first support for reduce operations, both on the wide and narrow channels --- hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv | 20 ++-- hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv | 20 ++-- hw/tile/magia_tile.sv | 100 ++++++++++++---- hw/tile/magia_tile_pkg.sv | 7 ++ .../collectives/narrow_reduce_column_mm.c | 50 ++++++++ sw/tests/collectives/narrow_sync_column_mm.c | 2 +- sw/tests/collectives/narrow_sync_mesh_mm.c | 2 +- sw/tests/collectives/narrow_sync_row_mm.c | 2 +- sw/tests/collectives/wide_broadcast_mm.c | 2 +- .../collectives/wide_multicast_column_mm.c | 2 +- sw/tests/collectives/wide_multicast_row_mm.c | 2 +- sw/tests/collectives/wide_reduce_column_mm.c | 111 ++++++++++++++++++ sw/utils/idma_mm_utils.h | 2 +- sw/utils/magia_coll_utils.h | 13 +- 14 files changed, 281 insertions(+), 54 deletions(-) create mode 100644 sw/tests/collectives/narrow_reduce_column_mm.c create mode 100644 sw/tests/collectives/wide_reduce_column_mm.c diff --git a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv index 9a40ca50..98d363f3 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv @@ -153,16 +153,16 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, EnLsbAnd: 1'b1, - EnFpAdd: 1'b0, - EnFpMul: 1'b0, - EnFpMin: 1'b0, - EnFpMax: 1'b0, - EnIntAdd: 1'b0, - EnIntMul: 1'b0, - EnIntMinS: 1'b0, - EnIntMinU: 1'b0, - EnIntMaxS: 1'b0, - EnIntMaxU: 1'b0 + EnFpAdd: 1'b1, + EnFpMul: 1'b1, + EnFpMin: 1'b1, + EnFpMax: 1'b1, + EnIntAdd: 1'b1, + EnIntMul: 1'b1, + EnIntMinS: 1'b1, + EnIntMinU: 1'b1, + EnIntMaxS: 1'b1, + EnIntMaxU: 1'b1 }, NarrRedCfg: RedDefaultCfg, WideRedCfg: RedDefaultCfg diff --git a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv index 130c9346..b7ec7d78 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv @@ -313,16 +313,16 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, EnLsbAnd: 1'b1, - EnFpAdd: 1'b0, - EnFpMul: 1'b0, - EnFpMin: 1'b0, - EnFpMax: 1'b0, - EnIntAdd: 1'b0, - EnIntMul: 1'b0, - EnIntMinS: 1'b0, - EnIntMinU: 1'b0, - EnIntMaxS: 1'b0, - EnIntMaxU: 1'b0}, + EnFpAdd: 1'b1, + EnFpMul: 1'b1, + EnFpMin: 1'b1, + EnFpMax: 1'b1, + EnIntAdd: 1'b1, + EnIntMul: 1'b1, + EnIntMinS: 1'b1, + EnIntMinU: 1'b1, + EnIntMaxS: 1'b1, + EnIntMaxU: 1'b1}, NarrRedCfg: RedDefaultCfg, WideRedCfg: RedDefaultCfg}}; diff --git a/hw/tile/magia_tile.sv b/hw/tile/magia_tile.sv index a053ae07..81e82452 100644 --- a/hw/tile/magia_tile.sv +++ b/hw/tile/magia_tile.sv @@ -1661,34 +1661,82 @@ module magia_tile /** FlooNoC Modules Beginning **/ /*******************************************************/ + red_wide_req_t offload_wide_req; + red_wide_rsp_t offload_wide_rsp; + + red_narrow_req_t offload_narrow_req; + red_narrow_rsp_t offload_narrow_rsp; + + logic[63:0] wide_alu_result, narrow_alu_result; + + floo_reduction_alu i_wide_floo_alu ( + .clk_i(sys_clk), + .rst_ni(rst_ni), + .flush_i(1'b0), + .alu_req_op1_i(offload_wide_req.req.operand1[63:0]), + .alu_req_op2_i(offload_wide_req.req.operand2[63:0]), + .alu_req_type_i(offload_wide_req.req.op), + .alu_req_valid_i(offload_wide_req.valid), + .alu_req_ready_o(offload_wide_rsp.ready), + .alu_resp_data_o(wide_alu_result), + .alu_resp_valid_o(offload_wide_rsp.valid), + .alu_resp_ready_i(offload_wide_req.ready) +); + + +floo_reduction_alu i_narrow_floo_alu ( + .clk_i(sys_clk), + .rst_ni(rst_ni), + .flush_i(1'b0), + .alu_req_op1_i({{32{1'b0}},offload_narrow_req.req.operand1}), + .alu_req_op2_i({{32{1'b0}},offload_narrow_req.req.operand2}), + .alu_req_type_i(offload_narrow_req.req.op), + .alu_req_valid_i(offload_narrow_req.valid), + .alu_req_ready_o(offload_narrow_rsp.ready), + .alu_resp_data_o(narrow_alu_result), + .alu_resp_valid_o(offload_narrow_rsp.valid), + .alu_resp_ready_i(offload_narrow_req.ready) +); + +assign offload_wide_rsp.rsp.result = {{192{1'b0}}, wide_alu_result}; +assign offload_narrow_rsp.rsp.result = narrow_alu_result[31:0]; + floo_nw_router #( - .AxiCfgN ( AxiCfgN ), - .AxiCfgW ( AxiCfgW ), - .RouteAlgo ( XYRouting ), - .NumRoutes ( 5 ), - .NumInputs ( 5 ), - .NumOutputs ( 5 ), - .InFifoDepth ( 2 ), - .OutFifoDepth ( 2 ), - .NoLoopback ( 1'b0 ), - .CollectiveCfg( RouteCfg.CollectiveCfg ), - .id_t ( id_t ), - .hdr_t ( hdr_t ), - .floo_req_t ( floo_req_t ), - .floo_rsp_t ( floo_rsp_t ), - .floo_wide_t ( floo_wide_t ) + .AxiCfgN ( AxiCfgN ), + .AxiCfgW ( AxiCfgW ), + .RouteAlgo ( XYRouting ), + .NumRoutes ( 5 ), + .NumInputs ( 5 ), + .NumOutputs ( 5 ), + .InFifoDepth ( 2 ), + .OutFifoDepth ( 2 ), + .NoLoopback ( 1'b0 ), + .CollectiveCfg ( RouteCfg.CollectiveCfg ), + .id_t ( id_t ), + .hdr_t ( hdr_t ), + .floo_req_t ( floo_req_t ), + .floo_rsp_t ( floo_rsp_t ), + .floo_wide_t ( floo_wide_t ), + .red_wide_req_t ( red_wide_req_t ), + .red_wide_rsp_t ( red_wide_rsp_t ), + .red_narrow_req_t ( red_narrow_req_t ), + .red_narrow_rsp_t ( red_narrow_rsp_t ) ) i_magia_tile_router ( - .clk_i ( sys_clk ), - .rst_ni ( rst_ni ), - .test_enable_i ( test_mode_i ), - .id_i ( floo_id ), - .id_route_map_i ( '0 ), - .floo_req_i ( floo_router_req_in ), - .floo_rsp_o ( floo_router_rsp_out ), - .floo_req_o ( floo_router_req_out ), - .floo_rsp_i ( floo_router_rsp_in ), - .floo_wide_i ( floo_router_wide_in ), - .floo_wide_o ( floo_router_wide_out ) + .clk_i ( sys_clk ), + .rst_ni ( rst_ni ), + .test_enable_i ( test_mode_i ), + .id_i ( floo_id ), + .id_route_map_i ( '0 ), + .floo_req_i ( floo_router_req_in ), + .floo_rsp_o ( floo_router_rsp_out ), + .floo_req_o ( floo_router_req_out ), + .floo_rsp_i ( floo_router_rsp_in ), + .floo_wide_i ( floo_router_wide_in ), + .floo_wide_o ( floo_router_wide_out ), + .offload_wide_req_o ( offload_wide_req ), + .offload_wide_rsp_i ( offload_wide_rsp ), + .offload_narrow_req_o ( offload_narrow_req ), + .offload_narrow_rsp_i ( offload_narrow_rsp ) ); // Output requests diff --git a/hw/tile/magia_tile_pkg.sv b/hw/tile/magia_tile_pkg.sv index 45aec446..2a2485d2 100644 --- a/hw/tile/magia_tile_pkg.sv +++ b/hw/tile/magia_tile_pkg.sv @@ -31,6 +31,7 @@ package magia_tile_pkg; `include "fractal_sync/typedef.svh" `include "reqrsp_interface/typedef.svh" `include "tcdm_interface/typedef.svh" + `include "floo_noc/typedef.svh" `include "../include/alias.svh" @@ -742,6 +743,12 @@ package magia_tile_pkg; `OBI_TYPEDEF_RSP_T(spatz_obi32_rsp_t, spatz_obi32_r_chan_t) + typedef logic [255:0] wide_data_t; + `FLOO_RED_TYPEDEF_REQ_RSP_LINK(wide, wide_data_t, wide_req, wide_rsp) + + typedef logic [31:0] narrow_data_t; + `FLOO_RED_TYPEDEF_REQ_RSP_LINK(narrow, narrow_data_t, narrow_req, narrow_rsp) + endpackage: magia_tile_pkg diff --git a/sw/tests/collectives/narrow_reduce_column_mm.c b/sw/tests/collectives/narrow_reduce_column_mm.c new file mode 100644 index 00000000..dd078ef4 --- /dev/null +++ b/sw/tests/collectives/narrow_reduce_column_mm.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Carlotta Chiarini + * + * MAGIA Column Reduce test over the narrow channel + * using the built-in FlooNoC collectives + */ + +#include "magia_utils.h" +#include "magia_coll_utils.h" + +#define REDUCE_OFFSET (0x1000) +#define DESTINATION_HART_ID 0 +#define CACHE_HEAT_CYCLES (5) + +int main() { + + uint32_t unreduced_data = 100; + uint32_t reduced_data; + + set_collective_mask(gen_collective_mask(COLUMN)); + set_collective_op(INT_ADD); + + if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)){ + printf("Summing...\n"); + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; + } + + if(get_hartid() == DESTINATION_HART_ID){ + reduced_data = unreduced_data * MESH_X_TILES; + while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; + printf("SUM TEST PASSED\n"); + } + + return 0; +} diff --git a/sw/tests/collectives/narrow_sync_column_mm.c b/sw/tests/collectives/narrow_sync_column_mm.c index e93d4ce3..04ec7510 100644 --- a/sw/tests/collectives/narrow_sync_column_mm.c +++ b/sw/tests/collectives/narrow_sync_column_mm.c @@ -30,7 +30,7 @@ int main() { set_collective_mask(gen_collective_mask(COLUMN)); - set_collective_op(REDUCE); + set_collective_op(LSBAND); if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)){ printf("Synchronizing...\n"); diff --git a/sw/tests/collectives/narrow_sync_mesh_mm.c b/sw/tests/collectives/narrow_sync_mesh_mm.c index a98befe8..28ccbd9c 100644 --- a/sw/tests/collectives/narrow_sync_mesh_mm.c +++ b/sw/tests/collectives/narrow_sync_mesh_mm.c @@ -29,7 +29,7 @@ int main() { set_collective_mask(gen_collective_mask(ALL)); - set_collective_op(REDUCE); + set_collective_op(LSBAND); // Execute synchronization multiple times to pre-heat the cache for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { diff --git a/sw/tests/collectives/narrow_sync_row_mm.c b/sw/tests/collectives/narrow_sync_row_mm.c index 55821ebf..1cfa9a9f 100644 --- a/sw/tests/collectives/narrow_sync_row_mm.c +++ b/sw/tests/collectives/narrow_sync_row_mm.c @@ -29,7 +29,7 @@ int main() { set_collective_mask(gen_collective_mask(ROW)); - set_collective_op(REDUCE); + set_collective_op(LSBAND); if(GET_Y_ID(get_hartid()) == GET_Y_ID(DESTINATION_HART_ID)){ printf("Synchronizing...\n"); diff --git a/sw/tests/collectives/wide_broadcast_mm.c b/sw/tests/collectives/wide_broadcast_mm.c index 6d01e990..58abb7d1 100644 --- a/sw/tests/collectives/wide_broadcast_mm.c +++ b/sw/tests/collectives/wide_broadcast_mm.c @@ -76,7 +76,7 @@ int main(void) { // **************** BROADCASTING ************** // - uint32_t transfer_id_1 = broadcast(dst_addr, broad_addr, len, gen_collective_mask(ALL), MULTICAST); + uint32_t transfer_id_1 = collective(dst_addr, broad_addr, len, gen_collective_mask(ALL), MULTICAST); printf("Broadcasting...\n"); // Use polling to wait for completion diff --git a/sw/tests/collectives/wide_multicast_column_mm.c b/sw/tests/collectives/wide_multicast_column_mm.c index b26fcc6d..473167b5 100644 --- a/sw/tests/collectives/wide_multicast_column_mm.c +++ b/sw/tests/collectives/wide_multicast_column_mm.c @@ -76,7 +76,7 @@ int main(void) { // **************** BROADCASTING ************** // - uint32_t transfer_id_1 = broadcast(dst_addr, broad_addr, len, gen_collective_mask(COLUMN), MULTICAST); + uint32_t transfer_id_1 = collective(dst_addr, broad_addr, len, gen_collective_mask(COLUMN), MULTICAST); printf("Multicast over the column...\n"); // Use polling to wait for completion diff --git a/sw/tests/collectives/wide_multicast_row_mm.c b/sw/tests/collectives/wide_multicast_row_mm.c index fd9f8575..ce1ec29a 100644 --- a/sw/tests/collectives/wide_multicast_row_mm.c +++ b/sw/tests/collectives/wide_multicast_row_mm.c @@ -76,7 +76,7 @@ int main(void) { // **************** BROADCASTING ************** // - uint32_t transfer_id_1 = broadcast(dst_addr, broad_addr, len, gen_collective_mask(ROW), MULTICAST); + uint32_t transfer_id_1 = collective(dst_addr, broad_addr, len, gen_collective_mask(ROW), MULTICAST); printf("Multicast over the row...\n"); // Use polling to wait for completion diff --git a/sw/tests/collectives/wide_reduce_column_mm.c b/sw/tests/collectives/wide_reduce_column_mm.c new file mode 100644 index 00000000..30061058 --- /dev/null +++ b/sw/tests/collectives/wide_reduce_column_mm.c @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2023-2024 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Authors: Luca Balboni + * Based on idma_test.c by Victor Isachi + * + * MAGIA Broadcast test over iDMA using Memory-Mapped Control + */ +#include "magia_utils.h" +#include "magia_tile_utils.h" +#include "idma_mm_utils.h" +#include "magia_coll_utils.h" + +#include "x_input.h" + +#define X_BASE (L1_BASE + 0x00012000) +#define Y_BASE (L1_BASE + 0x00016048) +#define Z_BASE (L2_BASE + 0x00001000) + +#define REDUCE_OFFSET 0x1000 + +#define TRANSFER_SIZE (16) + +#define VERBOSE (11) + +#define END_OF_TEST_OFFSET (0x0) +#define END_PATTERN (0xCCAA) + +#define DESTINATION_HART_ID 0 + +#define MHARTID_OFFSET (0x0001000) + +int main(void) { + + uint32_t dst_addr; + uint32_t src_addr; + uint32_t reduce_addr; + uint32_t len; + uint32_t mask; + uint32_t collective_op; + uint32_t unreduced_data = 100; + uint32_t reduced_data; + + + if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)) { + + printf("Writing data in L2 memory...\n"); + + mmio32(Z_BASE + get_hartid()*MHARTID_OFFSET) = unreduced_data; + + dst_addr = (uint32_t)(X_BASE + get_hartid()*L1_TILE_OFFSET); + src_addr = (uint32_t)(Z_BASE + get_hartid()*MHARTID_OFFSET); + len = (uint32_t)(TRANSFER_SIZE); + reduce_addr = (uint32_t)(X_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET); + + #if VERBOSE > 10 + printf("dst_addr: 0x%8x (X_BASE)\n", dst_addr); + printf("src_addr: 0x%8x (Z_BASE)\n", src_addr); + printf("len: %0d\n", len); + #endif + + printf("iDMA moving data from L2 to L1...\n"); + uint32_t transfer_id_0 = idma_L2ToL1(src_addr, dst_addr, len); + dma_wait(transfer_id_0); + } + + + // ******** INT SUM TEST ******** // + if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)) { + printf("Summing...\n"); + uint32_t transfer_id_1 = collective(dst_addr, reduce_addr, len, gen_collective_mask(COLUMN), INT_ADD); + dma_wait(transfer_id_1); + } + if(get_hartid() == DESTINATION_HART_ID){ + reduced_data = unreduced_data * MESH_X_TILES; + while(*(volatile int*) (X_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; + printf("SUM TEST PASSED\n"); + } + + + // ******** MUL SUM TEST ******** // + if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)) { + printf("Multiplying...\n"); + uint32_t transfer_id_1 = collective(dst_addr, reduce_addr, len, gen_collective_mask(COLUMN), INT_MUL); + dma_wait(transfer_id_1); + } + if(get_hartid() == DESTINATION_HART_ID){ + reduced_data = unreduced_data; + + for(int i = 0; i < (MESH_X_TILES-1); i++) + reduced_data = reduced_data*unreduced_data; + + while(*(volatile int*) (X_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) != (int)reduced_data) {}; + printf("MUL TEST PASSED\n"); + } + + return 0; +} \ No newline at end of file diff --git a/sw/utils/idma_mm_utils.h b/sw/utils/idma_mm_utils.h index fecf92db..a57a1cb0 100644 --- a/sw/utils/idma_mm_utils.h +++ b/sw/utils/idma_mm_utils.h @@ -257,7 +257,7 @@ static inline int idma_L1ToL2(unsigned int src, unsigned int dst, unsigned short return idma_mm_start_transfer_dir(1, 0); } -static inline int broadcast(unsigned int src, unsigned int dst, unsigned short size, uint32_t mask, uint32_t collective_op) { +static inline int collective(unsigned int src, unsigned int dst, unsigned short size, uint32_t mask, uint32_t collective_op) { idma_mm_conf_default_dir(1); idma_mm_set_addr_len_dir(1, dst, src, size); idma_mm_set_2d_params_dir(1, 0, 0, 1); diff --git a/sw/utils/magia_coll_utils.h b/sw/utils/magia_coll_utils.h index f0af4358..cc554ab2 100644 --- a/sw/utils/magia_coll_utils.h +++ b/sw/utils/magia_coll_utils.h @@ -32,7 +32,18 @@ #define MASK_OFFSET 20 #define MULTICAST 1 -#define REDUCE 2 +#define LSBAND 2 +#define FP_ADD 3 +#define FP_MUL 4 +#define FP_MIN 5 +#define FP_MIN 6 +#define INT_ADD 7 +#define INT_MUL 8 +#define INT_MINS 9 +#define INT_MINU 10 +#define INT_MAXS 11 +#define INT_MAXU 12 + #define ALL 1 #define COLUMN 2 From dcb8467e84e4d66ff8a542908b487bf0b8a40b08 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Thu, 16 Jul 2026 15:16:22 +0200 Subject: [PATCH 12/26] [NOC] Update floonoc configuration files and corresponding packages generated by means of floogen --- hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv | 3547 ++-- hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv | 233 +- hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv | 16777 ++++++++++++++-- hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv | 241 +- hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv | 889 +- .../floonoc_axi_nw_mesh_16x16_config.yml | 44 +- .../floonoc_axi_nw_mesh_2x2_config.yml | 28 +- .../floonoc_axi_nw_mesh_32x32_config.yml | 44 +- .../floonoc_axi_nw_mesh_4x4_config.yml | 44 +- .../floonoc_axi_nw_mesh_8x8_config.yml | 44 +- 10 files changed, 17761 insertions(+), 4130 deletions(-) diff --git a/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv index c100ec1a..c2139a47 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv @@ -11,266 +11,275 @@ package floo_axi_nw_mesh_16x16_noc_pkg; import floo_pkg::*; + ///////////////////////////// + // Endpoint Dimensions // + ///////////////////////////// + + localparam int unsigned NumMagiaTileX = 16; +localparam int unsigned NumMagiaTileY = 16; +localparam int unsigned NumL2 = 16; + + ///////////////////// // Address Map // ///////////////////// typedef enum logic[8:0] { MagiaTileX0Y0 = 0, - MagiaTileX0Y1 = 1, - MagiaTileX0Y2 = 2, - MagiaTileX0Y3 = 3, - MagiaTileX0Y4 = 4, - MagiaTileX0Y5 = 5, - MagiaTileX0Y6 = 6, - MagiaTileX0Y7 = 7, - MagiaTileX0Y8 = 8, - MagiaTileX0Y9 = 9, - MagiaTileX0Y10 = 10, - MagiaTileX0Y11 = 11, - MagiaTileX0Y12 = 12, - MagiaTileX0Y13 = 13, - MagiaTileX0Y14 = 14, - MagiaTileX0Y15 = 15, - MagiaTileX1Y0 = 16, + MagiaTileX1Y0 = 1, + MagiaTileX2Y0 = 2, + MagiaTileX3Y0 = 3, + MagiaTileX4Y0 = 4, + MagiaTileX5Y0 = 5, + MagiaTileX6Y0 = 6, + MagiaTileX7Y0 = 7, + MagiaTileX8Y0 = 8, + MagiaTileX9Y0 = 9, + MagiaTileX10Y0 = 10, + MagiaTileX11Y0 = 11, + MagiaTileX12Y0 = 12, + MagiaTileX13Y0 = 13, + MagiaTileX14Y0 = 14, + MagiaTileX15Y0 = 15, + MagiaTileX0Y1 = 16, MagiaTileX1Y1 = 17, - MagiaTileX1Y2 = 18, - MagiaTileX1Y3 = 19, - MagiaTileX1Y4 = 20, - MagiaTileX1Y5 = 21, - MagiaTileX1Y6 = 22, - MagiaTileX1Y7 = 23, - MagiaTileX1Y8 = 24, - MagiaTileX1Y9 = 25, - MagiaTileX1Y10 = 26, - MagiaTileX1Y11 = 27, - MagiaTileX1Y12 = 28, - MagiaTileX1Y13 = 29, - MagiaTileX1Y14 = 30, - MagiaTileX1Y15 = 31, - MagiaTileX2Y0 = 32, - MagiaTileX2Y1 = 33, + MagiaTileX2Y1 = 18, + MagiaTileX3Y1 = 19, + MagiaTileX4Y1 = 20, + MagiaTileX5Y1 = 21, + MagiaTileX6Y1 = 22, + MagiaTileX7Y1 = 23, + MagiaTileX8Y1 = 24, + MagiaTileX9Y1 = 25, + MagiaTileX10Y1 = 26, + MagiaTileX11Y1 = 27, + MagiaTileX12Y1 = 28, + MagiaTileX13Y1 = 29, + MagiaTileX14Y1 = 30, + MagiaTileX15Y1 = 31, + MagiaTileX0Y2 = 32, + MagiaTileX1Y2 = 33, MagiaTileX2Y2 = 34, - MagiaTileX2Y3 = 35, - MagiaTileX2Y4 = 36, - MagiaTileX2Y5 = 37, - MagiaTileX2Y6 = 38, - MagiaTileX2Y7 = 39, - MagiaTileX2Y8 = 40, - MagiaTileX2Y9 = 41, - MagiaTileX2Y10 = 42, - MagiaTileX2Y11 = 43, - MagiaTileX2Y12 = 44, - MagiaTileX2Y13 = 45, - MagiaTileX2Y14 = 46, - MagiaTileX2Y15 = 47, - MagiaTileX3Y0 = 48, - MagiaTileX3Y1 = 49, - MagiaTileX3Y2 = 50, + MagiaTileX3Y2 = 35, + MagiaTileX4Y2 = 36, + MagiaTileX5Y2 = 37, + MagiaTileX6Y2 = 38, + MagiaTileX7Y2 = 39, + MagiaTileX8Y2 = 40, + MagiaTileX9Y2 = 41, + MagiaTileX10Y2 = 42, + MagiaTileX11Y2 = 43, + MagiaTileX12Y2 = 44, + MagiaTileX13Y2 = 45, + MagiaTileX14Y2 = 46, + MagiaTileX15Y2 = 47, + MagiaTileX0Y3 = 48, + MagiaTileX1Y3 = 49, + MagiaTileX2Y3 = 50, MagiaTileX3Y3 = 51, - MagiaTileX3Y4 = 52, - MagiaTileX3Y5 = 53, - MagiaTileX3Y6 = 54, - MagiaTileX3Y7 = 55, - MagiaTileX3Y8 = 56, - MagiaTileX3Y9 = 57, - MagiaTileX3Y10 = 58, - MagiaTileX3Y11 = 59, - MagiaTileX3Y12 = 60, - MagiaTileX3Y13 = 61, - MagiaTileX3Y14 = 62, - MagiaTileX3Y15 = 63, - MagiaTileX4Y0 = 64, - MagiaTileX4Y1 = 65, - MagiaTileX4Y2 = 66, - MagiaTileX4Y3 = 67, + MagiaTileX4Y3 = 52, + MagiaTileX5Y3 = 53, + MagiaTileX6Y3 = 54, + MagiaTileX7Y3 = 55, + MagiaTileX8Y3 = 56, + MagiaTileX9Y3 = 57, + MagiaTileX10Y3 = 58, + MagiaTileX11Y3 = 59, + MagiaTileX12Y3 = 60, + MagiaTileX13Y3 = 61, + MagiaTileX14Y3 = 62, + MagiaTileX15Y3 = 63, + MagiaTileX0Y4 = 64, + MagiaTileX1Y4 = 65, + MagiaTileX2Y4 = 66, + MagiaTileX3Y4 = 67, MagiaTileX4Y4 = 68, - MagiaTileX4Y5 = 69, - MagiaTileX4Y6 = 70, - MagiaTileX4Y7 = 71, - MagiaTileX4Y8 = 72, - MagiaTileX4Y9 = 73, - MagiaTileX4Y10 = 74, - MagiaTileX4Y11 = 75, - MagiaTileX4Y12 = 76, - MagiaTileX4Y13 = 77, - MagiaTileX4Y14 = 78, - MagiaTileX4Y15 = 79, - MagiaTileX5Y0 = 80, - MagiaTileX5Y1 = 81, - MagiaTileX5Y2 = 82, - MagiaTileX5Y3 = 83, - MagiaTileX5Y4 = 84, + MagiaTileX5Y4 = 69, + MagiaTileX6Y4 = 70, + MagiaTileX7Y4 = 71, + MagiaTileX8Y4 = 72, + MagiaTileX9Y4 = 73, + MagiaTileX10Y4 = 74, + MagiaTileX11Y4 = 75, + MagiaTileX12Y4 = 76, + MagiaTileX13Y4 = 77, + MagiaTileX14Y4 = 78, + MagiaTileX15Y4 = 79, + MagiaTileX0Y5 = 80, + MagiaTileX1Y5 = 81, + MagiaTileX2Y5 = 82, + MagiaTileX3Y5 = 83, + MagiaTileX4Y5 = 84, MagiaTileX5Y5 = 85, - MagiaTileX5Y6 = 86, - MagiaTileX5Y7 = 87, - MagiaTileX5Y8 = 88, - MagiaTileX5Y9 = 89, - MagiaTileX5Y10 = 90, - MagiaTileX5Y11 = 91, - MagiaTileX5Y12 = 92, - MagiaTileX5Y13 = 93, - MagiaTileX5Y14 = 94, - MagiaTileX5Y15 = 95, - MagiaTileX6Y0 = 96, - MagiaTileX6Y1 = 97, - MagiaTileX6Y2 = 98, - MagiaTileX6Y3 = 99, - MagiaTileX6Y4 = 100, - MagiaTileX6Y5 = 101, + MagiaTileX6Y5 = 86, + MagiaTileX7Y5 = 87, + MagiaTileX8Y5 = 88, + MagiaTileX9Y5 = 89, + MagiaTileX10Y5 = 90, + MagiaTileX11Y5 = 91, + MagiaTileX12Y5 = 92, + MagiaTileX13Y5 = 93, + MagiaTileX14Y5 = 94, + MagiaTileX15Y5 = 95, + MagiaTileX0Y6 = 96, + MagiaTileX1Y6 = 97, + MagiaTileX2Y6 = 98, + MagiaTileX3Y6 = 99, + MagiaTileX4Y6 = 100, + MagiaTileX5Y6 = 101, MagiaTileX6Y6 = 102, - MagiaTileX6Y7 = 103, - MagiaTileX6Y8 = 104, - MagiaTileX6Y9 = 105, - MagiaTileX6Y10 = 106, - MagiaTileX6Y11 = 107, - MagiaTileX6Y12 = 108, - MagiaTileX6Y13 = 109, - MagiaTileX6Y14 = 110, - MagiaTileX6Y15 = 111, - MagiaTileX7Y0 = 112, - MagiaTileX7Y1 = 113, - MagiaTileX7Y2 = 114, - MagiaTileX7Y3 = 115, - MagiaTileX7Y4 = 116, - MagiaTileX7Y5 = 117, - MagiaTileX7Y6 = 118, + MagiaTileX7Y6 = 103, + MagiaTileX8Y6 = 104, + MagiaTileX9Y6 = 105, + MagiaTileX10Y6 = 106, + MagiaTileX11Y6 = 107, + MagiaTileX12Y6 = 108, + MagiaTileX13Y6 = 109, + MagiaTileX14Y6 = 110, + MagiaTileX15Y6 = 111, + MagiaTileX0Y7 = 112, + MagiaTileX1Y7 = 113, + MagiaTileX2Y7 = 114, + MagiaTileX3Y7 = 115, + MagiaTileX4Y7 = 116, + MagiaTileX5Y7 = 117, + MagiaTileX6Y7 = 118, MagiaTileX7Y7 = 119, - MagiaTileX7Y8 = 120, - MagiaTileX7Y9 = 121, - MagiaTileX7Y10 = 122, - MagiaTileX7Y11 = 123, - MagiaTileX7Y12 = 124, - MagiaTileX7Y13 = 125, - MagiaTileX7Y14 = 126, - MagiaTileX7Y15 = 127, - MagiaTileX8Y0 = 128, - MagiaTileX8Y1 = 129, - MagiaTileX8Y2 = 130, - MagiaTileX8Y3 = 131, - MagiaTileX8Y4 = 132, - MagiaTileX8Y5 = 133, - MagiaTileX8Y6 = 134, - MagiaTileX8Y7 = 135, + MagiaTileX8Y7 = 120, + MagiaTileX9Y7 = 121, + MagiaTileX10Y7 = 122, + MagiaTileX11Y7 = 123, + MagiaTileX12Y7 = 124, + MagiaTileX13Y7 = 125, + MagiaTileX14Y7 = 126, + MagiaTileX15Y7 = 127, + MagiaTileX0Y8 = 128, + MagiaTileX1Y8 = 129, + MagiaTileX2Y8 = 130, + MagiaTileX3Y8 = 131, + MagiaTileX4Y8 = 132, + MagiaTileX5Y8 = 133, + MagiaTileX6Y8 = 134, + MagiaTileX7Y8 = 135, MagiaTileX8Y8 = 136, - MagiaTileX8Y9 = 137, - MagiaTileX8Y10 = 138, - MagiaTileX8Y11 = 139, - MagiaTileX8Y12 = 140, - MagiaTileX8Y13 = 141, - MagiaTileX8Y14 = 142, - MagiaTileX8Y15 = 143, - MagiaTileX9Y0 = 144, - MagiaTileX9Y1 = 145, - MagiaTileX9Y2 = 146, - MagiaTileX9Y3 = 147, - MagiaTileX9Y4 = 148, - MagiaTileX9Y5 = 149, - MagiaTileX9Y6 = 150, - MagiaTileX9Y7 = 151, - MagiaTileX9Y8 = 152, + MagiaTileX9Y8 = 137, + MagiaTileX10Y8 = 138, + MagiaTileX11Y8 = 139, + MagiaTileX12Y8 = 140, + MagiaTileX13Y8 = 141, + MagiaTileX14Y8 = 142, + MagiaTileX15Y8 = 143, + MagiaTileX0Y9 = 144, + MagiaTileX1Y9 = 145, + MagiaTileX2Y9 = 146, + MagiaTileX3Y9 = 147, + MagiaTileX4Y9 = 148, + MagiaTileX5Y9 = 149, + MagiaTileX6Y9 = 150, + MagiaTileX7Y9 = 151, + MagiaTileX8Y9 = 152, MagiaTileX9Y9 = 153, - MagiaTileX9Y10 = 154, - MagiaTileX9Y11 = 155, - MagiaTileX9Y12 = 156, - MagiaTileX9Y13 = 157, - MagiaTileX9Y14 = 158, - MagiaTileX9Y15 = 159, - MagiaTileX10Y0 = 160, - MagiaTileX10Y1 = 161, - MagiaTileX10Y2 = 162, - MagiaTileX10Y3 = 163, - MagiaTileX10Y4 = 164, - MagiaTileX10Y5 = 165, - MagiaTileX10Y6 = 166, - MagiaTileX10Y7 = 167, - MagiaTileX10Y8 = 168, - MagiaTileX10Y9 = 169, + MagiaTileX10Y9 = 154, + MagiaTileX11Y9 = 155, + MagiaTileX12Y9 = 156, + MagiaTileX13Y9 = 157, + MagiaTileX14Y9 = 158, + MagiaTileX15Y9 = 159, + MagiaTileX0Y10 = 160, + MagiaTileX1Y10 = 161, + MagiaTileX2Y10 = 162, + MagiaTileX3Y10 = 163, + MagiaTileX4Y10 = 164, + MagiaTileX5Y10 = 165, + MagiaTileX6Y10 = 166, + MagiaTileX7Y10 = 167, + MagiaTileX8Y10 = 168, + MagiaTileX9Y10 = 169, MagiaTileX10Y10 = 170, - MagiaTileX10Y11 = 171, - MagiaTileX10Y12 = 172, - MagiaTileX10Y13 = 173, - MagiaTileX10Y14 = 174, - MagiaTileX10Y15 = 175, - MagiaTileX11Y0 = 176, - MagiaTileX11Y1 = 177, - MagiaTileX11Y2 = 178, - MagiaTileX11Y3 = 179, - MagiaTileX11Y4 = 180, - MagiaTileX11Y5 = 181, - MagiaTileX11Y6 = 182, - MagiaTileX11Y7 = 183, - MagiaTileX11Y8 = 184, - MagiaTileX11Y9 = 185, - MagiaTileX11Y10 = 186, + MagiaTileX11Y10 = 171, + MagiaTileX12Y10 = 172, + MagiaTileX13Y10 = 173, + MagiaTileX14Y10 = 174, + MagiaTileX15Y10 = 175, + MagiaTileX0Y11 = 176, + MagiaTileX1Y11 = 177, + MagiaTileX2Y11 = 178, + MagiaTileX3Y11 = 179, + MagiaTileX4Y11 = 180, + MagiaTileX5Y11 = 181, + MagiaTileX6Y11 = 182, + MagiaTileX7Y11 = 183, + MagiaTileX8Y11 = 184, + MagiaTileX9Y11 = 185, + MagiaTileX10Y11 = 186, MagiaTileX11Y11 = 187, - MagiaTileX11Y12 = 188, - MagiaTileX11Y13 = 189, - MagiaTileX11Y14 = 190, - MagiaTileX11Y15 = 191, - MagiaTileX12Y0 = 192, - MagiaTileX12Y1 = 193, - MagiaTileX12Y2 = 194, - MagiaTileX12Y3 = 195, - MagiaTileX12Y4 = 196, - MagiaTileX12Y5 = 197, - MagiaTileX12Y6 = 198, - MagiaTileX12Y7 = 199, - MagiaTileX12Y8 = 200, - MagiaTileX12Y9 = 201, - MagiaTileX12Y10 = 202, - MagiaTileX12Y11 = 203, + MagiaTileX12Y11 = 188, + MagiaTileX13Y11 = 189, + MagiaTileX14Y11 = 190, + MagiaTileX15Y11 = 191, + MagiaTileX0Y12 = 192, + MagiaTileX1Y12 = 193, + MagiaTileX2Y12 = 194, + MagiaTileX3Y12 = 195, + MagiaTileX4Y12 = 196, + MagiaTileX5Y12 = 197, + MagiaTileX6Y12 = 198, + MagiaTileX7Y12 = 199, + MagiaTileX8Y12 = 200, + MagiaTileX9Y12 = 201, + MagiaTileX10Y12 = 202, + MagiaTileX11Y12 = 203, MagiaTileX12Y12 = 204, - MagiaTileX12Y13 = 205, - MagiaTileX12Y14 = 206, - MagiaTileX12Y15 = 207, - MagiaTileX13Y0 = 208, - MagiaTileX13Y1 = 209, - MagiaTileX13Y2 = 210, - MagiaTileX13Y3 = 211, - MagiaTileX13Y4 = 212, - MagiaTileX13Y5 = 213, - MagiaTileX13Y6 = 214, - MagiaTileX13Y7 = 215, - MagiaTileX13Y8 = 216, - MagiaTileX13Y9 = 217, - MagiaTileX13Y10 = 218, - MagiaTileX13Y11 = 219, - MagiaTileX13Y12 = 220, + MagiaTileX13Y12 = 205, + MagiaTileX14Y12 = 206, + MagiaTileX15Y12 = 207, + MagiaTileX0Y13 = 208, + MagiaTileX1Y13 = 209, + MagiaTileX2Y13 = 210, + MagiaTileX3Y13 = 211, + MagiaTileX4Y13 = 212, + MagiaTileX5Y13 = 213, + MagiaTileX6Y13 = 214, + MagiaTileX7Y13 = 215, + MagiaTileX8Y13 = 216, + MagiaTileX9Y13 = 217, + MagiaTileX10Y13 = 218, + MagiaTileX11Y13 = 219, + MagiaTileX12Y13 = 220, MagiaTileX13Y13 = 221, - MagiaTileX13Y14 = 222, - MagiaTileX13Y15 = 223, - MagiaTileX14Y0 = 224, - MagiaTileX14Y1 = 225, - MagiaTileX14Y2 = 226, - MagiaTileX14Y3 = 227, - MagiaTileX14Y4 = 228, - MagiaTileX14Y5 = 229, - MagiaTileX14Y6 = 230, - MagiaTileX14Y7 = 231, - MagiaTileX14Y8 = 232, - MagiaTileX14Y9 = 233, - MagiaTileX14Y10 = 234, - MagiaTileX14Y11 = 235, - MagiaTileX14Y12 = 236, - MagiaTileX14Y13 = 237, + MagiaTileX14Y13 = 222, + MagiaTileX15Y13 = 223, + MagiaTileX0Y14 = 224, + MagiaTileX1Y14 = 225, + MagiaTileX2Y14 = 226, + MagiaTileX3Y14 = 227, + MagiaTileX4Y14 = 228, + MagiaTileX5Y14 = 229, + MagiaTileX6Y14 = 230, + MagiaTileX7Y14 = 231, + MagiaTileX8Y14 = 232, + MagiaTileX9Y14 = 233, + MagiaTileX10Y14 = 234, + MagiaTileX11Y14 = 235, + MagiaTileX12Y14 = 236, + MagiaTileX13Y14 = 237, MagiaTileX14Y14 = 238, - MagiaTileX14Y15 = 239, - MagiaTileX15Y0 = 240, - MagiaTileX15Y1 = 241, - MagiaTileX15Y2 = 242, - MagiaTileX15Y3 = 243, - MagiaTileX15Y4 = 244, - MagiaTileX15Y5 = 245, - MagiaTileX15Y6 = 246, - MagiaTileX15Y7 = 247, - MagiaTileX15Y8 = 248, - MagiaTileX15Y9 = 249, - MagiaTileX15Y10 = 250, - MagiaTileX15Y11 = 251, - MagiaTileX15Y12 = 252, - MagiaTileX15Y13 = 253, - MagiaTileX15Y14 = 254, + MagiaTileX15Y14 = 239, + MagiaTileX0Y15 = 240, + MagiaTileX1Y15 = 241, + MagiaTileX2Y15 = 242, + MagiaTileX3Y15 = 243, + MagiaTileX4Y15 = 244, + MagiaTileX5Y15 = 245, + MagiaTileX6Y15 = 246, + MagiaTileX7Y15 = 247, + MagiaTileX8Y15 = 248, + MagiaTileX9Y15 = 249, + MagiaTileX10Y15 = 250, + MagiaTileX11Y15 = 251, + MagiaTileX12Y15 = 252, + MagiaTileX13Y15 = 253, + MagiaTileX14Y15 = 254, MagiaTileX15Y15 = 255, L20 = 256, L21 = 257, @@ -294,260 +303,260 @@ package floo_axi_nw_mesh_16x16_noc_pkg; typedef enum logic[8:0] { MagiaTileX0Y0SamIdx = 0, - MagiaTileX0Y1SamIdx = 1, - MagiaTileX0Y2SamIdx = 2, - MagiaTileX0Y3SamIdx = 3, - MagiaTileX0Y4SamIdx = 4, - MagiaTileX0Y5SamIdx = 5, - MagiaTileX0Y6SamIdx = 6, - MagiaTileX0Y7SamIdx = 7, - MagiaTileX0Y8SamIdx = 8, - MagiaTileX0Y9SamIdx = 9, - MagiaTileX0Y10SamIdx = 10, - MagiaTileX0Y11SamIdx = 11, - MagiaTileX0Y12SamIdx = 12, - MagiaTileX0Y13SamIdx = 13, - MagiaTileX0Y14SamIdx = 14, - MagiaTileX0Y15SamIdx = 15, - MagiaTileX1Y0SamIdx = 16, + MagiaTileX1Y0SamIdx = 1, + MagiaTileX2Y0SamIdx = 2, + MagiaTileX3Y0SamIdx = 3, + MagiaTileX4Y0SamIdx = 4, + MagiaTileX5Y0SamIdx = 5, + MagiaTileX6Y0SamIdx = 6, + MagiaTileX7Y0SamIdx = 7, + MagiaTileX8Y0SamIdx = 8, + MagiaTileX9Y0SamIdx = 9, + MagiaTileX10Y0SamIdx = 10, + MagiaTileX11Y0SamIdx = 11, + MagiaTileX12Y0SamIdx = 12, + MagiaTileX13Y0SamIdx = 13, + MagiaTileX14Y0SamIdx = 14, + MagiaTileX15Y0SamIdx = 15, + MagiaTileX0Y1SamIdx = 16, MagiaTileX1Y1SamIdx = 17, - MagiaTileX1Y2SamIdx = 18, - MagiaTileX1Y3SamIdx = 19, - MagiaTileX1Y4SamIdx = 20, - MagiaTileX1Y5SamIdx = 21, - MagiaTileX1Y6SamIdx = 22, - MagiaTileX1Y7SamIdx = 23, - MagiaTileX1Y8SamIdx = 24, - MagiaTileX1Y9SamIdx = 25, - MagiaTileX1Y10SamIdx = 26, - MagiaTileX1Y11SamIdx = 27, - MagiaTileX1Y12SamIdx = 28, - MagiaTileX1Y13SamIdx = 29, - MagiaTileX1Y14SamIdx = 30, - MagiaTileX1Y15SamIdx = 31, - MagiaTileX2Y0SamIdx = 32, - MagiaTileX2Y1SamIdx = 33, + MagiaTileX2Y1SamIdx = 18, + MagiaTileX3Y1SamIdx = 19, + MagiaTileX4Y1SamIdx = 20, + MagiaTileX5Y1SamIdx = 21, + MagiaTileX6Y1SamIdx = 22, + MagiaTileX7Y1SamIdx = 23, + MagiaTileX8Y1SamIdx = 24, + MagiaTileX9Y1SamIdx = 25, + MagiaTileX10Y1SamIdx = 26, + MagiaTileX11Y1SamIdx = 27, + MagiaTileX12Y1SamIdx = 28, + MagiaTileX13Y1SamIdx = 29, + MagiaTileX14Y1SamIdx = 30, + MagiaTileX15Y1SamIdx = 31, + MagiaTileX0Y2SamIdx = 32, + MagiaTileX1Y2SamIdx = 33, MagiaTileX2Y2SamIdx = 34, - MagiaTileX2Y3SamIdx = 35, - MagiaTileX2Y4SamIdx = 36, - MagiaTileX2Y5SamIdx = 37, - MagiaTileX2Y6SamIdx = 38, - MagiaTileX2Y7SamIdx = 39, - MagiaTileX2Y8SamIdx = 40, - MagiaTileX2Y9SamIdx = 41, - MagiaTileX2Y10SamIdx = 42, - MagiaTileX2Y11SamIdx = 43, - MagiaTileX2Y12SamIdx = 44, - MagiaTileX2Y13SamIdx = 45, - MagiaTileX2Y14SamIdx = 46, - MagiaTileX2Y15SamIdx = 47, - MagiaTileX3Y0SamIdx = 48, - MagiaTileX3Y1SamIdx = 49, - MagiaTileX3Y2SamIdx = 50, + MagiaTileX3Y2SamIdx = 35, + MagiaTileX4Y2SamIdx = 36, + MagiaTileX5Y2SamIdx = 37, + MagiaTileX6Y2SamIdx = 38, + MagiaTileX7Y2SamIdx = 39, + MagiaTileX8Y2SamIdx = 40, + MagiaTileX9Y2SamIdx = 41, + MagiaTileX10Y2SamIdx = 42, + MagiaTileX11Y2SamIdx = 43, + MagiaTileX12Y2SamIdx = 44, + MagiaTileX13Y2SamIdx = 45, + MagiaTileX14Y2SamIdx = 46, + MagiaTileX15Y2SamIdx = 47, + MagiaTileX0Y3SamIdx = 48, + MagiaTileX1Y3SamIdx = 49, + MagiaTileX2Y3SamIdx = 50, MagiaTileX3Y3SamIdx = 51, - MagiaTileX3Y4SamIdx = 52, - MagiaTileX3Y5SamIdx = 53, - MagiaTileX3Y6SamIdx = 54, - MagiaTileX3Y7SamIdx = 55, - MagiaTileX3Y8SamIdx = 56, - MagiaTileX3Y9SamIdx = 57, - MagiaTileX3Y10SamIdx = 58, - MagiaTileX3Y11SamIdx = 59, - MagiaTileX3Y12SamIdx = 60, - MagiaTileX3Y13SamIdx = 61, - MagiaTileX3Y14SamIdx = 62, - MagiaTileX3Y15SamIdx = 63, - MagiaTileX4Y0SamIdx = 64, - MagiaTileX4Y1SamIdx = 65, - MagiaTileX4Y2SamIdx = 66, - MagiaTileX4Y3SamIdx = 67, + MagiaTileX4Y3SamIdx = 52, + MagiaTileX5Y3SamIdx = 53, + MagiaTileX6Y3SamIdx = 54, + MagiaTileX7Y3SamIdx = 55, + MagiaTileX8Y3SamIdx = 56, + MagiaTileX9Y3SamIdx = 57, + MagiaTileX10Y3SamIdx = 58, + MagiaTileX11Y3SamIdx = 59, + MagiaTileX12Y3SamIdx = 60, + MagiaTileX13Y3SamIdx = 61, + MagiaTileX14Y3SamIdx = 62, + MagiaTileX15Y3SamIdx = 63, + MagiaTileX0Y4SamIdx = 64, + MagiaTileX1Y4SamIdx = 65, + MagiaTileX2Y4SamIdx = 66, + MagiaTileX3Y4SamIdx = 67, MagiaTileX4Y4SamIdx = 68, - MagiaTileX4Y5SamIdx = 69, - MagiaTileX4Y6SamIdx = 70, - MagiaTileX4Y7SamIdx = 71, - MagiaTileX4Y8SamIdx = 72, - MagiaTileX4Y9SamIdx = 73, - MagiaTileX4Y10SamIdx = 74, - MagiaTileX4Y11SamIdx = 75, - MagiaTileX4Y12SamIdx = 76, - MagiaTileX4Y13SamIdx = 77, - MagiaTileX4Y14SamIdx = 78, - MagiaTileX4Y15SamIdx = 79, - MagiaTileX5Y0SamIdx = 80, - MagiaTileX5Y1SamIdx = 81, - MagiaTileX5Y2SamIdx = 82, - MagiaTileX5Y3SamIdx = 83, - MagiaTileX5Y4SamIdx = 84, + MagiaTileX5Y4SamIdx = 69, + MagiaTileX6Y4SamIdx = 70, + MagiaTileX7Y4SamIdx = 71, + MagiaTileX8Y4SamIdx = 72, + MagiaTileX9Y4SamIdx = 73, + MagiaTileX10Y4SamIdx = 74, + MagiaTileX11Y4SamIdx = 75, + MagiaTileX12Y4SamIdx = 76, + MagiaTileX13Y4SamIdx = 77, + MagiaTileX14Y4SamIdx = 78, + MagiaTileX15Y4SamIdx = 79, + MagiaTileX0Y5SamIdx = 80, + MagiaTileX1Y5SamIdx = 81, + MagiaTileX2Y5SamIdx = 82, + MagiaTileX3Y5SamIdx = 83, + MagiaTileX4Y5SamIdx = 84, MagiaTileX5Y5SamIdx = 85, - MagiaTileX5Y6SamIdx = 86, - MagiaTileX5Y7SamIdx = 87, - MagiaTileX5Y8SamIdx = 88, - MagiaTileX5Y9SamIdx = 89, - MagiaTileX5Y10SamIdx = 90, - MagiaTileX5Y11SamIdx = 91, - MagiaTileX5Y12SamIdx = 92, - MagiaTileX5Y13SamIdx = 93, - MagiaTileX5Y14SamIdx = 94, - MagiaTileX5Y15SamIdx = 95, - MagiaTileX6Y0SamIdx = 96, - MagiaTileX6Y1SamIdx = 97, - MagiaTileX6Y2SamIdx = 98, - MagiaTileX6Y3SamIdx = 99, - MagiaTileX6Y4SamIdx = 100, - MagiaTileX6Y5SamIdx = 101, + MagiaTileX6Y5SamIdx = 86, + MagiaTileX7Y5SamIdx = 87, + MagiaTileX8Y5SamIdx = 88, + MagiaTileX9Y5SamIdx = 89, + MagiaTileX10Y5SamIdx = 90, + MagiaTileX11Y5SamIdx = 91, + MagiaTileX12Y5SamIdx = 92, + MagiaTileX13Y5SamIdx = 93, + MagiaTileX14Y5SamIdx = 94, + MagiaTileX15Y5SamIdx = 95, + MagiaTileX0Y6SamIdx = 96, + MagiaTileX1Y6SamIdx = 97, + MagiaTileX2Y6SamIdx = 98, + MagiaTileX3Y6SamIdx = 99, + MagiaTileX4Y6SamIdx = 100, + MagiaTileX5Y6SamIdx = 101, MagiaTileX6Y6SamIdx = 102, - MagiaTileX6Y7SamIdx = 103, - MagiaTileX6Y8SamIdx = 104, - MagiaTileX6Y9SamIdx = 105, - MagiaTileX6Y10SamIdx = 106, - MagiaTileX6Y11SamIdx = 107, - MagiaTileX6Y12SamIdx = 108, - MagiaTileX6Y13SamIdx = 109, - MagiaTileX6Y14SamIdx = 110, - MagiaTileX6Y15SamIdx = 111, - MagiaTileX7Y0SamIdx = 112, - MagiaTileX7Y1SamIdx = 113, - MagiaTileX7Y2SamIdx = 114, - MagiaTileX7Y3SamIdx = 115, - MagiaTileX7Y4SamIdx = 116, - MagiaTileX7Y5SamIdx = 117, - MagiaTileX7Y6SamIdx = 118, + MagiaTileX7Y6SamIdx = 103, + MagiaTileX8Y6SamIdx = 104, + MagiaTileX9Y6SamIdx = 105, + MagiaTileX10Y6SamIdx = 106, + MagiaTileX11Y6SamIdx = 107, + MagiaTileX12Y6SamIdx = 108, + MagiaTileX13Y6SamIdx = 109, + MagiaTileX14Y6SamIdx = 110, + MagiaTileX15Y6SamIdx = 111, + MagiaTileX0Y7SamIdx = 112, + MagiaTileX1Y7SamIdx = 113, + MagiaTileX2Y7SamIdx = 114, + MagiaTileX3Y7SamIdx = 115, + MagiaTileX4Y7SamIdx = 116, + MagiaTileX5Y7SamIdx = 117, + MagiaTileX6Y7SamIdx = 118, MagiaTileX7Y7SamIdx = 119, - MagiaTileX7Y8SamIdx = 120, - MagiaTileX7Y9SamIdx = 121, - MagiaTileX7Y10SamIdx = 122, - MagiaTileX7Y11SamIdx = 123, - MagiaTileX7Y12SamIdx = 124, - MagiaTileX7Y13SamIdx = 125, - MagiaTileX7Y14SamIdx = 126, - MagiaTileX7Y15SamIdx = 127, - MagiaTileX8Y0SamIdx = 128, - MagiaTileX8Y1SamIdx = 129, - MagiaTileX8Y2SamIdx = 130, - MagiaTileX8Y3SamIdx = 131, - MagiaTileX8Y4SamIdx = 132, - MagiaTileX8Y5SamIdx = 133, - MagiaTileX8Y6SamIdx = 134, - MagiaTileX8Y7SamIdx = 135, + MagiaTileX8Y7SamIdx = 120, + MagiaTileX9Y7SamIdx = 121, + MagiaTileX10Y7SamIdx = 122, + MagiaTileX11Y7SamIdx = 123, + MagiaTileX12Y7SamIdx = 124, + MagiaTileX13Y7SamIdx = 125, + MagiaTileX14Y7SamIdx = 126, + MagiaTileX15Y7SamIdx = 127, + MagiaTileX0Y8SamIdx = 128, + MagiaTileX1Y8SamIdx = 129, + MagiaTileX2Y8SamIdx = 130, + MagiaTileX3Y8SamIdx = 131, + MagiaTileX4Y8SamIdx = 132, + MagiaTileX5Y8SamIdx = 133, + MagiaTileX6Y8SamIdx = 134, + MagiaTileX7Y8SamIdx = 135, MagiaTileX8Y8SamIdx = 136, - MagiaTileX8Y9SamIdx = 137, - MagiaTileX8Y10SamIdx = 138, - MagiaTileX8Y11SamIdx = 139, - MagiaTileX8Y12SamIdx = 140, - MagiaTileX8Y13SamIdx = 141, - MagiaTileX8Y14SamIdx = 142, - MagiaTileX8Y15SamIdx = 143, - MagiaTileX9Y0SamIdx = 144, - MagiaTileX9Y1SamIdx = 145, - MagiaTileX9Y2SamIdx = 146, - MagiaTileX9Y3SamIdx = 147, - MagiaTileX9Y4SamIdx = 148, - MagiaTileX9Y5SamIdx = 149, - MagiaTileX9Y6SamIdx = 150, - MagiaTileX9Y7SamIdx = 151, - MagiaTileX9Y8SamIdx = 152, + MagiaTileX9Y8SamIdx = 137, + MagiaTileX10Y8SamIdx = 138, + MagiaTileX11Y8SamIdx = 139, + MagiaTileX12Y8SamIdx = 140, + MagiaTileX13Y8SamIdx = 141, + MagiaTileX14Y8SamIdx = 142, + MagiaTileX15Y8SamIdx = 143, + MagiaTileX0Y9SamIdx = 144, + MagiaTileX1Y9SamIdx = 145, + MagiaTileX2Y9SamIdx = 146, + MagiaTileX3Y9SamIdx = 147, + MagiaTileX4Y9SamIdx = 148, + MagiaTileX5Y9SamIdx = 149, + MagiaTileX6Y9SamIdx = 150, + MagiaTileX7Y9SamIdx = 151, + MagiaTileX8Y9SamIdx = 152, MagiaTileX9Y9SamIdx = 153, - MagiaTileX9Y10SamIdx = 154, - MagiaTileX9Y11SamIdx = 155, - MagiaTileX9Y12SamIdx = 156, - MagiaTileX9Y13SamIdx = 157, - MagiaTileX9Y14SamIdx = 158, - MagiaTileX9Y15SamIdx = 159, - MagiaTileX10Y0SamIdx = 160, - MagiaTileX10Y1SamIdx = 161, - MagiaTileX10Y2SamIdx = 162, - MagiaTileX10Y3SamIdx = 163, - MagiaTileX10Y4SamIdx = 164, - MagiaTileX10Y5SamIdx = 165, - MagiaTileX10Y6SamIdx = 166, - MagiaTileX10Y7SamIdx = 167, - MagiaTileX10Y8SamIdx = 168, - MagiaTileX10Y9SamIdx = 169, + MagiaTileX10Y9SamIdx = 154, + MagiaTileX11Y9SamIdx = 155, + MagiaTileX12Y9SamIdx = 156, + MagiaTileX13Y9SamIdx = 157, + MagiaTileX14Y9SamIdx = 158, + MagiaTileX15Y9SamIdx = 159, + MagiaTileX0Y10SamIdx = 160, + MagiaTileX1Y10SamIdx = 161, + MagiaTileX2Y10SamIdx = 162, + MagiaTileX3Y10SamIdx = 163, + MagiaTileX4Y10SamIdx = 164, + MagiaTileX5Y10SamIdx = 165, + MagiaTileX6Y10SamIdx = 166, + MagiaTileX7Y10SamIdx = 167, + MagiaTileX8Y10SamIdx = 168, + MagiaTileX9Y10SamIdx = 169, MagiaTileX10Y10SamIdx = 170, - MagiaTileX10Y11SamIdx = 171, - MagiaTileX10Y12SamIdx = 172, - MagiaTileX10Y13SamIdx = 173, - MagiaTileX10Y14SamIdx = 174, - MagiaTileX10Y15SamIdx = 175, - MagiaTileX11Y0SamIdx = 176, - MagiaTileX11Y1SamIdx = 177, - MagiaTileX11Y2SamIdx = 178, - MagiaTileX11Y3SamIdx = 179, - MagiaTileX11Y4SamIdx = 180, - MagiaTileX11Y5SamIdx = 181, - MagiaTileX11Y6SamIdx = 182, - MagiaTileX11Y7SamIdx = 183, - MagiaTileX11Y8SamIdx = 184, - MagiaTileX11Y9SamIdx = 185, - MagiaTileX11Y10SamIdx = 186, + MagiaTileX11Y10SamIdx = 171, + MagiaTileX12Y10SamIdx = 172, + MagiaTileX13Y10SamIdx = 173, + MagiaTileX14Y10SamIdx = 174, + MagiaTileX15Y10SamIdx = 175, + MagiaTileX0Y11SamIdx = 176, + MagiaTileX1Y11SamIdx = 177, + MagiaTileX2Y11SamIdx = 178, + MagiaTileX3Y11SamIdx = 179, + MagiaTileX4Y11SamIdx = 180, + MagiaTileX5Y11SamIdx = 181, + MagiaTileX6Y11SamIdx = 182, + MagiaTileX7Y11SamIdx = 183, + MagiaTileX8Y11SamIdx = 184, + MagiaTileX9Y11SamIdx = 185, + MagiaTileX10Y11SamIdx = 186, MagiaTileX11Y11SamIdx = 187, - MagiaTileX11Y12SamIdx = 188, - MagiaTileX11Y13SamIdx = 189, - MagiaTileX11Y14SamIdx = 190, - MagiaTileX11Y15SamIdx = 191, - MagiaTileX12Y0SamIdx = 192, - MagiaTileX12Y1SamIdx = 193, - MagiaTileX12Y2SamIdx = 194, - MagiaTileX12Y3SamIdx = 195, - MagiaTileX12Y4SamIdx = 196, - MagiaTileX12Y5SamIdx = 197, - MagiaTileX12Y6SamIdx = 198, - MagiaTileX12Y7SamIdx = 199, - MagiaTileX12Y8SamIdx = 200, - MagiaTileX12Y9SamIdx = 201, - MagiaTileX12Y10SamIdx = 202, - MagiaTileX12Y11SamIdx = 203, + MagiaTileX12Y11SamIdx = 188, + MagiaTileX13Y11SamIdx = 189, + MagiaTileX14Y11SamIdx = 190, + MagiaTileX15Y11SamIdx = 191, + MagiaTileX0Y12SamIdx = 192, + MagiaTileX1Y12SamIdx = 193, + MagiaTileX2Y12SamIdx = 194, + MagiaTileX3Y12SamIdx = 195, + MagiaTileX4Y12SamIdx = 196, + MagiaTileX5Y12SamIdx = 197, + MagiaTileX6Y12SamIdx = 198, + MagiaTileX7Y12SamIdx = 199, + MagiaTileX8Y12SamIdx = 200, + MagiaTileX9Y12SamIdx = 201, + MagiaTileX10Y12SamIdx = 202, + MagiaTileX11Y12SamIdx = 203, MagiaTileX12Y12SamIdx = 204, - MagiaTileX12Y13SamIdx = 205, - MagiaTileX12Y14SamIdx = 206, - MagiaTileX12Y15SamIdx = 207, - MagiaTileX13Y0SamIdx = 208, - MagiaTileX13Y1SamIdx = 209, - MagiaTileX13Y2SamIdx = 210, - MagiaTileX13Y3SamIdx = 211, - MagiaTileX13Y4SamIdx = 212, - MagiaTileX13Y5SamIdx = 213, - MagiaTileX13Y6SamIdx = 214, - MagiaTileX13Y7SamIdx = 215, - MagiaTileX13Y8SamIdx = 216, - MagiaTileX13Y9SamIdx = 217, - MagiaTileX13Y10SamIdx = 218, - MagiaTileX13Y11SamIdx = 219, - MagiaTileX13Y12SamIdx = 220, + MagiaTileX13Y12SamIdx = 205, + MagiaTileX14Y12SamIdx = 206, + MagiaTileX15Y12SamIdx = 207, + MagiaTileX0Y13SamIdx = 208, + MagiaTileX1Y13SamIdx = 209, + MagiaTileX2Y13SamIdx = 210, + MagiaTileX3Y13SamIdx = 211, + MagiaTileX4Y13SamIdx = 212, + MagiaTileX5Y13SamIdx = 213, + MagiaTileX6Y13SamIdx = 214, + MagiaTileX7Y13SamIdx = 215, + MagiaTileX8Y13SamIdx = 216, + MagiaTileX9Y13SamIdx = 217, + MagiaTileX10Y13SamIdx = 218, + MagiaTileX11Y13SamIdx = 219, + MagiaTileX12Y13SamIdx = 220, MagiaTileX13Y13SamIdx = 221, - MagiaTileX13Y14SamIdx = 222, - MagiaTileX13Y15SamIdx = 223, - MagiaTileX14Y0SamIdx = 224, - MagiaTileX14Y1SamIdx = 225, - MagiaTileX14Y2SamIdx = 226, - MagiaTileX14Y3SamIdx = 227, - MagiaTileX14Y4SamIdx = 228, - MagiaTileX14Y5SamIdx = 229, - MagiaTileX14Y6SamIdx = 230, - MagiaTileX14Y7SamIdx = 231, - MagiaTileX14Y8SamIdx = 232, - MagiaTileX14Y9SamIdx = 233, - MagiaTileX14Y10SamIdx = 234, - MagiaTileX14Y11SamIdx = 235, - MagiaTileX14Y12SamIdx = 236, - MagiaTileX14Y13SamIdx = 237, + MagiaTileX14Y13SamIdx = 222, + MagiaTileX15Y13SamIdx = 223, + MagiaTileX0Y14SamIdx = 224, + MagiaTileX1Y14SamIdx = 225, + MagiaTileX2Y14SamIdx = 226, + MagiaTileX3Y14SamIdx = 227, + MagiaTileX4Y14SamIdx = 228, + MagiaTileX5Y14SamIdx = 229, + MagiaTileX6Y14SamIdx = 230, + MagiaTileX7Y14SamIdx = 231, + MagiaTileX8Y14SamIdx = 232, + MagiaTileX9Y14SamIdx = 233, + MagiaTileX10Y14SamIdx = 234, + MagiaTileX11Y14SamIdx = 235, + MagiaTileX12Y14SamIdx = 236, + MagiaTileX13Y14SamIdx = 237, MagiaTileX14Y14SamIdx = 238, - MagiaTileX14Y15SamIdx = 239, - MagiaTileX15Y0SamIdx = 240, - MagiaTileX15Y1SamIdx = 241, - MagiaTileX15Y2SamIdx = 242, - MagiaTileX15Y3SamIdx = 243, - MagiaTileX15Y4SamIdx = 244, - MagiaTileX15Y5SamIdx = 245, - MagiaTileX15Y6SamIdx = 246, - MagiaTileX15Y7SamIdx = 247, - MagiaTileX15Y8SamIdx = 248, - MagiaTileX15Y9SamIdx = 249, - MagiaTileX15Y10SamIdx = 250, - MagiaTileX15Y11SamIdx = 251, - MagiaTileX15Y12SamIdx = 252, - MagiaTileX15Y13SamIdx = 253, - MagiaTileX15Y14SamIdx = 254, + MagiaTileX15Y14SamIdx = 239, + MagiaTileX0Y15SamIdx = 240, + MagiaTileX1Y15SamIdx = 241, + MagiaTileX2Y15SamIdx = 242, + MagiaTileX3Y15SamIdx = 243, + MagiaTileX4Y15SamIdx = 244, + MagiaTileX5Y15SamIdx = 245, + MagiaTileX6Y15SamIdx = 246, + MagiaTileX7Y15SamIdx = 247, + MagiaTileX8Y15SamIdx = 248, + MagiaTileX9Y15SamIdx = 249, + MagiaTileX10Y15SamIdx = 250, + MagiaTileX11Y15SamIdx = 251, + MagiaTileX12Y15SamIdx = 252, + MagiaTileX13Y15SamIdx = 253, + MagiaTileX14Y15SamIdx = 254, MagiaTileX15Y15SamIdx = 255, L20SamIdx = 256, L21SamIdx = 257, @@ -595,279 +604,825 @@ typedef struct packed { logic [31:0] end_addr; } sam_rule_t; -localparam sam_rule_t[SamNumRules-1:0] Sam = '{ -'{idx: '{x: 0, y: 15, port_id: 0}, start_addr: 32'hfc000000, end_addr: 32'hffffffff},// L2_15_sam_idx -'{idx: '{x: 0, y: 14, port_id: 0}, start_addr: 32'hf8000000, end_addr: 32'hfc000000},// L2_14_sam_idx -'{idx: '{x: 0, y: 13, port_id: 0}, start_addr: 32'hf4000000, end_addr: 32'hf8000000},// L2_13_sam_idx -'{idx: '{x: 0, y: 12, port_id: 0}, start_addr: 32'hf0000000, end_addr: 32'hf4000000},// L2_12_sam_idx -'{idx: '{x: 0, y: 11, port_id: 0}, start_addr: 32'hec000000, end_addr: 32'hf0000000},// L2_11_sam_idx -'{idx: '{x: 0, y: 10, port_id: 0}, start_addr: 32'he8000000, end_addr: 32'hec000000},// L2_10_sam_idx -'{idx: '{x: 0, y: 9, port_id: 0}, start_addr: 32'he4000000, end_addr: 32'he8000000},// L2_9_sam_idx -'{idx: '{x: 0, y: 8, port_id: 0}, start_addr: 32'he0000000, end_addr: 32'he4000000},// L2_8_sam_idx -'{idx: '{x: 0, y: 7, port_id: 0}, start_addr: 32'hdc000000, end_addr: 32'he0000000},// L2_7_sam_idx -'{idx: '{x: 0, y: 6, port_id: 0}, start_addr: 32'hd8000000, end_addr: 32'hdc000000},// L2_6_sam_idx -'{idx: '{x: 0, y: 5, port_id: 0}, start_addr: 32'hd4000000, end_addr: 32'hd8000000},// L2_5_sam_idx -'{idx: '{x: 0, y: 4, port_id: 0}, start_addr: 32'hd0000000, end_addr: 32'hd4000000},// L2_4_sam_idx -'{idx: '{x: 0, y: 3, port_id: 0}, start_addr: 32'hcc000000, end_addr: 32'hd0000000},// L2_3_sam_idx -'{idx: '{x: 0, y: 2, port_id: 0}, start_addr: 32'hc8000000, end_addr: 32'hcc000000},// L2_2_sam_idx -'{idx: '{x: 0, y: 1, port_id: 0}, start_addr: 32'hc4000000, end_addr: 32'hc8000000},// L2_1_sam_idx -'{idx: '{x: 0, y: 0, port_id: 0}, start_addr: 32'hc0000000, end_addr: 32'hc4000000},// L2_0_sam_idx -'{idx: '{x: 16, y: 15, port_id: 0}, start_addr: 32'h0ff00000, end_addr: 32'h10000000},// magia_tile_x15_y15_sam_idx -'{idx: '{x: 15, y: 15, port_id: 0}, start_addr: 32'h0fe00000, end_addr: 32'h0ff00000},// magia_tile_x14_y15_sam_idx -'{idx: '{x: 14, y: 15, port_id: 0}, start_addr: 32'h0fd00000, end_addr: 32'h0fe00000},// magia_tile_x13_y15_sam_idx -'{idx: '{x: 13, y: 15, port_id: 0}, start_addr: 32'h0fc00000, end_addr: 32'h0fd00000},// magia_tile_x12_y15_sam_idx -'{idx: '{x: 12, y: 15, port_id: 0}, start_addr: 32'h0fb00000, end_addr: 32'h0fc00000},// magia_tile_x11_y15_sam_idx -'{idx: '{x: 11, y: 15, port_id: 0}, start_addr: 32'h0fa00000, end_addr: 32'h0fb00000},// magia_tile_x10_y15_sam_idx -'{idx: '{x: 10, y: 15, port_id: 0}, start_addr: 32'h0f900000, end_addr: 32'h0fa00000},// magia_tile_x9_y15_sam_idx -'{idx: '{x: 9, y: 15, port_id: 0}, start_addr: 32'h0f800000, end_addr: 32'h0f900000},// magia_tile_x8_y15_sam_idx -'{idx: '{x: 8, y: 15, port_id: 0}, start_addr: 32'h0f700000, end_addr: 32'h0f800000},// magia_tile_x7_y15_sam_idx -'{idx: '{x: 7, y: 15, port_id: 0}, start_addr: 32'h0f600000, end_addr: 32'h0f700000},// magia_tile_x6_y15_sam_idx -'{idx: '{x: 6, y: 15, port_id: 0}, start_addr: 32'h0f500000, end_addr: 32'h0f600000},// magia_tile_x5_y15_sam_idx -'{idx: '{x: 5, y: 15, port_id: 0}, start_addr: 32'h0f400000, end_addr: 32'h0f500000},// magia_tile_x4_y15_sam_idx -'{idx: '{x: 4, y: 15, port_id: 0}, start_addr: 32'h0f300000, end_addr: 32'h0f400000},// magia_tile_x3_y15_sam_idx -'{idx: '{x: 3, y: 15, port_id: 0}, start_addr: 32'h0f200000, end_addr: 32'h0f300000},// magia_tile_x2_y15_sam_idx -'{idx: '{x: 2, y: 15, port_id: 0}, start_addr: 32'h0f100000, end_addr: 32'h0f200000},// magia_tile_x1_y15_sam_idx -'{idx: '{x: 1, y: 15, port_id: 0}, start_addr: 32'h0f000000, end_addr: 32'h0f100000},// magia_tile_x0_y15_sam_idx -'{idx: '{x: 16, y: 14, port_id: 0}, start_addr: 32'h0ef00000, end_addr: 32'h0f000000},// magia_tile_x15_y14_sam_idx -'{idx: '{x: 15, y: 14, port_id: 0}, start_addr: 32'h0ee00000, end_addr: 32'h0ef00000},// magia_tile_x14_y14_sam_idx -'{idx: '{x: 14, y: 14, port_id: 0}, start_addr: 32'h0ed00000, end_addr: 32'h0ee00000},// magia_tile_x13_y14_sam_idx -'{idx: '{x: 13, y: 14, port_id: 0}, start_addr: 32'h0ec00000, end_addr: 32'h0ed00000},// magia_tile_x12_y14_sam_idx -'{idx: '{x: 12, y: 14, port_id: 0}, start_addr: 32'h0eb00000, end_addr: 32'h0ec00000},// magia_tile_x11_y14_sam_idx -'{idx: '{x: 11, y: 14, port_id: 0}, start_addr: 32'h0ea00000, end_addr: 32'h0eb00000},// magia_tile_x10_y14_sam_idx -'{idx: '{x: 10, y: 14, port_id: 0}, start_addr: 32'h0e900000, end_addr: 32'h0ea00000},// magia_tile_x9_y14_sam_idx -'{idx: '{x: 9, y: 14, port_id: 0}, start_addr: 32'h0e800000, end_addr: 32'h0e900000},// magia_tile_x8_y14_sam_idx -'{idx: '{x: 8, y: 14, port_id: 0}, start_addr: 32'h0e700000, end_addr: 32'h0e800000},// magia_tile_x7_y14_sam_idx -'{idx: '{x: 7, y: 14, port_id: 0}, start_addr: 32'h0e600000, end_addr: 32'h0e700000},// magia_tile_x6_y14_sam_idx -'{idx: '{x: 6, y: 14, port_id: 0}, start_addr: 32'h0e500000, end_addr: 32'h0e600000},// magia_tile_x5_y14_sam_idx -'{idx: '{x: 5, y: 14, port_id: 0}, start_addr: 32'h0e400000, end_addr: 32'h0e500000},// magia_tile_x4_y14_sam_idx -'{idx: '{x: 4, y: 14, port_id: 0}, start_addr: 32'h0e300000, end_addr: 32'h0e400000},// magia_tile_x3_y14_sam_idx -'{idx: '{x: 3, y: 14, port_id: 0}, start_addr: 32'h0e200000, end_addr: 32'h0e300000},// magia_tile_x2_y14_sam_idx -'{idx: '{x: 2, y: 14, port_id: 0}, start_addr: 32'h0e100000, end_addr: 32'h0e200000},// magia_tile_x1_y14_sam_idx -'{idx: '{x: 1, y: 14, port_id: 0}, start_addr: 32'h0e000000, end_addr: 32'h0e100000},// magia_tile_x0_y14_sam_idx -'{idx: '{x: 16, y: 13, port_id: 0}, start_addr: 32'h0df00000, end_addr: 32'h0e000000},// magia_tile_x15_y13_sam_idx -'{idx: '{x: 15, y: 13, port_id: 0}, start_addr: 32'h0de00000, end_addr: 32'h0df00000},// magia_tile_x14_y13_sam_idx -'{idx: '{x: 14, y: 13, port_id: 0}, start_addr: 32'h0dd00000, end_addr: 32'h0de00000},// magia_tile_x13_y13_sam_idx -'{idx: '{x: 13, y: 13, port_id: 0}, start_addr: 32'h0dc00000, end_addr: 32'h0dd00000},// magia_tile_x12_y13_sam_idx -'{idx: '{x: 12, y: 13, port_id: 0}, start_addr: 32'h0db00000, end_addr: 32'h0dc00000},// magia_tile_x11_y13_sam_idx -'{idx: '{x: 11, y: 13, port_id: 0}, start_addr: 32'h0da00000, end_addr: 32'h0db00000},// magia_tile_x10_y13_sam_idx -'{idx: '{x: 10, y: 13, port_id: 0}, start_addr: 32'h0d900000, end_addr: 32'h0da00000},// magia_tile_x9_y13_sam_idx -'{idx: '{x: 9, y: 13, port_id: 0}, start_addr: 32'h0d800000, end_addr: 32'h0d900000},// magia_tile_x8_y13_sam_idx -'{idx: '{x: 8, y: 13, port_id: 0}, start_addr: 32'h0d700000, end_addr: 32'h0d800000},// magia_tile_x7_y13_sam_idx -'{idx: '{x: 7, y: 13, port_id: 0}, start_addr: 32'h0d600000, end_addr: 32'h0d700000},// magia_tile_x6_y13_sam_idx -'{idx: '{x: 6, y: 13, port_id: 0}, start_addr: 32'h0d500000, end_addr: 32'h0d600000},// magia_tile_x5_y13_sam_idx -'{idx: '{x: 5, y: 13, port_id: 0}, start_addr: 32'h0d400000, end_addr: 32'h0d500000},// magia_tile_x4_y13_sam_idx -'{idx: '{x: 4, y: 13, port_id: 0}, start_addr: 32'h0d300000, end_addr: 32'h0d400000},// magia_tile_x3_y13_sam_idx -'{idx: '{x: 3, y: 13, port_id: 0}, start_addr: 32'h0d200000, end_addr: 32'h0d300000},// magia_tile_x2_y13_sam_idx -'{idx: '{x: 2, y: 13, port_id: 0}, start_addr: 32'h0d100000, end_addr: 32'h0d200000},// magia_tile_x1_y13_sam_idx -'{idx: '{x: 1, y: 13, port_id: 0}, start_addr: 32'h0d000000, end_addr: 32'h0d100000},// magia_tile_x0_y13_sam_idx -'{idx: '{x: 16, y: 12, port_id: 0}, start_addr: 32'h0cf00000, end_addr: 32'h0d000000},// magia_tile_x15_y12_sam_idx -'{idx: '{x: 15, y: 12, port_id: 0}, start_addr: 32'h0ce00000, end_addr: 32'h0cf00000},// magia_tile_x14_y12_sam_idx -'{idx: '{x: 14, y: 12, port_id: 0}, start_addr: 32'h0cd00000, end_addr: 32'h0ce00000},// magia_tile_x13_y12_sam_idx -'{idx: '{x: 13, y: 12, port_id: 0}, start_addr: 32'h0cc00000, end_addr: 32'h0cd00000},// magia_tile_x12_y12_sam_idx -'{idx: '{x: 12, y: 12, port_id: 0}, start_addr: 32'h0cb00000, end_addr: 32'h0cc00000},// magia_tile_x11_y12_sam_idx -'{idx: '{x: 11, y: 12, port_id: 0}, start_addr: 32'h0ca00000, end_addr: 32'h0cb00000},// magia_tile_x10_y12_sam_idx -'{idx: '{x: 10, y: 12, port_id: 0}, start_addr: 32'h0c900000, end_addr: 32'h0ca00000},// magia_tile_x9_y12_sam_idx -'{idx: '{x: 9, y: 12, port_id: 0}, start_addr: 32'h0c800000, end_addr: 32'h0c900000},// magia_tile_x8_y12_sam_idx -'{idx: '{x: 8, y: 12, port_id: 0}, start_addr: 32'h0c700000, end_addr: 32'h0c800000},// magia_tile_x7_y12_sam_idx -'{idx: '{x: 7, y: 12, port_id: 0}, start_addr: 32'h0c600000, end_addr: 32'h0c700000},// magia_tile_x6_y12_sam_idx -'{idx: '{x: 6, y: 12, port_id: 0}, start_addr: 32'h0c500000, end_addr: 32'h0c600000},// magia_tile_x5_y12_sam_idx -'{idx: '{x: 5, y: 12, port_id: 0}, start_addr: 32'h0c400000, end_addr: 32'h0c500000},// magia_tile_x4_y12_sam_idx -'{idx: '{x: 4, y: 12, port_id: 0}, start_addr: 32'h0c300000, end_addr: 32'h0c400000},// magia_tile_x3_y12_sam_idx -'{idx: '{x: 3, y: 12, port_id: 0}, start_addr: 32'h0c200000, end_addr: 32'h0c300000},// magia_tile_x2_y12_sam_idx -'{idx: '{x: 2, y: 12, port_id: 0}, start_addr: 32'h0c100000, end_addr: 32'h0c200000},// magia_tile_x1_y12_sam_idx -'{idx: '{x: 1, y: 12, port_id: 0}, start_addr: 32'h0c000000, end_addr: 32'h0c100000},// magia_tile_x0_y12_sam_idx -'{idx: '{x: 16, y: 11, port_id: 0}, start_addr: 32'h0bf00000, end_addr: 32'h0c000000},// magia_tile_x15_y11_sam_idx -'{idx: '{x: 15, y: 11, port_id: 0}, start_addr: 32'h0be00000, end_addr: 32'h0bf00000},// magia_tile_x14_y11_sam_idx -'{idx: '{x: 14, y: 11, port_id: 0}, start_addr: 32'h0bd00000, end_addr: 32'h0be00000},// magia_tile_x13_y11_sam_idx -'{idx: '{x: 13, y: 11, port_id: 0}, start_addr: 32'h0bc00000, end_addr: 32'h0bd00000},// magia_tile_x12_y11_sam_idx -'{idx: '{x: 12, y: 11, port_id: 0}, start_addr: 32'h0bb00000, end_addr: 32'h0bc00000},// magia_tile_x11_y11_sam_idx -'{idx: '{x: 11, y: 11, port_id: 0}, start_addr: 32'h0ba00000, end_addr: 32'h0bb00000},// magia_tile_x10_y11_sam_idx -'{idx: '{x: 10, y: 11, port_id: 0}, start_addr: 32'h0b900000, end_addr: 32'h0ba00000},// magia_tile_x9_y11_sam_idx -'{idx: '{x: 9, y: 11, port_id: 0}, start_addr: 32'h0b800000, end_addr: 32'h0b900000},// magia_tile_x8_y11_sam_idx -'{idx: '{x: 8, y: 11, port_id: 0}, start_addr: 32'h0b700000, end_addr: 32'h0b800000},// magia_tile_x7_y11_sam_idx -'{idx: '{x: 7, y: 11, port_id: 0}, start_addr: 32'h0b600000, end_addr: 32'h0b700000},// magia_tile_x6_y11_sam_idx -'{idx: '{x: 6, y: 11, port_id: 0}, start_addr: 32'h0b500000, end_addr: 32'h0b600000},// magia_tile_x5_y11_sam_idx -'{idx: '{x: 5, y: 11, port_id: 0}, start_addr: 32'h0b400000, end_addr: 32'h0b500000},// magia_tile_x4_y11_sam_idx -'{idx: '{x: 4, y: 11, port_id: 0}, start_addr: 32'h0b300000, end_addr: 32'h0b400000},// magia_tile_x3_y11_sam_idx -'{idx: '{x: 3, y: 11, port_id: 0}, start_addr: 32'h0b200000, end_addr: 32'h0b300000},// magia_tile_x2_y11_sam_idx -'{idx: '{x: 2, y: 11, port_id: 0}, start_addr: 32'h0b100000, end_addr: 32'h0b200000},// magia_tile_x1_y11_sam_idx -'{idx: '{x: 1, y: 11, port_id: 0}, start_addr: 32'h0b000000, end_addr: 32'h0b100000},// magia_tile_x0_y11_sam_idx -'{idx: '{x: 16, y: 10, port_id: 0}, start_addr: 32'h0af00000, end_addr: 32'h0b000000},// magia_tile_x15_y10_sam_idx -'{idx: '{x: 15, y: 10, port_id: 0}, start_addr: 32'h0ae00000, end_addr: 32'h0af00000},// magia_tile_x14_y10_sam_idx -'{idx: '{x: 14, y: 10, port_id: 0}, start_addr: 32'h0ad00000, end_addr: 32'h0ae00000},// magia_tile_x13_y10_sam_idx -'{idx: '{x: 13, y: 10, port_id: 0}, start_addr: 32'h0ac00000, end_addr: 32'h0ad00000},// magia_tile_x12_y10_sam_idx -'{idx: '{x: 12, y: 10, port_id: 0}, start_addr: 32'h0ab00000, end_addr: 32'h0ac00000},// magia_tile_x11_y10_sam_idx -'{idx: '{x: 11, y: 10, port_id: 0}, start_addr: 32'h0aa00000, end_addr: 32'h0ab00000},// magia_tile_x10_y10_sam_idx -'{idx: '{x: 10, y: 10, port_id: 0}, start_addr: 32'h0a900000, end_addr: 32'h0aa00000},// magia_tile_x9_y10_sam_idx -'{idx: '{x: 9, y: 10, port_id: 0}, start_addr: 32'h0a800000, end_addr: 32'h0a900000},// magia_tile_x8_y10_sam_idx -'{idx: '{x: 8, y: 10, port_id: 0}, start_addr: 32'h0a700000, end_addr: 32'h0a800000},// magia_tile_x7_y10_sam_idx -'{idx: '{x: 7, y: 10, port_id: 0}, start_addr: 32'h0a600000, end_addr: 32'h0a700000},// magia_tile_x6_y10_sam_idx -'{idx: '{x: 6, y: 10, port_id: 0}, start_addr: 32'h0a500000, end_addr: 32'h0a600000},// magia_tile_x5_y10_sam_idx -'{idx: '{x: 5, y: 10, port_id: 0}, start_addr: 32'h0a400000, end_addr: 32'h0a500000},// magia_tile_x4_y10_sam_idx -'{idx: '{x: 4, y: 10, port_id: 0}, start_addr: 32'h0a300000, end_addr: 32'h0a400000},// magia_tile_x3_y10_sam_idx -'{idx: '{x: 3, y: 10, port_id: 0}, start_addr: 32'h0a200000, end_addr: 32'h0a300000},// magia_tile_x2_y10_sam_idx -'{idx: '{x: 2, y: 10, port_id: 0}, start_addr: 32'h0a100000, end_addr: 32'h0a200000},// magia_tile_x1_y10_sam_idx -'{idx: '{x: 1, y: 10, port_id: 0}, start_addr: 32'h0a000000, end_addr: 32'h0a100000},// magia_tile_x0_y10_sam_idx -'{idx: '{x: 16, y: 9, port_id: 0}, start_addr: 32'h09f00000, end_addr: 32'h0a000000},// magia_tile_x15_y9_sam_idx -'{idx: '{x: 15, y: 9, port_id: 0}, start_addr: 32'h09e00000, end_addr: 32'h09f00000},// magia_tile_x14_y9_sam_idx -'{idx: '{x: 14, y: 9, port_id: 0}, start_addr: 32'h09d00000, end_addr: 32'h09e00000},// magia_tile_x13_y9_sam_idx -'{idx: '{x: 13, y: 9, port_id: 0}, start_addr: 32'h09c00000, end_addr: 32'h09d00000},// magia_tile_x12_y9_sam_idx -'{idx: '{x: 12, y: 9, port_id: 0}, start_addr: 32'h09b00000, end_addr: 32'h09c00000},// magia_tile_x11_y9_sam_idx -'{idx: '{x: 11, y: 9, port_id: 0}, start_addr: 32'h09a00000, end_addr: 32'h09b00000},// magia_tile_x10_y9_sam_idx -'{idx: '{x: 10, y: 9, port_id: 0}, start_addr: 32'h09900000, end_addr: 32'h09a00000},// magia_tile_x9_y9_sam_idx -'{idx: '{x: 9, y: 9, port_id: 0}, start_addr: 32'h09800000, end_addr: 32'h09900000},// magia_tile_x8_y9_sam_idx -'{idx: '{x: 8, y: 9, port_id: 0}, start_addr: 32'h09700000, end_addr: 32'h09800000},// magia_tile_x7_y9_sam_idx -'{idx: '{x: 7, y: 9, port_id: 0}, start_addr: 32'h09600000, end_addr: 32'h09700000},// magia_tile_x6_y9_sam_idx -'{idx: '{x: 6, y: 9, port_id: 0}, start_addr: 32'h09500000, end_addr: 32'h09600000},// magia_tile_x5_y9_sam_idx -'{idx: '{x: 5, y: 9, port_id: 0}, start_addr: 32'h09400000, end_addr: 32'h09500000},// magia_tile_x4_y9_sam_idx -'{idx: '{x: 4, y: 9, port_id: 0}, start_addr: 32'h09300000, end_addr: 32'h09400000},// magia_tile_x3_y9_sam_idx -'{idx: '{x: 3, y: 9, port_id: 0}, start_addr: 32'h09200000, end_addr: 32'h09300000},// magia_tile_x2_y9_sam_idx -'{idx: '{x: 2, y: 9, port_id: 0}, start_addr: 32'h09100000, end_addr: 32'h09200000},// magia_tile_x1_y9_sam_idx -'{idx: '{x: 1, y: 9, port_id: 0}, start_addr: 32'h09000000, end_addr: 32'h09100000},// magia_tile_x0_y9_sam_idx -'{idx: '{x: 16, y: 8, port_id: 0}, start_addr: 32'h08f00000, end_addr: 32'h09000000},// magia_tile_x15_y8_sam_idx -'{idx: '{x: 15, y: 8, port_id: 0}, start_addr: 32'h08e00000, end_addr: 32'h08f00000},// magia_tile_x14_y8_sam_idx -'{idx: '{x: 14, y: 8, port_id: 0}, start_addr: 32'h08d00000, end_addr: 32'h08e00000},// magia_tile_x13_y8_sam_idx -'{idx: '{x: 13, y: 8, port_id: 0}, start_addr: 32'h08c00000, end_addr: 32'h08d00000},// magia_tile_x12_y8_sam_idx -'{idx: '{x: 12, y: 8, port_id: 0}, start_addr: 32'h08b00000, end_addr: 32'h08c00000},// magia_tile_x11_y8_sam_idx -'{idx: '{x: 11, y: 8, port_id: 0}, start_addr: 32'h08a00000, end_addr: 32'h08b00000},// magia_tile_x10_y8_sam_idx -'{idx: '{x: 10, y: 8, port_id: 0}, start_addr: 32'h08900000, end_addr: 32'h08a00000},// magia_tile_x9_y8_sam_idx -'{idx: '{x: 9, y: 8, port_id: 0}, start_addr: 32'h08800000, end_addr: 32'h08900000},// magia_tile_x8_y8_sam_idx -'{idx: '{x: 8, y: 8, port_id: 0}, start_addr: 32'h08700000, end_addr: 32'h08800000},// magia_tile_x7_y8_sam_idx -'{idx: '{x: 7, y: 8, port_id: 0}, start_addr: 32'h08600000, end_addr: 32'h08700000},// magia_tile_x6_y8_sam_idx -'{idx: '{x: 6, y: 8, port_id: 0}, start_addr: 32'h08500000, end_addr: 32'h08600000},// magia_tile_x5_y8_sam_idx -'{idx: '{x: 5, y: 8, port_id: 0}, start_addr: 32'h08400000, end_addr: 32'h08500000},// magia_tile_x4_y8_sam_idx -'{idx: '{x: 4, y: 8, port_id: 0}, start_addr: 32'h08300000, end_addr: 32'h08400000},// magia_tile_x3_y8_sam_idx -'{idx: '{x: 3, y: 8, port_id: 0}, start_addr: 32'h08200000, end_addr: 32'h08300000},// magia_tile_x2_y8_sam_idx -'{idx: '{x: 2, y: 8, port_id: 0}, start_addr: 32'h08100000, end_addr: 32'h08200000},// magia_tile_x1_y8_sam_idx -'{idx: '{x: 1, y: 8, port_id: 0}, start_addr: 32'h08000000, end_addr: 32'h08100000},// magia_tile_x0_y8_sam_idx -'{idx: '{x: 16, y: 7, port_id: 0}, start_addr: 32'h07f00000, end_addr: 32'h08000000},// magia_tile_x15_y7_sam_idx -'{idx: '{x: 15, y: 7, port_id: 0}, start_addr: 32'h07e00000, end_addr: 32'h07f00000},// magia_tile_x14_y7_sam_idx -'{idx: '{x: 14, y: 7, port_id: 0}, start_addr: 32'h07d00000, end_addr: 32'h07e00000},// magia_tile_x13_y7_sam_idx -'{idx: '{x: 13, y: 7, port_id: 0}, start_addr: 32'h07c00000, end_addr: 32'h07d00000},// magia_tile_x12_y7_sam_idx -'{idx: '{x: 12, y: 7, port_id: 0}, start_addr: 32'h07b00000, end_addr: 32'h07c00000},// magia_tile_x11_y7_sam_idx -'{idx: '{x: 11, y: 7, port_id: 0}, start_addr: 32'h07a00000, end_addr: 32'h07b00000},// magia_tile_x10_y7_sam_idx -'{idx: '{x: 10, y: 7, port_id: 0}, start_addr: 32'h07900000, end_addr: 32'h07a00000},// magia_tile_x9_y7_sam_idx -'{idx: '{x: 9, y: 7, port_id: 0}, start_addr: 32'h07800000, end_addr: 32'h07900000},// magia_tile_x8_y7_sam_idx -'{idx: '{x: 8, y: 7, port_id: 0}, start_addr: 32'h07700000, end_addr: 32'h07800000},// magia_tile_x7_y7_sam_idx -'{idx: '{x: 7, y: 7, port_id: 0}, start_addr: 32'h07600000, end_addr: 32'h07700000},// magia_tile_x6_y7_sam_idx -'{idx: '{x: 6, y: 7, port_id: 0}, start_addr: 32'h07500000, end_addr: 32'h07600000},// magia_tile_x5_y7_sam_idx -'{idx: '{x: 5, y: 7, port_id: 0}, start_addr: 32'h07400000, end_addr: 32'h07500000},// magia_tile_x4_y7_sam_idx -'{idx: '{x: 4, y: 7, port_id: 0}, start_addr: 32'h07300000, end_addr: 32'h07400000},// magia_tile_x3_y7_sam_idx -'{idx: '{x: 3, y: 7, port_id: 0}, start_addr: 32'h07200000, end_addr: 32'h07300000},// magia_tile_x2_y7_sam_idx -'{idx: '{x: 2, y: 7, port_id: 0}, start_addr: 32'h07100000, end_addr: 32'h07200000},// magia_tile_x1_y7_sam_idx -'{idx: '{x: 1, y: 7, port_id: 0}, start_addr: 32'h07000000, end_addr: 32'h07100000},// magia_tile_x0_y7_sam_idx -'{idx: '{x: 16, y: 6, port_id: 0}, start_addr: 32'h06f00000, end_addr: 32'h07000000},// magia_tile_x15_y6_sam_idx -'{idx: '{x: 15, y: 6, port_id: 0}, start_addr: 32'h06e00000, end_addr: 32'h06f00000},// magia_tile_x14_y6_sam_idx -'{idx: '{x: 14, y: 6, port_id: 0}, start_addr: 32'h06d00000, end_addr: 32'h06e00000},// magia_tile_x13_y6_sam_idx -'{idx: '{x: 13, y: 6, port_id: 0}, start_addr: 32'h06c00000, end_addr: 32'h06d00000},// magia_tile_x12_y6_sam_idx -'{idx: '{x: 12, y: 6, port_id: 0}, start_addr: 32'h06b00000, end_addr: 32'h06c00000},// magia_tile_x11_y6_sam_idx -'{idx: '{x: 11, y: 6, port_id: 0}, start_addr: 32'h06a00000, end_addr: 32'h06b00000},// magia_tile_x10_y6_sam_idx -'{idx: '{x: 10, y: 6, port_id: 0}, start_addr: 32'h06900000, end_addr: 32'h06a00000},// magia_tile_x9_y6_sam_idx -'{idx: '{x: 9, y: 6, port_id: 0}, start_addr: 32'h06800000, end_addr: 32'h06900000},// magia_tile_x8_y6_sam_idx -'{idx: '{x: 8, y: 6, port_id: 0}, start_addr: 32'h06700000, end_addr: 32'h06800000},// magia_tile_x7_y6_sam_idx -'{idx: '{x: 7, y: 6, port_id: 0}, start_addr: 32'h06600000, end_addr: 32'h06700000},// magia_tile_x6_y6_sam_idx -'{idx: '{x: 6, y: 6, port_id: 0}, start_addr: 32'h06500000, end_addr: 32'h06600000},// magia_tile_x5_y6_sam_idx -'{idx: '{x: 5, y: 6, port_id: 0}, start_addr: 32'h06400000, end_addr: 32'h06500000},// magia_tile_x4_y6_sam_idx -'{idx: '{x: 4, y: 6, port_id: 0}, start_addr: 32'h06300000, end_addr: 32'h06400000},// magia_tile_x3_y6_sam_idx -'{idx: '{x: 3, y: 6, port_id: 0}, start_addr: 32'h06200000, end_addr: 32'h06300000},// magia_tile_x2_y6_sam_idx -'{idx: '{x: 2, y: 6, port_id: 0}, start_addr: 32'h06100000, end_addr: 32'h06200000},// magia_tile_x1_y6_sam_idx -'{idx: '{x: 1, y: 6, port_id: 0}, start_addr: 32'h06000000, end_addr: 32'h06100000},// magia_tile_x0_y6_sam_idx -'{idx: '{x: 16, y: 5, port_id: 0}, start_addr: 32'h05f00000, end_addr: 32'h06000000},// magia_tile_x15_y5_sam_idx -'{idx: '{x: 15, y: 5, port_id: 0}, start_addr: 32'h05e00000, end_addr: 32'h05f00000},// magia_tile_x14_y5_sam_idx -'{idx: '{x: 14, y: 5, port_id: 0}, start_addr: 32'h05d00000, end_addr: 32'h05e00000},// magia_tile_x13_y5_sam_idx -'{idx: '{x: 13, y: 5, port_id: 0}, start_addr: 32'h05c00000, end_addr: 32'h05d00000},// magia_tile_x12_y5_sam_idx -'{idx: '{x: 12, y: 5, port_id: 0}, start_addr: 32'h05b00000, end_addr: 32'h05c00000},// magia_tile_x11_y5_sam_idx -'{idx: '{x: 11, y: 5, port_id: 0}, start_addr: 32'h05a00000, end_addr: 32'h05b00000},// magia_tile_x10_y5_sam_idx -'{idx: '{x: 10, y: 5, port_id: 0}, start_addr: 32'h05900000, end_addr: 32'h05a00000},// magia_tile_x9_y5_sam_idx -'{idx: '{x: 9, y: 5, port_id: 0}, start_addr: 32'h05800000, end_addr: 32'h05900000},// magia_tile_x8_y5_sam_idx -'{idx: '{x: 8, y: 5, port_id: 0}, start_addr: 32'h05700000, end_addr: 32'h05800000},// magia_tile_x7_y5_sam_idx -'{idx: '{x: 7, y: 5, port_id: 0}, start_addr: 32'h05600000, end_addr: 32'h05700000},// magia_tile_x6_y5_sam_idx -'{idx: '{x: 6, y: 5, port_id: 0}, start_addr: 32'h05500000, end_addr: 32'h05600000},// magia_tile_x5_y5_sam_idx -'{idx: '{x: 5, y: 5, port_id: 0}, start_addr: 32'h05400000, end_addr: 32'h05500000},// magia_tile_x4_y5_sam_idx -'{idx: '{x: 4, y: 5, port_id: 0}, start_addr: 32'h05300000, end_addr: 32'h05400000},// magia_tile_x3_y5_sam_idx -'{idx: '{x: 3, y: 5, port_id: 0}, start_addr: 32'h05200000, end_addr: 32'h05300000},// magia_tile_x2_y5_sam_idx -'{idx: '{x: 2, y: 5, port_id: 0}, start_addr: 32'h05100000, end_addr: 32'h05200000},// magia_tile_x1_y5_sam_idx -'{idx: '{x: 1, y: 5, port_id: 0}, start_addr: 32'h05000000, end_addr: 32'h05100000},// magia_tile_x0_y5_sam_idx -'{idx: '{x: 16, y: 4, port_id: 0}, start_addr: 32'h04f00000, end_addr: 32'h05000000},// magia_tile_x15_y4_sam_idx -'{idx: '{x: 15, y: 4, port_id: 0}, start_addr: 32'h04e00000, end_addr: 32'h04f00000},// magia_tile_x14_y4_sam_idx -'{idx: '{x: 14, y: 4, port_id: 0}, start_addr: 32'h04d00000, end_addr: 32'h04e00000},// magia_tile_x13_y4_sam_idx -'{idx: '{x: 13, y: 4, port_id: 0}, start_addr: 32'h04c00000, end_addr: 32'h04d00000},// magia_tile_x12_y4_sam_idx -'{idx: '{x: 12, y: 4, port_id: 0}, start_addr: 32'h04b00000, end_addr: 32'h04c00000},// magia_tile_x11_y4_sam_idx -'{idx: '{x: 11, y: 4, port_id: 0}, start_addr: 32'h04a00000, end_addr: 32'h04b00000},// magia_tile_x10_y4_sam_idx -'{idx: '{x: 10, y: 4, port_id: 0}, start_addr: 32'h04900000, end_addr: 32'h04a00000},// magia_tile_x9_y4_sam_idx -'{idx: '{x: 9, y: 4, port_id: 0}, start_addr: 32'h04800000, end_addr: 32'h04900000},// magia_tile_x8_y4_sam_idx -'{idx: '{x: 8, y: 4, port_id: 0}, start_addr: 32'h04700000, end_addr: 32'h04800000},// magia_tile_x7_y4_sam_idx -'{idx: '{x: 7, y: 4, port_id: 0}, start_addr: 32'h04600000, end_addr: 32'h04700000},// magia_tile_x6_y4_sam_idx -'{idx: '{x: 6, y: 4, port_id: 0}, start_addr: 32'h04500000, end_addr: 32'h04600000},// magia_tile_x5_y4_sam_idx -'{idx: '{x: 5, y: 4, port_id: 0}, start_addr: 32'h04400000, end_addr: 32'h04500000},// magia_tile_x4_y4_sam_idx -'{idx: '{x: 4, y: 4, port_id: 0}, start_addr: 32'h04300000, end_addr: 32'h04400000},// magia_tile_x3_y4_sam_idx -'{idx: '{x: 3, y: 4, port_id: 0}, start_addr: 32'h04200000, end_addr: 32'h04300000},// magia_tile_x2_y4_sam_idx -'{idx: '{x: 2, y: 4, port_id: 0}, start_addr: 32'h04100000, end_addr: 32'h04200000},// magia_tile_x1_y4_sam_idx -'{idx: '{x: 1, y: 4, port_id: 0}, start_addr: 32'h04000000, end_addr: 32'h04100000},// magia_tile_x0_y4_sam_idx -'{idx: '{x: 16, y: 3, port_id: 0}, start_addr: 32'h03f00000, end_addr: 32'h04000000},// magia_tile_x15_y3_sam_idx -'{idx: '{x: 15, y: 3, port_id: 0}, start_addr: 32'h03e00000, end_addr: 32'h03f00000},// magia_tile_x14_y3_sam_idx -'{idx: '{x: 14, y: 3, port_id: 0}, start_addr: 32'h03d00000, end_addr: 32'h03e00000},// magia_tile_x13_y3_sam_idx -'{idx: '{x: 13, y: 3, port_id: 0}, start_addr: 32'h03c00000, end_addr: 32'h03d00000},// magia_tile_x12_y3_sam_idx -'{idx: '{x: 12, y: 3, port_id: 0}, start_addr: 32'h03b00000, end_addr: 32'h03c00000},// magia_tile_x11_y3_sam_idx -'{idx: '{x: 11, y: 3, port_id: 0}, start_addr: 32'h03a00000, end_addr: 32'h03b00000},// magia_tile_x10_y3_sam_idx -'{idx: '{x: 10, y: 3, port_id: 0}, start_addr: 32'h03900000, end_addr: 32'h03a00000},// magia_tile_x9_y3_sam_idx -'{idx: '{x: 9, y: 3, port_id: 0}, start_addr: 32'h03800000, end_addr: 32'h03900000},// magia_tile_x8_y3_sam_idx -'{idx: '{x: 8, y: 3, port_id: 0}, start_addr: 32'h03700000, end_addr: 32'h03800000},// magia_tile_x7_y3_sam_idx -'{idx: '{x: 7, y: 3, port_id: 0}, start_addr: 32'h03600000, end_addr: 32'h03700000},// magia_tile_x6_y3_sam_idx -'{idx: '{x: 6, y: 3, port_id: 0}, start_addr: 32'h03500000, end_addr: 32'h03600000},// magia_tile_x5_y3_sam_idx -'{idx: '{x: 5, y: 3, port_id: 0}, start_addr: 32'h03400000, end_addr: 32'h03500000},// magia_tile_x4_y3_sam_idx -'{idx: '{x: 4, y: 3, port_id: 0}, start_addr: 32'h03300000, end_addr: 32'h03400000},// magia_tile_x3_y3_sam_idx -'{idx: '{x: 3, y: 3, port_id: 0}, start_addr: 32'h03200000, end_addr: 32'h03300000},// magia_tile_x2_y3_sam_idx -'{idx: '{x: 2, y: 3, port_id: 0}, start_addr: 32'h03100000, end_addr: 32'h03200000},// magia_tile_x1_y3_sam_idx -'{idx: '{x: 1, y: 3, port_id: 0}, start_addr: 32'h03000000, end_addr: 32'h03100000},// magia_tile_x0_y3_sam_idx -'{idx: '{x: 16, y: 2, port_id: 0}, start_addr: 32'h02f00000, end_addr: 32'h03000000},// magia_tile_x15_y2_sam_idx -'{idx: '{x: 15, y: 2, port_id: 0}, start_addr: 32'h02e00000, end_addr: 32'h02f00000},// magia_tile_x14_y2_sam_idx -'{idx: '{x: 14, y: 2, port_id: 0}, start_addr: 32'h02d00000, end_addr: 32'h02e00000},// magia_tile_x13_y2_sam_idx -'{idx: '{x: 13, y: 2, port_id: 0}, start_addr: 32'h02c00000, end_addr: 32'h02d00000},// magia_tile_x12_y2_sam_idx -'{idx: '{x: 12, y: 2, port_id: 0}, start_addr: 32'h02b00000, end_addr: 32'h02c00000},// magia_tile_x11_y2_sam_idx -'{idx: '{x: 11, y: 2, port_id: 0}, start_addr: 32'h02a00000, end_addr: 32'h02b00000},// magia_tile_x10_y2_sam_idx -'{idx: '{x: 10, y: 2, port_id: 0}, start_addr: 32'h02900000, end_addr: 32'h02a00000},// magia_tile_x9_y2_sam_idx -'{idx: '{x: 9, y: 2, port_id: 0}, start_addr: 32'h02800000, end_addr: 32'h02900000},// magia_tile_x8_y2_sam_idx -'{idx: '{x: 8, y: 2, port_id: 0}, start_addr: 32'h02700000, end_addr: 32'h02800000},// magia_tile_x7_y2_sam_idx -'{idx: '{x: 7, y: 2, port_id: 0}, start_addr: 32'h02600000, end_addr: 32'h02700000},// magia_tile_x6_y2_sam_idx -'{idx: '{x: 6, y: 2, port_id: 0}, start_addr: 32'h02500000, end_addr: 32'h02600000},// magia_tile_x5_y2_sam_idx -'{idx: '{x: 5, y: 2, port_id: 0}, start_addr: 32'h02400000, end_addr: 32'h02500000},// magia_tile_x4_y2_sam_idx -'{idx: '{x: 4, y: 2, port_id: 0}, start_addr: 32'h02300000, end_addr: 32'h02400000},// magia_tile_x3_y2_sam_idx -'{idx: '{x: 3, y: 2, port_id: 0}, start_addr: 32'h02200000, end_addr: 32'h02300000},// magia_tile_x2_y2_sam_idx -'{idx: '{x: 2, y: 2, port_id: 0}, start_addr: 32'h02100000, end_addr: 32'h02200000},// magia_tile_x1_y2_sam_idx -'{idx: '{x: 1, y: 2, port_id: 0}, start_addr: 32'h02000000, end_addr: 32'h02100000},// magia_tile_x0_y2_sam_idx -'{idx: '{x: 16, y: 1, port_id: 0}, start_addr: 32'h01f00000, end_addr: 32'h02000000},// magia_tile_x15_y1_sam_idx -'{idx: '{x: 15, y: 1, port_id: 0}, start_addr: 32'h01e00000, end_addr: 32'h01f00000},// magia_tile_x14_y1_sam_idx -'{idx: '{x: 14, y: 1, port_id: 0}, start_addr: 32'h01d00000, end_addr: 32'h01e00000},// magia_tile_x13_y1_sam_idx -'{idx: '{x: 13, y: 1, port_id: 0}, start_addr: 32'h01c00000, end_addr: 32'h01d00000},// magia_tile_x12_y1_sam_idx -'{idx: '{x: 12, y: 1, port_id: 0}, start_addr: 32'h01b00000, end_addr: 32'h01c00000},// magia_tile_x11_y1_sam_idx -'{idx: '{x: 11, y: 1, port_id: 0}, start_addr: 32'h01a00000, end_addr: 32'h01b00000},// magia_tile_x10_y1_sam_idx -'{idx: '{x: 10, y: 1, port_id: 0}, start_addr: 32'h01900000, end_addr: 32'h01a00000},// magia_tile_x9_y1_sam_idx -'{idx: '{x: 9, y: 1, port_id: 0}, start_addr: 32'h01800000, end_addr: 32'h01900000},// magia_tile_x8_y1_sam_idx -'{idx: '{x: 8, y: 1, port_id: 0}, start_addr: 32'h01700000, end_addr: 32'h01800000},// magia_tile_x7_y1_sam_idx -'{idx: '{x: 7, y: 1, port_id: 0}, start_addr: 32'h01600000, end_addr: 32'h01700000},// magia_tile_x6_y1_sam_idx -'{idx: '{x: 6, y: 1, port_id: 0}, start_addr: 32'h01500000, end_addr: 32'h01600000},// magia_tile_x5_y1_sam_idx -'{idx: '{x: 5, y: 1, port_id: 0}, start_addr: 32'h01400000, end_addr: 32'h01500000},// magia_tile_x4_y1_sam_idx -'{idx: '{x: 4, y: 1, port_id: 0}, start_addr: 32'h01300000, end_addr: 32'h01400000},// magia_tile_x3_y1_sam_idx -'{idx: '{x: 3, y: 1, port_id: 0}, start_addr: 32'h01200000, end_addr: 32'h01300000},// magia_tile_x2_y1_sam_idx -'{idx: '{x: 2, y: 1, port_id: 0}, start_addr: 32'h01100000, end_addr: 32'h01200000},// magia_tile_x1_y1_sam_idx -'{idx: '{x: 1, y: 1, port_id: 0}, start_addr: 32'h01000000, end_addr: 32'h01100000},// magia_tile_x0_y1_sam_idx -'{idx: '{x: 16, y: 0, port_id: 0}, start_addr: 32'h00f00000, end_addr: 32'h01000000},// magia_tile_x15_y0_sam_idx -'{idx: '{x: 15, y: 0, port_id: 0}, start_addr: 32'h00e00000, end_addr: 32'h00f00000},// magia_tile_x14_y0_sam_idx -'{idx: '{x: 14, y: 0, port_id: 0}, start_addr: 32'h00d00000, end_addr: 32'h00e00000},// magia_tile_x13_y0_sam_idx -'{idx: '{x: 13, y: 0, port_id: 0}, start_addr: 32'h00c00000, end_addr: 32'h00d00000},// magia_tile_x12_y0_sam_idx -'{idx: '{x: 12, y: 0, port_id: 0}, start_addr: 32'h00b00000, end_addr: 32'h00c00000},// magia_tile_x11_y0_sam_idx -'{idx: '{x: 11, y: 0, port_id: 0}, start_addr: 32'h00a00000, end_addr: 32'h00b00000},// magia_tile_x10_y0_sam_idx -'{idx: '{x: 10, y: 0, port_id: 0}, start_addr: 32'h00900000, end_addr: 32'h00a00000},// magia_tile_x9_y0_sam_idx -'{idx: '{x: 9, y: 0, port_id: 0}, start_addr: 32'h00800000, end_addr: 32'h00900000},// magia_tile_x8_y0_sam_idx -'{idx: '{x: 8, y: 0, port_id: 0}, start_addr: 32'h00700000, end_addr: 32'h00800000},// magia_tile_x7_y0_sam_idx -'{idx: '{x: 7, y: 0, port_id: 0}, start_addr: 32'h00600000, end_addr: 32'h00700000},// magia_tile_x6_y0_sam_idx -'{idx: '{x: 6, y: 0, port_id: 0}, start_addr: 32'h00500000, end_addr: 32'h00600000},// magia_tile_x5_y0_sam_idx -'{idx: '{x: 5, y: 0, port_id: 0}, start_addr: 32'h00400000, end_addr: 32'h00500000},// magia_tile_x4_y0_sam_idx -'{idx: '{x: 4, y: 0, port_id: 0}, start_addr: 32'h00300000, end_addr: 32'h00400000},// magia_tile_x3_y0_sam_idx -'{idx: '{x: 3, y: 0, port_id: 0}, start_addr: 32'h00200000, end_addr: 32'h00300000},// magia_tile_x2_y0_sam_idx -'{idx: '{x: 2, y: 0, port_id: 0}, start_addr: 32'h00100000, end_addr: 32'h00200000},// magia_tile_x1_y0_sam_idx -'{idx: '{x: 1, y: 0, port_id: 0}, start_addr: 32'h00000000, end_addr: 32'h00100000} // magia_tile_x0_y0_sam_idx +localparam sam_rule_t[SamNumRules-1:0] Sam = '{ +'{ idx: '{x: 0, y: 15, port_id: 0}, + start_addr: 32'hfc000000, + end_addr: 32'h100000000},// L215 +'{ idx: '{x: 0, y: 14, port_id: 0}, + start_addr: 32'hf8000000, + end_addr: 32'hfc000000},// L214 +'{ idx: '{x: 0, y: 13, port_id: 0}, + start_addr: 32'hf4000000, + end_addr: 32'hf8000000},// L213 +'{ idx: '{x: 0, y: 12, port_id: 0}, + start_addr: 32'hf0000000, + end_addr: 32'hf4000000},// L212 +'{ idx: '{x: 0, y: 11, port_id: 0}, + start_addr: 32'hec000000, + end_addr: 32'hf0000000},// L211 +'{ idx: '{x: 0, y: 10, port_id: 0}, + start_addr: 32'he8000000, + end_addr: 32'hec000000},// L210 +'{ idx: '{x: 0, y: 9, port_id: 0}, + start_addr: 32'he4000000, + end_addr: 32'he8000000},// L29 +'{ idx: '{x: 0, y: 8, port_id: 0}, + start_addr: 32'he0000000, + end_addr: 32'he4000000},// L28 +'{ idx: '{x: 0, y: 7, port_id: 0}, + start_addr: 32'hdc000000, + end_addr: 32'he0000000},// L27 +'{ idx: '{x: 0, y: 6, port_id: 0}, + start_addr: 32'hd8000000, + end_addr: 32'hdc000000},// L26 +'{ idx: '{x: 0, y: 5, port_id: 0}, + start_addr: 32'hd4000000, + end_addr: 32'hd8000000},// L25 +'{ idx: '{x: 0, y: 4, port_id: 0}, + start_addr: 32'hd0000000, + end_addr: 32'hd4000000},// L24 +'{ idx: '{x: 0, y: 3, port_id: 0}, + start_addr: 32'hcc000000, + end_addr: 32'hd0000000},// L23 +'{ idx: '{x: 0, y: 2, port_id: 0}, + start_addr: 32'hc8000000, + end_addr: 32'hcc000000},// L22 +'{ idx: '{x: 0, y: 1, port_id: 0}, + start_addr: 32'hc4000000, + end_addr: 32'hc8000000},// L21 +'{ idx: '{x: 0, y: 0, port_id: 0}, + start_addr: 32'hc0000000, + end_addr: 32'hc4000000},// L20 +'{ idx: '{x: 31, y: 15, port_id: 0}, + start_addr: 32'h0ff00000, + end_addr: 32'h10000000},// MagiaTileX15Y15 +'{ idx: '{x: 30, y: 15, port_id: 0}, + start_addr: 32'h0fe00000, + end_addr: 32'h0ff00000},// MagiaTileX14Y15 +'{ idx: '{x: 29, y: 15, port_id: 0}, + start_addr: 32'h0fd00000, + end_addr: 32'h0fe00000},// MagiaTileX13Y15 +'{ idx: '{x: 28, y: 15, port_id: 0}, + start_addr: 32'h0fc00000, + end_addr: 32'h0fd00000},// MagiaTileX12Y15 +'{ idx: '{x: 27, y: 15, port_id: 0}, + start_addr: 32'h0fb00000, + end_addr: 32'h0fc00000},// MagiaTileX11Y15 +'{ idx: '{x: 26, y: 15, port_id: 0}, + start_addr: 32'h0fa00000, + end_addr: 32'h0fb00000},// MagiaTileX10Y15 +'{ idx: '{x: 25, y: 15, port_id: 0}, + start_addr: 32'h0f900000, + end_addr: 32'h0fa00000},// MagiaTileX9Y15 +'{ idx: '{x: 24, y: 15, port_id: 0}, + start_addr: 32'h0f800000, + end_addr: 32'h0f900000},// MagiaTileX8Y15 +'{ idx: '{x: 23, y: 15, port_id: 0}, + start_addr: 32'h0f700000, + end_addr: 32'h0f800000},// MagiaTileX7Y15 +'{ idx: '{x: 22, y: 15, port_id: 0}, + start_addr: 32'h0f600000, + end_addr: 32'h0f700000},// MagiaTileX6Y15 +'{ idx: '{x: 21, y: 15, port_id: 0}, + start_addr: 32'h0f500000, + end_addr: 32'h0f600000},// MagiaTileX5Y15 +'{ idx: '{x: 20, y: 15, port_id: 0}, + start_addr: 32'h0f400000, + end_addr: 32'h0f500000},// MagiaTileX4Y15 +'{ idx: '{x: 19, y: 15, port_id: 0}, + start_addr: 32'h0f300000, + end_addr: 32'h0f400000},// MagiaTileX3Y15 +'{ idx: '{x: 18, y: 15, port_id: 0}, + start_addr: 32'h0f200000, + end_addr: 32'h0f300000},// MagiaTileX2Y15 +'{ idx: '{x: 17, y: 15, port_id: 0}, + start_addr: 32'h0f100000, + end_addr: 32'h0f200000},// MagiaTileX1Y15 +'{ idx: '{x: 16, y: 15, port_id: 0}, + start_addr: 32'h0f000000, + end_addr: 32'h0f100000},// MagiaTileX0Y15 +'{ idx: '{x: 31, y: 14, port_id: 0}, + start_addr: 32'h0ef00000, + end_addr: 32'h0f000000},// MagiaTileX15Y14 +'{ idx: '{x: 30, y: 14, port_id: 0}, + start_addr: 32'h0ee00000, + end_addr: 32'h0ef00000},// MagiaTileX14Y14 +'{ idx: '{x: 29, y: 14, port_id: 0}, + start_addr: 32'h0ed00000, + end_addr: 32'h0ee00000},// MagiaTileX13Y14 +'{ idx: '{x: 28, y: 14, port_id: 0}, + start_addr: 32'h0ec00000, + end_addr: 32'h0ed00000},// MagiaTileX12Y14 +'{ idx: '{x: 27, y: 14, port_id: 0}, + start_addr: 32'h0eb00000, + end_addr: 32'h0ec00000},// MagiaTileX11Y14 +'{ idx: '{x: 26, y: 14, port_id: 0}, + start_addr: 32'h0ea00000, + end_addr: 32'h0eb00000},// MagiaTileX10Y14 +'{ idx: '{x: 25, y: 14, port_id: 0}, + start_addr: 32'h0e900000, + end_addr: 32'h0ea00000},// MagiaTileX9Y14 +'{ idx: '{x: 24, y: 14, port_id: 0}, + start_addr: 32'h0e800000, + end_addr: 32'h0e900000},// MagiaTileX8Y14 +'{ idx: '{x: 23, y: 14, port_id: 0}, + start_addr: 32'h0e700000, + end_addr: 32'h0e800000},// MagiaTileX7Y14 +'{ idx: '{x: 22, y: 14, port_id: 0}, + start_addr: 32'h0e600000, + end_addr: 32'h0e700000},// MagiaTileX6Y14 +'{ idx: '{x: 21, y: 14, port_id: 0}, + start_addr: 32'h0e500000, + end_addr: 32'h0e600000},// MagiaTileX5Y14 +'{ idx: '{x: 20, y: 14, port_id: 0}, + start_addr: 32'h0e400000, + end_addr: 32'h0e500000},// MagiaTileX4Y14 +'{ idx: '{x: 19, y: 14, port_id: 0}, + start_addr: 32'h0e300000, + end_addr: 32'h0e400000},// MagiaTileX3Y14 +'{ idx: '{x: 18, y: 14, port_id: 0}, + start_addr: 32'h0e200000, + end_addr: 32'h0e300000},// MagiaTileX2Y14 +'{ idx: '{x: 17, y: 14, port_id: 0}, + start_addr: 32'h0e100000, + end_addr: 32'h0e200000},// MagiaTileX1Y14 +'{ idx: '{x: 16, y: 14, port_id: 0}, + start_addr: 32'h0e000000, + end_addr: 32'h0e100000},// MagiaTileX0Y14 +'{ idx: '{x: 31, y: 13, port_id: 0}, + start_addr: 32'h0df00000, + end_addr: 32'h0e000000},// MagiaTileX15Y13 +'{ idx: '{x: 30, y: 13, port_id: 0}, + start_addr: 32'h0de00000, + end_addr: 32'h0df00000},// MagiaTileX14Y13 +'{ idx: '{x: 29, y: 13, port_id: 0}, + start_addr: 32'h0dd00000, + end_addr: 32'h0de00000},// MagiaTileX13Y13 +'{ idx: '{x: 28, y: 13, port_id: 0}, + start_addr: 32'h0dc00000, + end_addr: 32'h0dd00000},// MagiaTileX12Y13 +'{ idx: '{x: 27, y: 13, port_id: 0}, + start_addr: 32'h0db00000, + end_addr: 32'h0dc00000},// MagiaTileX11Y13 +'{ idx: '{x: 26, y: 13, port_id: 0}, + start_addr: 32'h0da00000, + end_addr: 32'h0db00000},// MagiaTileX10Y13 +'{ idx: '{x: 25, y: 13, port_id: 0}, + start_addr: 32'h0d900000, + end_addr: 32'h0da00000},// MagiaTileX9Y13 +'{ idx: '{x: 24, y: 13, port_id: 0}, + start_addr: 32'h0d800000, + end_addr: 32'h0d900000},// MagiaTileX8Y13 +'{ idx: '{x: 23, y: 13, port_id: 0}, + start_addr: 32'h0d700000, + end_addr: 32'h0d800000},// MagiaTileX7Y13 +'{ idx: '{x: 22, y: 13, port_id: 0}, + start_addr: 32'h0d600000, + end_addr: 32'h0d700000},// MagiaTileX6Y13 +'{ idx: '{x: 21, y: 13, port_id: 0}, + start_addr: 32'h0d500000, + end_addr: 32'h0d600000},// MagiaTileX5Y13 +'{ idx: '{x: 20, y: 13, port_id: 0}, + start_addr: 32'h0d400000, + end_addr: 32'h0d500000},// MagiaTileX4Y13 +'{ idx: '{x: 19, y: 13, port_id: 0}, + start_addr: 32'h0d300000, + end_addr: 32'h0d400000},// MagiaTileX3Y13 +'{ idx: '{x: 18, y: 13, port_id: 0}, + start_addr: 32'h0d200000, + end_addr: 32'h0d300000},// MagiaTileX2Y13 +'{ idx: '{x: 17, y: 13, port_id: 0}, + start_addr: 32'h0d100000, + end_addr: 32'h0d200000},// MagiaTileX1Y13 +'{ idx: '{x: 16, y: 13, port_id: 0}, + start_addr: 32'h0d000000, + end_addr: 32'h0d100000},// MagiaTileX0Y13 +'{ idx: '{x: 31, y: 12, port_id: 0}, + start_addr: 32'h0cf00000, + end_addr: 32'h0d000000},// MagiaTileX15Y12 +'{ idx: '{x: 30, y: 12, port_id: 0}, + start_addr: 32'h0ce00000, + end_addr: 32'h0cf00000},// MagiaTileX14Y12 +'{ idx: '{x: 29, y: 12, port_id: 0}, + start_addr: 32'h0cd00000, + end_addr: 32'h0ce00000},// MagiaTileX13Y12 +'{ idx: '{x: 28, y: 12, port_id: 0}, + start_addr: 32'h0cc00000, + end_addr: 32'h0cd00000},// MagiaTileX12Y12 +'{ idx: '{x: 27, y: 12, port_id: 0}, + start_addr: 32'h0cb00000, + end_addr: 32'h0cc00000},// MagiaTileX11Y12 +'{ idx: '{x: 26, y: 12, port_id: 0}, + start_addr: 32'h0ca00000, + end_addr: 32'h0cb00000},// MagiaTileX10Y12 +'{ idx: '{x: 25, y: 12, port_id: 0}, + start_addr: 32'h0c900000, + end_addr: 32'h0ca00000},// MagiaTileX9Y12 +'{ idx: '{x: 24, y: 12, port_id: 0}, + start_addr: 32'h0c800000, + end_addr: 32'h0c900000},// MagiaTileX8Y12 +'{ idx: '{x: 23, y: 12, port_id: 0}, + start_addr: 32'h0c700000, + end_addr: 32'h0c800000},// MagiaTileX7Y12 +'{ idx: '{x: 22, y: 12, port_id: 0}, + start_addr: 32'h0c600000, + end_addr: 32'h0c700000},// MagiaTileX6Y12 +'{ idx: '{x: 21, y: 12, port_id: 0}, + start_addr: 32'h0c500000, + end_addr: 32'h0c600000},// MagiaTileX5Y12 +'{ idx: '{x: 20, y: 12, port_id: 0}, + start_addr: 32'h0c400000, + end_addr: 32'h0c500000},// MagiaTileX4Y12 +'{ idx: '{x: 19, y: 12, port_id: 0}, + start_addr: 32'h0c300000, + end_addr: 32'h0c400000},// MagiaTileX3Y12 +'{ idx: '{x: 18, y: 12, port_id: 0}, + start_addr: 32'h0c200000, + end_addr: 32'h0c300000},// MagiaTileX2Y12 +'{ idx: '{x: 17, y: 12, port_id: 0}, + start_addr: 32'h0c100000, + end_addr: 32'h0c200000},// MagiaTileX1Y12 +'{ idx: '{x: 16, y: 12, port_id: 0}, + start_addr: 32'h0c000000, + end_addr: 32'h0c100000},// MagiaTileX0Y12 +'{ idx: '{x: 31, y: 11, port_id: 0}, + start_addr: 32'h0bf00000, + end_addr: 32'h0c000000},// MagiaTileX15Y11 +'{ idx: '{x: 30, y: 11, port_id: 0}, + start_addr: 32'h0be00000, + end_addr: 32'h0bf00000},// MagiaTileX14Y11 +'{ idx: '{x: 29, y: 11, port_id: 0}, + start_addr: 32'h0bd00000, + end_addr: 32'h0be00000},// MagiaTileX13Y11 +'{ idx: '{x: 28, y: 11, port_id: 0}, + start_addr: 32'h0bc00000, + end_addr: 32'h0bd00000},// MagiaTileX12Y11 +'{ idx: '{x: 27, y: 11, port_id: 0}, + start_addr: 32'h0bb00000, + end_addr: 32'h0bc00000},// MagiaTileX11Y11 +'{ idx: '{x: 26, y: 11, port_id: 0}, + start_addr: 32'h0ba00000, + end_addr: 32'h0bb00000},// MagiaTileX10Y11 +'{ idx: '{x: 25, y: 11, port_id: 0}, + start_addr: 32'h0b900000, + end_addr: 32'h0ba00000},// MagiaTileX9Y11 +'{ idx: '{x: 24, y: 11, port_id: 0}, + start_addr: 32'h0b800000, + end_addr: 32'h0b900000},// MagiaTileX8Y11 +'{ idx: '{x: 23, y: 11, port_id: 0}, + start_addr: 32'h0b700000, + end_addr: 32'h0b800000},// MagiaTileX7Y11 +'{ idx: '{x: 22, y: 11, port_id: 0}, + start_addr: 32'h0b600000, + end_addr: 32'h0b700000},// MagiaTileX6Y11 +'{ idx: '{x: 21, y: 11, port_id: 0}, + start_addr: 32'h0b500000, + end_addr: 32'h0b600000},// MagiaTileX5Y11 +'{ idx: '{x: 20, y: 11, port_id: 0}, + start_addr: 32'h0b400000, + end_addr: 32'h0b500000},// MagiaTileX4Y11 +'{ idx: '{x: 19, y: 11, port_id: 0}, + start_addr: 32'h0b300000, + end_addr: 32'h0b400000},// MagiaTileX3Y11 +'{ idx: '{x: 18, y: 11, port_id: 0}, + start_addr: 32'h0b200000, + end_addr: 32'h0b300000},// MagiaTileX2Y11 +'{ idx: '{x: 17, y: 11, port_id: 0}, + start_addr: 32'h0b100000, + end_addr: 32'h0b200000},// MagiaTileX1Y11 +'{ idx: '{x: 16, y: 11, port_id: 0}, + start_addr: 32'h0b000000, + end_addr: 32'h0b100000},// MagiaTileX0Y11 +'{ idx: '{x: 31, y: 10, port_id: 0}, + start_addr: 32'h0af00000, + end_addr: 32'h0b000000},// MagiaTileX15Y10 +'{ idx: '{x: 30, y: 10, port_id: 0}, + start_addr: 32'h0ae00000, + end_addr: 32'h0af00000},// MagiaTileX14Y10 +'{ idx: '{x: 29, y: 10, port_id: 0}, + start_addr: 32'h0ad00000, + end_addr: 32'h0ae00000},// MagiaTileX13Y10 +'{ idx: '{x: 28, y: 10, port_id: 0}, + start_addr: 32'h0ac00000, + end_addr: 32'h0ad00000},// MagiaTileX12Y10 +'{ idx: '{x: 27, y: 10, port_id: 0}, + start_addr: 32'h0ab00000, + end_addr: 32'h0ac00000},// MagiaTileX11Y10 +'{ idx: '{x: 26, y: 10, port_id: 0}, + start_addr: 32'h0aa00000, + end_addr: 32'h0ab00000},// MagiaTileX10Y10 +'{ idx: '{x: 25, y: 10, port_id: 0}, + start_addr: 32'h0a900000, + end_addr: 32'h0aa00000},// MagiaTileX9Y10 +'{ idx: '{x: 24, y: 10, port_id: 0}, + start_addr: 32'h0a800000, + end_addr: 32'h0a900000},// MagiaTileX8Y10 +'{ idx: '{x: 23, y: 10, port_id: 0}, + start_addr: 32'h0a700000, + end_addr: 32'h0a800000},// MagiaTileX7Y10 +'{ idx: '{x: 22, y: 10, port_id: 0}, + start_addr: 32'h0a600000, + end_addr: 32'h0a700000},// MagiaTileX6Y10 +'{ idx: '{x: 21, y: 10, port_id: 0}, + start_addr: 32'h0a500000, + end_addr: 32'h0a600000},// MagiaTileX5Y10 +'{ idx: '{x: 20, y: 10, port_id: 0}, + start_addr: 32'h0a400000, + end_addr: 32'h0a500000},// MagiaTileX4Y10 +'{ idx: '{x: 19, y: 10, port_id: 0}, + start_addr: 32'h0a300000, + end_addr: 32'h0a400000},// MagiaTileX3Y10 +'{ idx: '{x: 18, y: 10, port_id: 0}, + start_addr: 32'h0a200000, + end_addr: 32'h0a300000},// MagiaTileX2Y10 +'{ idx: '{x: 17, y: 10, port_id: 0}, + start_addr: 32'h0a100000, + end_addr: 32'h0a200000},// MagiaTileX1Y10 +'{ idx: '{x: 16, y: 10, port_id: 0}, + start_addr: 32'h0a000000, + end_addr: 32'h0a100000},// MagiaTileX0Y10 +'{ idx: '{x: 31, y: 9, port_id: 0}, + start_addr: 32'h09f00000, + end_addr: 32'h0a000000},// MagiaTileX15Y9 +'{ idx: '{x: 30, y: 9, port_id: 0}, + start_addr: 32'h09e00000, + end_addr: 32'h09f00000},// MagiaTileX14Y9 +'{ idx: '{x: 29, y: 9, port_id: 0}, + start_addr: 32'h09d00000, + end_addr: 32'h09e00000},// MagiaTileX13Y9 +'{ idx: '{x: 28, y: 9, port_id: 0}, + start_addr: 32'h09c00000, + end_addr: 32'h09d00000},// MagiaTileX12Y9 +'{ idx: '{x: 27, y: 9, port_id: 0}, + start_addr: 32'h09b00000, + end_addr: 32'h09c00000},// MagiaTileX11Y9 +'{ idx: '{x: 26, y: 9, port_id: 0}, + start_addr: 32'h09a00000, + end_addr: 32'h09b00000},// MagiaTileX10Y9 +'{ idx: '{x: 25, y: 9, port_id: 0}, + start_addr: 32'h09900000, + end_addr: 32'h09a00000},// MagiaTileX9Y9 +'{ idx: '{x: 24, y: 9, port_id: 0}, + start_addr: 32'h09800000, + end_addr: 32'h09900000},// MagiaTileX8Y9 +'{ idx: '{x: 23, y: 9, port_id: 0}, + start_addr: 32'h09700000, + end_addr: 32'h09800000},// MagiaTileX7Y9 +'{ idx: '{x: 22, y: 9, port_id: 0}, + start_addr: 32'h09600000, + end_addr: 32'h09700000},// MagiaTileX6Y9 +'{ idx: '{x: 21, y: 9, port_id: 0}, + start_addr: 32'h09500000, + end_addr: 32'h09600000},// MagiaTileX5Y9 +'{ idx: '{x: 20, y: 9, port_id: 0}, + start_addr: 32'h09400000, + end_addr: 32'h09500000},// MagiaTileX4Y9 +'{ idx: '{x: 19, y: 9, port_id: 0}, + start_addr: 32'h09300000, + end_addr: 32'h09400000},// MagiaTileX3Y9 +'{ idx: '{x: 18, y: 9, port_id: 0}, + start_addr: 32'h09200000, + end_addr: 32'h09300000},// MagiaTileX2Y9 +'{ idx: '{x: 17, y: 9, port_id: 0}, + start_addr: 32'h09100000, + end_addr: 32'h09200000},// MagiaTileX1Y9 +'{ idx: '{x: 16, y: 9, port_id: 0}, + start_addr: 32'h09000000, + end_addr: 32'h09100000},// MagiaTileX0Y9 +'{ idx: '{x: 31, y: 8, port_id: 0}, + start_addr: 32'h08f00000, + end_addr: 32'h09000000},// MagiaTileX15Y8 +'{ idx: '{x: 30, y: 8, port_id: 0}, + start_addr: 32'h08e00000, + end_addr: 32'h08f00000},// MagiaTileX14Y8 +'{ idx: '{x: 29, y: 8, port_id: 0}, + start_addr: 32'h08d00000, + end_addr: 32'h08e00000},// MagiaTileX13Y8 +'{ idx: '{x: 28, y: 8, port_id: 0}, + start_addr: 32'h08c00000, + end_addr: 32'h08d00000},// MagiaTileX12Y8 +'{ idx: '{x: 27, y: 8, port_id: 0}, + start_addr: 32'h08b00000, + end_addr: 32'h08c00000},// MagiaTileX11Y8 +'{ idx: '{x: 26, y: 8, port_id: 0}, + start_addr: 32'h08a00000, + end_addr: 32'h08b00000},// MagiaTileX10Y8 +'{ idx: '{x: 25, y: 8, port_id: 0}, + start_addr: 32'h08900000, + end_addr: 32'h08a00000},// MagiaTileX9Y8 +'{ idx: '{x: 24, y: 8, port_id: 0}, + start_addr: 32'h08800000, + end_addr: 32'h08900000},// MagiaTileX8Y8 +'{ idx: '{x: 23, y: 8, port_id: 0}, + start_addr: 32'h08700000, + end_addr: 32'h08800000},// MagiaTileX7Y8 +'{ idx: '{x: 22, y: 8, port_id: 0}, + start_addr: 32'h08600000, + end_addr: 32'h08700000},// MagiaTileX6Y8 +'{ idx: '{x: 21, y: 8, port_id: 0}, + start_addr: 32'h08500000, + end_addr: 32'h08600000},// MagiaTileX5Y8 +'{ idx: '{x: 20, y: 8, port_id: 0}, + start_addr: 32'h08400000, + end_addr: 32'h08500000},// MagiaTileX4Y8 +'{ idx: '{x: 19, y: 8, port_id: 0}, + start_addr: 32'h08300000, + end_addr: 32'h08400000},// MagiaTileX3Y8 +'{ idx: '{x: 18, y: 8, port_id: 0}, + start_addr: 32'h08200000, + end_addr: 32'h08300000},// MagiaTileX2Y8 +'{ idx: '{x: 17, y: 8, port_id: 0}, + start_addr: 32'h08100000, + end_addr: 32'h08200000},// MagiaTileX1Y8 +'{ idx: '{x: 16, y: 8, port_id: 0}, + start_addr: 32'h08000000, + end_addr: 32'h08100000},// MagiaTileX0Y8 +'{ idx: '{x: 31, y: 7, port_id: 0}, + start_addr: 32'h07f00000, + end_addr: 32'h08000000},// MagiaTileX15Y7 +'{ idx: '{x: 30, y: 7, port_id: 0}, + start_addr: 32'h07e00000, + end_addr: 32'h07f00000},// MagiaTileX14Y7 +'{ idx: '{x: 29, y: 7, port_id: 0}, + start_addr: 32'h07d00000, + end_addr: 32'h07e00000},// MagiaTileX13Y7 +'{ idx: '{x: 28, y: 7, port_id: 0}, + start_addr: 32'h07c00000, + end_addr: 32'h07d00000},// MagiaTileX12Y7 +'{ idx: '{x: 27, y: 7, port_id: 0}, + start_addr: 32'h07b00000, + end_addr: 32'h07c00000},// MagiaTileX11Y7 +'{ idx: '{x: 26, y: 7, port_id: 0}, + start_addr: 32'h07a00000, + end_addr: 32'h07b00000},// MagiaTileX10Y7 +'{ idx: '{x: 25, y: 7, port_id: 0}, + start_addr: 32'h07900000, + end_addr: 32'h07a00000},// MagiaTileX9Y7 +'{ idx: '{x: 24, y: 7, port_id: 0}, + start_addr: 32'h07800000, + end_addr: 32'h07900000},// MagiaTileX8Y7 +'{ idx: '{x: 23, y: 7, port_id: 0}, + start_addr: 32'h07700000, + end_addr: 32'h07800000},// MagiaTileX7Y7 +'{ idx: '{x: 22, y: 7, port_id: 0}, + start_addr: 32'h07600000, + end_addr: 32'h07700000},// MagiaTileX6Y7 +'{ idx: '{x: 21, y: 7, port_id: 0}, + start_addr: 32'h07500000, + end_addr: 32'h07600000},// MagiaTileX5Y7 +'{ idx: '{x: 20, y: 7, port_id: 0}, + start_addr: 32'h07400000, + end_addr: 32'h07500000},// MagiaTileX4Y7 +'{ idx: '{x: 19, y: 7, port_id: 0}, + start_addr: 32'h07300000, + end_addr: 32'h07400000},// MagiaTileX3Y7 +'{ idx: '{x: 18, y: 7, port_id: 0}, + start_addr: 32'h07200000, + end_addr: 32'h07300000},// MagiaTileX2Y7 +'{ idx: '{x: 17, y: 7, port_id: 0}, + start_addr: 32'h07100000, + end_addr: 32'h07200000},// MagiaTileX1Y7 +'{ idx: '{x: 16, y: 7, port_id: 0}, + start_addr: 32'h07000000, + end_addr: 32'h07100000},// MagiaTileX0Y7 +'{ idx: '{x: 31, y: 6, port_id: 0}, + start_addr: 32'h06f00000, + end_addr: 32'h07000000},// MagiaTileX15Y6 +'{ idx: '{x: 30, y: 6, port_id: 0}, + start_addr: 32'h06e00000, + end_addr: 32'h06f00000},// MagiaTileX14Y6 +'{ idx: '{x: 29, y: 6, port_id: 0}, + start_addr: 32'h06d00000, + end_addr: 32'h06e00000},// MagiaTileX13Y6 +'{ idx: '{x: 28, y: 6, port_id: 0}, + start_addr: 32'h06c00000, + end_addr: 32'h06d00000},// MagiaTileX12Y6 +'{ idx: '{x: 27, y: 6, port_id: 0}, + start_addr: 32'h06b00000, + end_addr: 32'h06c00000},// MagiaTileX11Y6 +'{ idx: '{x: 26, y: 6, port_id: 0}, + start_addr: 32'h06a00000, + end_addr: 32'h06b00000},// MagiaTileX10Y6 +'{ idx: '{x: 25, y: 6, port_id: 0}, + start_addr: 32'h06900000, + end_addr: 32'h06a00000},// MagiaTileX9Y6 +'{ idx: '{x: 24, y: 6, port_id: 0}, + start_addr: 32'h06800000, + end_addr: 32'h06900000},// MagiaTileX8Y6 +'{ idx: '{x: 23, y: 6, port_id: 0}, + start_addr: 32'h06700000, + end_addr: 32'h06800000},// MagiaTileX7Y6 +'{ idx: '{x: 22, y: 6, port_id: 0}, + start_addr: 32'h06600000, + end_addr: 32'h06700000},// MagiaTileX6Y6 +'{ idx: '{x: 21, y: 6, port_id: 0}, + start_addr: 32'h06500000, + end_addr: 32'h06600000},// MagiaTileX5Y6 +'{ idx: '{x: 20, y: 6, port_id: 0}, + start_addr: 32'h06400000, + end_addr: 32'h06500000},// MagiaTileX4Y6 +'{ idx: '{x: 19, y: 6, port_id: 0}, + start_addr: 32'h06300000, + end_addr: 32'h06400000},// MagiaTileX3Y6 +'{ idx: '{x: 18, y: 6, port_id: 0}, + start_addr: 32'h06200000, + end_addr: 32'h06300000},// MagiaTileX2Y6 +'{ idx: '{x: 17, y: 6, port_id: 0}, + start_addr: 32'h06100000, + end_addr: 32'h06200000},// MagiaTileX1Y6 +'{ idx: '{x: 16, y: 6, port_id: 0}, + start_addr: 32'h06000000, + end_addr: 32'h06100000},// MagiaTileX0Y6 +'{ idx: '{x: 31, y: 5, port_id: 0}, + start_addr: 32'h05f00000, + end_addr: 32'h06000000},// MagiaTileX15Y5 +'{ idx: '{x: 30, y: 5, port_id: 0}, + start_addr: 32'h05e00000, + end_addr: 32'h05f00000},// MagiaTileX14Y5 +'{ idx: '{x: 29, y: 5, port_id: 0}, + start_addr: 32'h05d00000, + end_addr: 32'h05e00000},// MagiaTileX13Y5 +'{ idx: '{x: 28, y: 5, port_id: 0}, + start_addr: 32'h05c00000, + end_addr: 32'h05d00000},// MagiaTileX12Y5 +'{ idx: '{x: 27, y: 5, port_id: 0}, + start_addr: 32'h05b00000, + end_addr: 32'h05c00000},// MagiaTileX11Y5 +'{ idx: '{x: 26, y: 5, port_id: 0}, + start_addr: 32'h05a00000, + end_addr: 32'h05b00000},// MagiaTileX10Y5 +'{ idx: '{x: 25, y: 5, port_id: 0}, + start_addr: 32'h05900000, + end_addr: 32'h05a00000},// MagiaTileX9Y5 +'{ idx: '{x: 24, y: 5, port_id: 0}, + start_addr: 32'h05800000, + end_addr: 32'h05900000},// MagiaTileX8Y5 +'{ idx: '{x: 23, y: 5, port_id: 0}, + start_addr: 32'h05700000, + end_addr: 32'h05800000},// MagiaTileX7Y5 +'{ idx: '{x: 22, y: 5, port_id: 0}, + start_addr: 32'h05600000, + end_addr: 32'h05700000},// MagiaTileX6Y5 +'{ idx: '{x: 21, y: 5, port_id: 0}, + start_addr: 32'h05500000, + end_addr: 32'h05600000},// MagiaTileX5Y5 +'{ idx: '{x: 20, y: 5, port_id: 0}, + start_addr: 32'h05400000, + end_addr: 32'h05500000},// MagiaTileX4Y5 +'{ idx: '{x: 19, y: 5, port_id: 0}, + start_addr: 32'h05300000, + end_addr: 32'h05400000},// MagiaTileX3Y5 +'{ idx: '{x: 18, y: 5, port_id: 0}, + start_addr: 32'h05200000, + end_addr: 32'h05300000},// MagiaTileX2Y5 +'{ idx: '{x: 17, y: 5, port_id: 0}, + start_addr: 32'h05100000, + end_addr: 32'h05200000},// MagiaTileX1Y5 +'{ idx: '{x: 16, y: 5, port_id: 0}, + start_addr: 32'h05000000, + end_addr: 32'h05100000},// MagiaTileX0Y5 +'{ idx: '{x: 31, y: 4, port_id: 0}, + start_addr: 32'h04f00000, + end_addr: 32'h05000000},// MagiaTileX15Y4 +'{ idx: '{x: 30, y: 4, port_id: 0}, + start_addr: 32'h04e00000, + end_addr: 32'h04f00000},// MagiaTileX14Y4 +'{ idx: '{x: 29, y: 4, port_id: 0}, + start_addr: 32'h04d00000, + end_addr: 32'h04e00000},// MagiaTileX13Y4 +'{ idx: '{x: 28, y: 4, port_id: 0}, + start_addr: 32'h04c00000, + end_addr: 32'h04d00000},// MagiaTileX12Y4 +'{ idx: '{x: 27, y: 4, port_id: 0}, + start_addr: 32'h04b00000, + end_addr: 32'h04c00000},// MagiaTileX11Y4 +'{ idx: '{x: 26, y: 4, port_id: 0}, + start_addr: 32'h04a00000, + end_addr: 32'h04b00000},// MagiaTileX10Y4 +'{ idx: '{x: 25, y: 4, port_id: 0}, + start_addr: 32'h04900000, + end_addr: 32'h04a00000},// MagiaTileX9Y4 +'{ idx: '{x: 24, y: 4, port_id: 0}, + start_addr: 32'h04800000, + end_addr: 32'h04900000},// MagiaTileX8Y4 +'{ idx: '{x: 23, y: 4, port_id: 0}, + start_addr: 32'h04700000, + end_addr: 32'h04800000},// MagiaTileX7Y4 +'{ idx: '{x: 22, y: 4, port_id: 0}, + start_addr: 32'h04600000, + end_addr: 32'h04700000},// MagiaTileX6Y4 +'{ idx: '{x: 21, y: 4, port_id: 0}, + start_addr: 32'h04500000, + end_addr: 32'h04600000},// MagiaTileX5Y4 +'{ idx: '{x: 20, y: 4, port_id: 0}, + start_addr: 32'h04400000, + end_addr: 32'h04500000},// MagiaTileX4Y4 +'{ idx: '{x: 19, y: 4, port_id: 0}, + start_addr: 32'h04300000, + end_addr: 32'h04400000},// MagiaTileX3Y4 +'{ idx: '{x: 18, y: 4, port_id: 0}, + start_addr: 32'h04200000, + end_addr: 32'h04300000},// MagiaTileX2Y4 +'{ idx: '{x: 17, y: 4, port_id: 0}, + start_addr: 32'h04100000, + end_addr: 32'h04200000},// MagiaTileX1Y4 +'{ idx: '{x: 16, y: 4, port_id: 0}, + start_addr: 32'h04000000, + end_addr: 32'h04100000},// MagiaTileX0Y4 +'{ idx: '{x: 31, y: 3, port_id: 0}, + start_addr: 32'h03f00000, + end_addr: 32'h04000000},// MagiaTileX15Y3 +'{ idx: '{x: 30, y: 3, port_id: 0}, + start_addr: 32'h03e00000, + end_addr: 32'h03f00000},// MagiaTileX14Y3 +'{ idx: '{x: 29, y: 3, port_id: 0}, + start_addr: 32'h03d00000, + end_addr: 32'h03e00000},// MagiaTileX13Y3 +'{ idx: '{x: 28, y: 3, port_id: 0}, + start_addr: 32'h03c00000, + end_addr: 32'h03d00000},// MagiaTileX12Y3 +'{ idx: '{x: 27, y: 3, port_id: 0}, + start_addr: 32'h03b00000, + end_addr: 32'h03c00000},// MagiaTileX11Y3 +'{ idx: '{x: 26, y: 3, port_id: 0}, + start_addr: 32'h03a00000, + end_addr: 32'h03b00000},// MagiaTileX10Y3 +'{ idx: '{x: 25, y: 3, port_id: 0}, + start_addr: 32'h03900000, + end_addr: 32'h03a00000},// MagiaTileX9Y3 +'{ idx: '{x: 24, y: 3, port_id: 0}, + start_addr: 32'h03800000, + end_addr: 32'h03900000},// MagiaTileX8Y3 +'{ idx: '{x: 23, y: 3, port_id: 0}, + start_addr: 32'h03700000, + end_addr: 32'h03800000},// MagiaTileX7Y3 +'{ idx: '{x: 22, y: 3, port_id: 0}, + start_addr: 32'h03600000, + end_addr: 32'h03700000},// MagiaTileX6Y3 +'{ idx: '{x: 21, y: 3, port_id: 0}, + start_addr: 32'h03500000, + end_addr: 32'h03600000},// MagiaTileX5Y3 +'{ idx: '{x: 20, y: 3, port_id: 0}, + start_addr: 32'h03400000, + end_addr: 32'h03500000},// MagiaTileX4Y3 +'{ idx: '{x: 19, y: 3, port_id: 0}, + start_addr: 32'h03300000, + end_addr: 32'h03400000},// MagiaTileX3Y3 +'{ idx: '{x: 18, y: 3, port_id: 0}, + start_addr: 32'h03200000, + end_addr: 32'h03300000},// MagiaTileX2Y3 +'{ idx: '{x: 17, y: 3, port_id: 0}, + start_addr: 32'h03100000, + end_addr: 32'h03200000},// MagiaTileX1Y3 +'{ idx: '{x: 16, y: 3, port_id: 0}, + start_addr: 32'h03000000, + end_addr: 32'h03100000},// MagiaTileX0Y3 +'{ idx: '{x: 31, y: 2, port_id: 0}, + start_addr: 32'h02f00000, + end_addr: 32'h03000000},// MagiaTileX15Y2 +'{ idx: '{x: 30, y: 2, port_id: 0}, + start_addr: 32'h02e00000, + end_addr: 32'h02f00000},// MagiaTileX14Y2 +'{ idx: '{x: 29, y: 2, port_id: 0}, + start_addr: 32'h02d00000, + end_addr: 32'h02e00000},// MagiaTileX13Y2 +'{ idx: '{x: 28, y: 2, port_id: 0}, + start_addr: 32'h02c00000, + end_addr: 32'h02d00000},// MagiaTileX12Y2 +'{ idx: '{x: 27, y: 2, port_id: 0}, + start_addr: 32'h02b00000, + end_addr: 32'h02c00000},// MagiaTileX11Y2 +'{ idx: '{x: 26, y: 2, port_id: 0}, + start_addr: 32'h02a00000, + end_addr: 32'h02b00000},// MagiaTileX10Y2 +'{ idx: '{x: 25, y: 2, port_id: 0}, + start_addr: 32'h02900000, + end_addr: 32'h02a00000},// MagiaTileX9Y2 +'{ idx: '{x: 24, y: 2, port_id: 0}, + start_addr: 32'h02800000, + end_addr: 32'h02900000},// MagiaTileX8Y2 +'{ idx: '{x: 23, y: 2, port_id: 0}, + start_addr: 32'h02700000, + end_addr: 32'h02800000},// MagiaTileX7Y2 +'{ idx: '{x: 22, y: 2, port_id: 0}, + start_addr: 32'h02600000, + end_addr: 32'h02700000},// MagiaTileX6Y2 +'{ idx: '{x: 21, y: 2, port_id: 0}, + start_addr: 32'h02500000, + end_addr: 32'h02600000},// MagiaTileX5Y2 +'{ idx: '{x: 20, y: 2, port_id: 0}, + start_addr: 32'h02400000, + end_addr: 32'h02500000},// MagiaTileX4Y2 +'{ idx: '{x: 19, y: 2, port_id: 0}, + start_addr: 32'h02300000, + end_addr: 32'h02400000},// MagiaTileX3Y2 +'{ idx: '{x: 18, y: 2, port_id: 0}, + start_addr: 32'h02200000, + end_addr: 32'h02300000},// MagiaTileX2Y2 +'{ idx: '{x: 17, y: 2, port_id: 0}, + start_addr: 32'h02100000, + end_addr: 32'h02200000},// MagiaTileX1Y2 +'{ idx: '{x: 16, y: 2, port_id: 0}, + start_addr: 32'h02000000, + end_addr: 32'h02100000},// MagiaTileX0Y2 +'{ idx: '{x: 31, y: 1, port_id: 0}, + start_addr: 32'h01f00000, + end_addr: 32'h02000000},// MagiaTileX15Y1 +'{ idx: '{x: 30, y: 1, port_id: 0}, + start_addr: 32'h01e00000, + end_addr: 32'h01f00000},// MagiaTileX14Y1 +'{ idx: '{x: 29, y: 1, port_id: 0}, + start_addr: 32'h01d00000, + end_addr: 32'h01e00000},// MagiaTileX13Y1 +'{ idx: '{x: 28, y: 1, port_id: 0}, + start_addr: 32'h01c00000, + end_addr: 32'h01d00000},// MagiaTileX12Y1 +'{ idx: '{x: 27, y: 1, port_id: 0}, + start_addr: 32'h01b00000, + end_addr: 32'h01c00000},// MagiaTileX11Y1 +'{ idx: '{x: 26, y: 1, port_id: 0}, + start_addr: 32'h01a00000, + end_addr: 32'h01b00000},// MagiaTileX10Y1 +'{ idx: '{x: 25, y: 1, port_id: 0}, + start_addr: 32'h01900000, + end_addr: 32'h01a00000},// MagiaTileX9Y1 +'{ idx: '{x: 24, y: 1, port_id: 0}, + start_addr: 32'h01800000, + end_addr: 32'h01900000},// MagiaTileX8Y1 +'{ idx: '{x: 23, y: 1, port_id: 0}, + start_addr: 32'h01700000, + end_addr: 32'h01800000},// MagiaTileX7Y1 +'{ idx: '{x: 22, y: 1, port_id: 0}, + start_addr: 32'h01600000, + end_addr: 32'h01700000},// MagiaTileX6Y1 +'{ idx: '{x: 21, y: 1, port_id: 0}, + start_addr: 32'h01500000, + end_addr: 32'h01600000},// MagiaTileX5Y1 +'{ idx: '{x: 20, y: 1, port_id: 0}, + start_addr: 32'h01400000, + end_addr: 32'h01500000},// MagiaTileX4Y1 +'{ idx: '{x: 19, y: 1, port_id: 0}, + start_addr: 32'h01300000, + end_addr: 32'h01400000},// MagiaTileX3Y1 +'{ idx: '{x: 18, y: 1, port_id: 0}, + start_addr: 32'h01200000, + end_addr: 32'h01300000},// MagiaTileX2Y1 +'{ idx: '{x: 17, y: 1, port_id: 0}, + start_addr: 32'h01100000, + end_addr: 32'h01200000},// MagiaTileX1Y1 +'{ idx: '{x: 16, y: 1, port_id: 0}, + start_addr: 32'h01000000, + end_addr: 32'h01100000},// MagiaTileX0Y1 +'{ idx: '{x: 31, y: 0, port_id: 0}, + start_addr: 32'h00f00000, + end_addr: 32'h01000000},// MagiaTileX15Y0 +'{ idx: '{x: 30, y: 0, port_id: 0}, + start_addr: 32'h00e00000, + end_addr: 32'h00f00000},// MagiaTileX14Y0 +'{ idx: '{x: 29, y: 0, port_id: 0}, + start_addr: 32'h00d00000, + end_addr: 32'h00e00000},// MagiaTileX13Y0 +'{ idx: '{x: 28, y: 0, port_id: 0}, + start_addr: 32'h00c00000, + end_addr: 32'h00d00000},// MagiaTileX12Y0 +'{ idx: '{x: 27, y: 0, port_id: 0}, + start_addr: 32'h00b00000, + end_addr: 32'h00c00000},// MagiaTileX11Y0 +'{ idx: '{x: 26, y: 0, port_id: 0}, + start_addr: 32'h00a00000, + end_addr: 32'h00b00000},// MagiaTileX10Y0 +'{ idx: '{x: 25, y: 0, port_id: 0}, + start_addr: 32'h00900000, + end_addr: 32'h00a00000},// MagiaTileX9Y0 +'{ idx: '{x: 24, y: 0, port_id: 0}, + start_addr: 32'h00800000, + end_addr: 32'h00900000},// MagiaTileX8Y0 +'{ idx: '{x: 23, y: 0, port_id: 0}, + start_addr: 32'h00700000, + end_addr: 32'h00800000},// MagiaTileX7Y0 +'{ idx: '{x: 22, y: 0, port_id: 0}, + start_addr: 32'h00600000, + end_addr: 32'h00700000},// MagiaTileX6Y0 +'{ idx: '{x: 21, y: 0, port_id: 0}, + start_addr: 32'h00500000, + end_addr: 32'h00600000},// MagiaTileX5Y0 +'{ idx: '{x: 20, y: 0, port_id: 0}, + start_addr: 32'h00400000, + end_addr: 32'h00500000},// MagiaTileX4Y0 +'{ idx: '{x: 19, y: 0, port_id: 0}, + start_addr: 32'h00300000, + end_addr: 32'h00400000},// MagiaTileX3Y0 +'{ idx: '{x: 18, y: 0, port_id: 0}, + start_addr: 32'h00200000, + end_addr: 32'h00300000},// MagiaTileX2Y0 +'{ idx: '{x: 17, y: 0, port_id: 0}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX1Y0 +'{ idx: '{x: 16, y: 0, port_id: 0}, + start_addr: 32'h00000000, + end_addr: 32'h00100000} // MagiaTileX0Y0 + +}; localparam int unsigned CollectiveSamNumRules = 272; @@ -972,2302 +1527,2302 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ end_addr: 32'hc4000000},// L20 '{ idx: '{ id: '{x: 31, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ff00000, end_addr: 32'h10000000},// MagiaTileX15Y15 -'{ idx: '{ id: '{x: 31, y: 14, port_id: 0}, +'{ idx: '{ id: '{x: 30, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0fe00000, - end_addr: 32'h0ff00000},// MagiaTileX15Y14 -'{ idx: '{ id: '{x: 31, y: 13, port_id: 0}, + end_addr: 32'h0ff00000},// MagiaTileX14Y15 +'{ idx: '{ id: '{x: 29, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0fd00000, - end_addr: 32'h0fe00000},// MagiaTileX15Y13 -'{ idx: '{ id: '{x: 31, y: 12, port_id: 0}, + end_addr: 32'h0fe00000},// MagiaTileX13Y15 +'{ idx: '{ id: '{x: 28, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0fc00000, - end_addr: 32'h0fd00000},// MagiaTileX15Y12 -'{ idx: '{ id: '{x: 31, y: 11, port_id: 0}, + end_addr: 32'h0fd00000},// MagiaTileX12Y15 +'{ idx: '{ id: '{x: 27, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0fb00000, - end_addr: 32'h0fc00000},// MagiaTileX15Y11 -'{ idx: '{ id: '{x: 31, y: 10, port_id: 0}, + end_addr: 32'h0fc00000},// MagiaTileX11Y15 +'{ idx: '{ id: '{x: 26, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0fa00000, - end_addr: 32'h0fb00000},// MagiaTileX15Y10 -'{ idx: '{ id: '{x: 31, y: 9, port_id: 0}, + end_addr: 32'h0fb00000},// MagiaTileX10Y15 +'{ idx: '{ id: '{x: 25, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0f900000, - end_addr: 32'h0fa00000},// MagiaTileX15Y9 -'{ idx: '{ id: '{x: 31, y: 8, port_id: 0}, + end_addr: 32'h0fa00000},// MagiaTileX9Y15 +'{ idx: '{ id: '{x: 24, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0f800000, - end_addr: 32'h0f900000},// MagiaTileX15Y8 -'{ idx: '{ id: '{x: 31, y: 7, port_id: 0}, + end_addr: 32'h0f900000},// MagiaTileX8Y15 +'{ idx: '{ id: '{x: 23, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0f700000, - end_addr: 32'h0f800000},// MagiaTileX15Y7 -'{ idx: '{ id: '{x: 31, y: 6, port_id: 0}, + end_addr: 32'h0f800000},// MagiaTileX7Y15 +'{ idx: '{ id: '{x: 22, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0f600000, - end_addr: 32'h0f700000},// MagiaTileX15Y6 -'{ idx: '{ id: '{x: 31, y: 5, port_id: 0}, + end_addr: 32'h0f700000},// MagiaTileX6Y15 +'{ idx: '{ id: '{x: 21, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0f500000, - end_addr: 32'h0f600000},// MagiaTileX15Y5 -'{ idx: '{ id: '{x: 31, y: 4, port_id: 0}, + end_addr: 32'h0f600000},// MagiaTileX5Y15 +'{ idx: '{ id: '{x: 20, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0f400000, - end_addr: 32'h0f500000},// MagiaTileX15Y4 -'{ idx: '{ id: '{x: 31, y: 3, port_id: 0}, + end_addr: 32'h0f500000},// MagiaTileX4Y15 +'{ idx: '{ id: '{x: 19, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0f300000, - end_addr: 32'h0f400000},// MagiaTileX15Y3 -'{ idx: '{ id: '{x: 31, y: 2, port_id: 0}, + end_addr: 32'h0f400000},// MagiaTileX3Y15 +'{ idx: '{ id: '{x: 18, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0f200000, - end_addr: 32'h0f300000},// MagiaTileX15Y2 -'{ idx: '{ id: '{x: 31, y: 1, port_id: 0}, + end_addr: 32'h0f300000},// MagiaTileX2Y15 +'{ idx: '{ id: '{x: 17, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0f100000, - end_addr: 32'h0f200000},// MagiaTileX15Y1 -'{ idx: '{ id: '{x: 31, y: 0, port_id: 0}, + end_addr: 32'h0f200000},// MagiaTileX1Y15 +'{ idx: '{ id: '{x: 16, y: 15, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0f000000, - end_addr: 32'h0f100000},// MagiaTileX15Y0 -'{ idx: '{ id: '{x: 30, y: 15, port_id: 0}, + end_addr: 32'h0f100000},// MagiaTileX0Y15 +'{ idx: '{ id: '{x: 31, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ef00000, - end_addr: 32'h0f000000},// MagiaTileX14Y15 + end_addr: 32'h0f000000},// MagiaTileX15Y14 '{ idx: '{ id: '{x: 30, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ee00000, end_addr: 32'h0ef00000},// MagiaTileX14Y14 -'{ idx: '{ id: '{x: 30, y: 13, port_id: 0}, +'{ idx: '{ id: '{x: 29, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ed00000, - end_addr: 32'h0ee00000},// MagiaTileX14Y13 -'{ idx: '{ id: '{x: 30, y: 12, port_id: 0}, + end_addr: 32'h0ee00000},// MagiaTileX13Y14 +'{ idx: '{ id: '{x: 28, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ec00000, - end_addr: 32'h0ed00000},// MagiaTileX14Y12 -'{ idx: '{ id: '{x: 30, y: 11, port_id: 0}, + end_addr: 32'h0ed00000},// MagiaTileX12Y14 +'{ idx: '{ id: '{x: 27, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0eb00000, - end_addr: 32'h0ec00000},// MagiaTileX14Y11 -'{ idx: '{ id: '{x: 30, y: 10, port_id: 0}, + end_addr: 32'h0ec00000},// MagiaTileX11Y14 +'{ idx: '{ id: '{x: 26, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ea00000, - end_addr: 32'h0eb00000},// MagiaTileX14Y10 -'{ idx: '{ id: '{x: 30, y: 9, port_id: 0}, + end_addr: 32'h0eb00000},// MagiaTileX10Y14 +'{ idx: '{ id: '{x: 25, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0e900000, - end_addr: 32'h0ea00000},// MagiaTileX14Y9 -'{ idx: '{ id: '{x: 30, y: 8, port_id: 0}, + end_addr: 32'h0ea00000},// MagiaTileX9Y14 +'{ idx: '{ id: '{x: 24, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0e800000, - end_addr: 32'h0e900000},// MagiaTileX14Y8 -'{ idx: '{ id: '{x: 30, y: 7, port_id: 0}, + end_addr: 32'h0e900000},// MagiaTileX8Y14 +'{ idx: '{ id: '{x: 23, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0e700000, - end_addr: 32'h0e800000},// MagiaTileX14Y7 -'{ idx: '{ id: '{x: 30, y: 6, port_id: 0}, + end_addr: 32'h0e800000},// MagiaTileX7Y14 +'{ idx: '{ id: '{x: 22, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0e600000, - end_addr: 32'h0e700000},// MagiaTileX14Y6 -'{ idx: '{ id: '{x: 30, y: 5, port_id: 0}, + end_addr: 32'h0e700000},// MagiaTileX6Y14 +'{ idx: '{ id: '{x: 21, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0e500000, - end_addr: 32'h0e600000},// MagiaTileX14Y5 -'{ idx: '{ id: '{x: 30, y: 4, port_id: 0}, + end_addr: 32'h0e600000},// MagiaTileX5Y14 +'{ idx: '{ id: '{x: 20, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0e400000, - end_addr: 32'h0e500000},// MagiaTileX14Y4 -'{ idx: '{ id: '{x: 30, y: 3, port_id: 0}, + end_addr: 32'h0e500000},// MagiaTileX4Y14 +'{ idx: '{ id: '{x: 19, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0e300000, - end_addr: 32'h0e400000},// MagiaTileX14Y3 -'{ idx: '{ id: '{x: 30, y: 2, port_id: 0}, + end_addr: 32'h0e400000},// MagiaTileX3Y14 +'{ idx: '{ id: '{x: 18, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0e200000, - end_addr: 32'h0e300000},// MagiaTileX14Y2 -'{ idx: '{ id: '{x: 30, y: 1, port_id: 0}, + end_addr: 32'h0e300000},// MagiaTileX2Y14 +'{ idx: '{ id: '{x: 17, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0e100000, - end_addr: 32'h0e200000},// MagiaTileX14Y1 -'{ idx: '{ id: '{x: 30, y: 0, port_id: 0}, + end_addr: 32'h0e200000},// MagiaTileX1Y14 +'{ idx: '{ id: '{x: 16, y: 14, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0e000000, - end_addr: 32'h0e100000},// MagiaTileX14Y0 -'{ idx: '{ id: '{x: 29, y: 15, port_id: 0}, + end_addr: 32'h0e100000},// MagiaTileX0Y14 +'{ idx: '{ id: '{x: 31, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0df00000, - end_addr: 32'h0e000000},// MagiaTileX13Y15 -'{ idx: '{ id: '{x: 29, y: 14, port_id: 0}, + end_addr: 32'h0e000000},// MagiaTileX15Y13 +'{ idx: '{ id: '{x: 30, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0de00000, - end_addr: 32'h0df00000},// MagiaTileX13Y14 + end_addr: 32'h0df00000},// MagiaTileX14Y13 '{ idx: '{ id: '{x: 29, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0dd00000, end_addr: 32'h0de00000},// MagiaTileX13Y13 -'{ idx: '{ id: '{x: 29, y: 12, port_id: 0}, +'{ idx: '{ id: '{x: 28, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0dc00000, - end_addr: 32'h0dd00000},// MagiaTileX13Y12 -'{ idx: '{ id: '{x: 29, y: 11, port_id: 0}, + end_addr: 32'h0dd00000},// MagiaTileX12Y13 +'{ idx: '{ id: '{x: 27, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0db00000, - end_addr: 32'h0dc00000},// MagiaTileX13Y11 -'{ idx: '{ id: '{x: 29, y: 10, port_id: 0}, + end_addr: 32'h0dc00000},// MagiaTileX11Y13 +'{ idx: '{ id: '{x: 26, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0da00000, - end_addr: 32'h0db00000},// MagiaTileX13Y10 -'{ idx: '{ id: '{x: 29, y: 9, port_id: 0}, + end_addr: 32'h0db00000},// MagiaTileX10Y13 +'{ idx: '{ id: '{x: 25, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0d900000, - end_addr: 32'h0da00000},// MagiaTileX13Y9 -'{ idx: '{ id: '{x: 29, y: 8, port_id: 0}, + end_addr: 32'h0da00000},// MagiaTileX9Y13 +'{ idx: '{ id: '{x: 24, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0d800000, - end_addr: 32'h0d900000},// MagiaTileX13Y8 -'{ idx: '{ id: '{x: 29, y: 7, port_id: 0}, + end_addr: 32'h0d900000},// MagiaTileX8Y13 +'{ idx: '{ id: '{x: 23, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0d700000, - end_addr: 32'h0d800000},// MagiaTileX13Y7 -'{ idx: '{ id: '{x: 29, y: 6, port_id: 0}, + end_addr: 32'h0d800000},// MagiaTileX7Y13 +'{ idx: '{ id: '{x: 22, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0d600000, - end_addr: 32'h0d700000},// MagiaTileX13Y6 -'{ idx: '{ id: '{x: 29, y: 5, port_id: 0}, + end_addr: 32'h0d700000},// MagiaTileX6Y13 +'{ idx: '{ id: '{x: 21, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0d500000, - end_addr: 32'h0d600000},// MagiaTileX13Y5 -'{ idx: '{ id: '{x: 29, y: 4, port_id: 0}, + end_addr: 32'h0d600000},// MagiaTileX5Y13 +'{ idx: '{ id: '{x: 20, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0d400000, - end_addr: 32'h0d500000},// MagiaTileX13Y4 -'{ idx: '{ id: '{x: 29, y: 3, port_id: 0}, + end_addr: 32'h0d500000},// MagiaTileX4Y13 +'{ idx: '{ id: '{x: 19, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0d300000, - end_addr: 32'h0d400000},// MagiaTileX13Y3 -'{ idx: '{ id: '{x: 29, y: 2, port_id: 0}, + end_addr: 32'h0d400000},// MagiaTileX3Y13 +'{ idx: '{ id: '{x: 18, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0d200000, - end_addr: 32'h0d300000},// MagiaTileX13Y2 -'{ idx: '{ id: '{x: 29, y: 1, port_id: 0}, + end_addr: 32'h0d300000},// MagiaTileX2Y13 +'{ idx: '{ id: '{x: 17, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0d100000, - end_addr: 32'h0d200000},// MagiaTileX13Y1 -'{ idx: '{ id: '{x: 29, y: 0, port_id: 0}, + end_addr: 32'h0d200000},// MagiaTileX1Y13 +'{ idx: '{ id: '{x: 16, y: 13, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0d000000, - end_addr: 32'h0d100000},// MagiaTileX13Y0 -'{ idx: '{ id: '{x: 28, y: 15, port_id: 0}, + end_addr: 32'h0d100000},// MagiaTileX0Y13 +'{ idx: '{ id: '{x: 31, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0cf00000, - end_addr: 32'h0d000000},// MagiaTileX12Y15 -'{ idx: '{ id: '{x: 28, y: 14, port_id: 0}, + end_addr: 32'h0d000000},// MagiaTileX15Y12 +'{ idx: '{ id: '{x: 30, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ce00000, - end_addr: 32'h0cf00000},// MagiaTileX12Y14 -'{ idx: '{ id: '{x: 28, y: 13, port_id: 0}, + end_addr: 32'h0cf00000},// MagiaTileX14Y12 +'{ idx: '{ id: '{x: 29, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0cd00000, - end_addr: 32'h0ce00000},// MagiaTileX12Y13 + end_addr: 32'h0ce00000},// MagiaTileX13Y12 '{ idx: '{ id: '{x: 28, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0cc00000, end_addr: 32'h0cd00000},// MagiaTileX12Y12 -'{ idx: '{ id: '{x: 28, y: 11, port_id: 0}, +'{ idx: '{ id: '{x: 27, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0cb00000, - end_addr: 32'h0cc00000},// MagiaTileX12Y11 -'{ idx: '{ id: '{x: 28, y: 10, port_id: 0}, + end_addr: 32'h0cc00000},// MagiaTileX11Y12 +'{ idx: '{ id: '{x: 26, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ca00000, - end_addr: 32'h0cb00000},// MagiaTileX12Y10 -'{ idx: '{ id: '{x: 28, y: 9, port_id: 0}, + end_addr: 32'h0cb00000},// MagiaTileX10Y12 +'{ idx: '{ id: '{x: 25, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0c900000, - end_addr: 32'h0ca00000},// MagiaTileX12Y9 -'{ idx: '{ id: '{x: 28, y: 8, port_id: 0}, + end_addr: 32'h0ca00000},// MagiaTileX9Y12 +'{ idx: '{ id: '{x: 24, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0c800000, - end_addr: 32'h0c900000},// MagiaTileX12Y8 -'{ idx: '{ id: '{x: 28, y: 7, port_id: 0}, + end_addr: 32'h0c900000},// MagiaTileX8Y12 +'{ idx: '{ id: '{x: 23, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0c700000, - end_addr: 32'h0c800000},// MagiaTileX12Y7 -'{ idx: '{ id: '{x: 28, y: 6, port_id: 0}, + end_addr: 32'h0c800000},// MagiaTileX7Y12 +'{ idx: '{ id: '{x: 22, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0c600000, - end_addr: 32'h0c700000},// MagiaTileX12Y6 -'{ idx: '{ id: '{x: 28, y: 5, port_id: 0}, + end_addr: 32'h0c700000},// MagiaTileX6Y12 +'{ idx: '{ id: '{x: 21, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0c500000, - end_addr: 32'h0c600000},// MagiaTileX12Y5 -'{ idx: '{ id: '{x: 28, y: 4, port_id: 0}, + end_addr: 32'h0c600000},// MagiaTileX5Y12 +'{ idx: '{ id: '{x: 20, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0c400000, - end_addr: 32'h0c500000},// MagiaTileX12Y4 -'{ idx: '{ id: '{x: 28, y: 3, port_id: 0}, + end_addr: 32'h0c500000},// MagiaTileX4Y12 +'{ idx: '{ id: '{x: 19, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0c300000, - end_addr: 32'h0c400000},// MagiaTileX12Y3 -'{ idx: '{ id: '{x: 28, y: 2, port_id: 0}, + end_addr: 32'h0c400000},// MagiaTileX3Y12 +'{ idx: '{ id: '{x: 18, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0c200000, - end_addr: 32'h0c300000},// MagiaTileX12Y2 -'{ idx: '{ id: '{x: 28, y: 1, port_id: 0}, + end_addr: 32'h0c300000},// MagiaTileX2Y12 +'{ idx: '{ id: '{x: 17, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0c100000, - end_addr: 32'h0c200000},// MagiaTileX12Y1 -'{ idx: '{ id: '{x: 28, y: 0, port_id: 0}, + end_addr: 32'h0c200000},// MagiaTileX1Y12 +'{ idx: '{ id: '{x: 16, y: 12, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0c000000, - end_addr: 32'h0c100000},// MagiaTileX12Y0 -'{ idx: '{ id: '{x: 27, y: 15, port_id: 0}, + end_addr: 32'h0c100000},// MagiaTileX0Y12 +'{ idx: '{ id: '{x: 31, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0bf00000, - end_addr: 32'h0c000000},// MagiaTileX11Y15 -'{ idx: '{ id: '{x: 27, y: 14, port_id: 0}, + end_addr: 32'h0c000000},// MagiaTileX15Y11 +'{ idx: '{ id: '{x: 30, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0be00000, - end_addr: 32'h0bf00000},// MagiaTileX11Y14 -'{ idx: '{ id: '{x: 27, y: 13, port_id: 0}, + end_addr: 32'h0bf00000},// MagiaTileX14Y11 +'{ idx: '{ id: '{x: 29, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0bd00000, - end_addr: 32'h0be00000},// MagiaTileX11Y13 -'{ idx: '{ id: '{x: 27, y: 12, port_id: 0}, + end_addr: 32'h0be00000},// MagiaTileX13Y11 +'{ idx: '{ id: '{x: 28, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0bc00000, - end_addr: 32'h0bd00000},// MagiaTileX11Y12 + end_addr: 32'h0bd00000},// MagiaTileX12Y11 '{ idx: '{ id: '{x: 27, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0bb00000, end_addr: 32'h0bc00000},// MagiaTileX11Y11 -'{ idx: '{ id: '{x: 27, y: 10, port_id: 0}, +'{ idx: '{ id: '{x: 26, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ba00000, - end_addr: 32'h0bb00000},// MagiaTileX11Y10 -'{ idx: '{ id: '{x: 27, y: 9, port_id: 0}, + end_addr: 32'h0bb00000},// MagiaTileX10Y11 +'{ idx: '{ id: '{x: 25, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0b900000, - end_addr: 32'h0ba00000},// MagiaTileX11Y9 -'{ idx: '{ id: '{x: 27, y: 8, port_id: 0}, + end_addr: 32'h0ba00000},// MagiaTileX9Y11 +'{ idx: '{ id: '{x: 24, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0b800000, - end_addr: 32'h0b900000},// MagiaTileX11Y8 -'{ idx: '{ id: '{x: 27, y: 7, port_id: 0}, + end_addr: 32'h0b900000},// MagiaTileX8Y11 +'{ idx: '{ id: '{x: 23, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0b700000, - end_addr: 32'h0b800000},// MagiaTileX11Y7 -'{ idx: '{ id: '{x: 27, y: 6, port_id: 0}, + end_addr: 32'h0b800000},// MagiaTileX7Y11 +'{ idx: '{ id: '{x: 22, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0b600000, - end_addr: 32'h0b700000},// MagiaTileX11Y6 -'{ idx: '{ id: '{x: 27, y: 5, port_id: 0}, + end_addr: 32'h0b700000},// MagiaTileX6Y11 +'{ idx: '{ id: '{x: 21, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0b500000, - end_addr: 32'h0b600000},// MagiaTileX11Y5 -'{ idx: '{ id: '{x: 27, y: 4, port_id: 0}, + end_addr: 32'h0b600000},// MagiaTileX5Y11 +'{ idx: '{ id: '{x: 20, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0b400000, - end_addr: 32'h0b500000},// MagiaTileX11Y4 -'{ idx: '{ id: '{x: 27, y: 3, port_id: 0}, + end_addr: 32'h0b500000},// MagiaTileX4Y11 +'{ idx: '{ id: '{x: 19, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0b300000, - end_addr: 32'h0b400000},// MagiaTileX11Y3 -'{ idx: '{ id: '{x: 27, y: 2, port_id: 0}, + end_addr: 32'h0b400000},// MagiaTileX3Y11 +'{ idx: '{ id: '{x: 18, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0b200000, - end_addr: 32'h0b300000},// MagiaTileX11Y2 -'{ idx: '{ id: '{x: 27, y: 1, port_id: 0}, + end_addr: 32'h0b300000},// MagiaTileX2Y11 +'{ idx: '{ id: '{x: 17, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0b100000, - end_addr: 32'h0b200000},// MagiaTileX11Y1 -'{ idx: '{ id: '{x: 27, y: 0, port_id: 0}, + end_addr: 32'h0b200000},// MagiaTileX1Y11 +'{ idx: '{ id: '{x: 16, y: 11, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0b000000, - end_addr: 32'h0b100000},// MagiaTileX11Y0 -'{ idx: '{ id: '{x: 26, y: 15, port_id: 0}, + end_addr: 32'h0b100000},// MagiaTileX0Y11 +'{ idx: '{ id: '{x: 31, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0af00000, - end_addr: 32'h0b000000},// MagiaTileX10Y15 -'{ idx: '{ id: '{x: 26, y: 14, port_id: 0}, + end_addr: 32'h0b000000},// MagiaTileX15Y10 +'{ idx: '{ id: '{x: 30, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ae00000, - end_addr: 32'h0af00000},// MagiaTileX10Y14 -'{ idx: '{ id: '{x: 26, y: 13, port_id: 0}, + end_addr: 32'h0af00000},// MagiaTileX14Y10 +'{ idx: '{ id: '{x: 29, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ad00000, - end_addr: 32'h0ae00000},// MagiaTileX10Y13 -'{ idx: '{ id: '{x: 26, y: 12, port_id: 0}, + end_addr: 32'h0ae00000},// MagiaTileX13Y10 +'{ idx: '{ id: '{x: 28, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ac00000, - end_addr: 32'h0ad00000},// MagiaTileX10Y12 -'{ idx: '{ id: '{x: 26, y: 11, port_id: 0}, + end_addr: 32'h0ad00000},// MagiaTileX12Y10 +'{ idx: '{ id: '{x: 27, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0ab00000, - end_addr: 32'h0ac00000},// MagiaTileX10Y11 + end_addr: 32'h0ac00000},// MagiaTileX11Y10 '{ idx: '{ id: '{x: 26, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0aa00000, end_addr: 32'h0ab00000},// MagiaTileX10Y10 -'{ idx: '{ id: '{x: 26, y: 9, port_id: 0}, +'{ idx: '{ id: '{x: 25, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0a900000, - end_addr: 32'h0aa00000},// MagiaTileX10Y9 -'{ idx: '{ id: '{x: 26, y: 8, port_id: 0}, + end_addr: 32'h0aa00000},// MagiaTileX9Y10 +'{ idx: '{ id: '{x: 24, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0a800000, - end_addr: 32'h0a900000},// MagiaTileX10Y8 -'{ idx: '{ id: '{x: 26, y: 7, port_id: 0}, + end_addr: 32'h0a900000},// MagiaTileX8Y10 +'{ idx: '{ id: '{x: 23, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0a700000, - end_addr: 32'h0a800000},// MagiaTileX10Y7 -'{ idx: '{ id: '{x: 26, y: 6, port_id: 0}, + end_addr: 32'h0a800000},// MagiaTileX7Y10 +'{ idx: '{ id: '{x: 22, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0a600000, - end_addr: 32'h0a700000},// MagiaTileX10Y6 -'{ idx: '{ id: '{x: 26, y: 5, port_id: 0}, + end_addr: 32'h0a700000},// MagiaTileX6Y10 +'{ idx: '{ id: '{x: 21, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0a500000, - end_addr: 32'h0a600000},// MagiaTileX10Y5 -'{ idx: '{ id: '{x: 26, y: 4, port_id: 0}, + end_addr: 32'h0a600000},// MagiaTileX5Y10 +'{ idx: '{ id: '{x: 20, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0a400000, - end_addr: 32'h0a500000},// MagiaTileX10Y4 -'{ idx: '{ id: '{x: 26, y: 3, port_id: 0}, + end_addr: 32'h0a500000},// MagiaTileX4Y10 +'{ idx: '{ id: '{x: 19, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0a300000, - end_addr: 32'h0a400000},// MagiaTileX10Y3 -'{ idx: '{ id: '{x: 26, y: 2, port_id: 0}, + end_addr: 32'h0a400000},// MagiaTileX3Y10 +'{ idx: '{ id: '{x: 18, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0a200000, - end_addr: 32'h0a300000},// MagiaTileX10Y2 -'{ idx: '{ id: '{x: 26, y: 1, port_id: 0}, + end_addr: 32'h0a300000},// MagiaTileX2Y10 +'{ idx: '{ id: '{x: 17, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0a100000, - end_addr: 32'h0a200000},// MagiaTileX10Y1 -'{ idx: '{ id: '{x: 26, y: 0, port_id: 0}, + end_addr: 32'h0a200000},// MagiaTileX1Y10 +'{ idx: '{ id: '{x: 16, y: 10, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h0a000000, - end_addr: 32'h0a100000},// MagiaTileX10Y0 -'{ idx: '{ id: '{x: 25, y: 15, port_id: 0}, + end_addr: 32'h0a100000},// MagiaTileX0Y10 +'{ idx: '{ id: '{x: 31, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09f00000, - end_addr: 32'h0a000000},// MagiaTileX9Y15 -'{ idx: '{ id: '{x: 25, y: 14, port_id: 0}, + end_addr: 32'h0a000000},// MagiaTileX15Y9 +'{ idx: '{ id: '{x: 30, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09e00000, - end_addr: 32'h09f00000},// MagiaTileX9Y14 -'{ idx: '{ id: '{x: 25, y: 13, port_id: 0}, + end_addr: 32'h09f00000},// MagiaTileX14Y9 +'{ idx: '{ id: '{x: 29, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09d00000, - end_addr: 32'h09e00000},// MagiaTileX9Y13 -'{ idx: '{ id: '{x: 25, y: 12, port_id: 0}, + end_addr: 32'h09e00000},// MagiaTileX13Y9 +'{ idx: '{ id: '{x: 28, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09c00000, - end_addr: 32'h09d00000},// MagiaTileX9Y12 -'{ idx: '{ id: '{x: 25, y: 11, port_id: 0}, + end_addr: 32'h09d00000},// MagiaTileX12Y9 +'{ idx: '{ id: '{x: 27, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09b00000, - end_addr: 32'h09c00000},// MagiaTileX9Y11 -'{ idx: '{ id: '{x: 25, y: 10, port_id: 0}, + end_addr: 32'h09c00000},// MagiaTileX11Y9 +'{ idx: '{ id: '{x: 26, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09a00000, - end_addr: 32'h09b00000},// MagiaTileX9Y10 + end_addr: 32'h09b00000},// MagiaTileX10Y9 '{ idx: '{ id: '{x: 25, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09900000, end_addr: 32'h09a00000},// MagiaTileX9Y9 -'{ idx: '{ id: '{x: 25, y: 8, port_id: 0}, +'{ idx: '{ id: '{x: 24, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09800000, - end_addr: 32'h09900000},// MagiaTileX9Y8 -'{ idx: '{ id: '{x: 25, y: 7, port_id: 0}, + end_addr: 32'h09900000},// MagiaTileX8Y9 +'{ idx: '{ id: '{x: 23, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09700000, - end_addr: 32'h09800000},// MagiaTileX9Y7 -'{ idx: '{ id: '{x: 25, y: 6, port_id: 0}, + end_addr: 32'h09800000},// MagiaTileX7Y9 +'{ idx: '{ id: '{x: 22, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09600000, - end_addr: 32'h09700000},// MagiaTileX9Y6 -'{ idx: '{ id: '{x: 25, y: 5, port_id: 0}, + end_addr: 32'h09700000},// MagiaTileX6Y9 +'{ idx: '{ id: '{x: 21, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09500000, - end_addr: 32'h09600000},// MagiaTileX9Y5 -'{ idx: '{ id: '{x: 25, y: 4, port_id: 0}, + end_addr: 32'h09600000},// MagiaTileX5Y9 +'{ idx: '{ id: '{x: 20, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09400000, - end_addr: 32'h09500000},// MagiaTileX9Y4 -'{ idx: '{ id: '{x: 25, y: 3, port_id: 0}, + end_addr: 32'h09500000},// MagiaTileX4Y9 +'{ idx: '{ id: '{x: 19, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09300000, - end_addr: 32'h09400000},// MagiaTileX9Y3 -'{ idx: '{ id: '{x: 25, y: 2, port_id: 0}, + end_addr: 32'h09400000},// MagiaTileX3Y9 +'{ idx: '{ id: '{x: 18, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09200000, - end_addr: 32'h09300000},// MagiaTileX9Y2 -'{ idx: '{ id: '{x: 25, y: 1, port_id: 0}, + end_addr: 32'h09300000},// MagiaTileX2Y9 +'{ idx: '{ id: '{x: 17, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09100000, - end_addr: 32'h09200000},// MagiaTileX9Y1 -'{ idx: '{ id: '{x: 25, y: 0, port_id: 0}, + end_addr: 32'h09200000},// MagiaTileX1Y9 +'{ idx: '{ id: '{x: 16, y: 9, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h09000000, - end_addr: 32'h09100000},// MagiaTileX9Y0 -'{ idx: '{ id: '{x: 24, y: 15, port_id: 0}, + end_addr: 32'h09100000},// MagiaTileX0Y9 +'{ idx: '{ id: '{x: 31, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08f00000, - end_addr: 32'h09000000},// MagiaTileX8Y15 -'{ idx: '{ id: '{x: 24, y: 14, port_id: 0}, + end_addr: 32'h09000000},// MagiaTileX15Y8 +'{ idx: '{ id: '{x: 30, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08e00000, - end_addr: 32'h08f00000},// MagiaTileX8Y14 -'{ idx: '{ id: '{x: 24, y: 13, port_id: 0}, + end_addr: 32'h08f00000},// MagiaTileX14Y8 +'{ idx: '{ id: '{x: 29, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08d00000, - end_addr: 32'h08e00000},// MagiaTileX8Y13 -'{ idx: '{ id: '{x: 24, y: 12, port_id: 0}, + end_addr: 32'h08e00000},// MagiaTileX13Y8 +'{ idx: '{ id: '{x: 28, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08c00000, - end_addr: 32'h08d00000},// MagiaTileX8Y12 -'{ idx: '{ id: '{x: 24, y: 11, port_id: 0}, + end_addr: 32'h08d00000},// MagiaTileX12Y8 +'{ idx: '{ id: '{x: 27, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08b00000, - end_addr: 32'h08c00000},// MagiaTileX8Y11 -'{ idx: '{ id: '{x: 24, y: 10, port_id: 0}, + end_addr: 32'h08c00000},// MagiaTileX11Y8 +'{ idx: '{ id: '{x: 26, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08a00000, - end_addr: 32'h08b00000},// MagiaTileX8Y10 -'{ idx: '{ id: '{x: 24, y: 9, port_id: 0}, + end_addr: 32'h08b00000},// MagiaTileX10Y8 +'{ idx: '{ id: '{x: 25, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08900000, - end_addr: 32'h08a00000},// MagiaTileX8Y9 + end_addr: 32'h08a00000},// MagiaTileX9Y8 '{ idx: '{ id: '{x: 24, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08800000, end_addr: 32'h08900000},// MagiaTileX8Y8 -'{ idx: '{ id: '{x: 24, y: 7, port_id: 0}, +'{ idx: '{ id: '{x: 23, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08700000, - end_addr: 32'h08800000},// MagiaTileX8Y7 -'{ idx: '{ id: '{x: 24, y: 6, port_id: 0}, + end_addr: 32'h08800000},// MagiaTileX7Y8 +'{ idx: '{ id: '{x: 22, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08600000, - end_addr: 32'h08700000},// MagiaTileX8Y6 -'{ idx: '{ id: '{x: 24, y: 5, port_id: 0}, + end_addr: 32'h08700000},// MagiaTileX6Y8 +'{ idx: '{ id: '{x: 21, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08500000, - end_addr: 32'h08600000},// MagiaTileX8Y5 -'{ idx: '{ id: '{x: 24, y: 4, port_id: 0}, + end_addr: 32'h08600000},// MagiaTileX5Y8 +'{ idx: '{ id: '{x: 20, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08400000, - end_addr: 32'h08500000},// MagiaTileX8Y4 -'{ idx: '{ id: '{x: 24, y: 3, port_id: 0}, + end_addr: 32'h08500000},// MagiaTileX4Y8 +'{ idx: '{ id: '{x: 19, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08300000, - end_addr: 32'h08400000},// MagiaTileX8Y3 -'{ idx: '{ id: '{x: 24, y: 2, port_id: 0}, + end_addr: 32'h08400000},// MagiaTileX3Y8 +'{ idx: '{ id: '{x: 18, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08200000, - end_addr: 32'h08300000},// MagiaTileX8Y2 -'{ idx: '{ id: '{x: 24, y: 1, port_id: 0}, + end_addr: 32'h08300000},// MagiaTileX2Y8 +'{ idx: '{ id: '{x: 17, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08100000, - end_addr: 32'h08200000},// MagiaTileX8Y1 -'{ idx: '{ id: '{x: 24, y: 0, port_id: 0}, + end_addr: 32'h08200000},// MagiaTileX1Y8 +'{ idx: '{ id: '{x: 16, y: 8, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h08000000, - end_addr: 32'h08100000},// MagiaTileX8Y0 -'{ idx: '{ id: '{x: 23, y: 15, port_id: 0}, + end_addr: 32'h08100000},// MagiaTileX0Y8 +'{ idx: '{ id: '{x: 31, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07f00000, - end_addr: 32'h08000000},// MagiaTileX7Y15 -'{ idx: '{ id: '{x: 23, y: 14, port_id: 0}, + end_addr: 32'h08000000},// MagiaTileX15Y7 +'{ idx: '{ id: '{x: 30, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07e00000, - end_addr: 32'h07f00000},// MagiaTileX7Y14 -'{ idx: '{ id: '{x: 23, y: 13, port_id: 0}, + end_addr: 32'h07f00000},// MagiaTileX14Y7 +'{ idx: '{ id: '{x: 29, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07d00000, - end_addr: 32'h07e00000},// MagiaTileX7Y13 -'{ idx: '{ id: '{x: 23, y: 12, port_id: 0}, + end_addr: 32'h07e00000},// MagiaTileX13Y7 +'{ idx: '{ id: '{x: 28, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07c00000, - end_addr: 32'h07d00000},// MagiaTileX7Y12 -'{ idx: '{ id: '{x: 23, y: 11, port_id: 0}, + end_addr: 32'h07d00000},// MagiaTileX12Y7 +'{ idx: '{ id: '{x: 27, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07b00000, - end_addr: 32'h07c00000},// MagiaTileX7Y11 -'{ idx: '{ id: '{x: 23, y: 10, port_id: 0}, + end_addr: 32'h07c00000},// MagiaTileX11Y7 +'{ idx: '{ id: '{x: 26, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07a00000, - end_addr: 32'h07b00000},// MagiaTileX7Y10 -'{ idx: '{ id: '{x: 23, y: 9, port_id: 0}, + end_addr: 32'h07b00000},// MagiaTileX10Y7 +'{ idx: '{ id: '{x: 25, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07900000, - end_addr: 32'h07a00000},// MagiaTileX7Y9 -'{ idx: '{ id: '{x: 23, y: 8, port_id: 0}, + end_addr: 32'h07a00000},// MagiaTileX9Y7 +'{ idx: '{ id: '{x: 24, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07800000, - end_addr: 32'h07900000},// MagiaTileX7Y8 + end_addr: 32'h07900000},// MagiaTileX8Y7 '{ idx: '{ id: '{x: 23, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07700000, end_addr: 32'h07800000},// MagiaTileX7Y7 -'{ idx: '{ id: '{x: 23, y: 6, port_id: 0}, +'{ idx: '{ id: '{x: 22, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07600000, - end_addr: 32'h07700000},// MagiaTileX7Y6 -'{ idx: '{ id: '{x: 23, y: 5, port_id: 0}, + end_addr: 32'h07700000},// MagiaTileX6Y7 +'{ idx: '{ id: '{x: 21, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07500000, - end_addr: 32'h07600000},// MagiaTileX7Y5 -'{ idx: '{ id: '{x: 23, y: 4, port_id: 0}, + end_addr: 32'h07600000},// MagiaTileX5Y7 +'{ idx: '{ id: '{x: 20, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07400000, - end_addr: 32'h07500000},// MagiaTileX7Y4 -'{ idx: '{ id: '{x: 23, y: 3, port_id: 0}, + end_addr: 32'h07500000},// MagiaTileX4Y7 +'{ idx: '{ id: '{x: 19, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07300000, - end_addr: 32'h07400000},// MagiaTileX7Y3 -'{ idx: '{ id: '{x: 23, y: 2, port_id: 0}, + end_addr: 32'h07400000},// MagiaTileX3Y7 +'{ idx: '{ id: '{x: 18, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07200000, - end_addr: 32'h07300000},// MagiaTileX7Y2 -'{ idx: '{ id: '{x: 23, y: 1, port_id: 0}, + end_addr: 32'h07300000},// MagiaTileX2Y7 +'{ idx: '{ id: '{x: 17, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07100000, - end_addr: 32'h07200000},// MagiaTileX7Y1 -'{ idx: '{ id: '{x: 23, y: 0, port_id: 0}, + end_addr: 32'h07200000},// MagiaTileX1Y7 +'{ idx: '{ id: '{x: 16, y: 7, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h07000000, - end_addr: 32'h07100000},// MagiaTileX7Y0 -'{ idx: '{ id: '{x: 22, y: 15, port_id: 0}, + end_addr: 32'h07100000},// MagiaTileX0Y7 +'{ idx: '{ id: '{x: 31, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06f00000, - end_addr: 32'h07000000},// MagiaTileX6Y15 -'{ idx: '{ id: '{x: 22, y: 14, port_id: 0}, + end_addr: 32'h07000000},// MagiaTileX15Y6 +'{ idx: '{ id: '{x: 30, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06e00000, - end_addr: 32'h06f00000},// MagiaTileX6Y14 -'{ idx: '{ id: '{x: 22, y: 13, port_id: 0}, + end_addr: 32'h06f00000},// MagiaTileX14Y6 +'{ idx: '{ id: '{x: 29, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06d00000, - end_addr: 32'h06e00000},// MagiaTileX6Y13 -'{ idx: '{ id: '{x: 22, y: 12, port_id: 0}, + end_addr: 32'h06e00000},// MagiaTileX13Y6 +'{ idx: '{ id: '{x: 28, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06c00000, - end_addr: 32'h06d00000},// MagiaTileX6Y12 -'{ idx: '{ id: '{x: 22, y: 11, port_id: 0}, + end_addr: 32'h06d00000},// MagiaTileX12Y6 +'{ idx: '{ id: '{x: 27, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06b00000, - end_addr: 32'h06c00000},// MagiaTileX6Y11 -'{ idx: '{ id: '{x: 22, y: 10, port_id: 0}, + end_addr: 32'h06c00000},// MagiaTileX11Y6 +'{ idx: '{ id: '{x: 26, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06a00000, - end_addr: 32'h06b00000},// MagiaTileX6Y10 -'{ idx: '{ id: '{x: 22, y: 9, port_id: 0}, + end_addr: 32'h06b00000},// MagiaTileX10Y6 +'{ idx: '{ id: '{x: 25, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06900000, - end_addr: 32'h06a00000},// MagiaTileX6Y9 -'{ idx: '{ id: '{x: 22, y: 8, port_id: 0}, + end_addr: 32'h06a00000},// MagiaTileX9Y6 +'{ idx: '{ id: '{x: 24, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06800000, - end_addr: 32'h06900000},// MagiaTileX6Y8 -'{ idx: '{ id: '{x: 22, y: 7, port_id: 0}, + end_addr: 32'h06900000},// MagiaTileX8Y6 +'{ idx: '{ id: '{x: 23, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06700000, - end_addr: 32'h06800000},// MagiaTileX6Y7 + end_addr: 32'h06800000},// MagiaTileX7Y6 '{ idx: '{ id: '{x: 22, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06600000, end_addr: 32'h06700000},// MagiaTileX6Y6 -'{ idx: '{ id: '{x: 22, y: 5, port_id: 0}, +'{ idx: '{ id: '{x: 21, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06500000, - end_addr: 32'h06600000},// MagiaTileX6Y5 -'{ idx: '{ id: '{x: 22, y: 4, port_id: 0}, + end_addr: 32'h06600000},// MagiaTileX5Y6 +'{ idx: '{ id: '{x: 20, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06400000, - end_addr: 32'h06500000},// MagiaTileX6Y4 -'{ idx: '{ id: '{x: 22, y: 3, port_id: 0}, + end_addr: 32'h06500000},// MagiaTileX4Y6 +'{ idx: '{ id: '{x: 19, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06300000, - end_addr: 32'h06400000},// MagiaTileX6Y3 -'{ idx: '{ id: '{x: 22, y: 2, port_id: 0}, + end_addr: 32'h06400000},// MagiaTileX3Y6 +'{ idx: '{ id: '{x: 18, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06200000, - end_addr: 32'h06300000},// MagiaTileX6Y2 -'{ idx: '{ id: '{x: 22, y: 1, port_id: 0}, + end_addr: 32'h06300000},// MagiaTileX2Y6 +'{ idx: '{ id: '{x: 17, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06100000, - end_addr: 32'h06200000},// MagiaTileX6Y1 -'{ idx: '{ id: '{x: 22, y: 0, port_id: 0}, + end_addr: 32'h06200000},// MagiaTileX1Y6 +'{ idx: '{ id: '{x: 16, y: 6, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h06000000, - end_addr: 32'h06100000},// MagiaTileX6Y0 -'{ idx: '{ id: '{x: 21, y: 15, port_id: 0}, + end_addr: 32'h06100000},// MagiaTileX0Y6 +'{ idx: '{ id: '{x: 31, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05f00000, - end_addr: 32'h06000000},// MagiaTileX5Y15 -'{ idx: '{ id: '{x: 21, y: 14, port_id: 0}, + end_addr: 32'h06000000},// MagiaTileX15Y5 +'{ idx: '{ id: '{x: 30, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05e00000, - end_addr: 32'h05f00000},// MagiaTileX5Y14 -'{ idx: '{ id: '{x: 21, y: 13, port_id: 0}, + end_addr: 32'h05f00000},// MagiaTileX14Y5 +'{ idx: '{ id: '{x: 29, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05d00000, - end_addr: 32'h05e00000},// MagiaTileX5Y13 -'{ idx: '{ id: '{x: 21, y: 12, port_id: 0}, + end_addr: 32'h05e00000},// MagiaTileX13Y5 +'{ idx: '{ id: '{x: 28, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05c00000, - end_addr: 32'h05d00000},// MagiaTileX5Y12 -'{ idx: '{ id: '{x: 21, y: 11, port_id: 0}, + end_addr: 32'h05d00000},// MagiaTileX12Y5 +'{ idx: '{ id: '{x: 27, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05b00000, - end_addr: 32'h05c00000},// MagiaTileX5Y11 -'{ idx: '{ id: '{x: 21, y: 10, port_id: 0}, + end_addr: 32'h05c00000},// MagiaTileX11Y5 +'{ idx: '{ id: '{x: 26, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05a00000, - end_addr: 32'h05b00000},// MagiaTileX5Y10 -'{ idx: '{ id: '{x: 21, y: 9, port_id: 0}, + end_addr: 32'h05b00000},// MagiaTileX10Y5 +'{ idx: '{ id: '{x: 25, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05900000, - end_addr: 32'h05a00000},// MagiaTileX5Y9 -'{ idx: '{ id: '{x: 21, y: 8, port_id: 0}, + end_addr: 32'h05a00000},// MagiaTileX9Y5 +'{ idx: '{ id: '{x: 24, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05800000, - end_addr: 32'h05900000},// MagiaTileX5Y8 -'{ idx: '{ id: '{x: 21, y: 7, port_id: 0}, + end_addr: 32'h05900000},// MagiaTileX8Y5 +'{ idx: '{ id: '{x: 23, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05700000, - end_addr: 32'h05800000},// MagiaTileX5Y7 -'{ idx: '{ id: '{x: 21, y: 6, port_id: 0}, + end_addr: 32'h05800000},// MagiaTileX7Y5 +'{ idx: '{ id: '{x: 22, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05600000, - end_addr: 32'h05700000},// MagiaTileX5Y6 + end_addr: 32'h05700000},// MagiaTileX6Y5 '{ idx: '{ id: '{x: 21, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05500000, end_addr: 32'h05600000},// MagiaTileX5Y5 -'{ idx: '{ id: '{x: 21, y: 4, port_id: 0}, +'{ idx: '{ id: '{x: 20, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05400000, - end_addr: 32'h05500000},// MagiaTileX5Y4 -'{ idx: '{ id: '{x: 21, y: 3, port_id: 0}, + end_addr: 32'h05500000},// MagiaTileX4Y5 +'{ idx: '{ id: '{x: 19, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05300000, - end_addr: 32'h05400000},// MagiaTileX5Y3 -'{ idx: '{ id: '{x: 21, y: 2, port_id: 0}, + end_addr: 32'h05400000},// MagiaTileX3Y5 +'{ idx: '{ id: '{x: 18, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05200000, - end_addr: 32'h05300000},// MagiaTileX5Y2 -'{ idx: '{ id: '{x: 21, y: 1, port_id: 0}, + end_addr: 32'h05300000},// MagiaTileX2Y5 +'{ idx: '{ id: '{x: 17, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05100000, - end_addr: 32'h05200000},// MagiaTileX5Y1 -'{ idx: '{ id: '{x: 21, y: 0, port_id: 0}, + end_addr: 32'h05200000},// MagiaTileX1Y5 +'{ idx: '{ id: '{x: 16, y: 5, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h05000000, - end_addr: 32'h05100000},// MagiaTileX5Y0 -'{ idx: '{ id: '{x: 20, y: 15, port_id: 0}, + end_addr: 32'h05100000},// MagiaTileX0Y5 +'{ idx: '{ id: '{x: 31, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04f00000, - end_addr: 32'h05000000},// MagiaTileX4Y15 -'{ idx: '{ id: '{x: 20, y: 14, port_id: 0}, + end_addr: 32'h05000000},// MagiaTileX15Y4 +'{ idx: '{ id: '{x: 30, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04e00000, - end_addr: 32'h04f00000},// MagiaTileX4Y14 -'{ idx: '{ id: '{x: 20, y: 13, port_id: 0}, + end_addr: 32'h04f00000},// MagiaTileX14Y4 +'{ idx: '{ id: '{x: 29, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04d00000, - end_addr: 32'h04e00000},// MagiaTileX4Y13 -'{ idx: '{ id: '{x: 20, y: 12, port_id: 0}, + end_addr: 32'h04e00000},// MagiaTileX13Y4 +'{ idx: '{ id: '{x: 28, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04c00000, - end_addr: 32'h04d00000},// MagiaTileX4Y12 -'{ idx: '{ id: '{x: 20, y: 11, port_id: 0}, + end_addr: 32'h04d00000},// MagiaTileX12Y4 +'{ idx: '{ id: '{x: 27, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04b00000, - end_addr: 32'h04c00000},// MagiaTileX4Y11 -'{ idx: '{ id: '{x: 20, y: 10, port_id: 0}, + end_addr: 32'h04c00000},// MagiaTileX11Y4 +'{ idx: '{ id: '{x: 26, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04a00000, - end_addr: 32'h04b00000},// MagiaTileX4Y10 -'{ idx: '{ id: '{x: 20, y: 9, port_id: 0}, + end_addr: 32'h04b00000},// MagiaTileX10Y4 +'{ idx: '{ id: '{x: 25, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04900000, - end_addr: 32'h04a00000},// MagiaTileX4Y9 -'{ idx: '{ id: '{x: 20, y: 8, port_id: 0}, + end_addr: 32'h04a00000},// MagiaTileX9Y4 +'{ idx: '{ id: '{x: 24, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04800000, - end_addr: 32'h04900000},// MagiaTileX4Y8 -'{ idx: '{ id: '{x: 20, y: 7, port_id: 0}, + end_addr: 32'h04900000},// MagiaTileX8Y4 +'{ idx: '{ id: '{x: 23, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04700000, - end_addr: 32'h04800000},// MagiaTileX4Y7 -'{ idx: '{ id: '{x: 20, y: 6, port_id: 0}, + end_addr: 32'h04800000},// MagiaTileX7Y4 +'{ idx: '{ id: '{x: 22, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04600000, - end_addr: 32'h04700000},// MagiaTileX4Y6 -'{ idx: '{ id: '{x: 20, y: 5, port_id: 0}, + end_addr: 32'h04700000},// MagiaTileX6Y4 +'{ idx: '{ id: '{x: 21, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04500000, - end_addr: 32'h04600000},// MagiaTileX4Y5 + end_addr: 32'h04600000},// MagiaTileX5Y4 '{ idx: '{ id: '{x: 20, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04400000, end_addr: 32'h04500000},// MagiaTileX4Y4 -'{ idx: '{ id: '{x: 20, y: 3, port_id: 0}, +'{ idx: '{ id: '{x: 19, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04300000, - end_addr: 32'h04400000},// MagiaTileX4Y3 -'{ idx: '{ id: '{x: 20, y: 2, port_id: 0}, + end_addr: 32'h04400000},// MagiaTileX3Y4 +'{ idx: '{ id: '{x: 18, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04200000, - end_addr: 32'h04300000},// MagiaTileX4Y2 -'{ idx: '{ id: '{x: 20, y: 1, port_id: 0}, + end_addr: 32'h04300000},// MagiaTileX2Y4 +'{ idx: '{ id: '{x: 17, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04100000, - end_addr: 32'h04200000},// MagiaTileX4Y1 -'{ idx: '{ id: '{x: 20, y: 0, port_id: 0}, + end_addr: 32'h04200000},// MagiaTileX1Y4 +'{ idx: '{ id: '{x: 16, y: 4, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h04000000, - end_addr: 32'h04100000},// MagiaTileX4Y0 -'{ idx: '{ id: '{x: 19, y: 15, port_id: 0}, + end_addr: 32'h04100000},// MagiaTileX0Y4 +'{ idx: '{ id: '{x: 31, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03f00000, - end_addr: 32'h04000000},// MagiaTileX3Y15 -'{ idx: '{ id: '{x: 19, y: 14, port_id: 0}, + end_addr: 32'h04000000},// MagiaTileX15Y3 +'{ idx: '{ id: '{x: 30, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03e00000, - end_addr: 32'h03f00000},// MagiaTileX3Y14 -'{ idx: '{ id: '{x: 19, y: 13, port_id: 0}, + end_addr: 32'h03f00000},// MagiaTileX14Y3 +'{ idx: '{ id: '{x: 29, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03d00000, - end_addr: 32'h03e00000},// MagiaTileX3Y13 -'{ idx: '{ id: '{x: 19, y: 12, port_id: 0}, + end_addr: 32'h03e00000},// MagiaTileX13Y3 +'{ idx: '{ id: '{x: 28, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03c00000, - end_addr: 32'h03d00000},// MagiaTileX3Y12 -'{ idx: '{ id: '{x: 19, y: 11, port_id: 0}, + end_addr: 32'h03d00000},// MagiaTileX12Y3 +'{ idx: '{ id: '{x: 27, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03b00000, - end_addr: 32'h03c00000},// MagiaTileX3Y11 -'{ idx: '{ id: '{x: 19, y: 10, port_id: 0}, + end_addr: 32'h03c00000},// MagiaTileX11Y3 +'{ idx: '{ id: '{x: 26, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03a00000, - end_addr: 32'h03b00000},// MagiaTileX3Y10 -'{ idx: '{ id: '{x: 19, y: 9, port_id: 0}, + end_addr: 32'h03b00000},// MagiaTileX10Y3 +'{ idx: '{ id: '{x: 25, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03900000, - end_addr: 32'h03a00000},// MagiaTileX3Y9 -'{ idx: '{ id: '{x: 19, y: 8, port_id: 0}, + end_addr: 32'h03a00000},// MagiaTileX9Y3 +'{ idx: '{ id: '{x: 24, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03800000, - end_addr: 32'h03900000},// MagiaTileX3Y8 -'{ idx: '{ id: '{x: 19, y: 7, port_id: 0}, + end_addr: 32'h03900000},// MagiaTileX8Y3 +'{ idx: '{ id: '{x: 23, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03700000, - end_addr: 32'h03800000},// MagiaTileX3Y7 -'{ idx: '{ id: '{x: 19, y: 6, port_id: 0}, + end_addr: 32'h03800000},// MagiaTileX7Y3 +'{ idx: '{ id: '{x: 22, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03600000, - end_addr: 32'h03700000},// MagiaTileX3Y6 -'{ idx: '{ id: '{x: 19, y: 5, port_id: 0}, + end_addr: 32'h03700000},// MagiaTileX6Y3 +'{ idx: '{ id: '{x: 21, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03500000, - end_addr: 32'h03600000},// MagiaTileX3Y5 -'{ idx: '{ id: '{x: 19, y: 4, port_id: 0}, + end_addr: 32'h03600000},// MagiaTileX5Y3 +'{ idx: '{ id: '{x: 20, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03400000, - end_addr: 32'h03500000},// MagiaTileX3Y4 + end_addr: 32'h03500000},// MagiaTileX4Y3 '{ idx: '{ id: '{x: 19, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03300000, end_addr: 32'h03400000},// MagiaTileX3Y3 -'{ idx: '{ id: '{x: 19, y: 2, port_id: 0}, +'{ idx: '{ id: '{x: 18, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03200000, - end_addr: 32'h03300000},// MagiaTileX3Y2 -'{ idx: '{ id: '{x: 19, y: 1, port_id: 0}, + end_addr: 32'h03300000},// MagiaTileX2Y3 +'{ idx: '{ id: '{x: 17, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03100000, - end_addr: 32'h03200000},// MagiaTileX3Y1 -'{ idx: '{ id: '{x: 19, y: 0, port_id: 0}, + end_addr: 32'h03200000},// MagiaTileX1Y3 +'{ idx: '{ id: '{x: 16, y: 3, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h03000000, - end_addr: 32'h03100000},// MagiaTileX3Y0 -'{ idx: '{ id: '{x: 18, y: 15, port_id: 0}, + end_addr: 32'h03100000},// MagiaTileX0Y3 +'{ idx: '{ id: '{x: 31, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02f00000, - end_addr: 32'h03000000},// MagiaTileX2Y15 -'{ idx: '{ id: '{x: 18, y: 14, port_id: 0}, + end_addr: 32'h03000000},// MagiaTileX15Y2 +'{ idx: '{ id: '{x: 30, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02e00000, - end_addr: 32'h02f00000},// MagiaTileX2Y14 -'{ idx: '{ id: '{x: 18, y: 13, port_id: 0}, + end_addr: 32'h02f00000},// MagiaTileX14Y2 +'{ idx: '{ id: '{x: 29, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02d00000, - end_addr: 32'h02e00000},// MagiaTileX2Y13 -'{ idx: '{ id: '{x: 18, y: 12, port_id: 0}, + end_addr: 32'h02e00000},// MagiaTileX13Y2 +'{ idx: '{ id: '{x: 28, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02c00000, - end_addr: 32'h02d00000},// MagiaTileX2Y12 -'{ idx: '{ id: '{x: 18, y: 11, port_id: 0}, + end_addr: 32'h02d00000},// MagiaTileX12Y2 +'{ idx: '{ id: '{x: 27, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02b00000, - end_addr: 32'h02c00000},// MagiaTileX2Y11 -'{ idx: '{ id: '{x: 18, y: 10, port_id: 0}, + end_addr: 32'h02c00000},// MagiaTileX11Y2 +'{ idx: '{ id: '{x: 26, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02a00000, - end_addr: 32'h02b00000},// MagiaTileX2Y10 -'{ idx: '{ id: '{x: 18, y: 9, port_id: 0}, + end_addr: 32'h02b00000},// MagiaTileX10Y2 +'{ idx: '{ id: '{x: 25, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02900000, - end_addr: 32'h02a00000},// MagiaTileX2Y9 -'{ idx: '{ id: '{x: 18, y: 8, port_id: 0}, + end_addr: 32'h02a00000},// MagiaTileX9Y2 +'{ idx: '{ id: '{x: 24, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02800000, - end_addr: 32'h02900000},// MagiaTileX2Y8 -'{ idx: '{ id: '{x: 18, y: 7, port_id: 0}, + end_addr: 32'h02900000},// MagiaTileX8Y2 +'{ idx: '{ id: '{x: 23, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02700000, - end_addr: 32'h02800000},// MagiaTileX2Y7 -'{ idx: '{ id: '{x: 18, y: 6, port_id: 0}, + end_addr: 32'h02800000},// MagiaTileX7Y2 +'{ idx: '{ id: '{x: 22, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02600000, - end_addr: 32'h02700000},// MagiaTileX2Y6 -'{ idx: '{ id: '{x: 18, y: 5, port_id: 0}, + end_addr: 32'h02700000},// MagiaTileX6Y2 +'{ idx: '{ id: '{x: 21, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02500000, - end_addr: 32'h02600000},// MagiaTileX2Y5 -'{ idx: '{ id: '{x: 18, y: 4, port_id: 0}, + end_addr: 32'h02600000},// MagiaTileX5Y2 +'{ idx: '{ id: '{x: 20, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02400000, - end_addr: 32'h02500000},// MagiaTileX2Y4 -'{ idx: '{ id: '{x: 18, y: 3, port_id: 0}, + end_addr: 32'h02500000},// MagiaTileX4Y2 +'{ idx: '{ id: '{x: 19, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02300000, - end_addr: 32'h02400000},// MagiaTileX2Y3 + end_addr: 32'h02400000},// MagiaTileX3Y2 '{ idx: '{ id: '{x: 18, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02200000, end_addr: 32'h02300000},// MagiaTileX2Y2 -'{ idx: '{ id: '{x: 18, y: 1, port_id: 0}, +'{ idx: '{ id: '{x: 17, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02100000, - end_addr: 32'h02200000},// MagiaTileX2Y1 -'{ idx: '{ id: '{x: 18, y: 0, port_id: 0}, + end_addr: 32'h02200000},// MagiaTileX1Y2 +'{ idx: '{ id: '{x: 16, y: 2, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h02000000, - end_addr: 32'h02100000},// MagiaTileX2Y0 -'{ idx: '{ id: '{x: 17, y: 15, port_id: 0}, + end_addr: 32'h02100000},// MagiaTileX0Y2 +'{ idx: '{ id: '{x: 31, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01f00000, - end_addr: 32'h02000000},// MagiaTileX1Y15 -'{ idx: '{ id: '{x: 17, y: 14, port_id: 0}, + end_addr: 32'h02000000},// MagiaTileX15Y1 +'{ idx: '{ id: '{x: 30, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01e00000, - end_addr: 32'h01f00000},// MagiaTileX1Y14 -'{ idx: '{ id: '{x: 17, y: 13, port_id: 0}, + end_addr: 32'h01f00000},// MagiaTileX14Y1 +'{ idx: '{ id: '{x: 29, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01d00000, - end_addr: 32'h01e00000},// MagiaTileX1Y13 -'{ idx: '{ id: '{x: 17, y: 12, port_id: 0}, + end_addr: 32'h01e00000},// MagiaTileX13Y1 +'{ idx: '{ id: '{x: 28, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01c00000, - end_addr: 32'h01d00000},// MagiaTileX1Y12 -'{ idx: '{ id: '{x: 17, y: 11, port_id: 0}, + end_addr: 32'h01d00000},// MagiaTileX12Y1 +'{ idx: '{ id: '{x: 27, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01b00000, - end_addr: 32'h01c00000},// MagiaTileX1Y11 -'{ idx: '{ id: '{x: 17, y: 10, port_id: 0}, + end_addr: 32'h01c00000},// MagiaTileX11Y1 +'{ idx: '{ id: '{x: 26, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01a00000, - end_addr: 32'h01b00000},// MagiaTileX1Y10 -'{ idx: '{ id: '{x: 17, y: 9, port_id: 0}, + end_addr: 32'h01b00000},// MagiaTileX10Y1 +'{ idx: '{ id: '{x: 25, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01900000, - end_addr: 32'h01a00000},// MagiaTileX1Y9 -'{ idx: '{ id: '{x: 17, y: 8, port_id: 0}, + end_addr: 32'h01a00000},// MagiaTileX9Y1 +'{ idx: '{ id: '{x: 24, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01800000, - end_addr: 32'h01900000},// MagiaTileX1Y8 -'{ idx: '{ id: '{x: 17, y: 7, port_id: 0}, + end_addr: 32'h01900000},// MagiaTileX8Y1 +'{ idx: '{ id: '{x: 23, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01700000, - end_addr: 32'h01800000},// MagiaTileX1Y7 -'{ idx: '{ id: '{x: 17, y: 6, port_id: 0}, + end_addr: 32'h01800000},// MagiaTileX7Y1 +'{ idx: '{ id: '{x: 22, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01600000, - end_addr: 32'h01700000},// MagiaTileX1Y6 -'{ idx: '{ id: '{x: 17, y: 5, port_id: 0}, + end_addr: 32'h01700000},// MagiaTileX6Y1 +'{ idx: '{ id: '{x: 21, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01500000, - end_addr: 32'h01600000},// MagiaTileX1Y5 -'{ idx: '{ id: '{x: 17, y: 4, port_id: 0}, + end_addr: 32'h01600000},// MagiaTileX5Y1 +'{ idx: '{ id: '{x: 20, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01400000, - end_addr: 32'h01500000},// MagiaTileX1Y4 -'{ idx: '{ id: '{x: 17, y: 3, port_id: 0}, + end_addr: 32'h01500000},// MagiaTileX4Y1 +'{ idx: '{ id: '{x: 19, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01300000, - end_addr: 32'h01400000},// MagiaTileX1Y3 -'{ idx: '{ id: '{x: 17, y: 2, port_id: 0}, + end_addr: 32'h01400000},// MagiaTileX3Y1 +'{ idx: '{ id: '{x: 18, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01200000, - end_addr: 32'h01300000},// MagiaTileX1Y2 + end_addr: 32'h01300000},// MagiaTileX2Y1 '{ idx: '{ id: '{x: 17, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01100000, end_addr: 32'h01200000},// MagiaTileX1Y1 -'{ idx: '{ id: '{x: 17, y: 0, port_id: 0}, +'{ idx: '{ id: '{x: 16, y: 1, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h01000000, - end_addr: 32'h01100000},// MagiaTileX1Y0 -'{ idx: '{ id: '{x: 16, y: 15, port_id: 0}, + end_addr: 32'h01100000},// MagiaTileX0Y1 +'{ idx: '{ id: '{x: 31, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00f00000, - end_addr: 32'h01000000},// MagiaTileX0Y15 -'{ idx: '{ id: '{x: 16, y: 14, port_id: 0}, + end_addr: 32'h01000000},// MagiaTileX15Y0 +'{ idx: '{ id: '{x: 30, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00e00000, - end_addr: 32'h00f00000},// MagiaTileX0Y14 -'{ idx: '{ id: '{x: 16, y: 13, port_id: 0}, + end_addr: 32'h00f00000},// MagiaTileX14Y0 +'{ idx: '{ id: '{x: 29, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00d00000, - end_addr: 32'h00e00000},// MagiaTileX0Y13 -'{ idx: '{ id: '{x: 16, y: 12, port_id: 0}, + end_addr: 32'h00e00000},// MagiaTileX13Y0 +'{ idx: '{ id: '{x: 28, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00c00000, - end_addr: 32'h00d00000},// MagiaTileX0Y12 -'{ idx: '{ id: '{x: 16, y: 11, port_id: 0}, + end_addr: 32'h00d00000},// MagiaTileX12Y0 +'{ idx: '{ id: '{x: 27, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00b00000, - end_addr: 32'h00c00000},// MagiaTileX0Y11 -'{ idx: '{ id: '{x: 16, y: 10, port_id: 0}, + end_addr: 32'h00c00000},// MagiaTileX11Y0 +'{ idx: '{ id: '{x: 26, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00a00000, - end_addr: 32'h00b00000},// MagiaTileX0Y10 -'{ idx: '{ id: '{x: 16, y: 9, port_id: 0}, + end_addr: 32'h00b00000},// MagiaTileX10Y0 +'{ idx: '{ id: '{x: 25, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00900000, - end_addr: 32'h00a00000},// MagiaTileX0Y9 -'{ idx: '{ id: '{x: 16, y: 8, port_id: 0}, + end_addr: 32'h00a00000},// MagiaTileX9Y0 +'{ idx: '{ id: '{x: 24, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00800000, - end_addr: 32'h00900000},// MagiaTileX0Y8 -'{ idx: '{ id: '{x: 16, y: 7, port_id: 0}, + end_addr: 32'h00900000},// MagiaTileX8Y0 +'{ idx: '{ id: '{x: 23, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00700000, - end_addr: 32'h00800000},// MagiaTileX0Y7 -'{ idx: '{ id: '{x: 16, y: 6, port_id: 0}, + end_addr: 32'h00800000},// MagiaTileX7Y0 +'{ idx: '{ id: '{x: 22, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00600000, - end_addr: 32'h00700000},// MagiaTileX0Y6 -'{ idx: '{ id: '{x: 16, y: 5, port_id: 0}, + end_addr: 32'h00700000},// MagiaTileX6Y0 +'{ idx: '{ id: '{x: 21, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00500000, - end_addr: 32'h00600000},// MagiaTileX0Y5 -'{ idx: '{ id: '{x: 16, y: 4, port_id: 0}, + end_addr: 32'h00600000},// MagiaTileX5Y0 +'{ idx: '{ id: '{x: 20, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00400000, - end_addr: 32'h00500000},// MagiaTileX0Y4 -'{ idx: '{ id: '{x: 16, y: 3, port_id: 0}, + end_addr: 32'h00500000},// MagiaTileX4Y0 +'{ idx: '{ id: '{x: 19, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00300000, - end_addr: 32'h00400000},// MagiaTileX0Y3 -'{ idx: '{ id: '{x: 16, y: 2, port_id: 0}, + end_addr: 32'h00400000},// MagiaTileX3Y0 +'{ idx: '{ id: '{x: 18, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00200000, - end_addr: 32'h00300000},// MagiaTileX0Y2 -'{ idx: '{ id: '{x: 16, y: 1, port_id: 0}, + end_addr: 32'h00300000},// MagiaTileX2Y0 +'{ idx: '{ id: '{x: 17, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, base_id: 0}}, start_addr: 32'h00100000, - end_addr: 32'h00200000},// MagiaTileX0Y1 + end_addr: 32'h00200000},// MagiaTileX1Y0 '{ idx: '{ id: '{x: 16, y: 0, port_id: 0}, mask_x: '{ offset: 24, - len: 5, + len: 4, base_id: 16}, mask_y: '{ offset: 20, len: 4, @@ -3289,10 +3844,10 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, EnLsbAnd: 1'b1, - EnFpAdd: 1'b0, - EnFpMul: 1'b0, - EnFpMin: 1'b0, - EnFpMax: 1'b0, + EnFpAdd: 1'b1, + EnFpMul: 1'b1, + EnFpMin: 1'b1, + EnFpMax: 1'b1, EnIntAdd: 1'b0, EnIntMul: 1'b0, EnIntMinS: 1'b0, @@ -3300,7 +3855,8 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ EnIntMaxS: 1'b0, EnIntMaxU: 1'b0}, NarrRedCfg: RedDefaultCfg, - WideRedCfg: RedDefaultCfg}}; + WideRedCfg: '{ RdPipelineDepth: 0, + CutOffloadIntf: 1'b0}}}; @@ -3400,5 +3956,8 @@ localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) + typedef logic [AxiCfgW.DataWidth-1:0] floo_wide_red_data_t; +`FLOO_RED_TYPEDEF_REQ_RSP_LINK(wide, floo_wide_red_data_t, wide_req, wide_rsp) + endpackage diff --git a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv index 98d363f3..361a1ca6 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv @@ -1,4 +1,4 @@ -// Copyright 2025 ETH Zurich and University of Bologna. +// Copyright 2026 ETH Zurich and University of Bologna. // Solderpad Hardware License, Version 0.51, see LICENSE for details. // SPDX-License-Identifier: SHL-0.51 @@ -11,38 +11,52 @@ package floo_axi_nw_mesh_2x2_noc_pkg; import floo_pkg::*; + ///////////////////////////// + // Endpoint Dimensions // + ///////////////////////////// + + localparam int unsigned NumMagiaTileX = 2; +localparam int unsigned NumMagiaTileY = 2; +localparam int unsigned NumL2 = 2; + + ///////////////////// // Address Map // ///////////////////// typedef enum logic[2:0] { MagiaTileX0Y0 = 0, - MagiaTileX0Y1 = 1, - MagiaTileX1Y0 = 2, + MagiaTileX1Y0 = 1, + MagiaTileX0Y1 = 2, MagiaTileX1Y1 = 3, L20 = 4, L21 = 5, NumEndpoints = 6} ep_id_e; + + typedef enum logic[2:0] { MagiaTileX0Y0SamIdx = 0, - MagiaTileX0Y1SamIdx = 1, - MagiaTileX1Y0SamIdx = 2, + MagiaTileX1Y0SamIdx = 1, + MagiaTileX0Y1SamIdx = 2, MagiaTileX1Y1SamIdx = 3, L20SamIdx = 4, L21SamIdx = 5} sam_idx_e; + + typedef logic[0:0] rob_idx_t; - typedef logic[0:0] port_id_t; - typedef logic[1:0] x_bits_t; - typedef logic[0:0] y_bits_t; - typedef struct packed { +typedef logic[0:0] port_id_t; +typedef logic[1:0] x_bits_t; +typedef logic[0:0] y_bits_t; +typedef struct packed { x_bits_t x; y_bits_t y; port_id_t port_id; - } id_t; +} id_t; + +typedef logic route_t; - typedef logic route_t; typedef struct packed { id_t idx; @@ -52,43 +66,53 @@ package floo_axi_nw_mesh_2x2_noc_pkg; localparam int unsigned SamNumRules = 6; - typedef struct packed { - id_t idx; - logic [31:0] start_addr; - logic [31:0] end_addr; - } sam_rule_t; +typedef struct packed { + id_t idx; + logic [31:0] start_addr; + logic [31:0] end_addr; +} sam_rule_t; localparam sam_rule_t[SamNumRules-1:0] Sam = '{ -'{idx: '{x: 0, y: 1, port_id: 0}, start_addr: 32'he0000000, end_addr: 32'hffffffff},// L2_1_sam_idx -'{idx: '{x: 0, y: 0, port_id: 0}, start_addr: 32'hc0000000, end_addr: 32'he0000000},// L2_0_sam_idx -'{idx: '{x: 2, y: 1, port_id: 0}, start_addr: 32'h00300000, end_addr: 32'h00400000},// magia_tile_x1_y1_sam_idx -'{idx: '{x: 1, y: 1, port_id: 0}, start_addr: 32'h00200000, end_addr: 32'h00300000},// magia_tile_x0_y1_sam_idx -'{idx: '{x: 2, y: 0, port_id: 0}, start_addr: 32'h00100000, end_addr: 32'h00200000},// magia_tile_x1_y0_sam_idx -'{idx: '{x: 1, y: 0, port_id: 0}, start_addr: 32'h00000000, end_addr: 32'h00100000} // magia_tile_x0_y0_sam_idx +'{ idx: '{x: 0, y: 1, port_id: 0}, + start_addr: 32'he0000000, + end_addr: 32'h100000000},// L21 +'{ idx: '{x: 0, y: 0, port_id: 0}, + start_addr: 32'hc0000000, + end_addr: 32'he0000000},// L20 +'{ idx: '{x: 3, y: 1, port_id: 0}, + start_addr: 32'h00300000, + end_addr: 32'h00400000},// MagiaTileX1Y1 +'{ idx: '{x: 2, y: 1, port_id: 0}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX0Y1 +'{ idx: '{x: 3, y: 0, port_id: 0}, + start_addr: 32'h00200000, + end_addr: 32'h00300000},// MagiaTileX1Y0 +'{ idx: '{x: 2, y: 0, port_id: 0}, + start_addr: 32'h00000000, + end_addr: 32'h00100000} // MagiaTileX0Y0 }; + localparam int unsigned CollectiveSamNumRules = 6; - localparam int unsigned CollectiveSamNumRules = 6; +typedef struct packed { + int unsigned offset; + int unsigned len; + int unsigned base_id; +} collective_mask_sel_t; - typedef struct packed { - int unsigned offset; - int unsigned len; - int unsigned base_id; - } collective_mask_sel_t; - - typedef struct packed { - id_t id; - collective_mask_sel_t mask_x; - collective_mask_sel_t mask_y; - } collective_idx_t; - - typedef struct packed { - collective_idx_t idx; - logic [31:0] start_addr; - logic [31:0] end_addr; - } collective_sam_rule_t; +typedef struct packed { + id_t id; + collective_mask_sel_t mask_x; + collective_mask_sel_t mask_y; +} collective_idx_t; +typedef struct packed { + collective_idx_t idx; + logic [31:0] start_addr; + logic [31:0] end_addr; +} collective_sam_rule_t; localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ '{ idx: '{ id: '{x: 0, y: 1, port_id: 0}, @@ -110,7 +134,7 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ base_id: 0}}, start_addr: 32'h00300000, end_addr: 32'h00400000},// MagiaTileX1Y1 -'{ idx: '{ id: '{x: 3, y: 0, port_id: 0}, +'{ idx: '{ id: '{x: 2, y: 1, port_id: 0}, mask_x: '{ offset: 21, len: 2, base_id: 2}, @@ -118,8 +142,8 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ len: 1, base_id: 0}}, start_addr: 32'h00200000, - end_addr: 32'h00300000},// MagiaTileX1Y0 -'{ idx: '{ id: '{x: 2, y: 1, port_id: 0}, + end_addr: 32'h00300000},// MagiaTileX0Y1 +'{ idx: '{ id: '{x: 3, y: 0, port_id: 0}, mask_x: '{ offset: 21, len: 2, base_id: 2}, @@ -127,7 +151,7 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ len: 1, base_id: 0}}, start_addr: 32'h00100000, - end_addr: 32'h00200000},// MagiaTileX0Y1 + end_addr: 32'h00200000},// MagiaTileX1Y0 '{ idx: '{ id: '{x: 2, y: 0, port_id: 0}, mask_x: '{ offset: 21, len: 2, @@ -140,39 +164,47 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ }; - localparam route_cfg_t RouteCfg = '{ - RouteAlgo: XYRouting, + + + localparam route_cfg_t RouteCfg = '{ RouteAlgo: XYRouting, UseIdTable: 1'b1, XYAddrOffsetX: 32, XYAddrOffsetY: 34, IdAddrOffset: 0, NumSamRules: 6, NumRoutes: 0, - CollectiveCfg: '{ - OpCfg: '{ - EnNarrowMulticast: 1'b1, - EnWideMulticast: 1'b1, - EnLsbAnd: 1'b1, - EnFpAdd: 1'b1, - EnFpMul: 1'b1, - EnFpMin: 1'b1, - EnFpMax: 1'b1, - EnIntAdd: 1'b1, - EnIntMul: 1'b1, - EnIntMinS: 1'b1, - EnIntMinU: 1'b1, - EnIntMaxS: 1'b1, - EnIntMaxU: 1'b1 - }, - NarrRedCfg: RedDefaultCfg, - WideRedCfg: RedDefaultCfg - } - }; - - - - - typedef logic[31:0] axi_narrow_data_mst_addr_t; + CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, + EnWideMulticast: 1'b1, + EnLsbAnd: 1'b1, + EnFpAdd: 1'b1, + EnFpMul: 1'b1, + EnFpMin: 1'b1, + EnFpMax: 1'b1, + EnIntAdd: 1'b0, + EnIntMul: 1'b0, + EnIntMinS: 1'b0, + EnIntMinU: 1'b0, + EnIntMaxS: 1'b0, + EnIntMaxU: 1'b0}, + NarrRedCfg: RedDefaultCfg, + WideRedCfg: '{ RdPipelineDepth: 0, + CutOffloadIntf: 1'b0}}}; + + + + typedef logic[31:0] collective_axi_narrow_data_mst_addr_t; +typedef logic[31:0] collective_axi_narrow_data_mst_data_t; +typedef logic[3:0] collective_axi_narrow_data_mst_strb_t; +typedef logic[1:0] collective_axi_narrow_data_mst_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_narrow_data_mst_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_mst, collective_axi_narrow_data_mst_req_t, collective_axi_narrow_data_mst_rsp_t, collective_axi_narrow_data_mst_addr_t, collective_axi_narrow_data_mst_id_t, collective_axi_narrow_data_mst_data_t, collective_axi_narrow_data_mst_strb_t, collective_axi_narrow_data_mst_user_t) + + + typedef logic[31:0] axi_narrow_data_mst_addr_t; typedef logic[31:0] axi_narrow_data_mst_data_t; typedef logic[3:0] axi_narrow_data_mst_strb_t; typedef logic[2:0] axi_narrow_data_mst_id_t; @@ -180,7 +212,19 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_mst, axi_narrow_data_mst_req_t, axi_narrow_data_mst_rsp_t, axi_narrow_data_mst_addr_t, axi_narrow_data_mst_id_t, axi_narrow_data_mst_data_t, axi_narrow_data_mst_strb_t, axi_narrow_data_mst_user_t) - typedef logic[31:0] axi_narrow_data_slv_addr_t; + typedef logic[31:0] collective_axi_narrow_data_slv_addr_t; +typedef logic[31:0] collective_axi_narrow_data_slv_data_t; +typedef logic[3:0] collective_axi_narrow_data_slv_strb_t; +typedef logic[3:0] collective_axi_narrow_data_slv_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_narrow_data_slv_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_slv, collective_axi_narrow_data_slv_req_t, collective_axi_narrow_data_slv_rsp_t, collective_axi_narrow_data_slv_addr_t, collective_axi_narrow_data_slv_id_t, collective_axi_narrow_data_slv_data_t, collective_axi_narrow_data_slv_strb_t, collective_axi_narrow_data_slv_user_t) + + + typedef logic[31:0] axi_narrow_data_slv_addr_t; typedef logic[31:0] axi_narrow_data_slv_data_t; typedef logic[3:0] axi_narrow_data_slv_strb_t; typedef logic[5:0] axi_narrow_data_slv_id_t; @@ -188,7 +232,19 @@ typedef logic[0:0] axi_narrow_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_slv, axi_narrow_data_slv_req_t, axi_narrow_data_slv_rsp_t, axi_narrow_data_slv_addr_t, axi_narrow_data_slv_id_t, axi_narrow_data_slv_data_t, axi_narrow_data_slv_strb_t, axi_narrow_data_slv_user_t) - typedef logic[31:0] axi_wide_data_mst_addr_t; + typedef logic[31:0] collective_axi_wide_data_mst_addr_t; +typedef logic[255:0] collective_axi_wide_data_mst_data_t; +typedef logic[31:0] collective_axi_wide_data_mst_strb_t; +typedef logic[1:0] collective_axi_wide_data_mst_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_wide_data_mst_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_mst, collective_axi_wide_data_mst_req_t, collective_axi_wide_data_mst_rsp_t, collective_axi_wide_data_mst_addr_t, collective_axi_wide_data_mst_id_t, collective_axi_wide_data_mst_data_t, collective_axi_wide_data_mst_strb_t, collective_axi_wide_data_mst_user_t) + + + typedef logic[31:0] axi_wide_data_mst_addr_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; typedef logic[2:0] axi_wide_data_mst_id_t; @@ -196,7 +252,19 @@ typedef logic[0:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) - typedef logic[31:0] axi_wide_data_slv_addr_t; + typedef logic[31:0] collective_axi_wide_data_slv_addr_t; +typedef logic[255:0] collective_axi_wide_data_slv_data_t; +typedef logic[31:0] collective_axi_wide_data_slv_strb_t; +typedef logic[1:0] collective_axi_wide_data_slv_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_wide_data_slv_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_slv, collective_axi_wide_data_slv_req_t, collective_axi_wide_data_slv_rsp_t, collective_axi_wide_data_slv_addr_t, collective_axi_wide_data_slv_id_t, collective_axi_wide_data_slv_data_t, collective_axi_wide_data_slv_strb_t, collective_axi_wide_data_slv_user_t) + + + typedef logic[31:0] axi_wide_data_slv_addr_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; typedef logic[2:0] axi_wide_data_slv_id_t; @@ -205,20 +273,23 @@ typedef logic[0:0] axi_wide_data_slv_user_t; - `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t) + `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: 32, DataWidth: 32, - UserWidth: 1, - InIdWidth: 6, - OutIdWidth: 3}; + InIdWidth: 4, + OutIdWidth: 2, + UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - UserWidth: 1, - InIdWidth: 3, - OutIdWidth: 3}; + InIdWidth: 2, + OutIdWidth: 2, + UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) + typedef logic [AxiCfgW.DataWidth-1:0] floo_wide_red_data_t; +`FLOO_RED_TYPEDEF_REQ_RSP_LINK(wide, floo_wide_red_data_t, wide_req, wide_rsp) + endpackage diff --git a/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv index 13bf1817..63cee3ee 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv @@ -1,4 +1,4 @@ -// Copyright 2025 ETH Zurich and University of Bologna. +// Copyright 2026 ETH Zurich and University of Bologna. // Solderpad Hardware License, Version 0.51, see LICENSE for details. // SPDX-License-Identifier: SHL-0.51 @@ -11,1034 +11,1043 @@ package floo_axi_nw_mesh_32x32_noc_pkg; import floo_pkg::*; + ///////////////////////////// + // Endpoint Dimensions // + ///////////////////////////// + + localparam int unsigned NumMagiaTileX = 32; +localparam int unsigned NumMagiaTileY = 32; +localparam int unsigned NumL2 = 32; + + ///////////////////// // Address Map // ///////////////////// typedef enum logic[10:0] { MagiaTileX0Y0 = 0, - MagiaTileX0Y1 = 1, - MagiaTileX0Y2 = 2, - MagiaTileX0Y3 = 3, - MagiaTileX0Y4 = 4, - MagiaTileX0Y5 = 5, - MagiaTileX0Y6 = 6, - MagiaTileX0Y7 = 7, - MagiaTileX0Y8 = 8, - MagiaTileX0Y9 = 9, - MagiaTileX0Y10 = 10, - MagiaTileX0Y11 = 11, - MagiaTileX0Y12 = 12, - MagiaTileX0Y13 = 13, - MagiaTileX0Y14 = 14, - MagiaTileX0Y15 = 15, - MagiaTileX0Y16 = 16, - MagiaTileX0Y17 = 17, - MagiaTileX0Y18 = 18, - MagiaTileX0Y19 = 19, - MagiaTileX0Y20 = 20, - MagiaTileX0Y21 = 21, - MagiaTileX0Y22 = 22, - MagiaTileX0Y23 = 23, - MagiaTileX0Y24 = 24, - MagiaTileX0Y25 = 25, - MagiaTileX0Y26 = 26, - MagiaTileX0Y27 = 27, - MagiaTileX0Y28 = 28, - MagiaTileX0Y29 = 29, - MagiaTileX0Y30 = 30, - MagiaTileX0Y31 = 31, - MagiaTileX1Y0 = 32, + MagiaTileX1Y0 = 1, + MagiaTileX2Y0 = 2, + MagiaTileX3Y0 = 3, + MagiaTileX4Y0 = 4, + MagiaTileX5Y0 = 5, + MagiaTileX6Y0 = 6, + MagiaTileX7Y0 = 7, + MagiaTileX8Y0 = 8, + MagiaTileX9Y0 = 9, + MagiaTileX10Y0 = 10, + MagiaTileX11Y0 = 11, + MagiaTileX12Y0 = 12, + MagiaTileX13Y0 = 13, + MagiaTileX14Y0 = 14, + MagiaTileX15Y0 = 15, + MagiaTileX16Y0 = 16, + MagiaTileX17Y0 = 17, + MagiaTileX18Y0 = 18, + MagiaTileX19Y0 = 19, + MagiaTileX20Y0 = 20, + MagiaTileX21Y0 = 21, + MagiaTileX22Y0 = 22, + MagiaTileX23Y0 = 23, + MagiaTileX24Y0 = 24, + MagiaTileX25Y0 = 25, + MagiaTileX26Y0 = 26, + MagiaTileX27Y0 = 27, + MagiaTileX28Y0 = 28, + MagiaTileX29Y0 = 29, + MagiaTileX30Y0 = 30, + MagiaTileX31Y0 = 31, + MagiaTileX0Y1 = 32, MagiaTileX1Y1 = 33, - MagiaTileX1Y2 = 34, - MagiaTileX1Y3 = 35, - MagiaTileX1Y4 = 36, - MagiaTileX1Y5 = 37, - MagiaTileX1Y6 = 38, - MagiaTileX1Y7 = 39, - MagiaTileX1Y8 = 40, - MagiaTileX1Y9 = 41, - MagiaTileX1Y10 = 42, - MagiaTileX1Y11 = 43, - MagiaTileX1Y12 = 44, - MagiaTileX1Y13 = 45, - MagiaTileX1Y14 = 46, - MagiaTileX1Y15 = 47, - MagiaTileX1Y16 = 48, - MagiaTileX1Y17 = 49, - MagiaTileX1Y18 = 50, - MagiaTileX1Y19 = 51, - MagiaTileX1Y20 = 52, - MagiaTileX1Y21 = 53, - MagiaTileX1Y22 = 54, - MagiaTileX1Y23 = 55, - MagiaTileX1Y24 = 56, - MagiaTileX1Y25 = 57, - MagiaTileX1Y26 = 58, - MagiaTileX1Y27 = 59, - MagiaTileX1Y28 = 60, - MagiaTileX1Y29 = 61, - MagiaTileX1Y30 = 62, - MagiaTileX1Y31 = 63, - MagiaTileX2Y0 = 64, - MagiaTileX2Y1 = 65, + MagiaTileX2Y1 = 34, + MagiaTileX3Y1 = 35, + MagiaTileX4Y1 = 36, + MagiaTileX5Y1 = 37, + MagiaTileX6Y1 = 38, + MagiaTileX7Y1 = 39, + MagiaTileX8Y1 = 40, + MagiaTileX9Y1 = 41, + MagiaTileX10Y1 = 42, + MagiaTileX11Y1 = 43, + MagiaTileX12Y1 = 44, + MagiaTileX13Y1 = 45, + MagiaTileX14Y1 = 46, + MagiaTileX15Y1 = 47, + MagiaTileX16Y1 = 48, + MagiaTileX17Y1 = 49, + MagiaTileX18Y1 = 50, + MagiaTileX19Y1 = 51, + MagiaTileX20Y1 = 52, + MagiaTileX21Y1 = 53, + MagiaTileX22Y1 = 54, + MagiaTileX23Y1 = 55, + MagiaTileX24Y1 = 56, + MagiaTileX25Y1 = 57, + MagiaTileX26Y1 = 58, + MagiaTileX27Y1 = 59, + MagiaTileX28Y1 = 60, + MagiaTileX29Y1 = 61, + MagiaTileX30Y1 = 62, + MagiaTileX31Y1 = 63, + MagiaTileX0Y2 = 64, + MagiaTileX1Y2 = 65, MagiaTileX2Y2 = 66, - MagiaTileX2Y3 = 67, - MagiaTileX2Y4 = 68, - MagiaTileX2Y5 = 69, - MagiaTileX2Y6 = 70, - MagiaTileX2Y7 = 71, - MagiaTileX2Y8 = 72, - MagiaTileX2Y9 = 73, - MagiaTileX2Y10 = 74, - MagiaTileX2Y11 = 75, - MagiaTileX2Y12 = 76, - MagiaTileX2Y13 = 77, - MagiaTileX2Y14 = 78, - MagiaTileX2Y15 = 79, - MagiaTileX2Y16 = 80, - MagiaTileX2Y17 = 81, - MagiaTileX2Y18 = 82, - MagiaTileX2Y19 = 83, - MagiaTileX2Y20 = 84, - MagiaTileX2Y21 = 85, - MagiaTileX2Y22 = 86, - MagiaTileX2Y23 = 87, - MagiaTileX2Y24 = 88, - MagiaTileX2Y25 = 89, - MagiaTileX2Y26 = 90, - MagiaTileX2Y27 = 91, - MagiaTileX2Y28 = 92, - MagiaTileX2Y29 = 93, - MagiaTileX2Y30 = 94, - MagiaTileX2Y31 = 95, - MagiaTileX3Y0 = 96, - MagiaTileX3Y1 = 97, - MagiaTileX3Y2 = 98, + MagiaTileX3Y2 = 67, + MagiaTileX4Y2 = 68, + MagiaTileX5Y2 = 69, + MagiaTileX6Y2 = 70, + MagiaTileX7Y2 = 71, + MagiaTileX8Y2 = 72, + MagiaTileX9Y2 = 73, + MagiaTileX10Y2 = 74, + MagiaTileX11Y2 = 75, + MagiaTileX12Y2 = 76, + MagiaTileX13Y2 = 77, + MagiaTileX14Y2 = 78, + MagiaTileX15Y2 = 79, + MagiaTileX16Y2 = 80, + MagiaTileX17Y2 = 81, + MagiaTileX18Y2 = 82, + MagiaTileX19Y2 = 83, + MagiaTileX20Y2 = 84, + MagiaTileX21Y2 = 85, + MagiaTileX22Y2 = 86, + MagiaTileX23Y2 = 87, + MagiaTileX24Y2 = 88, + MagiaTileX25Y2 = 89, + MagiaTileX26Y2 = 90, + MagiaTileX27Y2 = 91, + MagiaTileX28Y2 = 92, + MagiaTileX29Y2 = 93, + MagiaTileX30Y2 = 94, + MagiaTileX31Y2 = 95, + MagiaTileX0Y3 = 96, + MagiaTileX1Y3 = 97, + MagiaTileX2Y3 = 98, MagiaTileX3Y3 = 99, - MagiaTileX3Y4 = 100, - MagiaTileX3Y5 = 101, - MagiaTileX3Y6 = 102, - MagiaTileX3Y7 = 103, - MagiaTileX3Y8 = 104, - MagiaTileX3Y9 = 105, - MagiaTileX3Y10 = 106, - MagiaTileX3Y11 = 107, - MagiaTileX3Y12 = 108, - MagiaTileX3Y13 = 109, - MagiaTileX3Y14 = 110, - MagiaTileX3Y15 = 111, - MagiaTileX3Y16 = 112, - MagiaTileX3Y17 = 113, - MagiaTileX3Y18 = 114, - MagiaTileX3Y19 = 115, - MagiaTileX3Y20 = 116, - MagiaTileX3Y21 = 117, - MagiaTileX3Y22 = 118, - MagiaTileX3Y23 = 119, - MagiaTileX3Y24 = 120, - MagiaTileX3Y25 = 121, - MagiaTileX3Y26 = 122, - MagiaTileX3Y27 = 123, - MagiaTileX3Y28 = 124, - MagiaTileX3Y29 = 125, - MagiaTileX3Y30 = 126, - MagiaTileX3Y31 = 127, - MagiaTileX4Y0 = 128, - MagiaTileX4Y1 = 129, - MagiaTileX4Y2 = 130, - MagiaTileX4Y3 = 131, + MagiaTileX4Y3 = 100, + MagiaTileX5Y3 = 101, + MagiaTileX6Y3 = 102, + MagiaTileX7Y3 = 103, + MagiaTileX8Y3 = 104, + MagiaTileX9Y3 = 105, + MagiaTileX10Y3 = 106, + MagiaTileX11Y3 = 107, + MagiaTileX12Y3 = 108, + MagiaTileX13Y3 = 109, + MagiaTileX14Y3 = 110, + MagiaTileX15Y3 = 111, + MagiaTileX16Y3 = 112, + MagiaTileX17Y3 = 113, + MagiaTileX18Y3 = 114, + MagiaTileX19Y3 = 115, + MagiaTileX20Y3 = 116, + MagiaTileX21Y3 = 117, + MagiaTileX22Y3 = 118, + MagiaTileX23Y3 = 119, + MagiaTileX24Y3 = 120, + MagiaTileX25Y3 = 121, + MagiaTileX26Y3 = 122, + MagiaTileX27Y3 = 123, + MagiaTileX28Y3 = 124, + MagiaTileX29Y3 = 125, + MagiaTileX30Y3 = 126, + MagiaTileX31Y3 = 127, + MagiaTileX0Y4 = 128, + MagiaTileX1Y4 = 129, + MagiaTileX2Y4 = 130, + MagiaTileX3Y4 = 131, MagiaTileX4Y4 = 132, - MagiaTileX4Y5 = 133, - MagiaTileX4Y6 = 134, - MagiaTileX4Y7 = 135, - MagiaTileX4Y8 = 136, - MagiaTileX4Y9 = 137, - MagiaTileX4Y10 = 138, - MagiaTileX4Y11 = 139, - MagiaTileX4Y12 = 140, - MagiaTileX4Y13 = 141, - MagiaTileX4Y14 = 142, - MagiaTileX4Y15 = 143, - MagiaTileX4Y16 = 144, - MagiaTileX4Y17 = 145, - MagiaTileX4Y18 = 146, - MagiaTileX4Y19 = 147, - MagiaTileX4Y20 = 148, - MagiaTileX4Y21 = 149, - MagiaTileX4Y22 = 150, - MagiaTileX4Y23 = 151, - MagiaTileX4Y24 = 152, - MagiaTileX4Y25 = 153, - MagiaTileX4Y26 = 154, - MagiaTileX4Y27 = 155, - MagiaTileX4Y28 = 156, - MagiaTileX4Y29 = 157, - MagiaTileX4Y30 = 158, - MagiaTileX4Y31 = 159, - MagiaTileX5Y0 = 160, - MagiaTileX5Y1 = 161, - MagiaTileX5Y2 = 162, - MagiaTileX5Y3 = 163, - MagiaTileX5Y4 = 164, + MagiaTileX5Y4 = 133, + MagiaTileX6Y4 = 134, + MagiaTileX7Y4 = 135, + MagiaTileX8Y4 = 136, + MagiaTileX9Y4 = 137, + MagiaTileX10Y4 = 138, + MagiaTileX11Y4 = 139, + MagiaTileX12Y4 = 140, + MagiaTileX13Y4 = 141, + MagiaTileX14Y4 = 142, + MagiaTileX15Y4 = 143, + MagiaTileX16Y4 = 144, + MagiaTileX17Y4 = 145, + MagiaTileX18Y4 = 146, + MagiaTileX19Y4 = 147, + MagiaTileX20Y4 = 148, + MagiaTileX21Y4 = 149, + MagiaTileX22Y4 = 150, + MagiaTileX23Y4 = 151, + MagiaTileX24Y4 = 152, + MagiaTileX25Y4 = 153, + MagiaTileX26Y4 = 154, + MagiaTileX27Y4 = 155, + MagiaTileX28Y4 = 156, + MagiaTileX29Y4 = 157, + MagiaTileX30Y4 = 158, + MagiaTileX31Y4 = 159, + MagiaTileX0Y5 = 160, + MagiaTileX1Y5 = 161, + MagiaTileX2Y5 = 162, + MagiaTileX3Y5 = 163, + MagiaTileX4Y5 = 164, MagiaTileX5Y5 = 165, - MagiaTileX5Y6 = 166, - MagiaTileX5Y7 = 167, - MagiaTileX5Y8 = 168, - MagiaTileX5Y9 = 169, - MagiaTileX5Y10 = 170, - MagiaTileX5Y11 = 171, - MagiaTileX5Y12 = 172, - MagiaTileX5Y13 = 173, - MagiaTileX5Y14 = 174, - MagiaTileX5Y15 = 175, - MagiaTileX5Y16 = 176, - MagiaTileX5Y17 = 177, - MagiaTileX5Y18 = 178, - MagiaTileX5Y19 = 179, - MagiaTileX5Y20 = 180, - MagiaTileX5Y21 = 181, - MagiaTileX5Y22 = 182, - MagiaTileX5Y23 = 183, - MagiaTileX5Y24 = 184, - MagiaTileX5Y25 = 185, - MagiaTileX5Y26 = 186, - MagiaTileX5Y27 = 187, - MagiaTileX5Y28 = 188, - MagiaTileX5Y29 = 189, - MagiaTileX5Y30 = 190, - MagiaTileX5Y31 = 191, - MagiaTileX6Y0 = 192, - MagiaTileX6Y1 = 193, - MagiaTileX6Y2 = 194, - MagiaTileX6Y3 = 195, - MagiaTileX6Y4 = 196, - MagiaTileX6Y5 = 197, + MagiaTileX6Y5 = 166, + MagiaTileX7Y5 = 167, + MagiaTileX8Y5 = 168, + MagiaTileX9Y5 = 169, + MagiaTileX10Y5 = 170, + MagiaTileX11Y5 = 171, + MagiaTileX12Y5 = 172, + MagiaTileX13Y5 = 173, + MagiaTileX14Y5 = 174, + MagiaTileX15Y5 = 175, + MagiaTileX16Y5 = 176, + MagiaTileX17Y5 = 177, + MagiaTileX18Y5 = 178, + MagiaTileX19Y5 = 179, + MagiaTileX20Y5 = 180, + MagiaTileX21Y5 = 181, + MagiaTileX22Y5 = 182, + MagiaTileX23Y5 = 183, + MagiaTileX24Y5 = 184, + MagiaTileX25Y5 = 185, + MagiaTileX26Y5 = 186, + MagiaTileX27Y5 = 187, + MagiaTileX28Y5 = 188, + MagiaTileX29Y5 = 189, + MagiaTileX30Y5 = 190, + MagiaTileX31Y5 = 191, + MagiaTileX0Y6 = 192, + MagiaTileX1Y6 = 193, + MagiaTileX2Y6 = 194, + MagiaTileX3Y6 = 195, + MagiaTileX4Y6 = 196, + MagiaTileX5Y6 = 197, MagiaTileX6Y6 = 198, - MagiaTileX6Y7 = 199, - MagiaTileX6Y8 = 200, - MagiaTileX6Y9 = 201, - MagiaTileX6Y10 = 202, - MagiaTileX6Y11 = 203, - MagiaTileX6Y12 = 204, - MagiaTileX6Y13 = 205, - MagiaTileX6Y14 = 206, - MagiaTileX6Y15 = 207, - MagiaTileX6Y16 = 208, - MagiaTileX6Y17 = 209, - MagiaTileX6Y18 = 210, - MagiaTileX6Y19 = 211, - MagiaTileX6Y20 = 212, - MagiaTileX6Y21 = 213, - MagiaTileX6Y22 = 214, - MagiaTileX6Y23 = 215, - MagiaTileX6Y24 = 216, - MagiaTileX6Y25 = 217, - MagiaTileX6Y26 = 218, - MagiaTileX6Y27 = 219, - MagiaTileX6Y28 = 220, - MagiaTileX6Y29 = 221, - MagiaTileX6Y30 = 222, - MagiaTileX6Y31 = 223, - MagiaTileX7Y0 = 224, - MagiaTileX7Y1 = 225, - MagiaTileX7Y2 = 226, - MagiaTileX7Y3 = 227, - MagiaTileX7Y4 = 228, - MagiaTileX7Y5 = 229, - MagiaTileX7Y6 = 230, + MagiaTileX7Y6 = 199, + MagiaTileX8Y6 = 200, + MagiaTileX9Y6 = 201, + MagiaTileX10Y6 = 202, + MagiaTileX11Y6 = 203, + MagiaTileX12Y6 = 204, + MagiaTileX13Y6 = 205, + MagiaTileX14Y6 = 206, + MagiaTileX15Y6 = 207, + MagiaTileX16Y6 = 208, + MagiaTileX17Y6 = 209, + MagiaTileX18Y6 = 210, + MagiaTileX19Y6 = 211, + MagiaTileX20Y6 = 212, + MagiaTileX21Y6 = 213, + MagiaTileX22Y6 = 214, + MagiaTileX23Y6 = 215, + MagiaTileX24Y6 = 216, + MagiaTileX25Y6 = 217, + MagiaTileX26Y6 = 218, + MagiaTileX27Y6 = 219, + MagiaTileX28Y6 = 220, + MagiaTileX29Y6 = 221, + MagiaTileX30Y6 = 222, + MagiaTileX31Y6 = 223, + MagiaTileX0Y7 = 224, + MagiaTileX1Y7 = 225, + MagiaTileX2Y7 = 226, + MagiaTileX3Y7 = 227, + MagiaTileX4Y7 = 228, + MagiaTileX5Y7 = 229, + MagiaTileX6Y7 = 230, MagiaTileX7Y7 = 231, - MagiaTileX7Y8 = 232, - MagiaTileX7Y9 = 233, - MagiaTileX7Y10 = 234, - MagiaTileX7Y11 = 235, - MagiaTileX7Y12 = 236, - MagiaTileX7Y13 = 237, - MagiaTileX7Y14 = 238, - MagiaTileX7Y15 = 239, - MagiaTileX7Y16 = 240, - MagiaTileX7Y17 = 241, - MagiaTileX7Y18 = 242, - MagiaTileX7Y19 = 243, - MagiaTileX7Y20 = 244, - MagiaTileX7Y21 = 245, - MagiaTileX7Y22 = 246, - MagiaTileX7Y23 = 247, - MagiaTileX7Y24 = 248, - MagiaTileX7Y25 = 249, - MagiaTileX7Y26 = 250, - MagiaTileX7Y27 = 251, - MagiaTileX7Y28 = 252, - MagiaTileX7Y29 = 253, - MagiaTileX7Y30 = 254, - MagiaTileX7Y31 = 255, - MagiaTileX8Y0 = 256, - MagiaTileX8Y1 = 257, - MagiaTileX8Y2 = 258, - MagiaTileX8Y3 = 259, - MagiaTileX8Y4 = 260, - MagiaTileX8Y5 = 261, - MagiaTileX8Y6 = 262, - MagiaTileX8Y7 = 263, + MagiaTileX8Y7 = 232, + MagiaTileX9Y7 = 233, + MagiaTileX10Y7 = 234, + MagiaTileX11Y7 = 235, + MagiaTileX12Y7 = 236, + MagiaTileX13Y7 = 237, + MagiaTileX14Y7 = 238, + MagiaTileX15Y7 = 239, + MagiaTileX16Y7 = 240, + MagiaTileX17Y7 = 241, + MagiaTileX18Y7 = 242, + MagiaTileX19Y7 = 243, + MagiaTileX20Y7 = 244, + MagiaTileX21Y7 = 245, + MagiaTileX22Y7 = 246, + MagiaTileX23Y7 = 247, + MagiaTileX24Y7 = 248, + MagiaTileX25Y7 = 249, + MagiaTileX26Y7 = 250, + MagiaTileX27Y7 = 251, + MagiaTileX28Y7 = 252, + MagiaTileX29Y7 = 253, + MagiaTileX30Y7 = 254, + MagiaTileX31Y7 = 255, + MagiaTileX0Y8 = 256, + MagiaTileX1Y8 = 257, + MagiaTileX2Y8 = 258, + MagiaTileX3Y8 = 259, + MagiaTileX4Y8 = 260, + MagiaTileX5Y8 = 261, + MagiaTileX6Y8 = 262, + MagiaTileX7Y8 = 263, MagiaTileX8Y8 = 264, - MagiaTileX8Y9 = 265, - MagiaTileX8Y10 = 266, - MagiaTileX8Y11 = 267, - MagiaTileX8Y12 = 268, - MagiaTileX8Y13 = 269, - MagiaTileX8Y14 = 270, - MagiaTileX8Y15 = 271, - MagiaTileX8Y16 = 272, - MagiaTileX8Y17 = 273, - MagiaTileX8Y18 = 274, - MagiaTileX8Y19 = 275, - MagiaTileX8Y20 = 276, - MagiaTileX8Y21 = 277, - MagiaTileX8Y22 = 278, - MagiaTileX8Y23 = 279, - MagiaTileX8Y24 = 280, - MagiaTileX8Y25 = 281, - MagiaTileX8Y26 = 282, - MagiaTileX8Y27 = 283, - MagiaTileX8Y28 = 284, - MagiaTileX8Y29 = 285, - MagiaTileX8Y30 = 286, - MagiaTileX8Y31 = 287, - MagiaTileX9Y0 = 288, - MagiaTileX9Y1 = 289, - MagiaTileX9Y2 = 290, - MagiaTileX9Y3 = 291, - MagiaTileX9Y4 = 292, - MagiaTileX9Y5 = 293, - MagiaTileX9Y6 = 294, - MagiaTileX9Y7 = 295, - MagiaTileX9Y8 = 296, + MagiaTileX9Y8 = 265, + MagiaTileX10Y8 = 266, + MagiaTileX11Y8 = 267, + MagiaTileX12Y8 = 268, + MagiaTileX13Y8 = 269, + MagiaTileX14Y8 = 270, + MagiaTileX15Y8 = 271, + MagiaTileX16Y8 = 272, + MagiaTileX17Y8 = 273, + MagiaTileX18Y8 = 274, + MagiaTileX19Y8 = 275, + MagiaTileX20Y8 = 276, + MagiaTileX21Y8 = 277, + MagiaTileX22Y8 = 278, + MagiaTileX23Y8 = 279, + MagiaTileX24Y8 = 280, + MagiaTileX25Y8 = 281, + MagiaTileX26Y8 = 282, + MagiaTileX27Y8 = 283, + MagiaTileX28Y8 = 284, + MagiaTileX29Y8 = 285, + MagiaTileX30Y8 = 286, + MagiaTileX31Y8 = 287, + MagiaTileX0Y9 = 288, + MagiaTileX1Y9 = 289, + MagiaTileX2Y9 = 290, + MagiaTileX3Y9 = 291, + MagiaTileX4Y9 = 292, + MagiaTileX5Y9 = 293, + MagiaTileX6Y9 = 294, + MagiaTileX7Y9 = 295, + MagiaTileX8Y9 = 296, MagiaTileX9Y9 = 297, - MagiaTileX9Y10 = 298, - MagiaTileX9Y11 = 299, - MagiaTileX9Y12 = 300, - MagiaTileX9Y13 = 301, - MagiaTileX9Y14 = 302, - MagiaTileX9Y15 = 303, - MagiaTileX9Y16 = 304, - MagiaTileX9Y17 = 305, - MagiaTileX9Y18 = 306, - MagiaTileX9Y19 = 307, - MagiaTileX9Y20 = 308, - MagiaTileX9Y21 = 309, - MagiaTileX9Y22 = 310, - MagiaTileX9Y23 = 311, - MagiaTileX9Y24 = 312, - MagiaTileX9Y25 = 313, - MagiaTileX9Y26 = 314, - MagiaTileX9Y27 = 315, - MagiaTileX9Y28 = 316, - MagiaTileX9Y29 = 317, - MagiaTileX9Y30 = 318, - MagiaTileX9Y31 = 319, - MagiaTileX10Y0 = 320, - MagiaTileX10Y1 = 321, - MagiaTileX10Y2 = 322, - MagiaTileX10Y3 = 323, - MagiaTileX10Y4 = 324, - MagiaTileX10Y5 = 325, - MagiaTileX10Y6 = 326, - MagiaTileX10Y7 = 327, - MagiaTileX10Y8 = 328, - MagiaTileX10Y9 = 329, + MagiaTileX10Y9 = 298, + MagiaTileX11Y9 = 299, + MagiaTileX12Y9 = 300, + MagiaTileX13Y9 = 301, + MagiaTileX14Y9 = 302, + MagiaTileX15Y9 = 303, + MagiaTileX16Y9 = 304, + MagiaTileX17Y9 = 305, + MagiaTileX18Y9 = 306, + MagiaTileX19Y9 = 307, + MagiaTileX20Y9 = 308, + MagiaTileX21Y9 = 309, + MagiaTileX22Y9 = 310, + MagiaTileX23Y9 = 311, + MagiaTileX24Y9 = 312, + MagiaTileX25Y9 = 313, + MagiaTileX26Y9 = 314, + MagiaTileX27Y9 = 315, + MagiaTileX28Y9 = 316, + MagiaTileX29Y9 = 317, + MagiaTileX30Y9 = 318, + MagiaTileX31Y9 = 319, + MagiaTileX0Y10 = 320, + MagiaTileX1Y10 = 321, + MagiaTileX2Y10 = 322, + MagiaTileX3Y10 = 323, + MagiaTileX4Y10 = 324, + MagiaTileX5Y10 = 325, + MagiaTileX6Y10 = 326, + MagiaTileX7Y10 = 327, + MagiaTileX8Y10 = 328, + MagiaTileX9Y10 = 329, MagiaTileX10Y10 = 330, - MagiaTileX10Y11 = 331, - MagiaTileX10Y12 = 332, - MagiaTileX10Y13 = 333, - MagiaTileX10Y14 = 334, - MagiaTileX10Y15 = 335, - MagiaTileX10Y16 = 336, - MagiaTileX10Y17 = 337, - MagiaTileX10Y18 = 338, - MagiaTileX10Y19 = 339, - MagiaTileX10Y20 = 340, - MagiaTileX10Y21 = 341, - MagiaTileX10Y22 = 342, - MagiaTileX10Y23 = 343, - MagiaTileX10Y24 = 344, - MagiaTileX10Y25 = 345, - MagiaTileX10Y26 = 346, - MagiaTileX10Y27 = 347, - MagiaTileX10Y28 = 348, - MagiaTileX10Y29 = 349, - MagiaTileX10Y30 = 350, - MagiaTileX10Y31 = 351, - MagiaTileX11Y0 = 352, - MagiaTileX11Y1 = 353, - MagiaTileX11Y2 = 354, - MagiaTileX11Y3 = 355, - MagiaTileX11Y4 = 356, - MagiaTileX11Y5 = 357, - MagiaTileX11Y6 = 358, - MagiaTileX11Y7 = 359, - MagiaTileX11Y8 = 360, - MagiaTileX11Y9 = 361, - MagiaTileX11Y10 = 362, + MagiaTileX11Y10 = 331, + MagiaTileX12Y10 = 332, + MagiaTileX13Y10 = 333, + MagiaTileX14Y10 = 334, + MagiaTileX15Y10 = 335, + MagiaTileX16Y10 = 336, + MagiaTileX17Y10 = 337, + MagiaTileX18Y10 = 338, + MagiaTileX19Y10 = 339, + MagiaTileX20Y10 = 340, + MagiaTileX21Y10 = 341, + MagiaTileX22Y10 = 342, + MagiaTileX23Y10 = 343, + MagiaTileX24Y10 = 344, + MagiaTileX25Y10 = 345, + MagiaTileX26Y10 = 346, + MagiaTileX27Y10 = 347, + MagiaTileX28Y10 = 348, + MagiaTileX29Y10 = 349, + MagiaTileX30Y10 = 350, + MagiaTileX31Y10 = 351, + MagiaTileX0Y11 = 352, + MagiaTileX1Y11 = 353, + MagiaTileX2Y11 = 354, + MagiaTileX3Y11 = 355, + MagiaTileX4Y11 = 356, + MagiaTileX5Y11 = 357, + MagiaTileX6Y11 = 358, + MagiaTileX7Y11 = 359, + MagiaTileX8Y11 = 360, + MagiaTileX9Y11 = 361, + MagiaTileX10Y11 = 362, MagiaTileX11Y11 = 363, - MagiaTileX11Y12 = 364, - MagiaTileX11Y13 = 365, - MagiaTileX11Y14 = 366, - MagiaTileX11Y15 = 367, - MagiaTileX11Y16 = 368, - MagiaTileX11Y17 = 369, - MagiaTileX11Y18 = 370, - MagiaTileX11Y19 = 371, - MagiaTileX11Y20 = 372, - MagiaTileX11Y21 = 373, - MagiaTileX11Y22 = 374, - MagiaTileX11Y23 = 375, - MagiaTileX11Y24 = 376, - MagiaTileX11Y25 = 377, - MagiaTileX11Y26 = 378, - MagiaTileX11Y27 = 379, - MagiaTileX11Y28 = 380, - MagiaTileX11Y29 = 381, - MagiaTileX11Y30 = 382, - MagiaTileX11Y31 = 383, - MagiaTileX12Y0 = 384, - MagiaTileX12Y1 = 385, - MagiaTileX12Y2 = 386, - MagiaTileX12Y3 = 387, - MagiaTileX12Y4 = 388, - MagiaTileX12Y5 = 389, - MagiaTileX12Y6 = 390, - MagiaTileX12Y7 = 391, - MagiaTileX12Y8 = 392, - MagiaTileX12Y9 = 393, - MagiaTileX12Y10 = 394, - MagiaTileX12Y11 = 395, + MagiaTileX12Y11 = 364, + MagiaTileX13Y11 = 365, + MagiaTileX14Y11 = 366, + MagiaTileX15Y11 = 367, + MagiaTileX16Y11 = 368, + MagiaTileX17Y11 = 369, + MagiaTileX18Y11 = 370, + MagiaTileX19Y11 = 371, + MagiaTileX20Y11 = 372, + MagiaTileX21Y11 = 373, + MagiaTileX22Y11 = 374, + MagiaTileX23Y11 = 375, + MagiaTileX24Y11 = 376, + MagiaTileX25Y11 = 377, + MagiaTileX26Y11 = 378, + MagiaTileX27Y11 = 379, + MagiaTileX28Y11 = 380, + MagiaTileX29Y11 = 381, + MagiaTileX30Y11 = 382, + MagiaTileX31Y11 = 383, + MagiaTileX0Y12 = 384, + MagiaTileX1Y12 = 385, + MagiaTileX2Y12 = 386, + MagiaTileX3Y12 = 387, + MagiaTileX4Y12 = 388, + MagiaTileX5Y12 = 389, + MagiaTileX6Y12 = 390, + MagiaTileX7Y12 = 391, + MagiaTileX8Y12 = 392, + MagiaTileX9Y12 = 393, + MagiaTileX10Y12 = 394, + MagiaTileX11Y12 = 395, MagiaTileX12Y12 = 396, - MagiaTileX12Y13 = 397, - MagiaTileX12Y14 = 398, - MagiaTileX12Y15 = 399, - MagiaTileX12Y16 = 400, - MagiaTileX12Y17 = 401, - MagiaTileX12Y18 = 402, - MagiaTileX12Y19 = 403, - MagiaTileX12Y20 = 404, - MagiaTileX12Y21 = 405, - MagiaTileX12Y22 = 406, - MagiaTileX12Y23 = 407, - MagiaTileX12Y24 = 408, - MagiaTileX12Y25 = 409, - MagiaTileX12Y26 = 410, - MagiaTileX12Y27 = 411, - MagiaTileX12Y28 = 412, - MagiaTileX12Y29 = 413, - MagiaTileX12Y30 = 414, - MagiaTileX12Y31 = 415, - MagiaTileX13Y0 = 416, - MagiaTileX13Y1 = 417, - MagiaTileX13Y2 = 418, - MagiaTileX13Y3 = 419, - MagiaTileX13Y4 = 420, - MagiaTileX13Y5 = 421, - MagiaTileX13Y6 = 422, - MagiaTileX13Y7 = 423, - MagiaTileX13Y8 = 424, - MagiaTileX13Y9 = 425, - MagiaTileX13Y10 = 426, - MagiaTileX13Y11 = 427, - MagiaTileX13Y12 = 428, + MagiaTileX13Y12 = 397, + MagiaTileX14Y12 = 398, + MagiaTileX15Y12 = 399, + MagiaTileX16Y12 = 400, + MagiaTileX17Y12 = 401, + MagiaTileX18Y12 = 402, + MagiaTileX19Y12 = 403, + MagiaTileX20Y12 = 404, + MagiaTileX21Y12 = 405, + MagiaTileX22Y12 = 406, + MagiaTileX23Y12 = 407, + MagiaTileX24Y12 = 408, + MagiaTileX25Y12 = 409, + MagiaTileX26Y12 = 410, + MagiaTileX27Y12 = 411, + MagiaTileX28Y12 = 412, + MagiaTileX29Y12 = 413, + MagiaTileX30Y12 = 414, + MagiaTileX31Y12 = 415, + MagiaTileX0Y13 = 416, + MagiaTileX1Y13 = 417, + MagiaTileX2Y13 = 418, + MagiaTileX3Y13 = 419, + MagiaTileX4Y13 = 420, + MagiaTileX5Y13 = 421, + MagiaTileX6Y13 = 422, + MagiaTileX7Y13 = 423, + MagiaTileX8Y13 = 424, + MagiaTileX9Y13 = 425, + MagiaTileX10Y13 = 426, + MagiaTileX11Y13 = 427, + MagiaTileX12Y13 = 428, MagiaTileX13Y13 = 429, - MagiaTileX13Y14 = 430, - MagiaTileX13Y15 = 431, - MagiaTileX13Y16 = 432, - MagiaTileX13Y17 = 433, - MagiaTileX13Y18 = 434, - MagiaTileX13Y19 = 435, - MagiaTileX13Y20 = 436, - MagiaTileX13Y21 = 437, - MagiaTileX13Y22 = 438, - MagiaTileX13Y23 = 439, - MagiaTileX13Y24 = 440, - MagiaTileX13Y25 = 441, - MagiaTileX13Y26 = 442, - MagiaTileX13Y27 = 443, - MagiaTileX13Y28 = 444, - MagiaTileX13Y29 = 445, - MagiaTileX13Y30 = 446, - MagiaTileX13Y31 = 447, - MagiaTileX14Y0 = 448, - MagiaTileX14Y1 = 449, - MagiaTileX14Y2 = 450, - MagiaTileX14Y3 = 451, - MagiaTileX14Y4 = 452, - MagiaTileX14Y5 = 453, - MagiaTileX14Y6 = 454, - MagiaTileX14Y7 = 455, - MagiaTileX14Y8 = 456, - MagiaTileX14Y9 = 457, - MagiaTileX14Y10 = 458, - MagiaTileX14Y11 = 459, - MagiaTileX14Y12 = 460, - MagiaTileX14Y13 = 461, + MagiaTileX14Y13 = 430, + MagiaTileX15Y13 = 431, + MagiaTileX16Y13 = 432, + MagiaTileX17Y13 = 433, + MagiaTileX18Y13 = 434, + MagiaTileX19Y13 = 435, + MagiaTileX20Y13 = 436, + MagiaTileX21Y13 = 437, + MagiaTileX22Y13 = 438, + MagiaTileX23Y13 = 439, + MagiaTileX24Y13 = 440, + MagiaTileX25Y13 = 441, + MagiaTileX26Y13 = 442, + MagiaTileX27Y13 = 443, + MagiaTileX28Y13 = 444, + MagiaTileX29Y13 = 445, + MagiaTileX30Y13 = 446, + MagiaTileX31Y13 = 447, + MagiaTileX0Y14 = 448, + MagiaTileX1Y14 = 449, + MagiaTileX2Y14 = 450, + MagiaTileX3Y14 = 451, + MagiaTileX4Y14 = 452, + MagiaTileX5Y14 = 453, + MagiaTileX6Y14 = 454, + MagiaTileX7Y14 = 455, + MagiaTileX8Y14 = 456, + MagiaTileX9Y14 = 457, + MagiaTileX10Y14 = 458, + MagiaTileX11Y14 = 459, + MagiaTileX12Y14 = 460, + MagiaTileX13Y14 = 461, MagiaTileX14Y14 = 462, - MagiaTileX14Y15 = 463, - MagiaTileX14Y16 = 464, - MagiaTileX14Y17 = 465, - MagiaTileX14Y18 = 466, - MagiaTileX14Y19 = 467, - MagiaTileX14Y20 = 468, - MagiaTileX14Y21 = 469, - MagiaTileX14Y22 = 470, - MagiaTileX14Y23 = 471, - MagiaTileX14Y24 = 472, - MagiaTileX14Y25 = 473, - MagiaTileX14Y26 = 474, - MagiaTileX14Y27 = 475, - MagiaTileX14Y28 = 476, - MagiaTileX14Y29 = 477, - MagiaTileX14Y30 = 478, - MagiaTileX14Y31 = 479, - MagiaTileX15Y0 = 480, - MagiaTileX15Y1 = 481, - MagiaTileX15Y2 = 482, - MagiaTileX15Y3 = 483, - MagiaTileX15Y4 = 484, - MagiaTileX15Y5 = 485, - MagiaTileX15Y6 = 486, - MagiaTileX15Y7 = 487, - MagiaTileX15Y8 = 488, - MagiaTileX15Y9 = 489, - MagiaTileX15Y10 = 490, - MagiaTileX15Y11 = 491, - MagiaTileX15Y12 = 492, - MagiaTileX15Y13 = 493, - MagiaTileX15Y14 = 494, + MagiaTileX15Y14 = 463, + MagiaTileX16Y14 = 464, + MagiaTileX17Y14 = 465, + MagiaTileX18Y14 = 466, + MagiaTileX19Y14 = 467, + MagiaTileX20Y14 = 468, + MagiaTileX21Y14 = 469, + MagiaTileX22Y14 = 470, + MagiaTileX23Y14 = 471, + MagiaTileX24Y14 = 472, + MagiaTileX25Y14 = 473, + MagiaTileX26Y14 = 474, + MagiaTileX27Y14 = 475, + MagiaTileX28Y14 = 476, + MagiaTileX29Y14 = 477, + MagiaTileX30Y14 = 478, + MagiaTileX31Y14 = 479, + MagiaTileX0Y15 = 480, + MagiaTileX1Y15 = 481, + MagiaTileX2Y15 = 482, + MagiaTileX3Y15 = 483, + MagiaTileX4Y15 = 484, + MagiaTileX5Y15 = 485, + MagiaTileX6Y15 = 486, + MagiaTileX7Y15 = 487, + MagiaTileX8Y15 = 488, + MagiaTileX9Y15 = 489, + MagiaTileX10Y15 = 490, + MagiaTileX11Y15 = 491, + MagiaTileX12Y15 = 492, + MagiaTileX13Y15 = 493, + MagiaTileX14Y15 = 494, MagiaTileX15Y15 = 495, - MagiaTileX15Y16 = 496, - MagiaTileX15Y17 = 497, - MagiaTileX15Y18 = 498, - MagiaTileX15Y19 = 499, - MagiaTileX15Y20 = 500, - MagiaTileX15Y21 = 501, - MagiaTileX15Y22 = 502, - MagiaTileX15Y23 = 503, - MagiaTileX15Y24 = 504, - MagiaTileX15Y25 = 505, - MagiaTileX15Y26 = 506, - MagiaTileX15Y27 = 507, - MagiaTileX15Y28 = 508, - MagiaTileX15Y29 = 509, - MagiaTileX15Y30 = 510, - MagiaTileX15Y31 = 511, - MagiaTileX16Y0 = 512, - MagiaTileX16Y1 = 513, - MagiaTileX16Y2 = 514, - MagiaTileX16Y3 = 515, - MagiaTileX16Y4 = 516, - MagiaTileX16Y5 = 517, - MagiaTileX16Y6 = 518, - MagiaTileX16Y7 = 519, - MagiaTileX16Y8 = 520, - MagiaTileX16Y9 = 521, - MagiaTileX16Y10 = 522, - MagiaTileX16Y11 = 523, - MagiaTileX16Y12 = 524, - MagiaTileX16Y13 = 525, - MagiaTileX16Y14 = 526, - MagiaTileX16Y15 = 527, + MagiaTileX16Y15 = 496, + MagiaTileX17Y15 = 497, + MagiaTileX18Y15 = 498, + MagiaTileX19Y15 = 499, + MagiaTileX20Y15 = 500, + MagiaTileX21Y15 = 501, + MagiaTileX22Y15 = 502, + MagiaTileX23Y15 = 503, + MagiaTileX24Y15 = 504, + MagiaTileX25Y15 = 505, + MagiaTileX26Y15 = 506, + MagiaTileX27Y15 = 507, + MagiaTileX28Y15 = 508, + MagiaTileX29Y15 = 509, + MagiaTileX30Y15 = 510, + MagiaTileX31Y15 = 511, + MagiaTileX0Y16 = 512, + MagiaTileX1Y16 = 513, + MagiaTileX2Y16 = 514, + MagiaTileX3Y16 = 515, + MagiaTileX4Y16 = 516, + MagiaTileX5Y16 = 517, + MagiaTileX6Y16 = 518, + MagiaTileX7Y16 = 519, + MagiaTileX8Y16 = 520, + MagiaTileX9Y16 = 521, + MagiaTileX10Y16 = 522, + MagiaTileX11Y16 = 523, + MagiaTileX12Y16 = 524, + MagiaTileX13Y16 = 525, + MagiaTileX14Y16 = 526, + MagiaTileX15Y16 = 527, MagiaTileX16Y16 = 528, - MagiaTileX16Y17 = 529, - MagiaTileX16Y18 = 530, - MagiaTileX16Y19 = 531, - MagiaTileX16Y20 = 532, - MagiaTileX16Y21 = 533, - MagiaTileX16Y22 = 534, - MagiaTileX16Y23 = 535, - MagiaTileX16Y24 = 536, - MagiaTileX16Y25 = 537, - MagiaTileX16Y26 = 538, - MagiaTileX16Y27 = 539, - MagiaTileX16Y28 = 540, - MagiaTileX16Y29 = 541, - MagiaTileX16Y30 = 542, - MagiaTileX16Y31 = 543, - MagiaTileX17Y0 = 544, - MagiaTileX17Y1 = 545, - MagiaTileX17Y2 = 546, - MagiaTileX17Y3 = 547, - MagiaTileX17Y4 = 548, - MagiaTileX17Y5 = 549, - MagiaTileX17Y6 = 550, - MagiaTileX17Y7 = 551, - MagiaTileX17Y8 = 552, - MagiaTileX17Y9 = 553, - MagiaTileX17Y10 = 554, - MagiaTileX17Y11 = 555, - MagiaTileX17Y12 = 556, - MagiaTileX17Y13 = 557, - MagiaTileX17Y14 = 558, - MagiaTileX17Y15 = 559, - MagiaTileX17Y16 = 560, + MagiaTileX17Y16 = 529, + MagiaTileX18Y16 = 530, + MagiaTileX19Y16 = 531, + MagiaTileX20Y16 = 532, + MagiaTileX21Y16 = 533, + MagiaTileX22Y16 = 534, + MagiaTileX23Y16 = 535, + MagiaTileX24Y16 = 536, + MagiaTileX25Y16 = 537, + MagiaTileX26Y16 = 538, + MagiaTileX27Y16 = 539, + MagiaTileX28Y16 = 540, + MagiaTileX29Y16 = 541, + MagiaTileX30Y16 = 542, + MagiaTileX31Y16 = 543, + MagiaTileX0Y17 = 544, + MagiaTileX1Y17 = 545, + MagiaTileX2Y17 = 546, + MagiaTileX3Y17 = 547, + MagiaTileX4Y17 = 548, + MagiaTileX5Y17 = 549, + MagiaTileX6Y17 = 550, + MagiaTileX7Y17 = 551, + MagiaTileX8Y17 = 552, + MagiaTileX9Y17 = 553, + MagiaTileX10Y17 = 554, + MagiaTileX11Y17 = 555, + MagiaTileX12Y17 = 556, + MagiaTileX13Y17 = 557, + MagiaTileX14Y17 = 558, + MagiaTileX15Y17 = 559, + MagiaTileX16Y17 = 560, MagiaTileX17Y17 = 561, - MagiaTileX17Y18 = 562, - MagiaTileX17Y19 = 563, - MagiaTileX17Y20 = 564, - MagiaTileX17Y21 = 565, - MagiaTileX17Y22 = 566, - MagiaTileX17Y23 = 567, - MagiaTileX17Y24 = 568, - MagiaTileX17Y25 = 569, - MagiaTileX17Y26 = 570, - MagiaTileX17Y27 = 571, - MagiaTileX17Y28 = 572, - MagiaTileX17Y29 = 573, - MagiaTileX17Y30 = 574, - MagiaTileX17Y31 = 575, - MagiaTileX18Y0 = 576, - MagiaTileX18Y1 = 577, - MagiaTileX18Y2 = 578, - MagiaTileX18Y3 = 579, - MagiaTileX18Y4 = 580, - MagiaTileX18Y5 = 581, - MagiaTileX18Y6 = 582, - MagiaTileX18Y7 = 583, - MagiaTileX18Y8 = 584, - MagiaTileX18Y9 = 585, - MagiaTileX18Y10 = 586, - MagiaTileX18Y11 = 587, - MagiaTileX18Y12 = 588, - MagiaTileX18Y13 = 589, - MagiaTileX18Y14 = 590, - MagiaTileX18Y15 = 591, - MagiaTileX18Y16 = 592, - MagiaTileX18Y17 = 593, + MagiaTileX18Y17 = 562, + MagiaTileX19Y17 = 563, + MagiaTileX20Y17 = 564, + MagiaTileX21Y17 = 565, + MagiaTileX22Y17 = 566, + MagiaTileX23Y17 = 567, + MagiaTileX24Y17 = 568, + MagiaTileX25Y17 = 569, + MagiaTileX26Y17 = 570, + MagiaTileX27Y17 = 571, + MagiaTileX28Y17 = 572, + MagiaTileX29Y17 = 573, + MagiaTileX30Y17 = 574, + MagiaTileX31Y17 = 575, + MagiaTileX0Y18 = 576, + MagiaTileX1Y18 = 577, + MagiaTileX2Y18 = 578, + MagiaTileX3Y18 = 579, + MagiaTileX4Y18 = 580, + MagiaTileX5Y18 = 581, + MagiaTileX6Y18 = 582, + MagiaTileX7Y18 = 583, + MagiaTileX8Y18 = 584, + MagiaTileX9Y18 = 585, + MagiaTileX10Y18 = 586, + MagiaTileX11Y18 = 587, + MagiaTileX12Y18 = 588, + MagiaTileX13Y18 = 589, + MagiaTileX14Y18 = 590, + MagiaTileX15Y18 = 591, + MagiaTileX16Y18 = 592, + MagiaTileX17Y18 = 593, MagiaTileX18Y18 = 594, - MagiaTileX18Y19 = 595, - MagiaTileX18Y20 = 596, - MagiaTileX18Y21 = 597, - MagiaTileX18Y22 = 598, - MagiaTileX18Y23 = 599, - MagiaTileX18Y24 = 600, - MagiaTileX18Y25 = 601, - MagiaTileX18Y26 = 602, - MagiaTileX18Y27 = 603, - MagiaTileX18Y28 = 604, - MagiaTileX18Y29 = 605, - MagiaTileX18Y30 = 606, - MagiaTileX18Y31 = 607, - MagiaTileX19Y0 = 608, - MagiaTileX19Y1 = 609, - MagiaTileX19Y2 = 610, - MagiaTileX19Y3 = 611, - MagiaTileX19Y4 = 612, - MagiaTileX19Y5 = 613, - MagiaTileX19Y6 = 614, - MagiaTileX19Y7 = 615, - MagiaTileX19Y8 = 616, - MagiaTileX19Y9 = 617, - MagiaTileX19Y10 = 618, - MagiaTileX19Y11 = 619, - MagiaTileX19Y12 = 620, - MagiaTileX19Y13 = 621, - MagiaTileX19Y14 = 622, - MagiaTileX19Y15 = 623, - MagiaTileX19Y16 = 624, - MagiaTileX19Y17 = 625, - MagiaTileX19Y18 = 626, + MagiaTileX19Y18 = 595, + MagiaTileX20Y18 = 596, + MagiaTileX21Y18 = 597, + MagiaTileX22Y18 = 598, + MagiaTileX23Y18 = 599, + MagiaTileX24Y18 = 600, + MagiaTileX25Y18 = 601, + MagiaTileX26Y18 = 602, + MagiaTileX27Y18 = 603, + MagiaTileX28Y18 = 604, + MagiaTileX29Y18 = 605, + MagiaTileX30Y18 = 606, + MagiaTileX31Y18 = 607, + MagiaTileX0Y19 = 608, + MagiaTileX1Y19 = 609, + MagiaTileX2Y19 = 610, + MagiaTileX3Y19 = 611, + MagiaTileX4Y19 = 612, + MagiaTileX5Y19 = 613, + MagiaTileX6Y19 = 614, + MagiaTileX7Y19 = 615, + MagiaTileX8Y19 = 616, + MagiaTileX9Y19 = 617, + MagiaTileX10Y19 = 618, + MagiaTileX11Y19 = 619, + MagiaTileX12Y19 = 620, + MagiaTileX13Y19 = 621, + MagiaTileX14Y19 = 622, + MagiaTileX15Y19 = 623, + MagiaTileX16Y19 = 624, + MagiaTileX17Y19 = 625, + MagiaTileX18Y19 = 626, MagiaTileX19Y19 = 627, - MagiaTileX19Y20 = 628, - MagiaTileX19Y21 = 629, - MagiaTileX19Y22 = 630, - MagiaTileX19Y23 = 631, - MagiaTileX19Y24 = 632, - MagiaTileX19Y25 = 633, - MagiaTileX19Y26 = 634, - MagiaTileX19Y27 = 635, - MagiaTileX19Y28 = 636, - MagiaTileX19Y29 = 637, - MagiaTileX19Y30 = 638, - MagiaTileX19Y31 = 639, - MagiaTileX20Y0 = 640, - MagiaTileX20Y1 = 641, - MagiaTileX20Y2 = 642, - MagiaTileX20Y3 = 643, - MagiaTileX20Y4 = 644, - MagiaTileX20Y5 = 645, - MagiaTileX20Y6 = 646, - MagiaTileX20Y7 = 647, - MagiaTileX20Y8 = 648, - MagiaTileX20Y9 = 649, - MagiaTileX20Y10 = 650, - MagiaTileX20Y11 = 651, - MagiaTileX20Y12 = 652, - MagiaTileX20Y13 = 653, - MagiaTileX20Y14 = 654, - MagiaTileX20Y15 = 655, - MagiaTileX20Y16 = 656, - MagiaTileX20Y17 = 657, - MagiaTileX20Y18 = 658, - MagiaTileX20Y19 = 659, + MagiaTileX20Y19 = 628, + MagiaTileX21Y19 = 629, + MagiaTileX22Y19 = 630, + MagiaTileX23Y19 = 631, + MagiaTileX24Y19 = 632, + MagiaTileX25Y19 = 633, + MagiaTileX26Y19 = 634, + MagiaTileX27Y19 = 635, + MagiaTileX28Y19 = 636, + MagiaTileX29Y19 = 637, + MagiaTileX30Y19 = 638, + MagiaTileX31Y19 = 639, + MagiaTileX0Y20 = 640, + MagiaTileX1Y20 = 641, + MagiaTileX2Y20 = 642, + MagiaTileX3Y20 = 643, + MagiaTileX4Y20 = 644, + MagiaTileX5Y20 = 645, + MagiaTileX6Y20 = 646, + MagiaTileX7Y20 = 647, + MagiaTileX8Y20 = 648, + MagiaTileX9Y20 = 649, + MagiaTileX10Y20 = 650, + MagiaTileX11Y20 = 651, + MagiaTileX12Y20 = 652, + MagiaTileX13Y20 = 653, + MagiaTileX14Y20 = 654, + MagiaTileX15Y20 = 655, + MagiaTileX16Y20 = 656, + MagiaTileX17Y20 = 657, + MagiaTileX18Y20 = 658, + MagiaTileX19Y20 = 659, MagiaTileX20Y20 = 660, - MagiaTileX20Y21 = 661, - MagiaTileX20Y22 = 662, - MagiaTileX20Y23 = 663, - MagiaTileX20Y24 = 664, - MagiaTileX20Y25 = 665, - MagiaTileX20Y26 = 666, - MagiaTileX20Y27 = 667, - MagiaTileX20Y28 = 668, - MagiaTileX20Y29 = 669, - MagiaTileX20Y30 = 670, - MagiaTileX20Y31 = 671, - MagiaTileX21Y0 = 672, - MagiaTileX21Y1 = 673, - MagiaTileX21Y2 = 674, - MagiaTileX21Y3 = 675, - MagiaTileX21Y4 = 676, - MagiaTileX21Y5 = 677, - MagiaTileX21Y6 = 678, - MagiaTileX21Y7 = 679, - MagiaTileX21Y8 = 680, - MagiaTileX21Y9 = 681, - MagiaTileX21Y10 = 682, - MagiaTileX21Y11 = 683, - MagiaTileX21Y12 = 684, - MagiaTileX21Y13 = 685, - MagiaTileX21Y14 = 686, - MagiaTileX21Y15 = 687, - MagiaTileX21Y16 = 688, - MagiaTileX21Y17 = 689, - MagiaTileX21Y18 = 690, - MagiaTileX21Y19 = 691, - MagiaTileX21Y20 = 692, + MagiaTileX21Y20 = 661, + MagiaTileX22Y20 = 662, + MagiaTileX23Y20 = 663, + MagiaTileX24Y20 = 664, + MagiaTileX25Y20 = 665, + MagiaTileX26Y20 = 666, + MagiaTileX27Y20 = 667, + MagiaTileX28Y20 = 668, + MagiaTileX29Y20 = 669, + MagiaTileX30Y20 = 670, + MagiaTileX31Y20 = 671, + MagiaTileX0Y21 = 672, + MagiaTileX1Y21 = 673, + MagiaTileX2Y21 = 674, + MagiaTileX3Y21 = 675, + MagiaTileX4Y21 = 676, + MagiaTileX5Y21 = 677, + MagiaTileX6Y21 = 678, + MagiaTileX7Y21 = 679, + MagiaTileX8Y21 = 680, + MagiaTileX9Y21 = 681, + MagiaTileX10Y21 = 682, + MagiaTileX11Y21 = 683, + MagiaTileX12Y21 = 684, + MagiaTileX13Y21 = 685, + MagiaTileX14Y21 = 686, + MagiaTileX15Y21 = 687, + MagiaTileX16Y21 = 688, + MagiaTileX17Y21 = 689, + MagiaTileX18Y21 = 690, + MagiaTileX19Y21 = 691, + MagiaTileX20Y21 = 692, MagiaTileX21Y21 = 693, - MagiaTileX21Y22 = 694, - MagiaTileX21Y23 = 695, - MagiaTileX21Y24 = 696, - MagiaTileX21Y25 = 697, - MagiaTileX21Y26 = 698, - MagiaTileX21Y27 = 699, - MagiaTileX21Y28 = 700, - MagiaTileX21Y29 = 701, - MagiaTileX21Y30 = 702, - MagiaTileX21Y31 = 703, - MagiaTileX22Y0 = 704, - MagiaTileX22Y1 = 705, - MagiaTileX22Y2 = 706, - MagiaTileX22Y3 = 707, - MagiaTileX22Y4 = 708, - MagiaTileX22Y5 = 709, - MagiaTileX22Y6 = 710, - MagiaTileX22Y7 = 711, - MagiaTileX22Y8 = 712, - MagiaTileX22Y9 = 713, - MagiaTileX22Y10 = 714, - MagiaTileX22Y11 = 715, - MagiaTileX22Y12 = 716, - MagiaTileX22Y13 = 717, - MagiaTileX22Y14 = 718, - MagiaTileX22Y15 = 719, - MagiaTileX22Y16 = 720, - MagiaTileX22Y17 = 721, - MagiaTileX22Y18 = 722, - MagiaTileX22Y19 = 723, - MagiaTileX22Y20 = 724, - MagiaTileX22Y21 = 725, + MagiaTileX22Y21 = 694, + MagiaTileX23Y21 = 695, + MagiaTileX24Y21 = 696, + MagiaTileX25Y21 = 697, + MagiaTileX26Y21 = 698, + MagiaTileX27Y21 = 699, + MagiaTileX28Y21 = 700, + MagiaTileX29Y21 = 701, + MagiaTileX30Y21 = 702, + MagiaTileX31Y21 = 703, + MagiaTileX0Y22 = 704, + MagiaTileX1Y22 = 705, + MagiaTileX2Y22 = 706, + MagiaTileX3Y22 = 707, + MagiaTileX4Y22 = 708, + MagiaTileX5Y22 = 709, + MagiaTileX6Y22 = 710, + MagiaTileX7Y22 = 711, + MagiaTileX8Y22 = 712, + MagiaTileX9Y22 = 713, + MagiaTileX10Y22 = 714, + MagiaTileX11Y22 = 715, + MagiaTileX12Y22 = 716, + MagiaTileX13Y22 = 717, + MagiaTileX14Y22 = 718, + MagiaTileX15Y22 = 719, + MagiaTileX16Y22 = 720, + MagiaTileX17Y22 = 721, + MagiaTileX18Y22 = 722, + MagiaTileX19Y22 = 723, + MagiaTileX20Y22 = 724, + MagiaTileX21Y22 = 725, MagiaTileX22Y22 = 726, - MagiaTileX22Y23 = 727, - MagiaTileX22Y24 = 728, - MagiaTileX22Y25 = 729, - MagiaTileX22Y26 = 730, - MagiaTileX22Y27 = 731, - MagiaTileX22Y28 = 732, - MagiaTileX22Y29 = 733, - MagiaTileX22Y30 = 734, - MagiaTileX22Y31 = 735, - MagiaTileX23Y0 = 736, - MagiaTileX23Y1 = 737, - MagiaTileX23Y2 = 738, - MagiaTileX23Y3 = 739, - MagiaTileX23Y4 = 740, - MagiaTileX23Y5 = 741, - MagiaTileX23Y6 = 742, - MagiaTileX23Y7 = 743, - MagiaTileX23Y8 = 744, - MagiaTileX23Y9 = 745, - MagiaTileX23Y10 = 746, - MagiaTileX23Y11 = 747, - MagiaTileX23Y12 = 748, - MagiaTileX23Y13 = 749, - MagiaTileX23Y14 = 750, - MagiaTileX23Y15 = 751, - MagiaTileX23Y16 = 752, - MagiaTileX23Y17 = 753, - MagiaTileX23Y18 = 754, - MagiaTileX23Y19 = 755, - MagiaTileX23Y20 = 756, - MagiaTileX23Y21 = 757, - MagiaTileX23Y22 = 758, + MagiaTileX23Y22 = 727, + MagiaTileX24Y22 = 728, + MagiaTileX25Y22 = 729, + MagiaTileX26Y22 = 730, + MagiaTileX27Y22 = 731, + MagiaTileX28Y22 = 732, + MagiaTileX29Y22 = 733, + MagiaTileX30Y22 = 734, + MagiaTileX31Y22 = 735, + MagiaTileX0Y23 = 736, + MagiaTileX1Y23 = 737, + MagiaTileX2Y23 = 738, + MagiaTileX3Y23 = 739, + MagiaTileX4Y23 = 740, + MagiaTileX5Y23 = 741, + MagiaTileX6Y23 = 742, + MagiaTileX7Y23 = 743, + MagiaTileX8Y23 = 744, + MagiaTileX9Y23 = 745, + MagiaTileX10Y23 = 746, + MagiaTileX11Y23 = 747, + MagiaTileX12Y23 = 748, + MagiaTileX13Y23 = 749, + MagiaTileX14Y23 = 750, + MagiaTileX15Y23 = 751, + MagiaTileX16Y23 = 752, + MagiaTileX17Y23 = 753, + MagiaTileX18Y23 = 754, + MagiaTileX19Y23 = 755, + MagiaTileX20Y23 = 756, + MagiaTileX21Y23 = 757, + MagiaTileX22Y23 = 758, MagiaTileX23Y23 = 759, - MagiaTileX23Y24 = 760, - MagiaTileX23Y25 = 761, - MagiaTileX23Y26 = 762, - MagiaTileX23Y27 = 763, - MagiaTileX23Y28 = 764, - MagiaTileX23Y29 = 765, - MagiaTileX23Y30 = 766, - MagiaTileX23Y31 = 767, - MagiaTileX24Y0 = 768, - MagiaTileX24Y1 = 769, - MagiaTileX24Y2 = 770, - MagiaTileX24Y3 = 771, - MagiaTileX24Y4 = 772, - MagiaTileX24Y5 = 773, - MagiaTileX24Y6 = 774, - MagiaTileX24Y7 = 775, - MagiaTileX24Y8 = 776, - MagiaTileX24Y9 = 777, - MagiaTileX24Y10 = 778, - MagiaTileX24Y11 = 779, - MagiaTileX24Y12 = 780, - MagiaTileX24Y13 = 781, - MagiaTileX24Y14 = 782, - MagiaTileX24Y15 = 783, - MagiaTileX24Y16 = 784, - MagiaTileX24Y17 = 785, - MagiaTileX24Y18 = 786, - MagiaTileX24Y19 = 787, - MagiaTileX24Y20 = 788, - MagiaTileX24Y21 = 789, - MagiaTileX24Y22 = 790, - MagiaTileX24Y23 = 791, + MagiaTileX24Y23 = 760, + MagiaTileX25Y23 = 761, + MagiaTileX26Y23 = 762, + MagiaTileX27Y23 = 763, + MagiaTileX28Y23 = 764, + MagiaTileX29Y23 = 765, + MagiaTileX30Y23 = 766, + MagiaTileX31Y23 = 767, + MagiaTileX0Y24 = 768, + MagiaTileX1Y24 = 769, + MagiaTileX2Y24 = 770, + MagiaTileX3Y24 = 771, + MagiaTileX4Y24 = 772, + MagiaTileX5Y24 = 773, + MagiaTileX6Y24 = 774, + MagiaTileX7Y24 = 775, + MagiaTileX8Y24 = 776, + MagiaTileX9Y24 = 777, + MagiaTileX10Y24 = 778, + MagiaTileX11Y24 = 779, + MagiaTileX12Y24 = 780, + MagiaTileX13Y24 = 781, + MagiaTileX14Y24 = 782, + MagiaTileX15Y24 = 783, + MagiaTileX16Y24 = 784, + MagiaTileX17Y24 = 785, + MagiaTileX18Y24 = 786, + MagiaTileX19Y24 = 787, + MagiaTileX20Y24 = 788, + MagiaTileX21Y24 = 789, + MagiaTileX22Y24 = 790, + MagiaTileX23Y24 = 791, MagiaTileX24Y24 = 792, - MagiaTileX24Y25 = 793, - MagiaTileX24Y26 = 794, - MagiaTileX24Y27 = 795, - MagiaTileX24Y28 = 796, - MagiaTileX24Y29 = 797, - MagiaTileX24Y30 = 798, - MagiaTileX24Y31 = 799, - MagiaTileX25Y0 = 800, - MagiaTileX25Y1 = 801, - MagiaTileX25Y2 = 802, - MagiaTileX25Y3 = 803, - MagiaTileX25Y4 = 804, - MagiaTileX25Y5 = 805, - MagiaTileX25Y6 = 806, - MagiaTileX25Y7 = 807, - MagiaTileX25Y8 = 808, - MagiaTileX25Y9 = 809, - MagiaTileX25Y10 = 810, - MagiaTileX25Y11 = 811, - MagiaTileX25Y12 = 812, - MagiaTileX25Y13 = 813, - MagiaTileX25Y14 = 814, - MagiaTileX25Y15 = 815, - MagiaTileX25Y16 = 816, - MagiaTileX25Y17 = 817, - MagiaTileX25Y18 = 818, - MagiaTileX25Y19 = 819, - MagiaTileX25Y20 = 820, - MagiaTileX25Y21 = 821, - MagiaTileX25Y22 = 822, - MagiaTileX25Y23 = 823, - MagiaTileX25Y24 = 824, + MagiaTileX25Y24 = 793, + MagiaTileX26Y24 = 794, + MagiaTileX27Y24 = 795, + MagiaTileX28Y24 = 796, + MagiaTileX29Y24 = 797, + MagiaTileX30Y24 = 798, + MagiaTileX31Y24 = 799, + MagiaTileX0Y25 = 800, + MagiaTileX1Y25 = 801, + MagiaTileX2Y25 = 802, + MagiaTileX3Y25 = 803, + MagiaTileX4Y25 = 804, + MagiaTileX5Y25 = 805, + MagiaTileX6Y25 = 806, + MagiaTileX7Y25 = 807, + MagiaTileX8Y25 = 808, + MagiaTileX9Y25 = 809, + MagiaTileX10Y25 = 810, + MagiaTileX11Y25 = 811, + MagiaTileX12Y25 = 812, + MagiaTileX13Y25 = 813, + MagiaTileX14Y25 = 814, + MagiaTileX15Y25 = 815, + MagiaTileX16Y25 = 816, + MagiaTileX17Y25 = 817, + MagiaTileX18Y25 = 818, + MagiaTileX19Y25 = 819, + MagiaTileX20Y25 = 820, + MagiaTileX21Y25 = 821, + MagiaTileX22Y25 = 822, + MagiaTileX23Y25 = 823, + MagiaTileX24Y25 = 824, MagiaTileX25Y25 = 825, - MagiaTileX25Y26 = 826, - MagiaTileX25Y27 = 827, - MagiaTileX25Y28 = 828, - MagiaTileX25Y29 = 829, - MagiaTileX25Y30 = 830, - MagiaTileX25Y31 = 831, - MagiaTileX26Y0 = 832, - MagiaTileX26Y1 = 833, - MagiaTileX26Y2 = 834, - MagiaTileX26Y3 = 835, - MagiaTileX26Y4 = 836, - MagiaTileX26Y5 = 837, - MagiaTileX26Y6 = 838, - MagiaTileX26Y7 = 839, - MagiaTileX26Y8 = 840, - MagiaTileX26Y9 = 841, - MagiaTileX26Y10 = 842, - MagiaTileX26Y11 = 843, - MagiaTileX26Y12 = 844, - MagiaTileX26Y13 = 845, - MagiaTileX26Y14 = 846, - MagiaTileX26Y15 = 847, - MagiaTileX26Y16 = 848, - MagiaTileX26Y17 = 849, - MagiaTileX26Y18 = 850, - MagiaTileX26Y19 = 851, - MagiaTileX26Y20 = 852, - MagiaTileX26Y21 = 853, - MagiaTileX26Y22 = 854, - MagiaTileX26Y23 = 855, - MagiaTileX26Y24 = 856, - MagiaTileX26Y25 = 857, + MagiaTileX26Y25 = 826, + MagiaTileX27Y25 = 827, + MagiaTileX28Y25 = 828, + MagiaTileX29Y25 = 829, + MagiaTileX30Y25 = 830, + MagiaTileX31Y25 = 831, + MagiaTileX0Y26 = 832, + MagiaTileX1Y26 = 833, + MagiaTileX2Y26 = 834, + MagiaTileX3Y26 = 835, + MagiaTileX4Y26 = 836, + MagiaTileX5Y26 = 837, + MagiaTileX6Y26 = 838, + MagiaTileX7Y26 = 839, + MagiaTileX8Y26 = 840, + MagiaTileX9Y26 = 841, + MagiaTileX10Y26 = 842, + MagiaTileX11Y26 = 843, + MagiaTileX12Y26 = 844, + MagiaTileX13Y26 = 845, + MagiaTileX14Y26 = 846, + MagiaTileX15Y26 = 847, + MagiaTileX16Y26 = 848, + MagiaTileX17Y26 = 849, + MagiaTileX18Y26 = 850, + MagiaTileX19Y26 = 851, + MagiaTileX20Y26 = 852, + MagiaTileX21Y26 = 853, + MagiaTileX22Y26 = 854, + MagiaTileX23Y26 = 855, + MagiaTileX24Y26 = 856, + MagiaTileX25Y26 = 857, MagiaTileX26Y26 = 858, - MagiaTileX26Y27 = 859, - MagiaTileX26Y28 = 860, - MagiaTileX26Y29 = 861, - MagiaTileX26Y30 = 862, - MagiaTileX26Y31 = 863, - MagiaTileX27Y0 = 864, - MagiaTileX27Y1 = 865, - MagiaTileX27Y2 = 866, - MagiaTileX27Y3 = 867, - MagiaTileX27Y4 = 868, - MagiaTileX27Y5 = 869, - MagiaTileX27Y6 = 870, - MagiaTileX27Y7 = 871, - MagiaTileX27Y8 = 872, - MagiaTileX27Y9 = 873, - MagiaTileX27Y10 = 874, - MagiaTileX27Y11 = 875, - MagiaTileX27Y12 = 876, - MagiaTileX27Y13 = 877, - MagiaTileX27Y14 = 878, - MagiaTileX27Y15 = 879, - MagiaTileX27Y16 = 880, - MagiaTileX27Y17 = 881, - MagiaTileX27Y18 = 882, - MagiaTileX27Y19 = 883, - MagiaTileX27Y20 = 884, - MagiaTileX27Y21 = 885, - MagiaTileX27Y22 = 886, - MagiaTileX27Y23 = 887, - MagiaTileX27Y24 = 888, - MagiaTileX27Y25 = 889, - MagiaTileX27Y26 = 890, + MagiaTileX27Y26 = 859, + MagiaTileX28Y26 = 860, + MagiaTileX29Y26 = 861, + MagiaTileX30Y26 = 862, + MagiaTileX31Y26 = 863, + MagiaTileX0Y27 = 864, + MagiaTileX1Y27 = 865, + MagiaTileX2Y27 = 866, + MagiaTileX3Y27 = 867, + MagiaTileX4Y27 = 868, + MagiaTileX5Y27 = 869, + MagiaTileX6Y27 = 870, + MagiaTileX7Y27 = 871, + MagiaTileX8Y27 = 872, + MagiaTileX9Y27 = 873, + MagiaTileX10Y27 = 874, + MagiaTileX11Y27 = 875, + MagiaTileX12Y27 = 876, + MagiaTileX13Y27 = 877, + MagiaTileX14Y27 = 878, + MagiaTileX15Y27 = 879, + MagiaTileX16Y27 = 880, + MagiaTileX17Y27 = 881, + MagiaTileX18Y27 = 882, + MagiaTileX19Y27 = 883, + MagiaTileX20Y27 = 884, + MagiaTileX21Y27 = 885, + MagiaTileX22Y27 = 886, + MagiaTileX23Y27 = 887, + MagiaTileX24Y27 = 888, + MagiaTileX25Y27 = 889, + MagiaTileX26Y27 = 890, MagiaTileX27Y27 = 891, - MagiaTileX27Y28 = 892, - MagiaTileX27Y29 = 893, - MagiaTileX27Y30 = 894, - MagiaTileX27Y31 = 895, - MagiaTileX28Y0 = 896, - MagiaTileX28Y1 = 897, - MagiaTileX28Y2 = 898, - MagiaTileX28Y3 = 899, - MagiaTileX28Y4 = 900, - MagiaTileX28Y5 = 901, - MagiaTileX28Y6 = 902, - MagiaTileX28Y7 = 903, - MagiaTileX28Y8 = 904, - MagiaTileX28Y9 = 905, - MagiaTileX28Y10 = 906, - MagiaTileX28Y11 = 907, - MagiaTileX28Y12 = 908, - MagiaTileX28Y13 = 909, - MagiaTileX28Y14 = 910, - MagiaTileX28Y15 = 911, - MagiaTileX28Y16 = 912, - MagiaTileX28Y17 = 913, - MagiaTileX28Y18 = 914, - MagiaTileX28Y19 = 915, - MagiaTileX28Y20 = 916, - MagiaTileX28Y21 = 917, - MagiaTileX28Y22 = 918, - MagiaTileX28Y23 = 919, - MagiaTileX28Y24 = 920, - MagiaTileX28Y25 = 921, - MagiaTileX28Y26 = 922, - MagiaTileX28Y27 = 923, + MagiaTileX28Y27 = 892, + MagiaTileX29Y27 = 893, + MagiaTileX30Y27 = 894, + MagiaTileX31Y27 = 895, + MagiaTileX0Y28 = 896, + MagiaTileX1Y28 = 897, + MagiaTileX2Y28 = 898, + MagiaTileX3Y28 = 899, + MagiaTileX4Y28 = 900, + MagiaTileX5Y28 = 901, + MagiaTileX6Y28 = 902, + MagiaTileX7Y28 = 903, + MagiaTileX8Y28 = 904, + MagiaTileX9Y28 = 905, + MagiaTileX10Y28 = 906, + MagiaTileX11Y28 = 907, + MagiaTileX12Y28 = 908, + MagiaTileX13Y28 = 909, + MagiaTileX14Y28 = 910, + MagiaTileX15Y28 = 911, + MagiaTileX16Y28 = 912, + MagiaTileX17Y28 = 913, + MagiaTileX18Y28 = 914, + MagiaTileX19Y28 = 915, + MagiaTileX20Y28 = 916, + MagiaTileX21Y28 = 917, + MagiaTileX22Y28 = 918, + MagiaTileX23Y28 = 919, + MagiaTileX24Y28 = 920, + MagiaTileX25Y28 = 921, + MagiaTileX26Y28 = 922, + MagiaTileX27Y28 = 923, MagiaTileX28Y28 = 924, - MagiaTileX28Y29 = 925, - MagiaTileX28Y30 = 926, - MagiaTileX28Y31 = 927, - MagiaTileX29Y0 = 928, - MagiaTileX29Y1 = 929, - MagiaTileX29Y2 = 930, - MagiaTileX29Y3 = 931, - MagiaTileX29Y4 = 932, - MagiaTileX29Y5 = 933, - MagiaTileX29Y6 = 934, - MagiaTileX29Y7 = 935, - MagiaTileX29Y8 = 936, - MagiaTileX29Y9 = 937, - MagiaTileX29Y10 = 938, - MagiaTileX29Y11 = 939, - MagiaTileX29Y12 = 940, - MagiaTileX29Y13 = 941, - MagiaTileX29Y14 = 942, - MagiaTileX29Y15 = 943, - MagiaTileX29Y16 = 944, - MagiaTileX29Y17 = 945, - MagiaTileX29Y18 = 946, - MagiaTileX29Y19 = 947, - MagiaTileX29Y20 = 948, - MagiaTileX29Y21 = 949, - MagiaTileX29Y22 = 950, - MagiaTileX29Y23 = 951, - MagiaTileX29Y24 = 952, - MagiaTileX29Y25 = 953, - MagiaTileX29Y26 = 954, - MagiaTileX29Y27 = 955, - MagiaTileX29Y28 = 956, + MagiaTileX29Y28 = 925, + MagiaTileX30Y28 = 926, + MagiaTileX31Y28 = 927, + MagiaTileX0Y29 = 928, + MagiaTileX1Y29 = 929, + MagiaTileX2Y29 = 930, + MagiaTileX3Y29 = 931, + MagiaTileX4Y29 = 932, + MagiaTileX5Y29 = 933, + MagiaTileX6Y29 = 934, + MagiaTileX7Y29 = 935, + MagiaTileX8Y29 = 936, + MagiaTileX9Y29 = 937, + MagiaTileX10Y29 = 938, + MagiaTileX11Y29 = 939, + MagiaTileX12Y29 = 940, + MagiaTileX13Y29 = 941, + MagiaTileX14Y29 = 942, + MagiaTileX15Y29 = 943, + MagiaTileX16Y29 = 944, + MagiaTileX17Y29 = 945, + MagiaTileX18Y29 = 946, + MagiaTileX19Y29 = 947, + MagiaTileX20Y29 = 948, + MagiaTileX21Y29 = 949, + MagiaTileX22Y29 = 950, + MagiaTileX23Y29 = 951, + MagiaTileX24Y29 = 952, + MagiaTileX25Y29 = 953, + MagiaTileX26Y29 = 954, + MagiaTileX27Y29 = 955, + MagiaTileX28Y29 = 956, MagiaTileX29Y29 = 957, - MagiaTileX29Y30 = 958, - MagiaTileX29Y31 = 959, - MagiaTileX30Y0 = 960, - MagiaTileX30Y1 = 961, - MagiaTileX30Y2 = 962, - MagiaTileX30Y3 = 963, - MagiaTileX30Y4 = 964, - MagiaTileX30Y5 = 965, - MagiaTileX30Y6 = 966, - MagiaTileX30Y7 = 967, - MagiaTileX30Y8 = 968, - MagiaTileX30Y9 = 969, - MagiaTileX30Y10 = 970, - MagiaTileX30Y11 = 971, - MagiaTileX30Y12 = 972, - MagiaTileX30Y13 = 973, - MagiaTileX30Y14 = 974, - MagiaTileX30Y15 = 975, - MagiaTileX30Y16 = 976, - MagiaTileX30Y17 = 977, - MagiaTileX30Y18 = 978, - MagiaTileX30Y19 = 979, - MagiaTileX30Y20 = 980, - MagiaTileX30Y21 = 981, - MagiaTileX30Y22 = 982, - MagiaTileX30Y23 = 983, - MagiaTileX30Y24 = 984, - MagiaTileX30Y25 = 985, - MagiaTileX30Y26 = 986, - MagiaTileX30Y27 = 987, - MagiaTileX30Y28 = 988, - MagiaTileX30Y29 = 989, + MagiaTileX30Y29 = 958, + MagiaTileX31Y29 = 959, + MagiaTileX0Y30 = 960, + MagiaTileX1Y30 = 961, + MagiaTileX2Y30 = 962, + MagiaTileX3Y30 = 963, + MagiaTileX4Y30 = 964, + MagiaTileX5Y30 = 965, + MagiaTileX6Y30 = 966, + MagiaTileX7Y30 = 967, + MagiaTileX8Y30 = 968, + MagiaTileX9Y30 = 969, + MagiaTileX10Y30 = 970, + MagiaTileX11Y30 = 971, + MagiaTileX12Y30 = 972, + MagiaTileX13Y30 = 973, + MagiaTileX14Y30 = 974, + MagiaTileX15Y30 = 975, + MagiaTileX16Y30 = 976, + MagiaTileX17Y30 = 977, + MagiaTileX18Y30 = 978, + MagiaTileX19Y30 = 979, + MagiaTileX20Y30 = 980, + MagiaTileX21Y30 = 981, + MagiaTileX22Y30 = 982, + MagiaTileX23Y30 = 983, + MagiaTileX24Y30 = 984, + MagiaTileX25Y30 = 985, + MagiaTileX26Y30 = 986, + MagiaTileX27Y30 = 987, + MagiaTileX28Y30 = 988, + MagiaTileX29Y30 = 989, MagiaTileX30Y30 = 990, - MagiaTileX30Y31 = 991, - MagiaTileX31Y0 = 992, - MagiaTileX31Y1 = 993, - MagiaTileX31Y2 = 994, - MagiaTileX31Y3 = 995, - MagiaTileX31Y4 = 996, - MagiaTileX31Y5 = 997, - MagiaTileX31Y6 = 998, - MagiaTileX31Y7 = 999, - MagiaTileX31Y8 = 1000, - MagiaTileX31Y9 = 1001, - MagiaTileX31Y10 = 1002, - MagiaTileX31Y11 = 1003, - MagiaTileX31Y12 = 1004, - MagiaTileX31Y13 = 1005, - MagiaTileX31Y14 = 1006, - MagiaTileX31Y15 = 1007, - MagiaTileX31Y16 = 1008, - MagiaTileX31Y17 = 1009, - MagiaTileX31Y18 = 1010, - MagiaTileX31Y19 = 1011, - MagiaTileX31Y20 = 1012, - MagiaTileX31Y21 = 1013, - MagiaTileX31Y22 = 1014, - MagiaTileX31Y23 = 1015, - MagiaTileX31Y24 = 1016, - MagiaTileX31Y25 = 1017, - MagiaTileX31Y26 = 1018, - MagiaTileX31Y27 = 1019, - MagiaTileX31Y28 = 1020, - MagiaTileX31Y29 = 1021, - MagiaTileX31Y30 = 1022, + MagiaTileX31Y30 = 991, + MagiaTileX0Y31 = 992, + MagiaTileX1Y31 = 993, + MagiaTileX2Y31 = 994, + MagiaTileX3Y31 = 995, + MagiaTileX4Y31 = 996, + MagiaTileX5Y31 = 997, + MagiaTileX6Y31 = 998, + MagiaTileX7Y31 = 999, + MagiaTileX8Y31 = 1000, + MagiaTileX9Y31 = 1001, + MagiaTileX10Y31 = 1002, + MagiaTileX11Y31 = 1003, + MagiaTileX12Y31 = 1004, + MagiaTileX13Y31 = 1005, + MagiaTileX14Y31 = 1006, + MagiaTileX15Y31 = 1007, + MagiaTileX16Y31 = 1008, + MagiaTileX17Y31 = 1009, + MagiaTileX18Y31 = 1010, + MagiaTileX19Y31 = 1011, + MagiaTileX20Y31 = 1012, + MagiaTileX21Y31 = 1013, + MagiaTileX22Y31 = 1014, + MagiaTileX23Y31 = 1015, + MagiaTileX24Y31 = 1016, + MagiaTileX25Y31 = 1017, + MagiaTileX26Y31 = 1018, + MagiaTileX27Y31 = 1019, + MagiaTileX28Y31 = 1020, + MagiaTileX29Y31 = 1021, + MagiaTileX30Y31 = 1022, MagiaTileX31Y31 = 1023, L20 = 1024, L21 = 1025, @@ -1076,6 +1085,1066 @@ package floo_axi_nw_mesh_32x32_noc_pkg; + typedef enum logic[10:0] { + MagiaTileX0Y0SamIdx = 0, + MagiaTileX1Y0SamIdx = 1, + MagiaTileX2Y0SamIdx = 2, + MagiaTileX3Y0SamIdx = 3, + MagiaTileX4Y0SamIdx = 4, + MagiaTileX5Y0SamIdx = 5, + MagiaTileX6Y0SamIdx = 6, + MagiaTileX7Y0SamIdx = 7, + MagiaTileX8Y0SamIdx = 8, + MagiaTileX9Y0SamIdx = 9, + MagiaTileX10Y0SamIdx = 10, + MagiaTileX11Y0SamIdx = 11, + MagiaTileX12Y0SamIdx = 12, + MagiaTileX13Y0SamIdx = 13, + MagiaTileX14Y0SamIdx = 14, + MagiaTileX15Y0SamIdx = 15, + MagiaTileX16Y0SamIdx = 16, + MagiaTileX17Y0SamIdx = 17, + MagiaTileX18Y0SamIdx = 18, + MagiaTileX19Y0SamIdx = 19, + MagiaTileX20Y0SamIdx = 20, + MagiaTileX21Y0SamIdx = 21, + MagiaTileX22Y0SamIdx = 22, + MagiaTileX23Y0SamIdx = 23, + MagiaTileX24Y0SamIdx = 24, + MagiaTileX25Y0SamIdx = 25, + MagiaTileX26Y0SamIdx = 26, + MagiaTileX27Y0SamIdx = 27, + MagiaTileX28Y0SamIdx = 28, + MagiaTileX29Y0SamIdx = 29, + MagiaTileX30Y0SamIdx = 30, + MagiaTileX31Y0SamIdx = 31, + MagiaTileX0Y1SamIdx = 32, + MagiaTileX1Y1SamIdx = 33, + MagiaTileX2Y1SamIdx = 34, + MagiaTileX3Y1SamIdx = 35, + MagiaTileX4Y1SamIdx = 36, + MagiaTileX5Y1SamIdx = 37, + MagiaTileX6Y1SamIdx = 38, + MagiaTileX7Y1SamIdx = 39, + MagiaTileX8Y1SamIdx = 40, + MagiaTileX9Y1SamIdx = 41, + MagiaTileX10Y1SamIdx = 42, + MagiaTileX11Y1SamIdx = 43, + MagiaTileX12Y1SamIdx = 44, + MagiaTileX13Y1SamIdx = 45, + MagiaTileX14Y1SamIdx = 46, + MagiaTileX15Y1SamIdx = 47, + MagiaTileX16Y1SamIdx = 48, + MagiaTileX17Y1SamIdx = 49, + MagiaTileX18Y1SamIdx = 50, + MagiaTileX19Y1SamIdx = 51, + MagiaTileX20Y1SamIdx = 52, + MagiaTileX21Y1SamIdx = 53, + MagiaTileX22Y1SamIdx = 54, + MagiaTileX23Y1SamIdx = 55, + MagiaTileX24Y1SamIdx = 56, + MagiaTileX25Y1SamIdx = 57, + MagiaTileX26Y1SamIdx = 58, + MagiaTileX27Y1SamIdx = 59, + MagiaTileX28Y1SamIdx = 60, + MagiaTileX29Y1SamIdx = 61, + MagiaTileX30Y1SamIdx = 62, + MagiaTileX31Y1SamIdx = 63, + MagiaTileX0Y2SamIdx = 64, + MagiaTileX1Y2SamIdx = 65, + MagiaTileX2Y2SamIdx = 66, + MagiaTileX3Y2SamIdx = 67, + MagiaTileX4Y2SamIdx = 68, + MagiaTileX5Y2SamIdx = 69, + MagiaTileX6Y2SamIdx = 70, + MagiaTileX7Y2SamIdx = 71, + MagiaTileX8Y2SamIdx = 72, + MagiaTileX9Y2SamIdx = 73, + MagiaTileX10Y2SamIdx = 74, + MagiaTileX11Y2SamIdx = 75, + MagiaTileX12Y2SamIdx = 76, + MagiaTileX13Y2SamIdx = 77, + MagiaTileX14Y2SamIdx = 78, + MagiaTileX15Y2SamIdx = 79, + MagiaTileX16Y2SamIdx = 80, + MagiaTileX17Y2SamIdx = 81, + MagiaTileX18Y2SamIdx = 82, + MagiaTileX19Y2SamIdx = 83, + MagiaTileX20Y2SamIdx = 84, + MagiaTileX21Y2SamIdx = 85, + MagiaTileX22Y2SamIdx = 86, + MagiaTileX23Y2SamIdx = 87, + MagiaTileX24Y2SamIdx = 88, + MagiaTileX25Y2SamIdx = 89, + MagiaTileX26Y2SamIdx = 90, + MagiaTileX27Y2SamIdx = 91, + MagiaTileX28Y2SamIdx = 92, + MagiaTileX29Y2SamIdx = 93, + MagiaTileX30Y2SamIdx = 94, + MagiaTileX31Y2SamIdx = 95, + MagiaTileX0Y3SamIdx = 96, + MagiaTileX1Y3SamIdx = 97, + MagiaTileX2Y3SamIdx = 98, + MagiaTileX3Y3SamIdx = 99, + MagiaTileX4Y3SamIdx = 100, + MagiaTileX5Y3SamIdx = 101, + MagiaTileX6Y3SamIdx = 102, + MagiaTileX7Y3SamIdx = 103, + MagiaTileX8Y3SamIdx = 104, + MagiaTileX9Y3SamIdx = 105, + MagiaTileX10Y3SamIdx = 106, + MagiaTileX11Y3SamIdx = 107, + MagiaTileX12Y3SamIdx = 108, + MagiaTileX13Y3SamIdx = 109, + MagiaTileX14Y3SamIdx = 110, + MagiaTileX15Y3SamIdx = 111, + MagiaTileX16Y3SamIdx = 112, + MagiaTileX17Y3SamIdx = 113, + MagiaTileX18Y3SamIdx = 114, + MagiaTileX19Y3SamIdx = 115, + MagiaTileX20Y3SamIdx = 116, + MagiaTileX21Y3SamIdx = 117, + MagiaTileX22Y3SamIdx = 118, + MagiaTileX23Y3SamIdx = 119, + MagiaTileX24Y3SamIdx = 120, + MagiaTileX25Y3SamIdx = 121, + MagiaTileX26Y3SamIdx = 122, + MagiaTileX27Y3SamIdx = 123, + MagiaTileX28Y3SamIdx = 124, + MagiaTileX29Y3SamIdx = 125, + MagiaTileX30Y3SamIdx = 126, + MagiaTileX31Y3SamIdx = 127, + MagiaTileX0Y4SamIdx = 128, + MagiaTileX1Y4SamIdx = 129, + MagiaTileX2Y4SamIdx = 130, + MagiaTileX3Y4SamIdx = 131, + MagiaTileX4Y4SamIdx = 132, + MagiaTileX5Y4SamIdx = 133, + MagiaTileX6Y4SamIdx = 134, + MagiaTileX7Y4SamIdx = 135, + MagiaTileX8Y4SamIdx = 136, + MagiaTileX9Y4SamIdx = 137, + MagiaTileX10Y4SamIdx = 138, + MagiaTileX11Y4SamIdx = 139, + MagiaTileX12Y4SamIdx = 140, + MagiaTileX13Y4SamIdx = 141, + MagiaTileX14Y4SamIdx = 142, + MagiaTileX15Y4SamIdx = 143, + MagiaTileX16Y4SamIdx = 144, + MagiaTileX17Y4SamIdx = 145, + MagiaTileX18Y4SamIdx = 146, + MagiaTileX19Y4SamIdx = 147, + MagiaTileX20Y4SamIdx = 148, + MagiaTileX21Y4SamIdx = 149, + MagiaTileX22Y4SamIdx = 150, + MagiaTileX23Y4SamIdx = 151, + MagiaTileX24Y4SamIdx = 152, + MagiaTileX25Y4SamIdx = 153, + MagiaTileX26Y4SamIdx = 154, + MagiaTileX27Y4SamIdx = 155, + MagiaTileX28Y4SamIdx = 156, + MagiaTileX29Y4SamIdx = 157, + MagiaTileX30Y4SamIdx = 158, + MagiaTileX31Y4SamIdx = 159, + MagiaTileX0Y5SamIdx = 160, + MagiaTileX1Y5SamIdx = 161, + MagiaTileX2Y5SamIdx = 162, + MagiaTileX3Y5SamIdx = 163, + MagiaTileX4Y5SamIdx = 164, + MagiaTileX5Y5SamIdx = 165, + MagiaTileX6Y5SamIdx = 166, + MagiaTileX7Y5SamIdx = 167, + MagiaTileX8Y5SamIdx = 168, + MagiaTileX9Y5SamIdx = 169, + MagiaTileX10Y5SamIdx = 170, + MagiaTileX11Y5SamIdx = 171, + MagiaTileX12Y5SamIdx = 172, + MagiaTileX13Y5SamIdx = 173, + MagiaTileX14Y5SamIdx = 174, + MagiaTileX15Y5SamIdx = 175, + MagiaTileX16Y5SamIdx = 176, + MagiaTileX17Y5SamIdx = 177, + MagiaTileX18Y5SamIdx = 178, + MagiaTileX19Y5SamIdx = 179, + MagiaTileX20Y5SamIdx = 180, + MagiaTileX21Y5SamIdx = 181, + MagiaTileX22Y5SamIdx = 182, + MagiaTileX23Y5SamIdx = 183, + MagiaTileX24Y5SamIdx = 184, + MagiaTileX25Y5SamIdx = 185, + MagiaTileX26Y5SamIdx = 186, + MagiaTileX27Y5SamIdx = 187, + MagiaTileX28Y5SamIdx = 188, + MagiaTileX29Y5SamIdx = 189, + MagiaTileX30Y5SamIdx = 190, + MagiaTileX31Y5SamIdx = 191, + MagiaTileX0Y6SamIdx = 192, + MagiaTileX1Y6SamIdx = 193, + MagiaTileX2Y6SamIdx = 194, + MagiaTileX3Y6SamIdx = 195, + MagiaTileX4Y6SamIdx = 196, + MagiaTileX5Y6SamIdx = 197, + MagiaTileX6Y6SamIdx = 198, + MagiaTileX7Y6SamIdx = 199, + MagiaTileX8Y6SamIdx = 200, + MagiaTileX9Y6SamIdx = 201, + MagiaTileX10Y6SamIdx = 202, + MagiaTileX11Y6SamIdx = 203, + MagiaTileX12Y6SamIdx = 204, + MagiaTileX13Y6SamIdx = 205, + MagiaTileX14Y6SamIdx = 206, + MagiaTileX15Y6SamIdx = 207, + MagiaTileX16Y6SamIdx = 208, + MagiaTileX17Y6SamIdx = 209, + MagiaTileX18Y6SamIdx = 210, + MagiaTileX19Y6SamIdx = 211, + MagiaTileX20Y6SamIdx = 212, + MagiaTileX21Y6SamIdx = 213, + MagiaTileX22Y6SamIdx = 214, + MagiaTileX23Y6SamIdx = 215, + MagiaTileX24Y6SamIdx = 216, + MagiaTileX25Y6SamIdx = 217, + MagiaTileX26Y6SamIdx = 218, + MagiaTileX27Y6SamIdx = 219, + MagiaTileX28Y6SamIdx = 220, + MagiaTileX29Y6SamIdx = 221, + MagiaTileX30Y6SamIdx = 222, + MagiaTileX31Y6SamIdx = 223, + MagiaTileX0Y7SamIdx = 224, + MagiaTileX1Y7SamIdx = 225, + MagiaTileX2Y7SamIdx = 226, + MagiaTileX3Y7SamIdx = 227, + MagiaTileX4Y7SamIdx = 228, + MagiaTileX5Y7SamIdx = 229, + MagiaTileX6Y7SamIdx = 230, + MagiaTileX7Y7SamIdx = 231, + MagiaTileX8Y7SamIdx = 232, + MagiaTileX9Y7SamIdx = 233, + MagiaTileX10Y7SamIdx = 234, + MagiaTileX11Y7SamIdx = 235, + MagiaTileX12Y7SamIdx = 236, + MagiaTileX13Y7SamIdx = 237, + MagiaTileX14Y7SamIdx = 238, + MagiaTileX15Y7SamIdx = 239, + MagiaTileX16Y7SamIdx = 240, + MagiaTileX17Y7SamIdx = 241, + MagiaTileX18Y7SamIdx = 242, + MagiaTileX19Y7SamIdx = 243, + MagiaTileX20Y7SamIdx = 244, + MagiaTileX21Y7SamIdx = 245, + MagiaTileX22Y7SamIdx = 246, + MagiaTileX23Y7SamIdx = 247, + MagiaTileX24Y7SamIdx = 248, + MagiaTileX25Y7SamIdx = 249, + MagiaTileX26Y7SamIdx = 250, + MagiaTileX27Y7SamIdx = 251, + MagiaTileX28Y7SamIdx = 252, + MagiaTileX29Y7SamIdx = 253, + MagiaTileX30Y7SamIdx = 254, + MagiaTileX31Y7SamIdx = 255, + MagiaTileX0Y8SamIdx = 256, + MagiaTileX1Y8SamIdx = 257, + MagiaTileX2Y8SamIdx = 258, + MagiaTileX3Y8SamIdx = 259, + MagiaTileX4Y8SamIdx = 260, + MagiaTileX5Y8SamIdx = 261, + MagiaTileX6Y8SamIdx = 262, + MagiaTileX7Y8SamIdx = 263, + MagiaTileX8Y8SamIdx = 264, + MagiaTileX9Y8SamIdx = 265, + MagiaTileX10Y8SamIdx = 266, + MagiaTileX11Y8SamIdx = 267, + MagiaTileX12Y8SamIdx = 268, + MagiaTileX13Y8SamIdx = 269, + MagiaTileX14Y8SamIdx = 270, + MagiaTileX15Y8SamIdx = 271, + MagiaTileX16Y8SamIdx = 272, + MagiaTileX17Y8SamIdx = 273, + MagiaTileX18Y8SamIdx = 274, + MagiaTileX19Y8SamIdx = 275, + MagiaTileX20Y8SamIdx = 276, + MagiaTileX21Y8SamIdx = 277, + MagiaTileX22Y8SamIdx = 278, + MagiaTileX23Y8SamIdx = 279, + MagiaTileX24Y8SamIdx = 280, + MagiaTileX25Y8SamIdx = 281, + MagiaTileX26Y8SamIdx = 282, + MagiaTileX27Y8SamIdx = 283, + MagiaTileX28Y8SamIdx = 284, + MagiaTileX29Y8SamIdx = 285, + MagiaTileX30Y8SamIdx = 286, + MagiaTileX31Y8SamIdx = 287, + MagiaTileX0Y9SamIdx = 288, + MagiaTileX1Y9SamIdx = 289, + MagiaTileX2Y9SamIdx = 290, + MagiaTileX3Y9SamIdx = 291, + MagiaTileX4Y9SamIdx = 292, + MagiaTileX5Y9SamIdx = 293, + MagiaTileX6Y9SamIdx = 294, + MagiaTileX7Y9SamIdx = 295, + MagiaTileX8Y9SamIdx = 296, + MagiaTileX9Y9SamIdx = 297, + MagiaTileX10Y9SamIdx = 298, + MagiaTileX11Y9SamIdx = 299, + MagiaTileX12Y9SamIdx = 300, + MagiaTileX13Y9SamIdx = 301, + MagiaTileX14Y9SamIdx = 302, + MagiaTileX15Y9SamIdx = 303, + MagiaTileX16Y9SamIdx = 304, + MagiaTileX17Y9SamIdx = 305, + MagiaTileX18Y9SamIdx = 306, + MagiaTileX19Y9SamIdx = 307, + MagiaTileX20Y9SamIdx = 308, + MagiaTileX21Y9SamIdx = 309, + MagiaTileX22Y9SamIdx = 310, + MagiaTileX23Y9SamIdx = 311, + MagiaTileX24Y9SamIdx = 312, + MagiaTileX25Y9SamIdx = 313, + MagiaTileX26Y9SamIdx = 314, + MagiaTileX27Y9SamIdx = 315, + MagiaTileX28Y9SamIdx = 316, + MagiaTileX29Y9SamIdx = 317, + MagiaTileX30Y9SamIdx = 318, + MagiaTileX31Y9SamIdx = 319, + MagiaTileX0Y10SamIdx = 320, + MagiaTileX1Y10SamIdx = 321, + MagiaTileX2Y10SamIdx = 322, + MagiaTileX3Y10SamIdx = 323, + MagiaTileX4Y10SamIdx = 324, + MagiaTileX5Y10SamIdx = 325, + MagiaTileX6Y10SamIdx = 326, + MagiaTileX7Y10SamIdx = 327, + MagiaTileX8Y10SamIdx = 328, + MagiaTileX9Y10SamIdx = 329, + MagiaTileX10Y10SamIdx = 330, + MagiaTileX11Y10SamIdx = 331, + MagiaTileX12Y10SamIdx = 332, + MagiaTileX13Y10SamIdx = 333, + MagiaTileX14Y10SamIdx = 334, + MagiaTileX15Y10SamIdx = 335, + MagiaTileX16Y10SamIdx = 336, + MagiaTileX17Y10SamIdx = 337, + MagiaTileX18Y10SamIdx = 338, + MagiaTileX19Y10SamIdx = 339, + MagiaTileX20Y10SamIdx = 340, + MagiaTileX21Y10SamIdx = 341, + MagiaTileX22Y10SamIdx = 342, + MagiaTileX23Y10SamIdx = 343, + MagiaTileX24Y10SamIdx = 344, + MagiaTileX25Y10SamIdx = 345, + MagiaTileX26Y10SamIdx = 346, + MagiaTileX27Y10SamIdx = 347, + MagiaTileX28Y10SamIdx = 348, + MagiaTileX29Y10SamIdx = 349, + MagiaTileX30Y10SamIdx = 350, + MagiaTileX31Y10SamIdx = 351, + MagiaTileX0Y11SamIdx = 352, + MagiaTileX1Y11SamIdx = 353, + MagiaTileX2Y11SamIdx = 354, + MagiaTileX3Y11SamIdx = 355, + MagiaTileX4Y11SamIdx = 356, + MagiaTileX5Y11SamIdx = 357, + MagiaTileX6Y11SamIdx = 358, + MagiaTileX7Y11SamIdx = 359, + MagiaTileX8Y11SamIdx = 360, + MagiaTileX9Y11SamIdx = 361, + MagiaTileX10Y11SamIdx = 362, + MagiaTileX11Y11SamIdx = 363, + MagiaTileX12Y11SamIdx = 364, + MagiaTileX13Y11SamIdx = 365, + MagiaTileX14Y11SamIdx = 366, + MagiaTileX15Y11SamIdx = 367, + MagiaTileX16Y11SamIdx = 368, + MagiaTileX17Y11SamIdx = 369, + MagiaTileX18Y11SamIdx = 370, + MagiaTileX19Y11SamIdx = 371, + MagiaTileX20Y11SamIdx = 372, + MagiaTileX21Y11SamIdx = 373, + MagiaTileX22Y11SamIdx = 374, + MagiaTileX23Y11SamIdx = 375, + MagiaTileX24Y11SamIdx = 376, + MagiaTileX25Y11SamIdx = 377, + MagiaTileX26Y11SamIdx = 378, + MagiaTileX27Y11SamIdx = 379, + MagiaTileX28Y11SamIdx = 380, + MagiaTileX29Y11SamIdx = 381, + MagiaTileX30Y11SamIdx = 382, + MagiaTileX31Y11SamIdx = 383, + MagiaTileX0Y12SamIdx = 384, + MagiaTileX1Y12SamIdx = 385, + MagiaTileX2Y12SamIdx = 386, + MagiaTileX3Y12SamIdx = 387, + MagiaTileX4Y12SamIdx = 388, + MagiaTileX5Y12SamIdx = 389, + MagiaTileX6Y12SamIdx = 390, + MagiaTileX7Y12SamIdx = 391, + MagiaTileX8Y12SamIdx = 392, + MagiaTileX9Y12SamIdx = 393, + MagiaTileX10Y12SamIdx = 394, + MagiaTileX11Y12SamIdx = 395, + MagiaTileX12Y12SamIdx = 396, + MagiaTileX13Y12SamIdx = 397, + MagiaTileX14Y12SamIdx = 398, + MagiaTileX15Y12SamIdx = 399, + MagiaTileX16Y12SamIdx = 400, + MagiaTileX17Y12SamIdx = 401, + MagiaTileX18Y12SamIdx = 402, + MagiaTileX19Y12SamIdx = 403, + MagiaTileX20Y12SamIdx = 404, + MagiaTileX21Y12SamIdx = 405, + MagiaTileX22Y12SamIdx = 406, + MagiaTileX23Y12SamIdx = 407, + MagiaTileX24Y12SamIdx = 408, + MagiaTileX25Y12SamIdx = 409, + MagiaTileX26Y12SamIdx = 410, + MagiaTileX27Y12SamIdx = 411, + MagiaTileX28Y12SamIdx = 412, + MagiaTileX29Y12SamIdx = 413, + MagiaTileX30Y12SamIdx = 414, + MagiaTileX31Y12SamIdx = 415, + MagiaTileX0Y13SamIdx = 416, + MagiaTileX1Y13SamIdx = 417, + MagiaTileX2Y13SamIdx = 418, + MagiaTileX3Y13SamIdx = 419, + MagiaTileX4Y13SamIdx = 420, + MagiaTileX5Y13SamIdx = 421, + MagiaTileX6Y13SamIdx = 422, + MagiaTileX7Y13SamIdx = 423, + MagiaTileX8Y13SamIdx = 424, + MagiaTileX9Y13SamIdx = 425, + MagiaTileX10Y13SamIdx = 426, + MagiaTileX11Y13SamIdx = 427, + MagiaTileX12Y13SamIdx = 428, + MagiaTileX13Y13SamIdx = 429, + MagiaTileX14Y13SamIdx = 430, + MagiaTileX15Y13SamIdx = 431, + MagiaTileX16Y13SamIdx = 432, + MagiaTileX17Y13SamIdx = 433, + MagiaTileX18Y13SamIdx = 434, + MagiaTileX19Y13SamIdx = 435, + MagiaTileX20Y13SamIdx = 436, + MagiaTileX21Y13SamIdx = 437, + MagiaTileX22Y13SamIdx = 438, + MagiaTileX23Y13SamIdx = 439, + MagiaTileX24Y13SamIdx = 440, + MagiaTileX25Y13SamIdx = 441, + MagiaTileX26Y13SamIdx = 442, + MagiaTileX27Y13SamIdx = 443, + MagiaTileX28Y13SamIdx = 444, + MagiaTileX29Y13SamIdx = 445, + MagiaTileX30Y13SamIdx = 446, + MagiaTileX31Y13SamIdx = 447, + MagiaTileX0Y14SamIdx = 448, + MagiaTileX1Y14SamIdx = 449, + MagiaTileX2Y14SamIdx = 450, + MagiaTileX3Y14SamIdx = 451, + MagiaTileX4Y14SamIdx = 452, + MagiaTileX5Y14SamIdx = 453, + MagiaTileX6Y14SamIdx = 454, + MagiaTileX7Y14SamIdx = 455, + MagiaTileX8Y14SamIdx = 456, + MagiaTileX9Y14SamIdx = 457, + MagiaTileX10Y14SamIdx = 458, + MagiaTileX11Y14SamIdx = 459, + MagiaTileX12Y14SamIdx = 460, + MagiaTileX13Y14SamIdx = 461, + MagiaTileX14Y14SamIdx = 462, + MagiaTileX15Y14SamIdx = 463, + MagiaTileX16Y14SamIdx = 464, + MagiaTileX17Y14SamIdx = 465, + MagiaTileX18Y14SamIdx = 466, + MagiaTileX19Y14SamIdx = 467, + MagiaTileX20Y14SamIdx = 468, + MagiaTileX21Y14SamIdx = 469, + MagiaTileX22Y14SamIdx = 470, + MagiaTileX23Y14SamIdx = 471, + MagiaTileX24Y14SamIdx = 472, + MagiaTileX25Y14SamIdx = 473, + MagiaTileX26Y14SamIdx = 474, + MagiaTileX27Y14SamIdx = 475, + MagiaTileX28Y14SamIdx = 476, + MagiaTileX29Y14SamIdx = 477, + MagiaTileX30Y14SamIdx = 478, + MagiaTileX31Y14SamIdx = 479, + MagiaTileX0Y15SamIdx = 480, + MagiaTileX1Y15SamIdx = 481, + MagiaTileX2Y15SamIdx = 482, + MagiaTileX3Y15SamIdx = 483, + MagiaTileX4Y15SamIdx = 484, + MagiaTileX5Y15SamIdx = 485, + MagiaTileX6Y15SamIdx = 486, + MagiaTileX7Y15SamIdx = 487, + MagiaTileX8Y15SamIdx = 488, + MagiaTileX9Y15SamIdx = 489, + MagiaTileX10Y15SamIdx = 490, + MagiaTileX11Y15SamIdx = 491, + MagiaTileX12Y15SamIdx = 492, + MagiaTileX13Y15SamIdx = 493, + MagiaTileX14Y15SamIdx = 494, + MagiaTileX15Y15SamIdx = 495, + MagiaTileX16Y15SamIdx = 496, + MagiaTileX17Y15SamIdx = 497, + MagiaTileX18Y15SamIdx = 498, + MagiaTileX19Y15SamIdx = 499, + MagiaTileX20Y15SamIdx = 500, + MagiaTileX21Y15SamIdx = 501, + MagiaTileX22Y15SamIdx = 502, + MagiaTileX23Y15SamIdx = 503, + MagiaTileX24Y15SamIdx = 504, + MagiaTileX25Y15SamIdx = 505, + MagiaTileX26Y15SamIdx = 506, + MagiaTileX27Y15SamIdx = 507, + MagiaTileX28Y15SamIdx = 508, + MagiaTileX29Y15SamIdx = 509, + MagiaTileX30Y15SamIdx = 510, + MagiaTileX31Y15SamIdx = 511, + MagiaTileX0Y16SamIdx = 512, + MagiaTileX1Y16SamIdx = 513, + MagiaTileX2Y16SamIdx = 514, + MagiaTileX3Y16SamIdx = 515, + MagiaTileX4Y16SamIdx = 516, + MagiaTileX5Y16SamIdx = 517, + MagiaTileX6Y16SamIdx = 518, + MagiaTileX7Y16SamIdx = 519, + MagiaTileX8Y16SamIdx = 520, + MagiaTileX9Y16SamIdx = 521, + MagiaTileX10Y16SamIdx = 522, + MagiaTileX11Y16SamIdx = 523, + MagiaTileX12Y16SamIdx = 524, + MagiaTileX13Y16SamIdx = 525, + MagiaTileX14Y16SamIdx = 526, + MagiaTileX15Y16SamIdx = 527, + MagiaTileX16Y16SamIdx = 528, + MagiaTileX17Y16SamIdx = 529, + MagiaTileX18Y16SamIdx = 530, + MagiaTileX19Y16SamIdx = 531, + MagiaTileX20Y16SamIdx = 532, + MagiaTileX21Y16SamIdx = 533, + MagiaTileX22Y16SamIdx = 534, + MagiaTileX23Y16SamIdx = 535, + MagiaTileX24Y16SamIdx = 536, + MagiaTileX25Y16SamIdx = 537, + MagiaTileX26Y16SamIdx = 538, + MagiaTileX27Y16SamIdx = 539, + MagiaTileX28Y16SamIdx = 540, + MagiaTileX29Y16SamIdx = 541, + MagiaTileX30Y16SamIdx = 542, + MagiaTileX31Y16SamIdx = 543, + MagiaTileX0Y17SamIdx = 544, + MagiaTileX1Y17SamIdx = 545, + MagiaTileX2Y17SamIdx = 546, + MagiaTileX3Y17SamIdx = 547, + MagiaTileX4Y17SamIdx = 548, + MagiaTileX5Y17SamIdx = 549, + MagiaTileX6Y17SamIdx = 550, + MagiaTileX7Y17SamIdx = 551, + MagiaTileX8Y17SamIdx = 552, + MagiaTileX9Y17SamIdx = 553, + MagiaTileX10Y17SamIdx = 554, + MagiaTileX11Y17SamIdx = 555, + MagiaTileX12Y17SamIdx = 556, + MagiaTileX13Y17SamIdx = 557, + MagiaTileX14Y17SamIdx = 558, + MagiaTileX15Y17SamIdx = 559, + MagiaTileX16Y17SamIdx = 560, + MagiaTileX17Y17SamIdx = 561, + MagiaTileX18Y17SamIdx = 562, + MagiaTileX19Y17SamIdx = 563, + MagiaTileX20Y17SamIdx = 564, + MagiaTileX21Y17SamIdx = 565, + MagiaTileX22Y17SamIdx = 566, + MagiaTileX23Y17SamIdx = 567, + MagiaTileX24Y17SamIdx = 568, + MagiaTileX25Y17SamIdx = 569, + MagiaTileX26Y17SamIdx = 570, + MagiaTileX27Y17SamIdx = 571, + MagiaTileX28Y17SamIdx = 572, + MagiaTileX29Y17SamIdx = 573, + MagiaTileX30Y17SamIdx = 574, + MagiaTileX31Y17SamIdx = 575, + MagiaTileX0Y18SamIdx = 576, + MagiaTileX1Y18SamIdx = 577, + MagiaTileX2Y18SamIdx = 578, + MagiaTileX3Y18SamIdx = 579, + MagiaTileX4Y18SamIdx = 580, + MagiaTileX5Y18SamIdx = 581, + MagiaTileX6Y18SamIdx = 582, + MagiaTileX7Y18SamIdx = 583, + MagiaTileX8Y18SamIdx = 584, + MagiaTileX9Y18SamIdx = 585, + MagiaTileX10Y18SamIdx = 586, + MagiaTileX11Y18SamIdx = 587, + MagiaTileX12Y18SamIdx = 588, + MagiaTileX13Y18SamIdx = 589, + MagiaTileX14Y18SamIdx = 590, + MagiaTileX15Y18SamIdx = 591, + MagiaTileX16Y18SamIdx = 592, + MagiaTileX17Y18SamIdx = 593, + MagiaTileX18Y18SamIdx = 594, + MagiaTileX19Y18SamIdx = 595, + MagiaTileX20Y18SamIdx = 596, + MagiaTileX21Y18SamIdx = 597, + MagiaTileX22Y18SamIdx = 598, + MagiaTileX23Y18SamIdx = 599, + MagiaTileX24Y18SamIdx = 600, + MagiaTileX25Y18SamIdx = 601, + MagiaTileX26Y18SamIdx = 602, + MagiaTileX27Y18SamIdx = 603, + MagiaTileX28Y18SamIdx = 604, + MagiaTileX29Y18SamIdx = 605, + MagiaTileX30Y18SamIdx = 606, + MagiaTileX31Y18SamIdx = 607, + MagiaTileX0Y19SamIdx = 608, + MagiaTileX1Y19SamIdx = 609, + MagiaTileX2Y19SamIdx = 610, + MagiaTileX3Y19SamIdx = 611, + MagiaTileX4Y19SamIdx = 612, + MagiaTileX5Y19SamIdx = 613, + MagiaTileX6Y19SamIdx = 614, + MagiaTileX7Y19SamIdx = 615, + MagiaTileX8Y19SamIdx = 616, + MagiaTileX9Y19SamIdx = 617, + MagiaTileX10Y19SamIdx = 618, + MagiaTileX11Y19SamIdx = 619, + MagiaTileX12Y19SamIdx = 620, + MagiaTileX13Y19SamIdx = 621, + MagiaTileX14Y19SamIdx = 622, + MagiaTileX15Y19SamIdx = 623, + MagiaTileX16Y19SamIdx = 624, + MagiaTileX17Y19SamIdx = 625, + MagiaTileX18Y19SamIdx = 626, + MagiaTileX19Y19SamIdx = 627, + MagiaTileX20Y19SamIdx = 628, + MagiaTileX21Y19SamIdx = 629, + MagiaTileX22Y19SamIdx = 630, + MagiaTileX23Y19SamIdx = 631, + MagiaTileX24Y19SamIdx = 632, + MagiaTileX25Y19SamIdx = 633, + MagiaTileX26Y19SamIdx = 634, + MagiaTileX27Y19SamIdx = 635, + MagiaTileX28Y19SamIdx = 636, + MagiaTileX29Y19SamIdx = 637, + MagiaTileX30Y19SamIdx = 638, + MagiaTileX31Y19SamIdx = 639, + MagiaTileX0Y20SamIdx = 640, + MagiaTileX1Y20SamIdx = 641, + MagiaTileX2Y20SamIdx = 642, + MagiaTileX3Y20SamIdx = 643, + MagiaTileX4Y20SamIdx = 644, + MagiaTileX5Y20SamIdx = 645, + MagiaTileX6Y20SamIdx = 646, + MagiaTileX7Y20SamIdx = 647, + MagiaTileX8Y20SamIdx = 648, + MagiaTileX9Y20SamIdx = 649, + MagiaTileX10Y20SamIdx = 650, + MagiaTileX11Y20SamIdx = 651, + MagiaTileX12Y20SamIdx = 652, + MagiaTileX13Y20SamIdx = 653, + MagiaTileX14Y20SamIdx = 654, + MagiaTileX15Y20SamIdx = 655, + MagiaTileX16Y20SamIdx = 656, + MagiaTileX17Y20SamIdx = 657, + MagiaTileX18Y20SamIdx = 658, + MagiaTileX19Y20SamIdx = 659, + MagiaTileX20Y20SamIdx = 660, + MagiaTileX21Y20SamIdx = 661, + MagiaTileX22Y20SamIdx = 662, + MagiaTileX23Y20SamIdx = 663, + MagiaTileX24Y20SamIdx = 664, + MagiaTileX25Y20SamIdx = 665, + MagiaTileX26Y20SamIdx = 666, + MagiaTileX27Y20SamIdx = 667, + MagiaTileX28Y20SamIdx = 668, + MagiaTileX29Y20SamIdx = 669, + MagiaTileX30Y20SamIdx = 670, + MagiaTileX31Y20SamIdx = 671, + MagiaTileX0Y21SamIdx = 672, + MagiaTileX1Y21SamIdx = 673, + MagiaTileX2Y21SamIdx = 674, + MagiaTileX3Y21SamIdx = 675, + MagiaTileX4Y21SamIdx = 676, + MagiaTileX5Y21SamIdx = 677, + MagiaTileX6Y21SamIdx = 678, + MagiaTileX7Y21SamIdx = 679, + MagiaTileX8Y21SamIdx = 680, + MagiaTileX9Y21SamIdx = 681, + MagiaTileX10Y21SamIdx = 682, + MagiaTileX11Y21SamIdx = 683, + MagiaTileX12Y21SamIdx = 684, + MagiaTileX13Y21SamIdx = 685, + MagiaTileX14Y21SamIdx = 686, + MagiaTileX15Y21SamIdx = 687, + MagiaTileX16Y21SamIdx = 688, + MagiaTileX17Y21SamIdx = 689, + MagiaTileX18Y21SamIdx = 690, + MagiaTileX19Y21SamIdx = 691, + MagiaTileX20Y21SamIdx = 692, + MagiaTileX21Y21SamIdx = 693, + MagiaTileX22Y21SamIdx = 694, + MagiaTileX23Y21SamIdx = 695, + MagiaTileX24Y21SamIdx = 696, + MagiaTileX25Y21SamIdx = 697, + MagiaTileX26Y21SamIdx = 698, + MagiaTileX27Y21SamIdx = 699, + MagiaTileX28Y21SamIdx = 700, + MagiaTileX29Y21SamIdx = 701, + MagiaTileX30Y21SamIdx = 702, + MagiaTileX31Y21SamIdx = 703, + MagiaTileX0Y22SamIdx = 704, + MagiaTileX1Y22SamIdx = 705, + MagiaTileX2Y22SamIdx = 706, + MagiaTileX3Y22SamIdx = 707, + MagiaTileX4Y22SamIdx = 708, + MagiaTileX5Y22SamIdx = 709, + MagiaTileX6Y22SamIdx = 710, + MagiaTileX7Y22SamIdx = 711, + MagiaTileX8Y22SamIdx = 712, + MagiaTileX9Y22SamIdx = 713, + MagiaTileX10Y22SamIdx = 714, + MagiaTileX11Y22SamIdx = 715, + MagiaTileX12Y22SamIdx = 716, + MagiaTileX13Y22SamIdx = 717, + MagiaTileX14Y22SamIdx = 718, + MagiaTileX15Y22SamIdx = 719, + MagiaTileX16Y22SamIdx = 720, + MagiaTileX17Y22SamIdx = 721, + MagiaTileX18Y22SamIdx = 722, + MagiaTileX19Y22SamIdx = 723, + MagiaTileX20Y22SamIdx = 724, + MagiaTileX21Y22SamIdx = 725, + MagiaTileX22Y22SamIdx = 726, + MagiaTileX23Y22SamIdx = 727, + MagiaTileX24Y22SamIdx = 728, + MagiaTileX25Y22SamIdx = 729, + MagiaTileX26Y22SamIdx = 730, + MagiaTileX27Y22SamIdx = 731, + MagiaTileX28Y22SamIdx = 732, + MagiaTileX29Y22SamIdx = 733, + MagiaTileX30Y22SamIdx = 734, + MagiaTileX31Y22SamIdx = 735, + MagiaTileX0Y23SamIdx = 736, + MagiaTileX1Y23SamIdx = 737, + MagiaTileX2Y23SamIdx = 738, + MagiaTileX3Y23SamIdx = 739, + MagiaTileX4Y23SamIdx = 740, + MagiaTileX5Y23SamIdx = 741, + MagiaTileX6Y23SamIdx = 742, + MagiaTileX7Y23SamIdx = 743, + MagiaTileX8Y23SamIdx = 744, + MagiaTileX9Y23SamIdx = 745, + MagiaTileX10Y23SamIdx = 746, + MagiaTileX11Y23SamIdx = 747, + MagiaTileX12Y23SamIdx = 748, + MagiaTileX13Y23SamIdx = 749, + MagiaTileX14Y23SamIdx = 750, + MagiaTileX15Y23SamIdx = 751, + MagiaTileX16Y23SamIdx = 752, + MagiaTileX17Y23SamIdx = 753, + MagiaTileX18Y23SamIdx = 754, + MagiaTileX19Y23SamIdx = 755, + MagiaTileX20Y23SamIdx = 756, + MagiaTileX21Y23SamIdx = 757, + MagiaTileX22Y23SamIdx = 758, + MagiaTileX23Y23SamIdx = 759, + MagiaTileX24Y23SamIdx = 760, + MagiaTileX25Y23SamIdx = 761, + MagiaTileX26Y23SamIdx = 762, + MagiaTileX27Y23SamIdx = 763, + MagiaTileX28Y23SamIdx = 764, + MagiaTileX29Y23SamIdx = 765, + MagiaTileX30Y23SamIdx = 766, + MagiaTileX31Y23SamIdx = 767, + MagiaTileX0Y24SamIdx = 768, + MagiaTileX1Y24SamIdx = 769, + MagiaTileX2Y24SamIdx = 770, + MagiaTileX3Y24SamIdx = 771, + MagiaTileX4Y24SamIdx = 772, + MagiaTileX5Y24SamIdx = 773, + MagiaTileX6Y24SamIdx = 774, + MagiaTileX7Y24SamIdx = 775, + MagiaTileX8Y24SamIdx = 776, + MagiaTileX9Y24SamIdx = 777, + MagiaTileX10Y24SamIdx = 778, + MagiaTileX11Y24SamIdx = 779, + MagiaTileX12Y24SamIdx = 780, + MagiaTileX13Y24SamIdx = 781, + MagiaTileX14Y24SamIdx = 782, + MagiaTileX15Y24SamIdx = 783, + MagiaTileX16Y24SamIdx = 784, + MagiaTileX17Y24SamIdx = 785, + MagiaTileX18Y24SamIdx = 786, + MagiaTileX19Y24SamIdx = 787, + MagiaTileX20Y24SamIdx = 788, + MagiaTileX21Y24SamIdx = 789, + MagiaTileX22Y24SamIdx = 790, + MagiaTileX23Y24SamIdx = 791, + MagiaTileX24Y24SamIdx = 792, + MagiaTileX25Y24SamIdx = 793, + MagiaTileX26Y24SamIdx = 794, + MagiaTileX27Y24SamIdx = 795, + MagiaTileX28Y24SamIdx = 796, + MagiaTileX29Y24SamIdx = 797, + MagiaTileX30Y24SamIdx = 798, + MagiaTileX31Y24SamIdx = 799, + MagiaTileX0Y25SamIdx = 800, + MagiaTileX1Y25SamIdx = 801, + MagiaTileX2Y25SamIdx = 802, + MagiaTileX3Y25SamIdx = 803, + MagiaTileX4Y25SamIdx = 804, + MagiaTileX5Y25SamIdx = 805, + MagiaTileX6Y25SamIdx = 806, + MagiaTileX7Y25SamIdx = 807, + MagiaTileX8Y25SamIdx = 808, + MagiaTileX9Y25SamIdx = 809, + MagiaTileX10Y25SamIdx = 810, + MagiaTileX11Y25SamIdx = 811, + MagiaTileX12Y25SamIdx = 812, + MagiaTileX13Y25SamIdx = 813, + MagiaTileX14Y25SamIdx = 814, + MagiaTileX15Y25SamIdx = 815, + MagiaTileX16Y25SamIdx = 816, + MagiaTileX17Y25SamIdx = 817, + MagiaTileX18Y25SamIdx = 818, + MagiaTileX19Y25SamIdx = 819, + MagiaTileX20Y25SamIdx = 820, + MagiaTileX21Y25SamIdx = 821, + MagiaTileX22Y25SamIdx = 822, + MagiaTileX23Y25SamIdx = 823, + MagiaTileX24Y25SamIdx = 824, + MagiaTileX25Y25SamIdx = 825, + MagiaTileX26Y25SamIdx = 826, + MagiaTileX27Y25SamIdx = 827, + MagiaTileX28Y25SamIdx = 828, + MagiaTileX29Y25SamIdx = 829, + MagiaTileX30Y25SamIdx = 830, + MagiaTileX31Y25SamIdx = 831, + MagiaTileX0Y26SamIdx = 832, + MagiaTileX1Y26SamIdx = 833, + MagiaTileX2Y26SamIdx = 834, + MagiaTileX3Y26SamIdx = 835, + MagiaTileX4Y26SamIdx = 836, + MagiaTileX5Y26SamIdx = 837, + MagiaTileX6Y26SamIdx = 838, + MagiaTileX7Y26SamIdx = 839, + MagiaTileX8Y26SamIdx = 840, + MagiaTileX9Y26SamIdx = 841, + MagiaTileX10Y26SamIdx = 842, + MagiaTileX11Y26SamIdx = 843, + MagiaTileX12Y26SamIdx = 844, + MagiaTileX13Y26SamIdx = 845, + MagiaTileX14Y26SamIdx = 846, + MagiaTileX15Y26SamIdx = 847, + MagiaTileX16Y26SamIdx = 848, + MagiaTileX17Y26SamIdx = 849, + MagiaTileX18Y26SamIdx = 850, + MagiaTileX19Y26SamIdx = 851, + MagiaTileX20Y26SamIdx = 852, + MagiaTileX21Y26SamIdx = 853, + MagiaTileX22Y26SamIdx = 854, + MagiaTileX23Y26SamIdx = 855, + MagiaTileX24Y26SamIdx = 856, + MagiaTileX25Y26SamIdx = 857, + MagiaTileX26Y26SamIdx = 858, + MagiaTileX27Y26SamIdx = 859, + MagiaTileX28Y26SamIdx = 860, + MagiaTileX29Y26SamIdx = 861, + MagiaTileX30Y26SamIdx = 862, + MagiaTileX31Y26SamIdx = 863, + MagiaTileX0Y27SamIdx = 864, + MagiaTileX1Y27SamIdx = 865, + MagiaTileX2Y27SamIdx = 866, + MagiaTileX3Y27SamIdx = 867, + MagiaTileX4Y27SamIdx = 868, + MagiaTileX5Y27SamIdx = 869, + MagiaTileX6Y27SamIdx = 870, + MagiaTileX7Y27SamIdx = 871, + MagiaTileX8Y27SamIdx = 872, + MagiaTileX9Y27SamIdx = 873, + MagiaTileX10Y27SamIdx = 874, + MagiaTileX11Y27SamIdx = 875, + MagiaTileX12Y27SamIdx = 876, + MagiaTileX13Y27SamIdx = 877, + MagiaTileX14Y27SamIdx = 878, + MagiaTileX15Y27SamIdx = 879, + MagiaTileX16Y27SamIdx = 880, + MagiaTileX17Y27SamIdx = 881, + MagiaTileX18Y27SamIdx = 882, + MagiaTileX19Y27SamIdx = 883, + MagiaTileX20Y27SamIdx = 884, + MagiaTileX21Y27SamIdx = 885, + MagiaTileX22Y27SamIdx = 886, + MagiaTileX23Y27SamIdx = 887, + MagiaTileX24Y27SamIdx = 888, + MagiaTileX25Y27SamIdx = 889, + MagiaTileX26Y27SamIdx = 890, + MagiaTileX27Y27SamIdx = 891, + MagiaTileX28Y27SamIdx = 892, + MagiaTileX29Y27SamIdx = 893, + MagiaTileX30Y27SamIdx = 894, + MagiaTileX31Y27SamIdx = 895, + MagiaTileX0Y28SamIdx = 896, + MagiaTileX1Y28SamIdx = 897, + MagiaTileX2Y28SamIdx = 898, + MagiaTileX3Y28SamIdx = 899, + MagiaTileX4Y28SamIdx = 900, + MagiaTileX5Y28SamIdx = 901, + MagiaTileX6Y28SamIdx = 902, + MagiaTileX7Y28SamIdx = 903, + MagiaTileX8Y28SamIdx = 904, + MagiaTileX9Y28SamIdx = 905, + MagiaTileX10Y28SamIdx = 906, + MagiaTileX11Y28SamIdx = 907, + MagiaTileX12Y28SamIdx = 908, + MagiaTileX13Y28SamIdx = 909, + MagiaTileX14Y28SamIdx = 910, + MagiaTileX15Y28SamIdx = 911, + MagiaTileX16Y28SamIdx = 912, + MagiaTileX17Y28SamIdx = 913, + MagiaTileX18Y28SamIdx = 914, + MagiaTileX19Y28SamIdx = 915, + MagiaTileX20Y28SamIdx = 916, + MagiaTileX21Y28SamIdx = 917, + MagiaTileX22Y28SamIdx = 918, + MagiaTileX23Y28SamIdx = 919, + MagiaTileX24Y28SamIdx = 920, + MagiaTileX25Y28SamIdx = 921, + MagiaTileX26Y28SamIdx = 922, + MagiaTileX27Y28SamIdx = 923, + MagiaTileX28Y28SamIdx = 924, + MagiaTileX29Y28SamIdx = 925, + MagiaTileX30Y28SamIdx = 926, + MagiaTileX31Y28SamIdx = 927, + MagiaTileX0Y29SamIdx = 928, + MagiaTileX1Y29SamIdx = 929, + MagiaTileX2Y29SamIdx = 930, + MagiaTileX3Y29SamIdx = 931, + MagiaTileX4Y29SamIdx = 932, + MagiaTileX5Y29SamIdx = 933, + MagiaTileX6Y29SamIdx = 934, + MagiaTileX7Y29SamIdx = 935, + MagiaTileX8Y29SamIdx = 936, + MagiaTileX9Y29SamIdx = 937, + MagiaTileX10Y29SamIdx = 938, + MagiaTileX11Y29SamIdx = 939, + MagiaTileX12Y29SamIdx = 940, + MagiaTileX13Y29SamIdx = 941, + MagiaTileX14Y29SamIdx = 942, + MagiaTileX15Y29SamIdx = 943, + MagiaTileX16Y29SamIdx = 944, + MagiaTileX17Y29SamIdx = 945, + MagiaTileX18Y29SamIdx = 946, + MagiaTileX19Y29SamIdx = 947, + MagiaTileX20Y29SamIdx = 948, + MagiaTileX21Y29SamIdx = 949, + MagiaTileX22Y29SamIdx = 950, + MagiaTileX23Y29SamIdx = 951, + MagiaTileX24Y29SamIdx = 952, + MagiaTileX25Y29SamIdx = 953, + MagiaTileX26Y29SamIdx = 954, + MagiaTileX27Y29SamIdx = 955, + MagiaTileX28Y29SamIdx = 956, + MagiaTileX29Y29SamIdx = 957, + MagiaTileX30Y29SamIdx = 958, + MagiaTileX31Y29SamIdx = 959, + MagiaTileX0Y30SamIdx = 960, + MagiaTileX1Y30SamIdx = 961, + MagiaTileX2Y30SamIdx = 962, + MagiaTileX3Y30SamIdx = 963, + MagiaTileX4Y30SamIdx = 964, + MagiaTileX5Y30SamIdx = 965, + MagiaTileX6Y30SamIdx = 966, + MagiaTileX7Y30SamIdx = 967, + MagiaTileX8Y30SamIdx = 968, + MagiaTileX9Y30SamIdx = 969, + MagiaTileX10Y30SamIdx = 970, + MagiaTileX11Y30SamIdx = 971, + MagiaTileX12Y30SamIdx = 972, + MagiaTileX13Y30SamIdx = 973, + MagiaTileX14Y30SamIdx = 974, + MagiaTileX15Y30SamIdx = 975, + MagiaTileX16Y30SamIdx = 976, + MagiaTileX17Y30SamIdx = 977, + MagiaTileX18Y30SamIdx = 978, + MagiaTileX19Y30SamIdx = 979, + MagiaTileX20Y30SamIdx = 980, + MagiaTileX21Y30SamIdx = 981, + MagiaTileX22Y30SamIdx = 982, + MagiaTileX23Y30SamIdx = 983, + MagiaTileX24Y30SamIdx = 984, + MagiaTileX25Y30SamIdx = 985, + MagiaTileX26Y30SamIdx = 986, + MagiaTileX27Y30SamIdx = 987, + MagiaTileX28Y30SamIdx = 988, + MagiaTileX29Y30SamIdx = 989, + MagiaTileX30Y30SamIdx = 990, + MagiaTileX31Y30SamIdx = 991, + MagiaTileX0Y31SamIdx = 992, + MagiaTileX1Y31SamIdx = 993, + MagiaTileX2Y31SamIdx = 994, + MagiaTileX3Y31SamIdx = 995, + MagiaTileX4Y31SamIdx = 996, + MagiaTileX5Y31SamIdx = 997, + MagiaTileX6Y31SamIdx = 998, + MagiaTileX7Y31SamIdx = 999, + MagiaTileX8Y31SamIdx = 1000, + MagiaTileX9Y31SamIdx = 1001, + MagiaTileX10Y31SamIdx = 1002, + MagiaTileX11Y31SamIdx = 1003, + MagiaTileX12Y31SamIdx = 1004, + MagiaTileX13Y31SamIdx = 1005, + MagiaTileX14Y31SamIdx = 1006, + MagiaTileX15Y31SamIdx = 1007, + MagiaTileX16Y31SamIdx = 1008, + MagiaTileX17Y31SamIdx = 1009, + MagiaTileX18Y31SamIdx = 1010, + MagiaTileX19Y31SamIdx = 1011, + MagiaTileX20Y31SamIdx = 1012, + MagiaTileX21Y31SamIdx = 1013, + MagiaTileX22Y31SamIdx = 1014, + MagiaTileX23Y31SamIdx = 1015, + MagiaTileX24Y31SamIdx = 1016, + MagiaTileX25Y31SamIdx = 1017, + MagiaTileX26Y31SamIdx = 1018, + MagiaTileX27Y31SamIdx = 1019, + MagiaTileX28Y31SamIdx = 1020, + MagiaTileX29Y31SamIdx = 1021, + MagiaTileX30Y31SamIdx = 1022, + MagiaTileX31Y31SamIdx = 1023, + L20SamIdx = 1024, + L21SamIdx = 1025, + L22SamIdx = 1026, + L23SamIdx = 1027, + L24SamIdx = 1028, + L25SamIdx = 1029, + L26SamIdx = 1030, + L27SamIdx = 1031, + L28SamIdx = 1032, + L29SamIdx = 1033, + L210SamIdx = 1034, + L211SamIdx = 1035, + L212SamIdx = 1036, + L213SamIdx = 1037, + L214SamIdx = 1038, + L215SamIdx = 1039, + L216SamIdx = 1040, + L217SamIdx = 1041, + L218SamIdx = 1042, + L219SamIdx = 1043, + L220SamIdx = 1044, + L221SamIdx = 1045, + L222SamIdx = 1046, + L223SamIdx = 1047, + L224SamIdx = 1048, + L225SamIdx = 1049, + L226SamIdx = 1050, + L227SamIdx = 1051, + L228SamIdx = 1052, + L229SamIdx = 1053, + L230SamIdx = 1054, + L231SamIdx = 1055} sam_idx_e; + + + typedef logic[0:0] rob_idx_t; typedef logic[0:0] port_id_t; typedef logic[5:0] x_bits_t; @@ -1089,6 +2158,12 @@ typedef struct packed { typedef logic route_t; + typedef struct packed { + id_t idx; + id_t start_addr; + id_t end_addr; + } route_map_rule_t; + localparam int unsigned SamNumRules = 1056; typedef struct packed { @@ -1098,1062 +2173,12574 @@ typedef struct packed { } sam_rule_t; localparam sam_rule_t[SamNumRules-1:0] Sam = '{ -'{idx: '{x: 0, y: 31, port_id: 0}, start_addr: 32'hfe000000, end_addr: 32'hffffffff},// L2_31_sam_idx -'{idx: '{x: 0, y: 30, port_id: 0}, start_addr: 32'hfc000000, end_addr: 32'hfe000000},// L2_30_sam_idx -'{idx: '{x: 0, y: 29, port_id: 0}, start_addr: 32'hfa000000, end_addr: 32'hfc000000},// L2_29_sam_idx -'{idx: '{x: 0, y: 28, port_id: 0}, start_addr: 32'hf8000000, end_addr: 32'hfa000000},// L2_28_sam_idx -'{idx: '{x: 0, y: 27, port_id: 0}, start_addr: 32'hf6000000, end_addr: 32'hf8000000},// L2_27_sam_idx -'{idx: '{x: 0, y: 26, port_id: 0}, start_addr: 32'hf4000000, end_addr: 32'hf6000000},// L2_26_sam_idx -'{idx: '{x: 0, y: 25, port_id: 0}, start_addr: 32'hf2000000, end_addr: 32'hf4000000},// L2_25_sam_idx -'{idx: '{x: 0, y: 24, port_id: 0}, start_addr: 32'hf0000000, end_addr: 32'hf2000000},// L2_24_sam_idx -'{idx: '{x: 0, y: 23, port_id: 0}, start_addr: 32'hee000000, end_addr: 32'hf0000000},// L2_23_sam_idx -'{idx: '{x: 0, y: 22, port_id: 0}, start_addr: 32'hec000000, end_addr: 32'hee000000},// L2_22_sam_idx -'{idx: '{x: 0, y: 21, port_id: 0}, start_addr: 32'hea000000, end_addr: 32'hec000000},// L2_21_sam_idx -'{idx: '{x: 0, y: 20, port_id: 0}, start_addr: 32'he8000000, end_addr: 32'hea000000},// L2_20_sam_idx -'{idx: '{x: 0, y: 19, port_id: 0}, start_addr: 32'he6000000, end_addr: 32'he8000000},// L2_19_sam_idx -'{idx: '{x: 0, y: 18, port_id: 0}, start_addr: 32'he4000000, end_addr: 32'he6000000},// L2_18_sam_idx -'{idx: '{x: 0, y: 17, port_id: 0}, start_addr: 32'he2000000, end_addr: 32'he4000000},// L2_17_sam_idx -'{idx: '{x: 0, y: 16, port_id: 0}, start_addr: 32'he0000000, end_addr: 32'he2000000},// L2_16_sam_idx -'{idx: '{x: 0, y: 15, port_id: 0}, start_addr: 32'hde000000, end_addr: 32'he0000000},// L2_15_sam_idx -'{idx: '{x: 0, y: 14, port_id: 0}, start_addr: 32'hdc000000, end_addr: 32'hde000000},// L2_14_sam_idx -'{idx: '{x: 0, y: 13, port_id: 0}, start_addr: 32'hda000000, end_addr: 32'hdc000000},// L2_13_sam_idx -'{idx: '{x: 0, y: 12, port_id: 0}, start_addr: 32'hd8000000, end_addr: 32'hda000000},// L2_12_sam_idx -'{idx: '{x: 0, y: 11, port_id: 0}, start_addr: 32'hd6000000, end_addr: 32'hd8000000},// L2_11_sam_idx -'{idx: '{x: 0, y: 10, port_id: 0}, start_addr: 32'hd4000000, end_addr: 32'hd6000000},// L2_10_sam_idx -'{idx: '{x: 0, y: 9, port_id: 0}, start_addr: 32'hd2000000, end_addr: 32'hd4000000},// L2_9_sam_idx -'{idx: '{x: 0, y: 8, port_id: 0}, start_addr: 32'hd0000000, end_addr: 32'hd2000000},// L2_8_sam_idx -'{idx: '{x: 0, y: 7, port_id: 0}, start_addr: 32'hce000000, end_addr: 32'hd0000000},// L2_7_sam_idx -'{idx: '{x: 0, y: 6, port_id: 0}, start_addr: 32'hcc000000, end_addr: 32'hce000000},// L2_6_sam_idx -'{idx: '{x: 0, y: 5, port_id: 0}, start_addr: 32'hca000000, end_addr: 32'hcc000000},// L2_5_sam_idx -'{idx: '{x: 0, y: 4, port_id: 0}, start_addr: 32'hc8000000, end_addr: 32'hca000000},// L2_4_sam_idx -'{idx: '{x: 0, y: 3, port_id: 0}, start_addr: 32'hc6000000, end_addr: 32'hc8000000},// L2_3_sam_idx -'{idx: '{x: 0, y: 2, port_id: 0}, start_addr: 32'hc4000000, end_addr: 32'hc6000000},// L2_2_sam_idx -'{idx: '{x: 0, y: 1, port_id: 0}, start_addr: 32'hc2000000, end_addr: 32'hc4000000},// L2_1_sam_idx -'{idx: '{x: 0, y: 0, port_id: 0}, start_addr: 32'hc0000000, end_addr: 32'hc2000000},// L2_0_sam_idx -'{idx: '{x: 32, y: 31, port_id: 0}, start_addr: 32'h3ff00000, end_addr: 32'h40000000},// magia_tile_x31_y31_sam_idx -'{idx: '{x: 31, y: 31, port_id: 0}, start_addr: 32'h3fe00000, end_addr: 32'h3ff00000},// magia_tile_x30_y31_sam_idx -'{idx: '{x: 30, y: 31, port_id: 0}, start_addr: 32'h3fd00000, end_addr: 32'h3fe00000},// magia_tile_x29_y31_sam_idx -'{idx: '{x: 29, y: 31, port_id: 0}, start_addr: 32'h3fc00000, end_addr: 32'h3fd00000},// magia_tile_x28_y31_sam_idx -'{idx: '{x: 28, y: 31, port_id: 0}, start_addr: 32'h3fb00000, end_addr: 32'h3fc00000},// magia_tile_x27_y31_sam_idx -'{idx: '{x: 27, y: 31, port_id: 0}, start_addr: 32'h3fa00000, end_addr: 32'h3fb00000},// magia_tile_x26_y31_sam_idx -'{idx: '{x: 26, y: 31, port_id: 0}, start_addr: 32'h3f900000, end_addr: 32'h3fa00000},// magia_tile_x25_y31_sam_idx -'{idx: '{x: 25, y: 31, port_id: 0}, start_addr: 32'h3f800000, end_addr: 32'h3f900000},// magia_tile_x24_y31_sam_idx -'{idx: '{x: 24, y: 31, port_id: 0}, start_addr: 32'h3f700000, end_addr: 32'h3f800000},// magia_tile_x23_y31_sam_idx -'{idx: '{x: 23, y: 31, port_id: 0}, start_addr: 32'h3f600000, end_addr: 32'h3f700000},// magia_tile_x22_y31_sam_idx -'{idx: '{x: 22, y: 31, port_id: 0}, start_addr: 32'h3f500000, end_addr: 32'h3f600000},// magia_tile_x21_y31_sam_idx -'{idx: '{x: 21, y: 31, port_id: 0}, start_addr: 32'h3f400000, end_addr: 32'h3f500000},// magia_tile_x20_y31_sam_idx -'{idx: '{x: 20, y: 31, port_id: 0}, start_addr: 32'h3f300000, end_addr: 32'h3f400000},// magia_tile_x19_y31_sam_idx -'{idx: '{x: 19, y: 31, port_id: 0}, start_addr: 32'h3f200000, end_addr: 32'h3f300000},// magia_tile_x18_y31_sam_idx -'{idx: '{x: 18, y: 31, port_id: 0}, start_addr: 32'h3f100000, end_addr: 32'h3f200000},// magia_tile_x17_y31_sam_idx -'{idx: '{x: 17, y: 31, port_id: 0}, start_addr: 32'h3f000000, end_addr: 32'h3f100000},// magia_tile_x16_y31_sam_idx -'{idx: '{x: 16, y: 31, port_id: 0}, start_addr: 32'h3ef00000, end_addr: 32'h3f000000},// magia_tile_x15_y31_sam_idx -'{idx: '{x: 15, y: 31, port_id: 0}, start_addr: 32'h3ee00000, end_addr: 32'h3ef00000},// magia_tile_x14_y31_sam_idx -'{idx: '{x: 14, y: 31, port_id: 0}, start_addr: 32'h3ed00000, end_addr: 32'h3ee00000},// magia_tile_x13_y31_sam_idx -'{idx: '{x: 13, y: 31, port_id: 0}, start_addr: 32'h3ec00000, end_addr: 32'h3ed00000},// magia_tile_x12_y31_sam_idx -'{idx: '{x: 12, y: 31, port_id: 0}, start_addr: 32'h3eb00000, end_addr: 32'h3ec00000},// magia_tile_x11_y31_sam_idx -'{idx: '{x: 11, y: 31, port_id: 0}, start_addr: 32'h3ea00000, end_addr: 32'h3eb00000},// magia_tile_x10_y31_sam_idx -'{idx: '{x: 10, y: 31, port_id: 0}, start_addr: 32'h3e900000, end_addr: 32'h3ea00000},// magia_tile_x9_y31_sam_idx -'{idx: '{x: 9, y: 31, port_id: 0}, start_addr: 32'h3e800000, end_addr: 32'h3e900000},// magia_tile_x8_y31_sam_idx -'{idx: '{x: 8, y: 31, port_id: 0}, start_addr: 32'h3e700000, end_addr: 32'h3e800000},// magia_tile_x7_y31_sam_idx -'{idx: '{x: 7, y: 31, port_id: 0}, start_addr: 32'h3e600000, end_addr: 32'h3e700000},// magia_tile_x6_y31_sam_idx -'{idx: '{x: 6, y: 31, port_id: 0}, start_addr: 32'h3e500000, end_addr: 32'h3e600000},// magia_tile_x5_y31_sam_idx -'{idx: '{x: 5, y: 31, port_id: 0}, start_addr: 32'h3e400000, end_addr: 32'h3e500000},// magia_tile_x4_y31_sam_idx -'{idx: '{x: 4, y: 31, port_id: 0}, start_addr: 32'h3e300000, end_addr: 32'h3e400000},// magia_tile_x3_y31_sam_idx -'{idx: '{x: 3, y: 31, port_id: 0}, start_addr: 32'h3e200000, end_addr: 32'h3e300000},// magia_tile_x2_y31_sam_idx -'{idx: '{x: 2, y: 31, port_id: 0}, start_addr: 32'h3e100000, end_addr: 32'h3e200000},// magia_tile_x1_y31_sam_idx -'{idx: '{x: 1, y: 31, port_id: 0}, start_addr: 32'h3e000000, end_addr: 32'h3e100000},// magia_tile_x0_y31_sam_idx -'{idx: '{x: 32, y: 30, port_id: 0}, start_addr: 32'h3df00000, end_addr: 32'h3e000000},// magia_tile_x31_y30_sam_idx -'{idx: '{x: 31, y: 30, port_id: 0}, start_addr: 32'h3de00000, end_addr: 32'h3df00000},// magia_tile_x30_y30_sam_idx -'{idx: '{x: 30, y: 30, port_id: 0}, start_addr: 32'h3dd00000, end_addr: 32'h3de00000},// magia_tile_x29_y30_sam_idx -'{idx: '{x: 29, y: 30, port_id: 0}, start_addr: 32'h3dc00000, end_addr: 32'h3dd00000},// magia_tile_x28_y30_sam_idx -'{idx: '{x: 28, y: 30, port_id: 0}, start_addr: 32'h3db00000, end_addr: 32'h3dc00000},// magia_tile_x27_y30_sam_idx -'{idx: '{x: 27, y: 30, port_id: 0}, start_addr: 32'h3da00000, end_addr: 32'h3db00000},// magia_tile_x26_y30_sam_idx -'{idx: '{x: 26, y: 30, port_id: 0}, start_addr: 32'h3d900000, end_addr: 32'h3da00000},// magia_tile_x25_y30_sam_idx -'{idx: '{x: 25, y: 30, port_id: 0}, start_addr: 32'h3d800000, end_addr: 32'h3d900000},// magia_tile_x24_y30_sam_idx -'{idx: '{x: 24, y: 30, port_id: 0}, start_addr: 32'h3d700000, end_addr: 32'h3d800000},// magia_tile_x23_y30_sam_idx -'{idx: '{x: 23, y: 30, port_id: 0}, start_addr: 32'h3d600000, end_addr: 32'h3d700000},// magia_tile_x22_y30_sam_idx -'{idx: '{x: 22, y: 30, port_id: 0}, start_addr: 32'h3d500000, end_addr: 32'h3d600000},// magia_tile_x21_y30_sam_idx -'{idx: '{x: 21, y: 30, port_id: 0}, start_addr: 32'h3d400000, end_addr: 32'h3d500000},// magia_tile_x20_y30_sam_idx -'{idx: '{x: 20, y: 30, port_id: 0}, start_addr: 32'h3d300000, end_addr: 32'h3d400000},// magia_tile_x19_y30_sam_idx -'{idx: '{x: 19, y: 30, port_id: 0}, start_addr: 32'h3d200000, end_addr: 32'h3d300000},// magia_tile_x18_y30_sam_idx -'{idx: '{x: 18, y: 30, port_id: 0}, start_addr: 32'h3d100000, end_addr: 32'h3d200000},// magia_tile_x17_y30_sam_idx -'{idx: '{x: 17, y: 30, port_id: 0}, start_addr: 32'h3d000000, end_addr: 32'h3d100000},// magia_tile_x16_y30_sam_idx -'{idx: '{x: 16, y: 30, port_id: 0}, start_addr: 32'h3cf00000, end_addr: 32'h3d000000},// magia_tile_x15_y30_sam_idx -'{idx: '{x: 15, y: 30, port_id: 0}, start_addr: 32'h3ce00000, end_addr: 32'h3cf00000},// magia_tile_x14_y30_sam_idx -'{idx: '{x: 14, y: 30, port_id: 0}, start_addr: 32'h3cd00000, end_addr: 32'h3ce00000},// magia_tile_x13_y30_sam_idx -'{idx: '{x: 13, y: 30, port_id: 0}, start_addr: 32'h3cc00000, end_addr: 32'h3cd00000},// magia_tile_x12_y30_sam_idx -'{idx: '{x: 12, y: 30, port_id: 0}, start_addr: 32'h3cb00000, end_addr: 32'h3cc00000},// magia_tile_x11_y30_sam_idx -'{idx: '{x: 11, y: 30, port_id: 0}, start_addr: 32'h3ca00000, end_addr: 32'h3cb00000},// magia_tile_x10_y30_sam_idx -'{idx: '{x: 10, y: 30, port_id: 0}, start_addr: 32'h3c900000, end_addr: 32'h3ca00000},// magia_tile_x9_y30_sam_idx -'{idx: '{x: 9, y: 30, port_id: 0}, start_addr: 32'h3c800000, end_addr: 32'h3c900000},// magia_tile_x8_y30_sam_idx -'{idx: '{x: 8, y: 30, port_id: 0}, start_addr: 32'h3c700000, end_addr: 32'h3c800000},// magia_tile_x7_y30_sam_idx -'{idx: '{x: 7, y: 30, port_id: 0}, start_addr: 32'h3c600000, end_addr: 32'h3c700000},// magia_tile_x6_y30_sam_idx -'{idx: '{x: 6, y: 30, port_id: 0}, start_addr: 32'h3c500000, end_addr: 32'h3c600000},// magia_tile_x5_y30_sam_idx -'{idx: '{x: 5, y: 30, port_id: 0}, start_addr: 32'h3c400000, end_addr: 32'h3c500000},// magia_tile_x4_y30_sam_idx -'{idx: '{x: 4, y: 30, port_id: 0}, start_addr: 32'h3c300000, end_addr: 32'h3c400000},// magia_tile_x3_y30_sam_idx -'{idx: '{x: 3, y: 30, port_id: 0}, start_addr: 32'h3c200000, end_addr: 32'h3c300000},// magia_tile_x2_y30_sam_idx -'{idx: '{x: 2, y: 30, port_id: 0}, start_addr: 32'h3c100000, end_addr: 32'h3c200000},// magia_tile_x1_y30_sam_idx -'{idx: '{x: 1, y: 30, port_id: 0}, start_addr: 32'h3c000000, end_addr: 32'h3c100000},// magia_tile_x0_y30_sam_idx -'{idx: '{x: 32, y: 29, port_id: 0}, start_addr: 32'h3bf00000, end_addr: 32'h3c000000},// magia_tile_x31_y29_sam_idx -'{idx: '{x: 31, y: 29, port_id: 0}, start_addr: 32'h3be00000, end_addr: 32'h3bf00000},// magia_tile_x30_y29_sam_idx -'{idx: '{x: 30, y: 29, port_id: 0}, start_addr: 32'h3bd00000, end_addr: 32'h3be00000},// magia_tile_x29_y29_sam_idx -'{idx: '{x: 29, y: 29, port_id: 0}, start_addr: 32'h3bc00000, end_addr: 32'h3bd00000},// magia_tile_x28_y29_sam_idx -'{idx: '{x: 28, y: 29, port_id: 0}, start_addr: 32'h3bb00000, end_addr: 32'h3bc00000},// magia_tile_x27_y29_sam_idx -'{idx: '{x: 27, y: 29, port_id: 0}, start_addr: 32'h3ba00000, end_addr: 32'h3bb00000},// magia_tile_x26_y29_sam_idx -'{idx: '{x: 26, y: 29, port_id: 0}, start_addr: 32'h3b900000, end_addr: 32'h3ba00000},// magia_tile_x25_y29_sam_idx -'{idx: '{x: 25, y: 29, port_id: 0}, start_addr: 32'h3b800000, end_addr: 32'h3b900000},// magia_tile_x24_y29_sam_idx -'{idx: '{x: 24, y: 29, port_id: 0}, start_addr: 32'h3b700000, end_addr: 32'h3b800000},// magia_tile_x23_y29_sam_idx -'{idx: '{x: 23, y: 29, port_id: 0}, start_addr: 32'h3b600000, end_addr: 32'h3b700000},// magia_tile_x22_y29_sam_idx -'{idx: '{x: 22, y: 29, port_id: 0}, start_addr: 32'h3b500000, end_addr: 32'h3b600000},// magia_tile_x21_y29_sam_idx -'{idx: '{x: 21, y: 29, port_id: 0}, start_addr: 32'h3b400000, end_addr: 32'h3b500000},// magia_tile_x20_y29_sam_idx -'{idx: '{x: 20, y: 29, port_id: 0}, start_addr: 32'h3b300000, end_addr: 32'h3b400000},// magia_tile_x19_y29_sam_idx -'{idx: '{x: 19, y: 29, port_id: 0}, start_addr: 32'h3b200000, end_addr: 32'h3b300000},// magia_tile_x18_y29_sam_idx -'{idx: '{x: 18, y: 29, port_id: 0}, start_addr: 32'h3b100000, end_addr: 32'h3b200000},// magia_tile_x17_y29_sam_idx -'{idx: '{x: 17, y: 29, port_id: 0}, start_addr: 32'h3b000000, end_addr: 32'h3b100000},// magia_tile_x16_y29_sam_idx -'{idx: '{x: 16, y: 29, port_id: 0}, start_addr: 32'h3af00000, end_addr: 32'h3b000000},// magia_tile_x15_y29_sam_idx -'{idx: '{x: 15, y: 29, port_id: 0}, start_addr: 32'h3ae00000, end_addr: 32'h3af00000},// magia_tile_x14_y29_sam_idx -'{idx: '{x: 14, y: 29, port_id: 0}, start_addr: 32'h3ad00000, end_addr: 32'h3ae00000},// magia_tile_x13_y29_sam_idx -'{idx: '{x: 13, y: 29, port_id: 0}, start_addr: 32'h3ac00000, end_addr: 32'h3ad00000},// magia_tile_x12_y29_sam_idx -'{idx: '{x: 12, y: 29, port_id: 0}, start_addr: 32'h3ab00000, end_addr: 32'h3ac00000},// magia_tile_x11_y29_sam_idx -'{idx: '{x: 11, y: 29, port_id: 0}, start_addr: 32'h3aa00000, end_addr: 32'h3ab00000},// magia_tile_x10_y29_sam_idx -'{idx: '{x: 10, y: 29, port_id: 0}, start_addr: 32'h3a900000, end_addr: 32'h3aa00000},// magia_tile_x9_y29_sam_idx -'{idx: '{x: 9, y: 29, port_id: 0}, start_addr: 32'h3a800000, end_addr: 32'h3a900000},// magia_tile_x8_y29_sam_idx -'{idx: '{x: 8, y: 29, port_id: 0}, start_addr: 32'h3a700000, end_addr: 32'h3a800000},// magia_tile_x7_y29_sam_idx -'{idx: '{x: 7, y: 29, port_id: 0}, start_addr: 32'h3a600000, end_addr: 32'h3a700000},// magia_tile_x6_y29_sam_idx -'{idx: '{x: 6, y: 29, port_id: 0}, start_addr: 32'h3a500000, end_addr: 32'h3a600000},// magia_tile_x5_y29_sam_idx -'{idx: '{x: 5, y: 29, port_id: 0}, start_addr: 32'h3a400000, end_addr: 32'h3a500000},// magia_tile_x4_y29_sam_idx -'{idx: '{x: 4, y: 29, port_id: 0}, start_addr: 32'h3a300000, end_addr: 32'h3a400000},// magia_tile_x3_y29_sam_idx -'{idx: '{x: 3, y: 29, port_id: 0}, start_addr: 32'h3a200000, end_addr: 32'h3a300000},// magia_tile_x2_y29_sam_idx -'{idx: '{x: 2, y: 29, port_id: 0}, start_addr: 32'h3a100000, end_addr: 32'h3a200000},// magia_tile_x1_y29_sam_idx -'{idx: '{x: 1, y: 29, port_id: 0}, start_addr: 32'h3a000000, end_addr: 32'h3a100000},// magia_tile_x0_y29_sam_idx -'{idx: '{x: 32, y: 28, port_id: 0}, start_addr: 32'h39f00000, end_addr: 32'h3a000000},// magia_tile_x31_y28_sam_idx -'{idx: '{x: 31, y: 28, port_id: 0}, start_addr: 32'h39e00000, end_addr: 32'h39f00000},// magia_tile_x30_y28_sam_idx -'{idx: '{x: 30, y: 28, port_id: 0}, start_addr: 32'h39d00000, end_addr: 32'h39e00000},// magia_tile_x29_y28_sam_idx -'{idx: '{x: 29, y: 28, port_id: 0}, start_addr: 32'h39c00000, end_addr: 32'h39d00000},// magia_tile_x28_y28_sam_idx -'{idx: '{x: 28, y: 28, port_id: 0}, start_addr: 32'h39b00000, end_addr: 32'h39c00000},// magia_tile_x27_y28_sam_idx -'{idx: '{x: 27, y: 28, port_id: 0}, start_addr: 32'h39a00000, end_addr: 32'h39b00000},// magia_tile_x26_y28_sam_idx -'{idx: '{x: 26, y: 28, port_id: 0}, start_addr: 32'h39900000, end_addr: 32'h39a00000},// magia_tile_x25_y28_sam_idx -'{idx: '{x: 25, y: 28, port_id: 0}, start_addr: 32'h39800000, end_addr: 32'h39900000},// magia_tile_x24_y28_sam_idx -'{idx: '{x: 24, y: 28, port_id: 0}, start_addr: 32'h39700000, end_addr: 32'h39800000},// magia_tile_x23_y28_sam_idx -'{idx: '{x: 23, y: 28, port_id: 0}, start_addr: 32'h39600000, end_addr: 32'h39700000},// magia_tile_x22_y28_sam_idx -'{idx: '{x: 22, y: 28, port_id: 0}, start_addr: 32'h39500000, end_addr: 32'h39600000},// magia_tile_x21_y28_sam_idx -'{idx: '{x: 21, y: 28, port_id: 0}, start_addr: 32'h39400000, end_addr: 32'h39500000},// magia_tile_x20_y28_sam_idx -'{idx: '{x: 20, y: 28, port_id: 0}, start_addr: 32'h39300000, end_addr: 32'h39400000},// magia_tile_x19_y28_sam_idx -'{idx: '{x: 19, y: 28, port_id: 0}, start_addr: 32'h39200000, end_addr: 32'h39300000},// magia_tile_x18_y28_sam_idx -'{idx: '{x: 18, y: 28, port_id: 0}, start_addr: 32'h39100000, end_addr: 32'h39200000},// magia_tile_x17_y28_sam_idx -'{idx: '{x: 17, y: 28, port_id: 0}, start_addr: 32'h39000000, end_addr: 32'h39100000},// magia_tile_x16_y28_sam_idx -'{idx: '{x: 16, y: 28, port_id: 0}, start_addr: 32'h38f00000, end_addr: 32'h39000000},// magia_tile_x15_y28_sam_idx -'{idx: '{x: 15, y: 28, port_id: 0}, start_addr: 32'h38e00000, end_addr: 32'h38f00000},// magia_tile_x14_y28_sam_idx -'{idx: '{x: 14, y: 28, port_id: 0}, start_addr: 32'h38d00000, end_addr: 32'h38e00000},// magia_tile_x13_y28_sam_idx -'{idx: '{x: 13, y: 28, port_id: 0}, start_addr: 32'h38c00000, end_addr: 32'h38d00000},// magia_tile_x12_y28_sam_idx -'{idx: '{x: 12, y: 28, port_id: 0}, start_addr: 32'h38b00000, end_addr: 32'h38c00000},// magia_tile_x11_y28_sam_idx -'{idx: '{x: 11, y: 28, port_id: 0}, start_addr: 32'h38a00000, end_addr: 32'h38b00000},// magia_tile_x10_y28_sam_idx -'{idx: '{x: 10, y: 28, port_id: 0}, start_addr: 32'h38900000, end_addr: 32'h38a00000},// magia_tile_x9_y28_sam_idx -'{idx: '{x: 9, y: 28, port_id: 0}, start_addr: 32'h38800000, end_addr: 32'h38900000},// magia_tile_x8_y28_sam_idx -'{idx: '{x: 8, y: 28, port_id: 0}, start_addr: 32'h38700000, end_addr: 32'h38800000},// magia_tile_x7_y28_sam_idx -'{idx: '{x: 7, y: 28, port_id: 0}, start_addr: 32'h38600000, end_addr: 32'h38700000},// magia_tile_x6_y28_sam_idx -'{idx: '{x: 6, y: 28, port_id: 0}, start_addr: 32'h38500000, end_addr: 32'h38600000},// magia_tile_x5_y28_sam_idx -'{idx: '{x: 5, y: 28, port_id: 0}, start_addr: 32'h38400000, end_addr: 32'h38500000},// magia_tile_x4_y28_sam_idx -'{idx: '{x: 4, y: 28, port_id: 0}, start_addr: 32'h38300000, end_addr: 32'h38400000},// magia_tile_x3_y28_sam_idx -'{idx: '{x: 3, y: 28, port_id: 0}, start_addr: 32'h38200000, end_addr: 32'h38300000},// magia_tile_x2_y28_sam_idx -'{idx: '{x: 2, y: 28, port_id: 0}, start_addr: 32'h38100000, end_addr: 32'h38200000},// magia_tile_x1_y28_sam_idx -'{idx: '{x: 1, y: 28, port_id: 0}, start_addr: 32'h38000000, end_addr: 32'h38100000},// magia_tile_x0_y28_sam_idx -'{idx: '{x: 32, y: 27, port_id: 0}, start_addr: 32'h37f00000, end_addr: 32'h38000000},// magia_tile_x31_y27_sam_idx -'{idx: '{x: 31, y: 27, port_id: 0}, start_addr: 32'h37e00000, end_addr: 32'h37f00000},// magia_tile_x30_y27_sam_idx -'{idx: '{x: 30, y: 27, port_id: 0}, start_addr: 32'h37d00000, end_addr: 32'h37e00000},// magia_tile_x29_y27_sam_idx -'{idx: '{x: 29, y: 27, port_id: 0}, start_addr: 32'h37c00000, end_addr: 32'h37d00000},// magia_tile_x28_y27_sam_idx -'{idx: '{x: 28, y: 27, port_id: 0}, start_addr: 32'h37b00000, end_addr: 32'h37c00000},// magia_tile_x27_y27_sam_idx -'{idx: '{x: 27, y: 27, port_id: 0}, start_addr: 32'h37a00000, end_addr: 32'h37b00000},// magia_tile_x26_y27_sam_idx -'{idx: '{x: 26, y: 27, port_id: 0}, start_addr: 32'h37900000, end_addr: 32'h37a00000},// magia_tile_x25_y27_sam_idx -'{idx: '{x: 25, y: 27, port_id: 0}, start_addr: 32'h37800000, end_addr: 32'h37900000},// magia_tile_x24_y27_sam_idx -'{idx: '{x: 24, y: 27, port_id: 0}, start_addr: 32'h37700000, end_addr: 32'h37800000},// magia_tile_x23_y27_sam_idx -'{idx: '{x: 23, y: 27, port_id: 0}, start_addr: 32'h37600000, end_addr: 32'h37700000},// magia_tile_x22_y27_sam_idx -'{idx: '{x: 22, y: 27, port_id: 0}, start_addr: 32'h37500000, end_addr: 32'h37600000},// magia_tile_x21_y27_sam_idx -'{idx: '{x: 21, y: 27, port_id: 0}, start_addr: 32'h37400000, end_addr: 32'h37500000},// magia_tile_x20_y27_sam_idx -'{idx: '{x: 20, y: 27, port_id: 0}, start_addr: 32'h37300000, end_addr: 32'h37400000},// magia_tile_x19_y27_sam_idx -'{idx: '{x: 19, y: 27, port_id: 0}, start_addr: 32'h37200000, end_addr: 32'h37300000},// magia_tile_x18_y27_sam_idx -'{idx: '{x: 18, y: 27, port_id: 0}, start_addr: 32'h37100000, end_addr: 32'h37200000},// magia_tile_x17_y27_sam_idx -'{idx: '{x: 17, y: 27, port_id: 0}, start_addr: 32'h37000000, end_addr: 32'h37100000},// magia_tile_x16_y27_sam_idx -'{idx: '{x: 16, y: 27, port_id: 0}, start_addr: 32'h36f00000, end_addr: 32'h37000000},// magia_tile_x15_y27_sam_idx -'{idx: '{x: 15, y: 27, port_id: 0}, start_addr: 32'h36e00000, end_addr: 32'h36f00000},// magia_tile_x14_y27_sam_idx -'{idx: '{x: 14, y: 27, port_id: 0}, start_addr: 32'h36d00000, end_addr: 32'h36e00000},// magia_tile_x13_y27_sam_idx -'{idx: '{x: 13, y: 27, port_id: 0}, start_addr: 32'h36c00000, end_addr: 32'h36d00000},// magia_tile_x12_y27_sam_idx -'{idx: '{x: 12, y: 27, port_id: 0}, start_addr: 32'h36b00000, end_addr: 32'h36c00000},// magia_tile_x11_y27_sam_idx -'{idx: '{x: 11, y: 27, port_id: 0}, start_addr: 32'h36a00000, end_addr: 32'h36b00000},// magia_tile_x10_y27_sam_idx -'{idx: '{x: 10, y: 27, port_id: 0}, start_addr: 32'h36900000, end_addr: 32'h36a00000},// magia_tile_x9_y27_sam_idx -'{idx: '{x: 9, y: 27, port_id: 0}, start_addr: 32'h36800000, end_addr: 32'h36900000},// magia_tile_x8_y27_sam_idx -'{idx: '{x: 8, y: 27, port_id: 0}, start_addr: 32'h36700000, end_addr: 32'h36800000},// magia_tile_x7_y27_sam_idx -'{idx: '{x: 7, y: 27, port_id: 0}, start_addr: 32'h36600000, end_addr: 32'h36700000},// magia_tile_x6_y27_sam_idx -'{idx: '{x: 6, y: 27, port_id: 0}, start_addr: 32'h36500000, end_addr: 32'h36600000},// magia_tile_x5_y27_sam_idx -'{idx: '{x: 5, y: 27, port_id: 0}, start_addr: 32'h36400000, end_addr: 32'h36500000},// magia_tile_x4_y27_sam_idx -'{idx: '{x: 4, y: 27, port_id: 0}, start_addr: 32'h36300000, end_addr: 32'h36400000},// magia_tile_x3_y27_sam_idx -'{idx: '{x: 3, y: 27, port_id: 0}, start_addr: 32'h36200000, end_addr: 32'h36300000},// magia_tile_x2_y27_sam_idx -'{idx: '{x: 2, y: 27, port_id: 0}, start_addr: 32'h36100000, end_addr: 32'h36200000},// magia_tile_x1_y27_sam_idx -'{idx: '{x: 1, y: 27, port_id: 0}, start_addr: 32'h36000000, end_addr: 32'h36100000},// magia_tile_x0_y27_sam_idx -'{idx: '{x: 32, y: 26, port_id: 0}, start_addr: 32'h35f00000, end_addr: 32'h36000000},// magia_tile_x31_y26_sam_idx -'{idx: '{x: 31, y: 26, port_id: 0}, start_addr: 32'h35e00000, end_addr: 32'h35f00000},// magia_tile_x30_y26_sam_idx -'{idx: '{x: 30, y: 26, port_id: 0}, start_addr: 32'h35d00000, end_addr: 32'h35e00000},// magia_tile_x29_y26_sam_idx -'{idx: '{x: 29, y: 26, port_id: 0}, start_addr: 32'h35c00000, end_addr: 32'h35d00000},// magia_tile_x28_y26_sam_idx -'{idx: '{x: 28, y: 26, port_id: 0}, start_addr: 32'h35b00000, end_addr: 32'h35c00000},// magia_tile_x27_y26_sam_idx -'{idx: '{x: 27, y: 26, port_id: 0}, start_addr: 32'h35a00000, end_addr: 32'h35b00000},// magia_tile_x26_y26_sam_idx -'{idx: '{x: 26, y: 26, port_id: 0}, start_addr: 32'h35900000, end_addr: 32'h35a00000},// magia_tile_x25_y26_sam_idx -'{idx: '{x: 25, y: 26, port_id: 0}, start_addr: 32'h35800000, end_addr: 32'h35900000},// magia_tile_x24_y26_sam_idx -'{idx: '{x: 24, y: 26, port_id: 0}, start_addr: 32'h35700000, end_addr: 32'h35800000},// magia_tile_x23_y26_sam_idx -'{idx: '{x: 23, y: 26, port_id: 0}, start_addr: 32'h35600000, end_addr: 32'h35700000},// magia_tile_x22_y26_sam_idx -'{idx: '{x: 22, y: 26, port_id: 0}, start_addr: 32'h35500000, end_addr: 32'h35600000},// magia_tile_x21_y26_sam_idx -'{idx: '{x: 21, y: 26, port_id: 0}, start_addr: 32'h35400000, end_addr: 32'h35500000},// magia_tile_x20_y26_sam_idx -'{idx: '{x: 20, y: 26, port_id: 0}, start_addr: 32'h35300000, end_addr: 32'h35400000},// magia_tile_x19_y26_sam_idx -'{idx: '{x: 19, y: 26, port_id: 0}, start_addr: 32'h35200000, end_addr: 32'h35300000},// magia_tile_x18_y26_sam_idx -'{idx: '{x: 18, y: 26, port_id: 0}, start_addr: 32'h35100000, end_addr: 32'h35200000},// magia_tile_x17_y26_sam_idx -'{idx: '{x: 17, y: 26, port_id: 0}, start_addr: 32'h35000000, end_addr: 32'h35100000},// magia_tile_x16_y26_sam_idx -'{idx: '{x: 16, y: 26, port_id: 0}, start_addr: 32'h34f00000, end_addr: 32'h35000000},// magia_tile_x15_y26_sam_idx -'{idx: '{x: 15, y: 26, port_id: 0}, start_addr: 32'h34e00000, end_addr: 32'h34f00000},// magia_tile_x14_y26_sam_idx -'{idx: '{x: 14, y: 26, port_id: 0}, start_addr: 32'h34d00000, end_addr: 32'h34e00000},// magia_tile_x13_y26_sam_idx -'{idx: '{x: 13, y: 26, port_id: 0}, start_addr: 32'h34c00000, end_addr: 32'h34d00000},// magia_tile_x12_y26_sam_idx -'{idx: '{x: 12, y: 26, port_id: 0}, start_addr: 32'h34b00000, end_addr: 32'h34c00000},// magia_tile_x11_y26_sam_idx -'{idx: '{x: 11, y: 26, port_id: 0}, start_addr: 32'h34a00000, end_addr: 32'h34b00000},// magia_tile_x10_y26_sam_idx -'{idx: '{x: 10, y: 26, port_id: 0}, start_addr: 32'h34900000, end_addr: 32'h34a00000},// magia_tile_x9_y26_sam_idx -'{idx: '{x: 9, y: 26, port_id: 0}, start_addr: 32'h34800000, end_addr: 32'h34900000},// magia_tile_x8_y26_sam_idx -'{idx: '{x: 8, y: 26, port_id: 0}, start_addr: 32'h34700000, end_addr: 32'h34800000},// magia_tile_x7_y26_sam_idx -'{idx: '{x: 7, y: 26, port_id: 0}, start_addr: 32'h34600000, end_addr: 32'h34700000},// magia_tile_x6_y26_sam_idx -'{idx: '{x: 6, y: 26, port_id: 0}, start_addr: 32'h34500000, end_addr: 32'h34600000},// magia_tile_x5_y26_sam_idx -'{idx: '{x: 5, y: 26, port_id: 0}, start_addr: 32'h34400000, end_addr: 32'h34500000},// magia_tile_x4_y26_sam_idx -'{idx: '{x: 4, y: 26, port_id: 0}, start_addr: 32'h34300000, end_addr: 32'h34400000},// magia_tile_x3_y26_sam_idx -'{idx: '{x: 3, y: 26, port_id: 0}, start_addr: 32'h34200000, end_addr: 32'h34300000},// magia_tile_x2_y26_sam_idx -'{idx: '{x: 2, y: 26, port_id: 0}, start_addr: 32'h34100000, end_addr: 32'h34200000},// magia_tile_x1_y26_sam_idx -'{idx: '{x: 1, y: 26, port_id: 0}, start_addr: 32'h34000000, end_addr: 32'h34100000},// magia_tile_x0_y26_sam_idx -'{idx: '{x: 32, y: 25, port_id: 0}, start_addr: 32'h33f00000, end_addr: 32'h34000000},// magia_tile_x31_y25_sam_idx -'{idx: '{x: 31, y: 25, port_id: 0}, start_addr: 32'h33e00000, end_addr: 32'h33f00000},// magia_tile_x30_y25_sam_idx -'{idx: '{x: 30, y: 25, port_id: 0}, start_addr: 32'h33d00000, end_addr: 32'h33e00000},// magia_tile_x29_y25_sam_idx -'{idx: '{x: 29, y: 25, port_id: 0}, start_addr: 32'h33c00000, end_addr: 32'h33d00000},// magia_tile_x28_y25_sam_idx -'{idx: '{x: 28, y: 25, port_id: 0}, start_addr: 32'h33b00000, end_addr: 32'h33c00000},// magia_tile_x27_y25_sam_idx -'{idx: '{x: 27, y: 25, port_id: 0}, start_addr: 32'h33a00000, end_addr: 32'h33b00000},// magia_tile_x26_y25_sam_idx -'{idx: '{x: 26, y: 25, port_id: 0}, start_addr: 32'h33900000, end_addr: 32'h33a00000},// magia_tile_x25_y25_sam_idx -'{idx: '{x: 25, y: 25, port_id: 0}, start_addr: 32'h33800000, end_addr: 32'h33900000},// magia_tile_x24_y25_sam_idx -'{idx: '{x: 24, y: 25, port_id: 0}, start_addr: 32'h33700000, end_addr: 32'h33800000},// magia_tile_x23_y25_sam_idx -'{idx: '{x: 23, y: 25, port_id: 0}, start_addr: 32'h33600000, end_addr: 32'h33700000},// magia_tile_x22_y25_sam_idx -'{idx: '{x: 22, y: 25, port_id: 0}, start_addr: 32'h33500000, end_addr: 32'h33600000},// magia_tile_x21_y25_sam_idx -'{idx: '{x: 21, y: 25, port_id: 0}, start_addr: 32'h33400000, end_addr: 32'h33500000},// magia_tile_x20_y25_sam_idx -'{idx: '{x: 20, y: 25, port_id: 0}, start_addr: 32'h33300000, end_addr: 32'h33400000},// magia_tile_x19_y25_sam_idx -'{idx: '{x: 19, y: 25, port_id: 0}, start_addr: 32'h33200000, end_addr: 32'h33300000},// magia_tile_x18_y25_sam_idx -'{idx: '{x: 18, y: 25, port_id: 0}, start_addr: 32'h33100000, end_addr: 32'h33200000},// magia_tile_x17_y25_sam_idx -'{idx: '{x: 17, y: 25, port_id: 0}, start_addr: 32'h33000000, end_addr: 32'h33100000},// magia_tile_x16_y25_sam_idx -'{idx: '{x: 16, y: 25, port_id: 0}, start_addr: 32'h32f00000, end_addr: 32'h33000000},// magia_tile_x15_y25_sam_idx -'{idx: '{x: 15, y: 25, port_id: 0}, start_addr: 32'h32e00000, end_addr: 32'h32f00000},// magia_tile_x14_y25_sam_idx -'{idx: '{x: 14, y: 25, port_id: 0}, start_addr: 32'h32d00000, end_addr: 32'h32e00000},// magia_tile_x13_y25_sam_idx -'{idx: '{x: 13, y: 25, port_id: 0}, start_addr: 32'h32c00000, end_addr: 32'h32d00000},// magia_tile_x12_y25_sam_idx -'{idx: '{x: 12, y: 25, port_id: 0}, start_addr: 32'h32b00000, end_addr: 32'h32c00000},// magia_tile_x11_y25_sam_idx -'{idx: '{x: 11, y: 25, port_id: 0}, start_addr: 32'h32a00000, end_addr: 32'h32b00000},// magia_tile_x10_y25_sam_idx -'{idx: '{x: 10, y: 25, port_id: 0}, start_addr: 32'h32900000, end_addr: 32'h32a00000},// magia_tile_x9_y25_sam_idx -'{idx: '{x: 9, y: 25, port_id: 0}, start_addr: 32'h32800000, end_addr: 32'h32900000},// magia_tile_x8_y25_sam_idx -'{idx: '{x: 8, y: 25, port_id: 0}, start_addr: 32'h32700000, end_addr: 32'h32800000},// magia_tile_x7_y25_sam_idx -'{idx: '{x: 7, y: 25, port_id: 0}, start_addr: 32'h32600000, end_addr: 32'h32700000},// magia_tile_x6_y25_sam_idx -'{idx: '{x: 6, y: 25, port_id: 0}, start_addr: 32'h32500000, end_addr: 32'h32600000},// magia_tile_x5_y25_sam_idx -'{idx: '{x: 5, y: 25, port_id: 0}, start_addr: 32'h32400000, end_addr: 32'h32500000},// magia_tile_x4_y25_sam_idx -'{idx: '{x: 4, y: 25, port_id: 0}, start_addr: 32'h32300000, end_addr: 32'h32400000},// magia_tile_x3_y25_sam_idx -'{idx: '{x: 3, y: 25, port_id: 0}, start_addr: 32'h32200000, end_addr: 32'h32300000},// magia_tile_x2_y25_sam_idx -'{idx: '{x: 2, y: 25, port_id: 0}, start_addr: 32'h32100000, end_addr: 32'h32200000},// magia_tile_x1_y25_sam_idx -'{idx: '{x: 1, y: 25, port_id: 0}, start_addr: 32'h32000000, end_addr: 32'h32100000},// magia_tile_x0_y25_sam_idx -'{idx: '{x: 32, y: 24, port_id: 0}, start_addr: 32'h31f00000, end_addr: 32'h32000000},// magia_tile_x31_y24_sam_idx -'{idx: '{x: 31, y: 24, port_id: 0}, start_addr: 32'h31e00000, end_addr: 32'h31f00000},// magia_tile_x30_y24_sam_idx -'{idx: '{x: 30, y: 24, port_id: 0}, start_addr: 32'h31d00000, end_addr: 32'h31e00000},// magia_tile_x29_y24_sam_idx -'{idx: '{x: 29, y: 24, port_id: 0}, start_addr: 32'h31c00000, end_addr: 32'h31d00000},// magia_tile_x28_y24_sam_idx -'{idx: '{x: 28, y: 24, port_id: 0}, start_addr: 32'h31b00000, end_addr: 32'h31c00000},// magia_tile_x27_y24_sam_idx -'{idx: '{x: 27, y: 24, port_id: 0}, start_addr: 32'h31a00000, end_addr: 32'h31b00000},// magia_tile_x26_y24_sam_idx -'{idx: '{x: 26, y: 24, port_id: 0}, start_addr: 32'h31900000, end_addr: 32'h31a00000},// magia_tile_x25_y24_sam_idx -'{idx: '{x: 25, y: 24, port_id: 0}, start_addr: 32'h31800000, end_addr: 32'h31900000},// magia_tile_x24_y24_sam_idx -'{idx: '{x: 24, y: 24, port_id: 0}, start_addr: 32'h31700000, end_addr: 32'h31800000},// magia_tile_x23_y24_sam_idx -'{idx: '{x: 23, y: 24, port_id: 0}, start_addr: 32'h31600000, end_addr: 32'h31700000},// magia_tile_x22_y24_sam_idx -'{idx: '{x: 22, y: 24, port_id: 0}, start_addr: 32'h31500000, end_addr: 32'h31600000},// magia_tile_x21_y24_sam_idx -'{idx: '{x: 21, y: 24, port_id: 0}, start_addr: 32'h31400000, end_addr: 32'h31500000},// magia_tile_x20_y24_sam_idx -'{idx: '{x: 20, y: 24, port_id: 0}, start_addr: 32'h31300000, end_addr: 32'h31400000},// magia_tile_x19_y24_sam_idx -'{idx: '{x: 19, y: 24, port_id: 0}, start_addr: 32'h31200000, end_addr: 32'h31300000},// magia_tile_x18_y24_sam_idx -'{idx: '{x: 18, y: 24, port_id: 0}, start_addr: 32'h31100000, end_addr: 32'h31200000},// magia_tile_x17_y24_sam_idx -'{idx: '{x: 17, y: 24, port_id: 0}, start_addr: 32'h31000000, end_addr: 32'h31100000},// magia_tile_x16_y24_sam_idx -'{idx: '{x: 16, y: 24, port_id: 0}, start_addr: 32'h30f00000, end_addr: 32'h31000000},// magia_tile_x15_y24_sam_idx -'{idx: '{x: 15, y: 24, port_id: 0}, start_addr: 32'h30e00000, end_addr: 32'h30f00000},// magia_tile_x14_y24_sam_idx -'{idx: '{x: 14, y: 24, port_id: 0}, start_addr: 32'h30d00000, end_addr: 32'h30e00000},// magia_tile_x13_y24_sam_idx -'{idx: '{x: 13, y: 24, port_id: 0}, start_addr: 32'h30c00000, end_addr: 32'h30d00000},// magia_tile_x12_y24_sam_idx -'{idx: '{x: 12, y: 24, port_id: 0}, start_addr: 32'h30b00000, end_addr: 32'h30c00000},// magia_tile_x11_y24_sam_idx -'{idx: '{x: 11, y: 24, port_id: 0}, start_addr: 32'h30a00000, end_addr: 32'h30b00000},// magia_tile_x10_y24_sam_idx -'{idx: '{x: 10, y: 24, port_id: 0}, start_addr: 32'h30900000, end_addr: 32'h30a00000},// magia_tile_x9_y24_sam_idx -'{idx: '{x: 9, y: 24, port_id: 0}, start_addr: 32'h30800000, end_addr: 32'h30900000},// magia_tile_x8_y24_sam_idx -'{idx: '{x: 8, y: 24, port_id: 0}, start_addr: 32'h30700000, end_addr: 32'h30800000},// magia_tile_x7_y24_sam_idx -'{idx: '{x: 7, y: 24, port_id: 0}, start_addr: 32'h30600000, end_addr: 32'h30700000},// magia_tile_x6_y24_sam_idx -'{idx: '{x: 6, y: 24, port_id: 0}, start_addr: 32'h30500000, end_addr: 32'h30600000},// magia_tile_x5_y24_sam_idx -'{idx: '{x: 5, y: 24, port_id: 0}, start_addr: 32'h30400000, end_addr: 32'h30500000},// magia_tile_x4_y24_sam_idx -'{idx: '{x: 4, y: 24, port_id: 0}, start_addr: 32'h30300000, end_addr: 32'h30400000},// magia_tile_x3_y24_sam_idx -'{idx: '{x: 3, y: 24, port_id: 0}, start_addr: 32'h30200000, end_addr: 32'h30300000},// magia_tile_x2_y24_sam_idx -'{idx: '{x: 2, y: 24, port_id: 0}, start_addr: 32'h30100000, end_addr: 32'h30200000},// magia_tile_x1_y24_sam_idx -'{idx: '{x: 1, y: 24, port_id: 0}, start_addr: 32'h30000000, end_addr: 32'h30100000},// magia_tile_x0_y24_sam_idx -'{idx: '{x: 32, y: 23, port_id: 0}, start_addr: 32'h2ff00000, end_addr: 32'h30000000},// magia_tile_x31_y23_sam_idx -'{idx: '{x: 31, y: 23, port_id: 0}, start_addr: 32'h2fe00000, end_addr: 32'h2ff00000},// magia_tile_x30_y23_sam_idx -'{idx: '{x: 30, y: 23, port_id: 0}, start_addr: 32'h2fd00000, end_addr: 32'h2fe00000},// magia_tile_x29_y23_sam_idx -'{idx: '{x: 29, y: 23, port_id: 0}, start_addr: 32'h2fc00000, end_addr: 32'h2fd00000},// magia_tile_x28_y23_sam_idx -'{idx: '{x: 28, y: 23, port_id: 0}, start_addr: 32'h2fb00000, end_addr: 32'h2fc00000},// magia_tile_x27_y23_sam_idx -'{idx: '{x: 27, y: 23, port_id: 0}, start_addr: 32'h2fa00000, end_addr: 32'h2fb00000},// magia_tile_x26_y23_sam_idx -'{idx: '{x: 26, y: 23, port_id: 0}, start_addr: 32'h2f900000, end_addr: 32'h2fa00000},// magia_tile_x25_y23_sam_idx -'{idx: '{x: 25, y: 23, port_id: 0}, start_addr: 32'h2f800000, end_addr: 32'h2f900000},// magia_tile_x24_y23_sam_idx -'{idx: '{x: 24, y: 23, port_id: 0}, start_addr: 32'h2f700000, end_addr: 32'h2f800000},// magia_tile_x23_y23_sam_idx -'{idx: '{x: 23, y: 23, port_id: 0}, start_addr: 32'h2f600000, end_addr: 32'h2f700000},// magia_tile_x22_y23_sam_idx -'{idx: '{x: 22, y: 23, port_id: 0}, start_addr: 32'h2f500000, end_addr: 32'h2f600000},// magia_tile_x21_y23_sam_idx -'{idx: '{x: 21, y: 23, port_id: 0}, start_addr: 32'h2f400000, end_addr: 32'h2f500000},// magia_tile_x20_y23_sam_idx -'{idx: '{x: 20, y: 23, port_id: 0}, start_addr: 32'h2f300000, end_addr: 32'h2f400000},// magia_tile_x19_y23_sam_idx -'{idx: '{x: 19, y: 23, port_id: 0}, start_addr: 32'h2f200000, end_addr: 32'h2f300000},// magia_tile_x18_y23_sam_idx -'{idx: '{x: 18, y: 23, port_id: 0}, start_addr: 32'h2f100000, end_addr: 32'h2f200000},// magia_tile_x17_y23_sam_idx -'{idx: '{x: 17, y: 23, port_id: 0}, start_addr: 32'h2f000000, end_addr: 32'h2f100000},// magia_tile_x16_y23_sam_idx -'{idx: '{x: 16, y: 23, port_id: 0}, start_addr: 32'h2ef00000, end_addr: 32'h2f000000},// magia_tile_x15_y23_sam_idx -'{idx: '{x: 15, y: 23, port_id: 0}, start_addr: 32'h2ee00000, end_addr: 32'h2ef00000},// magia_tile_x14_y23_sam_idx -'{idx: '{x: 14, y: 23, port_id: 0}, start_addr: 32'h2ed00000, end_addr: 32'h2ee00000},// magia_tile_x13_y23_sam_idx -'{idx: '{x: 13, y: 23, port_id: 0}, start_addr: 32'h2ec00000, end_addr: 32'h2ed00000},// magia_tile_x12_y23_sam_idx -'{idx: '{x: 12, y: 23, port_id: 0}, start_addr: 32'h2eb00000, end_addr: 32'h2ec00000},// magia_tile_x11_y23_sam_idx -'{idx: '{x: 11, y: 23, port_id: 0}, start_addr: 32'h2ea00000, end_addr: 32'h2eb00000},// magia_tile_x10_y23_sam_idx -'{idx: '{x: 10, y: 23, port_id: 0}, start_addr: 32'h2e900000, end_addr: 32'h2ea00000},// magia_tile_x9_y23_sam_idx -'{idx: '{x: 9, y: 23, port_id: 0}, start_addr: 32'h2e800000, end_addr: 32'h2e900000},// magia_tile_x8_y23_sam_idx -'{idx: '{x: 8, y: 23, port_id: 0}, start_addr: 32'h2e700000, end_addr: 32'h2e800000},// magia_tile_x7_y23_sam_idx -'{idx: '{x: 7, y: 23, port_id: 0}, start_addr: 32'h2e600000, end_addr: 32'h2e700000},// magia_tile_x6_y23_sam_idx -'{idx: '{x: 6, y: 23, port_id: 0}, start_addr: 32'h2e500000, end_addr: 32'h2e600000},// magia_tile_x5_y23_sam_idx -'{idx: '{x: 5, y: 23, port_id: 0}, start_addr: 32'h2e400000, end_addr: 32'h2e500000},// magia_tile_x4_y23_sam_idx -'{idx: '{x: 4, y: 23, port_id: 0}, start_addr: 32'h2e300000, end_addr: 32'h2e400000},// magia_tile_x3_y23_sam_idx -'{idx: '{x: 3, y: 23, port_id: 0}, start_addr: 32'h2e200000, end_addr: 32'h2e300000},// magia_tile_x2_y23_sam_idx -'{idx: '{x: 2, y: 23, port_id: 0}, start_addr: 32'h2e100000, end_addr: 32'h2e200000},// magia_tile_x1_y23_sam_idx -'{idx: '{x: 1, y: 23, port_id: 0}, start_addr: 32'h2e000000, end_addr: 32'h2e100000},// magia_tile_x0_y23_sam_idx -'{idx: '{x: 32, y: 22, port_id: 0}, start_addr: 32'h2df00000, end_addr: 32'h2e000000},// magia_tile_x31_y22_sam_idx -'{idx: '{x: 31, y: 22, port_id: 0}, start_addr: 32'h2de00000, end_addr: 32'h2df00000},// magia_tile_x30_y22_sam_idx -'{idx: '{x: 30, y: 22, port_id: 0}, start_addr: 32'h2dd00000, end_addr: 32'h2de00000},// magia_tile_x29_y22_sam_idx -'{idx: '{x: 29, y: 22, port_id: 0}, start_addr: 32'h2dc00000, end_addr: 32'h2dd00000},// magia_tile_x28_y22_sam_idx -'{idx: '{x: 28, y: 22, port_id: 0}, start_addr: 32'h2db00000, end_addr: 32'h2dc00000},// magia_tile_x27_y22_sam_idx -'{idx: '{x: 27, y: 22, port_id: 0}, start_addr: 32'h2da00000, end_addr: 32'h2db00000},// magia_tile_x26_y22_sam_idx -'{idx: '{x: 26, y: 22, port_id: 0}, start_addr: 32'h2d900000, end_addr: 32'h2da00000},// magia_tile_x25_y22_sam_idx -'{idx: '{x: 25, y: 22, port_id: 0}, start_addr: 32'h2d800000, end_addr: 32'h2d900000},// magia_tile_x24_y22_sam_idx -'{idx: '{x: 24, y: 22, port_id: 0}, start_addr: 32'h2d700000, end_addr: 32'h2d800000},// magia_tile_x23_y22_sam_idx -'{idx: '{x: 23, y: 22, port_id: 0}, start_addr: 32'h2d600000, end_addr: 32'h2d700000},// magia_tile_x22_y22_sam_idx -'{idx: '{x: 22, y: 22, port_id: 0}, start_addr: 32'h2d500000, end_addr: 32'h2d600000},// magia_tile_x21_y22_sam_idx -'{idx: '{x: 21, y: 22, port_id: 0}, start_addr: 32'h2d400000, end_addr: 32'h2d500000},// magia_tile_x20_y22_sam_idx -'{idx: '{x: 20, y: 22, port_id: 0}, start_addr: 32'h2d300000, end_addr: 32'h2d400000},// magia_tile_x19_y22_sam_idx -'{idx: '{x: 19, y: 22, port_id: 0}, start_addr: 32'h2d200000, end_addr: 32'h2d300000},// magia_tile_x18_y22_sam_idx -'{idx: '{x: 18, y: 22, port_id: 0}, start_addr: 32'h2d100000, end_addr: 32'h2d200000},// magia_tile_x17_y22_sam_idx -'{idx: '{x: 17, y: 22, port_id: 0}, start_addr: 32'h2d000000, end_addr: 32'h2d100000},// magia_tile_x16_y22_sam_idx -'{idx: '{x: 16, y: 22, port_id: 0}, start_addr: 32'h2cf00000, end_addr: 32'h2d000000},// magia_tile_x15_y22_sam_idx -'{idx: '{x: 15, y: 22, port_id: 0}, start_addr: 32'h2ce00000, end_addr: 32'h2cf00000},// magia_tile_x14_y22_sam_idx -'{idx: '{x: 14, y: 22, port_id: 0}, start_addr: 32'h2cd00000, end_addr: 32'h2ce00000},// magia_tile_x13_y22_sam_idx -'{idx: '{x: 13, y: 22, port_id: 0}, start_addr: 32'h2cc00000, end_addr: 32'h2cd00000},// magia_tile_x12_y22_sam_idx -'{idx: '{x: 12, y: 22, port_id: 0}, start_addr: 32'h2cb00000, end_addr: 32'h2cc00000},// magia_tile_x11_y22_sam_idx -'{idx: '{x: 11, y: 22, port_id: 0}, start_addr: 32'h2ca00000, end_addr: 32'h2cb00000},// magia_tile_x10_y22_sam_idx -'{idx: '{x: 10, y: 22, port_id: 0}, start_addr: 32'h2c900000, end_addr: 32'h2ca00000},// magia_tile_x9_y22_sam_idx -'{idx: '{x: 9, y: 22, port_id: 0}, start_addr: 32'h2c800000, end_addr: 32'h2c900000},// magia_tile_x8_y22_sam_idx -'{idx: '{x: 8, y: 22, port_id: 0}, start_addr: 32'h2c700000, end_addr: 32'h2c800000},// magia_tile_x7_y22_sam_idx -'{idx: '{x: 7, y: 22, port_id: 0}, start_addr: 32'h2c600000, end_addr: 32'h2c700000},// magia_tile_x6_y22_sam_idx -'{idx: '{x: 6, y: 22, port_id: 0}, start_addr: 32'h2c500000, end_addr: 32'h2c600000},// magia_tile_x5_y22_sam_idx -'{idx: '{x: 5, y: 22, port_id: 0}, start_addr: 32'h2c400000, end_addr: 32'h2c500000},// magia_tile_x4_y22_sam_idx -'{idx: '{x: 4, y: 22, port_id: 0}, start_addr: 32'h2c300000, end_addr: 32'h2c400000},// magia_tile_x3_y22_sam_idx -'{idx: '{x: 3, y: 22, port_id: 0}, start_addr: 32'h2c200000, end_addr: 32'h2c300000},// magia_tile_x2_y22_sam_idx -'{idx: '{x: 2, y: 22, port_id: 0}, start_addr: 32'h2c100000, end_addr: 32'h2c200000},// magia_tile_x1_y22_sam_idx -'{idx: '{x: 1, y: 22, port_id: 0}, start_addr: 32'h2c000000, end_addr: 32'h2c100000},// magia_tile_x0_y22_sam_idx -'{idx: '{x: 32, y: 21, port_id: 0}, start_addr: 32'h2bf00000, end_addr: 32'h2c000000},// magia_tile_x31_y21_sam_idx -'{idx: '{x: 31, y: 21, port_id: 0}, start_addr: 32'h2be00000, end_addr: 32'h2bf00000},// magia_tile_x30_y21_sam_idx -'{idx: '{x: 30, y: 21, port_id: 0}, start_addr: 32'h2bd00000, end_addr: 32'h2be00000},// magia_tile_x29_y21_sam_idx -'{idx: '{x: 29, y: 21, port_id: 0}, start_addr: 32'h2bc00000, end_addr: 32'h2bd00000},// magia_tile_x28_y21_sam_idx -'{idx: '{x: 28, y: 21, port_id: 0}, start_addr: 32'h2bb00000, end_addr: 32'h2bc00000},// magia_tile_x27_y21_sam_idx -'{idx: '{x: 27, y: 21, port_id: 0}, start_addr: 32'h2ba00000, end_addr: 32'h2bb00000},// magia_tile_x26_y21_sam_idx -'{idx: '{x: 26, y: 21, port_id: 0}, start_addr: 32'h2b900000, end_addr: 32'h2ba00000},// magia_tile_x25_y21_sam_idx -'{idx: '{x: 25, y: 21, port_id: 0}, start_addr: 32'h2b800000, end_addr: 32'h2b900000},// magia_tile_x24_y21_sam_idx -'{idx: '{x: 24, y: 21, port_id: 0}, start_addr: 32'h2b700000, end_addr: 32'h2b800000},// magia_tile_x23_y21_sam_idx -'{idx: '{x: 23, y: 21, port_id: 0}, start_addr: 32'h2b600000, end_addr: 32'h2b700000},// magia_tile_x22_y21_sam_idx -'{idx: '{x: 22, y: 21, port_id: 0}, start_addr: 32'h2b500000, end_addr: 32'h2b600000},// magia_tile_x21_y21_sam_idx -'{idx: '{x: 21, y: 21, port_id: 0}, start_addr: 32'h2b400000, end_addr: 32'h2b500000},// magia_tile_x20_y21_sam_idx -'{idx: '{x: 20, y: 21, port_id: 0}, start_addr: 32'h2b300000, end_addr: 32'h2b400000},// magia_tile_x19_y21_sam_idx -'{idx: '{x: 19, y: 21, port_id: 0}, start_addr: 32'h2b200000, end_addr: 32'h2b300000},// magia_tile_x18_y21_sam_idx -'{idx: '{x: 18, y: 21, port_id: 0}, start_addr: 32'h2b100000, end_addr: 32'h2b200000},// magia_tile_x17_y21_sam_idx -'{idx: '{x: 17, y: 21, port_id: 0}, start_addr: 32'h2b000000, end_addr: 32'h2b100000},// magia_tile_x16_y21_sam_idx -'{idx: '{x: 16, y: 21, port_id: 0}, start_addr: 32'h2af00000, end_addr: 32'h2b000000},// magia_tile_x15_y21_sam_idx -'{idx: '{x: 15, y: 21, port_id: 0}, start_addr: 32'h2ae00000, end_addr: 32'h2af00000},// magia_tile_x14_y21_sam_idx -'{idx: '{x: 14, y: 21, port_id: 0}, start_addr: 32'h2ad00000, end_addr: 32'h2ae00000},// magia_tile_x13_y21_sam_idx -'{idx: '{x: 13, y: 21, port_id: 0}, start_addr: 32'h2ac00000, end_addr: 32'h2ad00000},// magia_tile_x12_y21_sam_idx -'{idx: '{x: 12, y: 21, port_id: 0}, start_addr: 32'h2ab00000, end_addr: 32'h2ac00000},// magia_tile_x11_y21_sam_idx -'{idx: '{x: 11, y: 21, port_id: 0}, start_addr: 32'h2aa00000, end_addr: 32'h2ab00000},// magia_tile_x10_y21_sam_idx -'{idx: '{x: 10, y: 21, port_id: 0}, start_addr: 32'h2a900000, end_addr: 32'h2aa00000},// magia_tile_x9_y21_sam_idx -'{idx: '{x: 9, y: 21, port_id: 0}, start_addr: 32'h2a800000, end_addr: 32'h2a900000},// magia_tile_x8_y21_sam_idx -'{idx: '{x: 8, y: 21, port_id: 0}, start_addr: 32'h2a700000, end_addr: 32'h2a800000},// magia_tile_x7_y21_sam_idx -'{idx: '{x: 7, y: 21, port_id: 0}, start_addr: 32'h2a600000, end_addr: 32'h2a700000},// magia_tile_x6_y21_sam_idx -'{idx: '{x: 6, y: 21, port_id: 0}, start_addr: 32'h2a500000, end_addr: 32'h2a600000},// magia_tile_x5_y21_sam_idx -'{idx: '{x: 5, y: 21, port_id: 0}, start_addr: 32'h2a400000, end_addr: 32'h2a500000},// magia_tile_x4_y21_sam_idx -'{idx: '{x: 4, y: 21, port_id: 0}, start_addr: 32'h2a300000, end_addr: 32'h2a400000},// magia_tile_x3_y21_sam_idx -'{idx: '{x: 3, y: 21, port_id: 0}, start_addr: 32'h2a200000, end_addr: 32'h2a300000},// magia_tile_x2_y21_sam_idx -'{idx: '{x: 2, y: 21, port_id: 0}, start_addr: 32'h2a100000, end_addr: 32'h2a200000},// magia_tile_x1_y21_sam_idx -'{idx: '{x: 1, y: 21, port_id: 0}, start_addr: 32'h2a000000, end_addr: 32'h2a100000},// magia_tile_x0_y21_sam_idx -'{idx: '{x: 32, y: 20, port_id: 0}, start_addr: 32'h29f00000, end_addr: 32'h2a000000},// magia_tile_x31_y20_sam_idx -'{idx: '{x: 31, y: 20, port_id: 0}, start_addr: 32'h29e00000, end_addr: 32'h29f00000},// magia_tile_x30_y20_sam_idx -'{idx: '{x: 30, y: 20, port_id: 0}, start_addr: 32'h29d00000, end_addr: 32'h29e00000},// magia_tile_x29_y20_sam_idx -'{idx: '{x: 29, y: 20, port_id: 0}, start_addr: 32'h29c00000, end_addr: 32'h29d00000},// magia_tile_x28_y20_sam_idx -'{idx: '{x: 28, y: 20, port_id: 0}, start_addr: 32'h29b00000, end_addr: 32'h29c00000},// magia_tile_x27_y20_sam_idx -'{idx: '{x: 27, y: 20, port_id: 0}, start_addr: 32'h29a00000, end_addr: 32'h29b00000},// magia_tile_x26_y20_sam_idx -'{idx: '{x: 26, y: 20, port_id: 0}, start_addr: 32'h29900000, end_addr: 32'h29a00000},// magia_tile_x25_y20_sam_idx -'{idx: '{x: 25, y: 20, port_id: 0}, start_addr: 32'h29800000, end_addr: 32'h29900000},// magia_tile_x24_y20_sam_idx -'{idx: '{x: 24, y: 20, port_id: 0}, start_addr: 32'h29700000, end_addr: 32'h29800000},// magia_tile_x23_y20_sam_idx -'{idx: '{x: 23, y: 20, port_id: 0}, start_addr: 32'h29600000, end_addr: 32'h29700000},// magia_tile_x22_y20_sam_idx -'{idx: '{x: 22, y: 20, port_id: 0}, start_addr: 32'h29500000, end_addr: 32'h29600000},// magia_tile_x21_y20_sam_idx -'{idx: '{x: 21, y: 20, port_id: 0}, start_addr: 32'h29400000, end_addr: 32'h29500000},// magia_tile_x20_y20_sam_idx -'{idx: '{x: 20, y: 20, port_id: 0}, start_addr: 32'h29300000, end_addr: 32'h29400000},// magia_tile_x19_y20_sam_idx -'{idx: '{x: 19, y: 20, port_id: 0}, start_addr: 32'h29200000, end_addr: 32'h29300000},// magia_tile_x18_y20_sam_idx -'{idx: '{x: 18, y: 20, port_id: 0}, start_addr: 32'h29100000, end_addr: 32'h29200000},// magia_tile_x17_y20_sam_idx -'{idx: '{x: 17, y: 20, port_id: 0}, start_addr: 32'h29000000, end_addr: 32'h29100000},// magia_tile_x16_y20_sam_idx -'{idx: '{x: 16, y: 20, port_id: 0}, start_addr: 32'h28f00000, end_addr: 32'h29000000},// magia_tile_x15_y20_sam_idx -'{idx: '{x: 15, y: 20, port_id: 0}, start_addr: 32'h28e00000, end_addr: 32'h28f00000},// magia_tile_x14_y20_sam_idx -'{idx: '{x: 14, y: 20, port_id: 0}, start_addr: 32'h28d00000, end_addr: 32'h28e00000},// magia_tile_x13_y20_sam_idx -'{idx: '{x: 13, y: 20, port_id: 0}, start_addr: 32'h28c00000, end_addr: 32'h28d00000},// magia_tile_x12_y20_sam_idx -'{idx: '{x: 12, y: 20, port_id: 0}, start_addr: 32'h28b00000, end_addr: 32'h28c00000},// magia_tile_x11_y20_sam_idx -'{idx: '{x: 11, y: 20, port_id: 0}, start_addr: 32'h28a00000, end_addr: 32'h28b00000},// magia_tile_x10_y20_sam_idx -'{idx: '{x: 10, y: 20, port_id: 0}, start_addr: 32'h28900000, end_addr: 32'h28a00000},// magia_tile_x9_y20_sam_idx -'{idx: '{x: 9, y: 20, port_id: 0}, start_addr: 32'h28800000, end_addr: 32'h28900000},// magia_tile_x8_y20_sam_idx -'{idx: '{x: 8, y: 20, port_id: 0}, start_addr: 32'h28700000, end_addr: 32'h28800000},// magia_tile_x7_y20_sam_idx -'{idx: '{x: 7, y: 20, port_id: 0}, start_addr: 32'h28600000, end_addr: 32'h28700000},// magia_tile_x6_y20_sam_idx -'{idx: '{x: 6, y: 20, port_id: 0}, start_addr: 32'h28500000, end_addr: 32'h28600000},// magia_tile_x5_y20_sam_idx -'{idx: '{x: 5, y: 20, port_id: 0}, start_addr: 32'h28400000, end_addr: 32'h28500000},// magia_tile_x4_y20_sam_idx -'{idx: '{x: 4, y: 20, port_id: 0}, start_addr: 32'h28300000, end_addr: 32'h28400000},// magia_tile_x3_y20_sam_idx -'{idx: '{x: 3, y: 20, port_id: 0}, start_addr: 32'h28200000, end_addr: 32'h28300000},// magia_tile_x2_y20_sam_idx -'{idx: '{x: 2, y: 20, port_id: 0}, start_addr: 32'h28100000, end_addr: 32'h28200000},// magia_tile_x1_y20_sam_idx -'{idx: '{x: 1, y: 20, port_id: 0}, start_addr: 32'h28000000, end_addr: 32'h28100000},// magia_tile_x0_y20_sam_idx -'{idx: '{x: 32, y: 19, port_id: 0}, start_addr: 32'h27f00000, end_addr: 32'h28000000},// magia_tile_x31_y19_sam_idx -'{idx: '{x: 31, y: 19, port_id: 0}, start_addr: 32'h27e00000, end_addr: 32'h27f00000},// magia_tile_x30_y19_sam_idx -'{idx: '{x: 30, y: 19, port_id: 0}, start_addr: 32'h27d00000, end_addr: 32'h27e00000},// magia_tile_x29_y19_sam_idx -'{idx: '{x: 29, y: 19, port_id: 0}, start_addr: 32'h27c00000, end_addr: 32'h27d00000},// magia_tile_x28_y19_sam_idx -'{idx: '{x: 28, y: 19, port_id: 0}, start_addr: 32'h27b00000, end_addr: 32'h27c00000},// magia_tile_x27_y19_sam_idx -'{idx: '{x: 27, y: 19, port_id: 0}, start_addr: 32'h27a00000, end_addr: 32'h27b00000},// magia_tile_x26_y19_sam_idx -'{idx: '{x: 26, y: 19, port_id: 0}, start_addr: 32'h27900000, end_addr: 32'h27a00000},// magia_tile_x25_y19_sam_idx -'{idx: '{x: 25, y: 19, port_id: 0}, start_addr: 32'h27800000, end_addr: 32'h27900000},// magia_tile_x24_y19_sam_idx -'{idx: '{x: 24, y: 19, port_id: 0}, start_addr: 32'h27700000, end_addr: 32'h27800000},// magia_tile_x23_y19_sam_idx -'{idx: '{x: 23, y: 19, port_id: 0}, start_addr: 32'h27600000, end_addr: 32'h27700000},// magia_tile_x22_y19_sam_idx -'{idx: '{x: 22, y: 19, port_id: 0}, start_addr: 32'h27500000, end_addr: 32'h27600000},// magia_tile_x21_y19_sam_idx -'{idx: '{x: 21, y: 19, port_id: 0}, start_addr: 32'h27400000, end_addr: 32'h27500000},// magia_tile_x20_y19_sam_idx -'{idx: '{x: 20, y: 19, port_id: 0}, start_addr: 32'h27300000, end_addr: 32'h27400000},// magia_tile_x19_y19_sam_idx -'{idx: '{x: 19, y: 19, port_id: 0}, start_addr: 32'h27200000, end_addr: 32'h27300000},// magia_tile_x18_y19_sam_idx -'{idx: '{x: 18, y: 19, port_id: 0}, start_addr: 32'h27100000, end_addr: 32'h27200000},// magia_tile_x17_y19_sam_idx -'{idx: '{x: 17, y: 19, port_id: 0}, start_addr: 32'h27000000, end_addr: 32'h27100000},// magia_tile_x16_y19_sam_idx -'{idx: '{x: 16, y: 19, port_id: 0}, start_addr: 32'h26f00000, end_addr: 32'h27000000},// magia_tile_x15_y19_sam_idx -'{idx: '{x: 15, y: 19, port_id: 0}, start_addr: 32'h26e00000, end_addr: 32'h26f00000},// magia_tile_x14_y19_sam_idx -'{idx: '{x: 14, y: 19, port_id: 0}, start_addr: 32'h26d00000, end_addr: 32'h26e00000},// magia_tile_x13_y19_sam_idx -'{idx: '{x: 13, y: 19, port_id: 0}, start_addr: 32'h26c00000, end_addr: 32'h26d00000},// magia_tile_x12_y19_sam_idx -'{idx: '{x: 12, y: 19, port_id: 0}, start_addr: 32'h26b00000, end_addr: 32'h26c00000},// magia_tile_x11_y19_sam_idx -'{idx: '{x: 11, y: 19, port_id: 0}, start_addr: 32'h26a00000, end_addr: 32'h26b00000},// magia_tile_x10_y19_sam_idx -'{idx: '{x: 10, y: 19, port_id: 0}, start_addr: 32'h26900000, end_addr: 32'h26a00000},// magia_tile_x9_y19_sam_idx -'{idx: '{x: 9, y: 19, port_id: 0}, start_addr: 32'h26800000, end_addr: 32'h26900000},// magia_tile_x8_y19_sam_idx -'{idx: '{x: 8, y: 19, port_id: 0}, start_addr: 32'h26700000, end_addr: 32'h26800000},// magia_tile_x7_y19_sam_idx -'{idx: '{x: 7, y: 19, port_id: 0}, start_addr: 32'h26600000, end_addr: 32'h26700000},// magia_tile_x6_y19_sam_idx -'{idx: '{x: 6, y: 19, port_id: 0}, start_addr: 32'h26500000, end_addr: 32'h26600000},// magia_tile_x5_y19_sam_idx -'{idx: '{x: 5, y: 19, port_id: 0}, start_addr: 32'h26400000, end_addr: 32'h26500000},// magia_tile_x4_y19_sam_idx -'{idx: '{x: 4, y: 19, port_id: 0}, start_addr: 32'h26300000, end_addr: 32'h26400000},// magia_tile_x3_y19_sam_idx -'{idx: '{x: 3, y: 19, port_id: 0}, start_addr: 32'h26200000, end_addr: 32'h26300000},// magia_tile_x2_y19_sam_idx -'{idx: '{x: 2, y: 19, port_id: 0}, start_addr: 32'h26100000, end_addr: 32'h26200000},// magia_tile_x1_y19_sam_idx -'{idx: '{x: 1, y: 19, port_id: 0}, start_addr: 32'h26000000, end_addr: 32'h26100000},// magia_tile_x0_y19_sam_idx -'{idx: '{x: 32, y: 18, port_id: 0}, start_addr: 32'h25f00000, end_addr: 32'h26000000},// magia_tile_x31_y18_sam_idx -'{idx: '{x: 31, y: 18, port_id: 0}, start_addr: 32'h25e00000, end_addr: 32'h25f00000},// magia_tile_x30_y18_sam_idx -'{idx: '{x: 30, y: 18, port_id: 0}, start_addr: 32'h25d00000, end_addr: 32'h25e00000},// magia_tile_x29_y18_sam_idx -'{idx: '{x: 29, y: 18, port_id: 0}, start_addr: 32'h25c00000, end_addr: 32'h25d00000},// magia_tile_x28_y18_sam_idx -'{idx: '{x: 28, y: 18, port_id: 0}, start_addr: 32'h25b00000, end_addr: 32'h25c00000},// magia_tile_x27_y18_sam_idx -'{idx: '{x: 27, y: 18, port_id: 0}, start_addr: 32'h25a00000, end_addr: 32'h25b00000},// magia_tile_x26_y18_sam_idx -'{idx: '{x: 26, y: 18, port_id: 0}, start_addr: 32'h25900000, end_addr: 32'h25a00000},// magia_tile_x25_y18_sam_idx -'{idx: '{x: 25, y: 18, port_id: 0}, start_addr: 32'h25800000, end_addr: 32'h25900000},// magia_tile_x24_y18_sam_idx -'{idx: '{x: 24, y: 18, port_id: 0}, start_addr: 32'h25700000, end_addr: 32'h25800000},// magia_tile_x23_y18_sam_idx -'{idx: '{x: 23, y: 18, port_id: 0}, start_addr: 32'h25600000, end_addr: 32'h25700000},// magia_tile_x22_y18_sam_idx -'{idx: '{x: 22, y: 18, port_id: 0}, start_addr: 32'h25500000, end_addr: 32'h25600000},// magia_tile_x21_y18_sam_idx -'{idx: '{x: 21, y: 18, port_id: 0}, start_addr: 32'h25400000, end_addr: 32'h25500000},// magia_tile_x20_y18_sam_idx -'{idx: '{x: 20, y: 18, port_id: 0}, start_addr: 32'h25300000, end_addr: 32'h25400000},// magia_tile_x19_y18_sam_idx -'{idx: '{x: 19, y: 18, port_id: 0}, start_addr: 32'h25200000, end_addr: 32'h25300000},// magia_tile_x18_y18_sam_idx -'{idx: '{x: 18, y: 18, port_id: 0}, start_addr: 32'h25100000, end_addr: 32'h25200000},// magia_tile_x17_y18_sam_idx -'{idx: '{x: 17, y: 18, port_id: 0}, start_addr: 32'h25000000, end_addr: 32'h25100000},// magia_tile_x16_y18_sam_idx -'{idx: '{x: 16, y: 18, port_id: 0}, start_addr: 32'h24f00000, end_addr: 32'h25000000},// magia_tile_x15_y18_sam_idx -'{idx: '{x: 15, y: 18, port_id: 0}, start_addr: 32'h24e00000, end_addr: 32'h24f00000},// magia_tile_x14_y18_sam_idx -'{idx: '{x: 14, y: 18, port_id: 0}, start_addr: 32'h24d00000, end_addr: 32'h24e00000},// magia_tile_x13_y18_sam_idx -'{idx: '{x: 13, y: 18, port_id: 0}, start_addr: 32'h24c00000, end_addr: 32'h24d00000},// magia_tile_x12_y18_sam_idx -'{idx: '{x: 12, y: 18, port_id: 0}, start_addr: 32'h24b00000, end_addr: 32'h24c00000},// magia_tile_x11_y18_sam_idx -'{idx: '{x: 11, y: 18, port_id: 0}, start_addr: 32'h24a00000, end_addr: 32'h24b00000},// magia_tile_x10_y18_sam_idx -'{idx: '{x: 10, y: 18, port_id: 0}, start_addr: 32'h24900000, end_addr: 32'h24a00000},// magia_tile_x9_y18_sam_idx -'{idx: '{x: 9, y: 18, port_id: 0}, start_addr: 32'h24800000, end_addr: 32'h24900000},// magia_tile_x8_y18_sam_idx -'{idx: '{x: 8, y: 18, port_id: 0}, start_addr: 32'h24700000, end_addr: 32'h24800000},// magia_tile_x7_y18_sam_idx -'{idx: '{x: 7, y: 18, port_id: 0}, start_addr: 32'h24600000, end_addr: 32'h24700000},// magia_tile_x6_y18_sam_idx -'{idx: '{x: 6, y: 18, port_id: 0}, start_addr: 32'h24500000, end_addr: 32'h24600000},// magia_tile_x5_y18_sam_idx -'{idx: '{x: 5, y: 18, port_id: 0}, start_addr: 32'h24400000, end_addr: 32'h24500000},// magia_tile_x4_y18_sam_idx -'{idx: '{x: 4, y: 18, port_id: 0}, start_addr: 32'h24300000, end_addr: 32'h24400000},// magia_tile_x3_y18_sam_idx -'{idx: '{x: 3, y: 18, port_id: 0}, start_addr: 32'h24200000, end_addr: 32'h24300000},// magia_tile_x2_y18_sam_idx -'{idx: '{x: 2, y: 18, port_id: 0}, start_addr: 32'h24100000, end_addr: 32'h24200000},// magia_tile_x1_y18_sam_idx -'{idx: '{x: 1, y: 18, port_id: 0}, start_addr: 32'h24000000, end_addr: 32'h24100000},// magia_tile_x0_y18_sam_idx -'{idx: '{x: 32, y: 17, port_id: 0}, start_addr: 32'h23f00000, end_addr: 32'h24000000},// magia_tile_x31_y17_sam_idx -'{idx: '{x: 31, y: 17, port_id: 0}, start_addr: 32'h23e00000, end_addr: 32'h23f00000},// magia_tile_x30_y17_sam_idx -'{idx: '{x: 30, y: 17, port_id: 0}, start_addr: 32'h23d00000, end_addr: 32'h23e00000},// magia_tile_x29_y17_sam_idx -'{idx: '{x: 29, y: 17, port_id: 0}, start_addr: 32'h23c00000, end_addr: 32'h23d00000},// magia_tile_x28_y17_sam_idx -'{idx: '{x: 28, y: 17, port_id: 0}, start_addr: 32'h23b00000, end_addr: 32'h23c00000},// magia_tile_x27_y17_sam_idx -'{idx: '{x: 27, y: 17, port_id: 0}, start_addr: 32'h23a00000, end_addr: 32'h23b00000},// magia_tile_x26_y17_sam_idx -'{idx: '{x: 26, y: 17, port_id: 0}, start_addr: 32'h23900000, end_addr: 32'h23a00000},// magia_tile_x25_y17_sam_idx -'{idx: '{x: 25, y: 17, port_id: 0}, start_addr: 32'h23800000, end_addr: 32'h23900000},// magia_tile_x24_y17_sam_idx -'{idx: '{x: 24, y: 17, port_id: 0}, start_addr: 32'h23700000, end_addr: 32'h23800000},// magia_tile_x23_y17_sam_idx -'{idx: '{x: 23, y: 17, port_id: 0}, start_addr: 32'h23600000, end_addr: 32'h23700000},// magia_tile_x22_y17_sam_idx -'{idx: '{x: 22, y: 17, port_id: 0}, start_addr: 32'h23500000, end_addr: 32'h23600000},// magia_tile_x21_y17_sam_idx -'{idx: '{x: 21, y: 17, port_id: 0}, start_addr: 32'h23400000, end_addr: 32'h23500000},// magia_tile_x20_y17_sam_idx -'{idx: '{x: 20, y: 17, port_id: 0}, start_addr: 32'h23300000, end_addr: 32'h23400000},// magia_tile_x19_y17_sam_idx -'{idx: '{x: 19, y: 17, port_id: 0}, start_addr: 32'h23200000, end_addr: 32'h23300000},// magia_tile_x18_y17_sam_idx -'{idx: '{x: 18, y: 17, port_id: 0}, start_addr: 32'h23100000, end_addr: 32'h23200000},// magia_tile_x17_y17_sam_idx -'{idx: '{x: 17, y: 17, port_id: 0}, start_addr: 32'h23000000, end_addr: 32'h23100000},// magia_tile_x16_y17_sam_idx -'{idx: '{x: 16, y: 17, port_id: 0}, start_addr: 32'h22f00000, end_addr: 32'h23000000},// magia_tile_x15_y17_sam_idx -'{idx: '{x: 15, y: 17, port_id: 0}, start_addr: 32'h22e00000, end_addr: 32'h22f00000},// magia_tile_x14_y17_sam_idx -'{idx: '{x: 14, y: 17, port_id: 0}, start_addr: 32'h22d00000, end_addr: 32'h22e00000},// magia_tile_x13_y17_sam_idx -'{idx: '{x: 13, y: 17, port_id: 0}, start_addr: 32'h22c00000, end_addr: 32'h22d00000},// magia_tile_x12_y17_sam_idx -'{idx: '{x: 12, y: 17, port_id: 0}, start_addr: 32'h22b00000, end_addr: 32'h22c00000},// magia_tile_x11_y17_sam_idx -'{idx: '{x: 11, y: 17, port_id: 0}, start_addr: 32'h22a00000, end_addr: 32'h22b00000},// magia_tile_x10_y17_sam_idx -'{idx: '{x: 10, y: 17, port_id: 0}, start_addr: 32'h22900000, end_addr: 32'h22a00000},// magia_tile_x9_y17_sam_idx -'{idx: '{x: 9, y: 17, port_id: 0}, start_addr: 32'h22800000, end_addr: 32'h22900000},// magia_tile_x8_y17_sam_idx -'{idx: '{x: 8, y: 17, port_id: 0}, start_addr: 32'h22700000, end_addr: 32'h22800000},// magia_tile_x7_y17_sam_idx -'{idx: '{x: 7, y: 17, port_id: 0}, start_addr: 32'h22600000, end_addr: 32'h22700000},// magia_tile_x6_y17_sam_idx -'{idx: '{x: 6, y: 17, port_id: 0}, start_addr: 32'h22500000, end_addr: 32'h22600000},// magia_tile_x5_y17_sam_idx -'{idx: '{x: 5, y: 17, port_id: 0}, start_addr: 32'h22400000, end_addr: 32'h22500000},// magia_tile_x4_y17_sam_idx -'{idx: '{x: 4, y: 17, port_id: 0}, start_addr: 32'h22300000, end_addr: 32'h22400000},// magia_tile_x3_y17_sam_idx -'{idx: '{x: 3, y: 17, port_id: 0}, start_addr: 32'h22200000, end_addr: 32'h22300000},// magia_tile_x2_y17_sam_idx -'{idx: '{x: 2, y: 17, port_id: 0}, start_addr: 32'h22100000, end_addr: 32'h22200000},// magia_tile_x1_y17_sam_idx -'{idx: '{x: 1, y: 17, port_id: 0}, start_addr: 32'h22000000, end_addr: 32'h22100000},// magia_tile_x0_y17_sam_idx -'{idx: '{x: 32, y: 16, port_id: 0}, start_addr: 32'h21f00000, end_addr: 32'h22000000},// magia_tile_x31_y16_sam_idx -'{idx: '{x: 31, y: 16, port_id: 0}, start_addr: 32'h21e00000, end_addr: 32'h21f00000},// magia_tile_x30_y16_sam_idx -'{idx: '{x: 30, y: 16, port_id: 0}, start_addr: 32'h21d00000, end_addr: 32'h21e00000},// magia_tile_x29_y16_sam_idx -'{idx: '{x: 29, y: 16, port_id: 0}, start_addr: 32'h21c00000, end_addr: 32'h21d00000},// magia_tile_x28_y16_sam_idx -'{idx: '{x: 28, y: 16, port_id: 0}, start_addr: 32'h21b00000, end_addr: 32'h21c00000},// magia_tile_x27_y16_sam_idx -'{idx: '{x: 27, y: 16, port_id: 0}, start_addr: 32'h21a00000, end_addr: 32'h21b00000},// magia_tile_x26_y16_sam_idx -'{idx: '{x: 26, y: 16, port_id: 0}, start_addr: 32'h21900000, end_addr: 32'h21a00000},// magia_tile_x25_y16_sam_idx -'{idx: '{x: 25, y: 16, port_id: 0}, start_addr: 32'h21800000, end_addr: 32'h21900000},// magia_tile_x24_y16_sam_idx -'{idx: '{x: 24, y: 16, port_id: 0}, start_addr: 32'h21700000, end_addr: 32'h21800000},// magia_tile_x23_y16_sam_idx -'{idx: '{x: 23, y: 16, port_id: 0}, start_addr: 32'h21600000, end_addr: 32'h21700000},// magia_tile_x22_y16_sam_idx -'{idx: '{x: 22, y: 16, port_id: 0}, start_addr: 32'h21500000, end_addr: 32'h21600000},// magia_tile_x21_y16_sam_idx -'{idx: '{x: 21, y: 16, port_id: 0}, start_addr: 32'h21400000, end_addr: 32'h21500000},// magia_tile_x20_y16_sam_idx -'{idx: '{x: 20, y: 16, port_id: 0}, start_addr: 32'h21300000, end_addr: 32'h21400000},// magia_tile_x19_y16_sam_idx -'{idx: '{x: 19, y: 16, port_id: 0}, start_addr: 32'h21200000, end_addr: 32'h21300000},// magia_tile_x18_y16_sam_idx -'{idx: '{x: 18, y: 16, port_id: 0}, start_addr: 32'h21100000, end_addr: 32'h21200000},// magia_tile_x17_y16_sam_idx -'{idx: '{x: 17, y: 16, port_id: 0}, start_addr: 32'h21000000, end_addr: 32'h21100000},// magia_tile_x16_y16_sam_idx -'{idx: '{x: 16, y: 16, port_id: 0}, start_addr: 32'h20f00000, end_addr: 32'h21000000},// magia_tile_x15_y16_sam_idx -'{idx: '{x: 15, y: 16, port_id: 0}, start_addr: 32'h20e00000, end_addr: 32'h20f00000},// magia_tile_x14_y16_sam_idx -'{idx: '{x: 14, y: 16, port_id: 0}, start_addr: 32'h20d00000, end_addr: 32'h20e00000},// magia_tile_x13_y16_sam_idx -'{idx: '{x: 13, y: 16, port_id: 0}, start_addr: 32'h20c00000, end_addr: 32'h20d00000},// magia_tile_x12_y16_sam_idx -'{idx: '{x: 12, y: 16, port_id: 0}, start_addr: 32'h20b00000, end_addr: 32'h20c00000},// magia_tile_x11_y16_sam_idx -'{idx: '{x: 11, y: 16, port_id: 0}, start_addr: 32'h20a00000, end_addr: 32'h20b00000},// magia_tile_x10_y16_sam_idx -'{idx: '{x: 10, y: 16, port_id: 0}, start_addr: 32'h20900000, end_addr: 32'h20a00000},// magia_tile_x9_y16_sam_idx -'{idx: '{x: 9, y: 16, port_id: 0}, start_addr: 32'h20800000, end_addr: 32'h20900000},// magia_tile_x8_y16_sam_idx -'{idx: '{x: 8, y: 16, port_id: 0}, start_addr: 32'h20700000, end_addr: 32'h20800000},// magia_tile_x7_y16_sam_idx -'{idx: '{x: 7, y: 16, port_id: 0}, start_addr: 32'h20600000, end_addr: 32'h20700000},// magia_tile_x6_y16_sam_idx -'{idx: '{x: 6, y: 16, port_id: 0}, start_addr: 32'h20500000, end_addr: 32'h20600000},// magia_tile_x5_y16_sam_idx -'{idx: '{x: 5, y: 16, port_id: 0}, start_addr: 32'h20400000, end_addr: 32'h20500000},// magia_tile_x4_y16_sam_idx -'{idx: '{x: 4, y: 16, port_id: 0}, start_addr: 32'h20300000, end_addr: 32'h20400000},// magia_tile_x3_y16_sam_idx -'{idx: '{x: 3, y: 16, port_id: 0}, start_addr: 32'h20200000, end_addr: 32'h20300000},// magia_tile_x2_y16_sam_idx -'{idx: '{x: 2, y: 16, port_id: 0}, start_addr: 32'h20100000, end_addr: 32'h20200000},// magia_tile_x1_y16_sam_idx -'{idx: '{x: 1, y: 16, port_id: 0}, start_addr: 32'h20000000, end_addr: 32'h20100000},// magia_tile_x0_y16_sam_idx -'{idx: '{x: 32, y: 15, port_id: 0}, start_addr: 32'h1ff00000, end_addr: 32'h20000000},// magia_tile_x31_y15_sam_idx -'{idx: '{x: 31, y: 15, port_id: 0}, start_addr: 32'h1fe00000, end_addr: 32'h1ff00000},// magia_tile_x30_y15_sam_idx -'{idx: '{x: 30, y: 15, port_id: 0}, start_addr: 32'h1fd00000, end_addr: 32'h1fe00000},// magia_tile_x29_y15_sam_idx -'{idx: '{x: 29, y: 15, port_id: 0}, start_addr: 32'h1fc00000, end_addr: 32'h1fd00000},// magia_tile_x28_y15_sam_idx -'{idx: '{x: 28, y: 15, port_id: 0}, start_addr: 32'h1fb00000, end_addr: 32'h1fc00000},// magia_tile_x27_y15_sam_idx -'{idx: '{x: 27, y: 15, port_id: 0}, start_addr: 32'h1fa00000, end_addr: 32'h1fb00000},// magia_tile_x26_y15_sam_idx -'{idx: '{x: 26, y: 15, port_id: 0}, start_addr: 32'h1f900000, end_addr: 32'h1fa00000},// magia_tile_x25_y15_sam_idx -'{idx: '{x: 25, y: 15, port_id: 0}, start_addr: 32'h1f800000, end_addr: 32'h1f900000},// magia_tile_x24_y15_sam_idx -'{idx: '{x: 24, y: 15, port_id: 0}, start_addr: 32'h1f700000, end_addr: 32'h1f800000},// magia_tile_x23_y15_sam_idx -'{idx: '{x: 23, y: 15, port_id: 0}, start_addr: 32'h1f600000, end_addr: 32'h1f700000},// magia_tile_x22_y15_sam_idx -'{idx: '{x: 22, y: 15, port_id: 0}, start_addr: 32'h1f500000, end_addr: 32'h1f600000},// magia_tile_x21_y15_sam_idx -'{idx: '{x: 21, y: 15, port_id: 0}, start_addr: 32'h1f400000, end_addr: 32'h1f500000},// magia_tile_x20_y15_sam_idx -'{idx: '{x: 20, y: 15, port_id: 0}, start_addr: 32'h1f300000, end_addr: 32'h1f400000},// magia_tile_x19_y15_sam_idx -'{idx: '{x: 19, y: 15, port_id: 0}, start_addr: 32'h1f200000, end_addr: 32'h1f300000},// magia_tile_x18_y15_sam_idx -'{idx: '{x: 18, y: 15, port_id: 0}, start_addr: 32'h1f100000, end_addr: 32'h1f200000},// magia_tile_x17_y15_sam_idx -'{idx: '{x: 17, y: 15, port_id: 0}, start_addr: 32'h1f000000, end_addr: 32'h1f100000},// magia_tile_x16_y15_sam_idx -'{idx: '{x: 16, y: 15, port_id: 0}, start_addr: 32'h1ef00000, end_addr: 32'h1f000000},// magia_tile_x15_y15_sam_idx -'{idx: '{x: 15, y: 15, port_id: 0}, start_addr: 32'h1ee00000, end_addr: 32'h1ef00000},// magia_tile_x14_y15_sam_idx -'{idx: '{x: 14, y: 15, port_id: 0}, start_addr: 32'h1ed00000, end_addr: 32'h1ee00000},// magia_tile_x13_y15_sam_idx -'{idx: '{x: 13, y: 15, port_id: 0}, start_addr: 32'h1ec00000, end_addr: 32'h1ed00000},// magia_tile_x12_y15_sam_idx -'{idx: '{x: 12, y: 15, port_id: 0}, start_addr: 32'h1eb00000, end_addr: 32'h1ec00000},// magia_tile_x11_y15_sam_idx -'{idx: '{x: 11, y: 15, port_id: 0}, start_addr: 32'h1ea00000, end_addr: 32'h1eb00000},// magia_tile_x10_y15_sam_idx -'{idx: '{x: 10, y: 15, port_id: 0}, start_addr: 32'h1e900000, end_addr: 32'h1ea00000},// magia_tile_x9_y15_sam_idx -'{idx: '{x: 9, y: 15, port_id: 0}, start_addr: 32'h1e800000, end_addr: 32'h1e900000},// magia_tile_x8_y15_sam_idx -'{idx: '{x: 8, y: 15, port_id: 0}, start_addr: 32'h1e700000, end_addr: 32'h1e800000},// magia_tile_x7_y15_sam_idx -'{idx: '{x: 7, y: 15, port_id: 0}, start_addr: 32'h1e600000, end_addr: 32'h1e700000},// magia_tile_x6_y15_sam_idx -'{idx: '{x: 6, y: 15, port_id: 0}, start_addr: 32'h1e500000, end_addr: 32'h1e600000},// magia_tile_x5_y15_sam_idx -'{idx: '{x: 5, y: 15, port_id: 0}, start_addr: 32'h1e400000, end_addr: 32'h1e500000},// magia_tile_x4_y15_sam_idx -'{idx: '{x: 4, y: 15, port_id: 0}, start_addr: 32'h1e300000, end_addr: 32'h1e400000},// magia_tile_x3_y15_sam_idx -'{idx: '{x: 3, y: 15, port_id: 0}, start_addr: 32'h1e200000, end_addr: 32'h1e300000},// magia_tile_x2_y15_sam_idx -'{idx: '{x: 2, y: 15, port_id: 0}, start_addr: 32'h1e100000, end_addr: 32'h1e200000},// magia_tile_x1_y15_sam_idx -'{idx: '{x: 1, y: 15, port_id: 0}, start_addr: 32'h1e000000, end_addr: 32'h1e100000},// magia_tile_x0_y15_sam_idx -'{idx: '{x: 32, y: 14, port_id: 0}, start_addr: 32'h1df00000, end_addr: 32'h1e000000},// magia_tile_x31_y14_sam_idx -'{idx: '{x: 31, y: 14, port_id: 0}, start_addr: 32'h1de00000, end_addr: 32'h1df00000},// magia_tile_x30_y14_sam_idx -'{idx: '{x: 30, y: 14, port_id: 0}, start_addr: 32'h1dd00000, end_addr: 32'h1de00000},// magia_tile_x29_y14_sam_idx -'{idx: '{x: 29, y: 14, port_id: 0}, start_addr: 32'h1dc00000, end_addr: 32'h1dd00000},// magia_tile_x28_y14_sam_idx -'{idx: '{x: 28, y: 14, port_id: 0}, start_addr: 32'h1db00000, end_addr: 32'h1dc00000},// magia_tile_x27_y14_sam_idx -'{idx: '{x: 27, y: 14, port_id: 0}, start_addr: 32'h1da00000, end_addr: 32'h1db00000},// magia_tile_x26_y14_sam_idx -'{idx: '{x: 26, y: 14, port_id: 0}, start_addr: 32'h1d900000, end_addr: 32'h1da00000},// magia_tile_x25_y14_sam_idx -'{idx: '{x: 25, y: 14, port_id: 0}, start_addr: 32'h1d800000, end_addr: 32'h1d900000},// magia_tile_x24_y14_sam_idx -'{idx: '{x: 24, y: 14, port_id: 0}, start_addr: 32'h1d700000, end_addr: 32'h1d800000},// magia_tile_x23_y14_sam_idx -'{idx: '{x: 23, y: 14, port_id: 0}, start_addr: 32'h1d600000, end_addr: 32'h1d700000},// magia_tile_x22_y14_sam_idx -'{idx: '{x: 22, y: 14, port_id: 0}, start_addr: 32'h1d500000, end_addr: 32'h1d600000},// magia_tile_x21_y14_sam_idx -'{idx: '{x: 21, y: 14, port_id: 0}, start_addr: 32'h1d400000, end_addr: 32'h1d500000},// magia_tile_x20_y14_sam_idx -'{idx: '{x: 20, y: 14, port_id: 0}, start_addr: 32'h1d300000, end_addr: 32'h1d400000},// magia_tile_x19_y14_sam_idx -'{idx: '{x: 19, y: 14, port_id: 0}, start_addr: 32'h1d200000, end_addr: 32'h1d300000},// magia_tile_x18_y14_sam_idx -'{idx: '{x: 18, y: 14, port_id: 0}, start_addr: 32'h1d100000, end_addr: 32'h1d200000},// magia_tile_x17_y14_sam_idx -'{idx: '{x: 17, y: 14, port_id: 0}, start_addr: 32'h1d000000, end_addr: 32'h1d100000},// magia_tile_x16_y14_sam_idx -'{idx: '{x: 16, y: 14, port_id: 0}, start_addr: 32'h1cf00000, end_addr: 32'h1d000000},// magia_tile_x15_y14_sam_idx -'{idx: '{x: 15, y: 14, port_id: 0}, start_addr: 32'h1ce00000, end_addr: 32'h1cf00000},// magia_tile_x14_y14_sam_idx -'{idx: '{x: 14, y: 14, port_id: 0}, start_addr: 32'h1cd00000, end_addr: 32'h1ce00000},// magia_tile_x13_y14_sam_idx -'{idx: '{x: 13, y: 14, port_id: 0}, start_addr: 32'h1cc00000, end_addr: 32'h1cd00000},// magia_tile_x12_y14_sam_idx -'{idx: '{x: 12, y: 14, port_id: 0}, start_addr: 32'h1cb00000, end_addr: 32'h1cc00000},// magia_tile_x11_y14_sam_idx -'{idx: '{x: 11, y: 14, port_id: 0}, start_addr: 32'h1ca00000, end_addr: 32'h1cb00000},// magia_tile_x10_y14_sam_idx -'{idx: '{x: 10, y: 14, port_id: 0}, start_addr: 32'h1c900000, end_addr: 32'h1ca00000},// magia_tile_x9_y14_sam_idx -'{idx: '{x: 9, y: 14, port_id: 0}, start_addr: 32'h1c800000, end_addr: 32'h1c900000},// magia_tile_x8_y14_sam_idx -'{idx: '{x: 8, y: 14, port_id: 0}, start_addr: 32'h1c700000, end_addr: 32'h1c800000},// magia_tile_x7_y14_sam_idx -'{idx: '{x: 7, y: 14, port_id: 0}, start_addr: 32'h1c600000, end_addr: 32'h1c700000},// magia_tile_x6_y14_sam_idx -'{idx: '{x: 6, y: 14, port_id: 0}, start_addr: 32'h1c500000, end_addr: 32'h1c600000},// magia_tile_x5_y14_sam_idx -'{idx: '{x: 5, y: 14, port_id: 0}, start_addr: 32'h1c400000, end_addr: 32'h1c500000},// magia_tile_x4_y14_sam_idx -'{idx: '{x: 4, y: 14, port_id: 0}, start_addr: 32'h1c300000, end_addr: 32'h1c400000},// magia_tile_x3_y14_sam_idx -'{idx: '{x: 3, y: 14, port_id: 0}, start_addr: 32'h1c200000, end_addr: 32'h1c300000},// magia_tile_x2_y14_sam_idx -'{idx: '{x: 2, y: 14, port_id: 0}, start_addr: 32'h1c100000, end_addr: 32'h1c200000},// magia_tile_x1_y14_sam_idx -'{idx: '{x: 1, y: 14, port_id: 0}, start_addr: 32'h1c000000, end_addr: 32'h1c100000},// magia_tile_x0_y14_sam_idx -'{idx: '{x: 32, y: 13, port_id: 0}, start_addr: 32'h1bf00000, end_addr: 32'h1c000000},// magia_tile_x31_y13_sam_idx -'{idx: '{x: 31, y: 13, port_id: 0}, start_addr: 32'h1be00000, end_addr: 32'h1bf00000},// magia_tile_x30_y13_sam_idx -'{idx: '{x: 30, y: 13, port_id: 0}, start_addr: 32'h1bd00000, end_addr: 32'h1be00000},// magia_tile_x29_y13_sam_idx -'{idx: '{x: 29, y: 13, port_id: 0}, start_addr: 32'h1bc00000, end_addr: 32'h1bd00000},// magia_tile_x28_y13_sam_idx -'{idx: '{x: 28, y: 13, port_id: 0}, start_addr: 32'h1bb00000, end_addr: 32'h1bc00000},// magia_tile_x27_y13_sam_idx -'{idx: '{x: 27, y: 13, port_id: 0}, start_addr: 32'h1ba00000, end_addr: 32'h1bb00000},// magia_tile_x26_y13_sam_idx -'{idx: '{x: 26, y: 13, port_id: 0}, start_addr: 32'h1b900000, end_addr: 32'h1ba00000},// magia_tile_x25_y13_sam_idx -'{idx: '{x: 25, y: 13, port_id: 0}, start_addr: 32'h1b800000, end_addr: 32'h1b900000},// magia_tile_x24_y13_sam_idx -'{idx: '{x: 24, y: 13, port_id: 0}, start_addr: 32'h1b700000, end_addr: 32'h1b800000},// magia_tile_x23_y13_sam_idx -'{idx: '{x: 23, y: 13, port_id: 0}, start_addr: 32'h1b600000, end_addr: 32'h1b700000},// magia_tile_x22_y13_sam_idx -'{idx: '{x: 22, y: 13, port_id: 0}, start_addr: 32'h1b500000, end_addr: 32'h1b600000},// magia_tile_x21_y13_sam_idx -'{idx: '{x: 21, y: 13, port_id: 0}, start_addr: 32'h1b400000, end_addr: 32'h1b500000},// magia_tile_x20_y13_sam_idx -'{idx: '{x: 20, y: 13, port_id: 0}, start_addr: 32'h1b300000, end_addr: 32'h1b400000},// magia_tile_x19_y13_sam_idx -'{idx: '{x: 19, y: 13, port_id: 0}, start_addr: 32'h1b200000, end_addr: 32'h1b300000},// magia_tile_x18_y13_sam_idx -'{idx: '{x: 18, y: 13, port_id: 0}, start_addr: 32'h1b100000, end_addr: 32'h1b200000},// magia_tile_x17_y13_sam_idx -'{idx: '{x: 17, y: 13, port_id: 0}, start_addr: 32'h1b000000, end_addr: 32'h1b100000},// magia_tile_x16_y13_sam_idx -'{idx: '{x: 16, y: 13, port_id: 0}, start_addr: 32'h1af00000, end_addr: 32'h1b000000},// magia_tile_x15_y13_sam_idx -'{idx: '{x: 15, y: 13, port_id: 0}, start_addr: 32'h1ae00000, end_addr: 32'h1af00000},// magia_tile_x14_y13_sam_idx -'{idx: '{x: 14, y: 13, port_id: 0}, start_addr: 32'h1ad00000, end_addr: 32'h1ae00000},// magia_tile_x13_y13_sam_idx -'{idx: '{x: 13, y: 13, port_id: 0}, start_addr: 32'h1ac00000, end_addr: 32'h1ad00000},// magia_tile_x12_y13_sam_idx -'{idx: '{x: 12, y: 13, port_id: 0}, start_addr: 32'h1ab00000, end_addr: 32'h1ac00000},// magia_tile_x11_y13_sam_idx -'{idx: '{x: 11, y: 13, port_id: 0}, start_addr: 32'h1aa00000, end_addr: 32'h1ab00000},// magia_tile_x10_y13_sam_idx -'{idx: '{x: 10, y: 13, port_id: 0}, start_addr: 32'h1a900000, end_addr: 32'h1aa00000},// magia_tile_x9_y13_sam_idx -'{idx: '{x: 9, y: 13, port_id: 0}, start_addr: 32'h1a800000, end_addr: 32'h1a900000},// magia_tile_x8_y13_sam_idx -'{idx: '{x: 8, y: 13, port_id: 0}, start_addr: 32'h1a700000, end_addr: 32'h1a800000},// magia_tile_x7_y13_sam_idx -'{idx: '{x: 7, y: 13, port_id: 0}, start_addr: 32'h1a600000, end_addr: 32'h1a700000},// magia_tile_x6_y13_sam_idx -'{idx: '{x: 6, y: 13, port_id: 0}, start_addr: 32'h1a500000, end_addr: 32'h1a600000},// magia_tile_x5_y13_sam_idx -'{idx: '{x: 5, y: 13, port_id: 0}, start_addr: 32'h1a400000, end_addr: 32'h1a500000},// magia_tile_x4_y13_sam_idx -'{idx: '{x: 4, y: 13, port_id: 0}, start_addr: 32'h1a300000, end_addr: 32'h1a400000},// magia_tile_x3_y13_sam_idx -'{idx: '{x: 3, y: 13, port_id: 0}, start_addr: 32'h1a200000, end_addr: 32'h1a300000},// magia_tile_x2_y13_sam_idx -'{idx: '{x: 2, y: 13, port_id: 0}, start_addr: 32'h1a100000, end_addr: 32'h1a200000},// magia_tile_x1_y13_sam_idx -'{idx: '{x: 1, y: 13, port_id: 0}, start_addr: 32'h1a000000, end_addr: 32'h1a100000},// magia_tile_x0_y13_sam_idx -'{idx: '{x: 32, y: 12, port_id: 0}, start_addr: 32'h19f00000, end_addr: 32'h1a000000},// magia_tile_x31_y12_sam_idx -'{idx: '{x: 31, y: 12, port_id: 0}, start_addr: 32'h19e00000, end_addr: 32'h19f00000},// magia_tile_x30_y12_sam_idx -'{idx: '{x: 30, y: 12, port_id: 0}, start_addr: 32'h19d00000, end_addr: 32'h19e00000},// magia_tile_x29_y12_sam_idx -'{idx: '{x: 29, y: 12, port_id: 0}, start_addr: 32'h19c00000, end_addr: 32'h19d00000},// magia_tile_x28_y12_sam_idx -'{idx: '{x: 28, y: 12, port_id: 0}, start_addr: 32'h19b00000, end_addr: 32'h19c00000},// magia_tile_x27_y12_sam_idx -'{idx: '{x: 27, y: 12, port_id: 0}, start_addr: 32'h19a00000, end_addr: 32'h19b00000},// magia_tile_x26_y12_sam_idx -'{idx: '{x: 26, y: 12, port_id: 0}, start_addr: 32'h19900000, end_addr: 32'h19a00000},// magia_tile_x25_y12_sam_idx -'{idx: '{x: 25, y: 12, port_id: 0}, start_addr: 32'h19800000, end_addr: 32'h19900000},// magia_tile_x24_y12_sam_idx -'{idx: '{x: 24, y: 12, port_id: 0}, start_addr: 32'h19700000, end_addr: 32'h19800000},// magia_tile_x23_y12_sam_idx -'{idx: '{x: 23, y: 12, port_id: 0}, start_addr: 32'h19600000, end_addr: 32'h19700000},// magia_tile_x22_y12_sam_idx -'{idx: '{x: 22, y: 12, port_id: 0}, start_addr: 32'h19500000, end_addr: 32'h19600000},// magia_tile_x21_y12_sam_idx -'{idx: '{x: 21, y: 12, port_id: 0}, start_addr: 32'h19400000, end_addr: 32'h19500000},// magia_tile_x20_y12_sam_idx -'{idx: '{x: 20, y: 12, port_id: 0}, start_addr: 32'h19300000, end_addr: 32'h19400000},// magia_tile_x19_y12_sam_idx -'{idx: '{x: 19, y: 12, port_id: 0}, start_addr: 32'h19200000, end_addr: 32'h19300000},// magia_tile_x18_y12_sam_idx -'{idx: '{x: 18, y: 12, port_id: 0}, start_addr: 32'h19100000, end_addr: 32'h19200000},// magia_tile_x17_y12_sam_idx -'{idx: '{x: 17, y: 12, port_id: 0}, start_addr: 32'h19000000, end_addr: 32'h19100000},// magia_tile_x16_y12_sam_idx -'{idx: '{x: 16, y: 12, port_id: 0}, start_addr: 32'h18f00000, end_addr: 32'h19000000},// magia_tile_x15_y12_sam_idx -'{idx: '{x: 15, y: 12, port_id: 0}, start_addr: 32'h18e00000, end_addr: 32'h18f00000},// magia_tile_x14_y12_sam_idx -'{idx: '{x: 14, y: 12, port_id: 0}, start_addr: 32'h18d00000, end_addr: 32'h18e00000},// magia_tile_x13_y12_sam_idx -'{idx: '{x: 13, y: 12, port_id: 0}, start_addr: 32'h18c00000, end_addr: 32'h18d00000},// magia_tile_x12_y12_sam_idx -'{idx: '{x: 12, y: 12, port_id: 0}, start_addr: 32'h18b00000, end_addr: 32'h18c00000},// magia_tile_x11_y12_sam_idx -'{idx: '{x: 11, y: 12, port_id: 0}, start_addr: 32'h18a00000, end_addr: 32'h18b00000},// magia_tile_x10_y12_sam_idx -'{idx: '{x: 10, y: 12, port_id: 0}, start_addr: 32'h18900000, end_addr: 32'h18a00000},// magia_tile_x9_y12_sam_idx -'{idx: '{x: 9, y: 12, port_id: 0}, start_addr: 32'h18800000, end_addr: 32'h18900000},// magia_tile_x8_y12_sam_idx -'{idx: '{x: 8, y: 12, port_id: 0}, start_addr: 32'h18700000, end_addr: 32'h18800000},// magia_tile_x7_y12_sam_idx -'{idx: '{x: 7, y: 12, port_id: 0}, start_addr: 32'h18600000, end_addr: 32'h18700000},// magia_tile_x6_y12_sam_idx -'{idx: '{x: 6, y: 12, port_id: 0}, start_addr: 32'h18500000, end_addr: 32'h18600000},// magia_tile_x5_y12_sam_idx -'{idx: '{x: 5, y: 12, port_id: 0}, start_addr: 32'h18400000, end_addr: 32'h18500000},// magia_tile_x4_y12_sam_idx -'{idx: '{x: 4, y: 12, port_id: 0}, start_addr: 32'h18300000, end_addr: 32'h18400000},// magia_tile_x3_y12_sam_idx -'{idx: '{x: 3, y: 12, port_id: 0}, start_addr: 32'h18200000, end_addr: 32'h18300000},// magia_tile_x2_y12_sam_idx -'{idx: '{x: 2, y: 12, port_id: 0}, start_addr: 32'h18100000, end_addr: 32'h18200000},// magia_tile_x1_y12_sam_idx -'{idx: '{x: 1, y: 12, port_id: 0}, start_addr: 32'h18000000, end_addr: 32'h18100000},// magia_tile_x0_y12_sam_idx -'{idx: '{x: 32, y: 11, port_id: 0}, start_addr: 32'h17f00000, end_addr: 32'h18000000},// magia_tile_x31_y11_sam_idx -'{idx: '{x: 31, y: 11, port_id: 0}, start_addr: 32'h17e00000, end_addr: 32'h17f00000},// magia_tile_x30_y11_sam_idx -'{idx: '{x: 30, y: 11, port_id: 0}, start_addr: 32'h17d00000, end_addr: 32'h17e00000},// magia_tile_x29_y11_sam_idx -'{idx: '{x: 29, y: 11, port_id: 0}, start_addr: 32'h17c00000, end_addr: 32'h17d00000},// magia_tile_x28_y11_sam_idx -'{idx: '{x: 28, y: 11, port_id: 0}, start_addr: 32'h17b00000, end_addr: 32'h17c00000},// magia_tile_x27_y11_sam_idx -'{idx: '{x: 27, y: 11, port_id: 0}, start_addr: 32'h17a00000, end_addr: 32'h17b00000},// magia_tile_x26_y11_sam_idx -'{idx: '{x: 26, y: 11, port_id: 0}, start_addr: 32'h17900000, end_addr: 32'h17a00000},// magia_tile_x25_y11_sam_idx -'{idx: '{x: 25, y: 11, port_id: 0}, start_addr: 32'h17800000, end_addr: 32'h17900000},// magia_tile_x24_y11_sam_idx -'{idx: '{x: 24, y: 11, port_id: 0}, start_addr: 32'h17700000, end_addr: 32'h17800000},// magia_tile_x23_y11_sam_idx -'{idx: '{x: 23, y: 11, port_id: 0}, start_addr: 32'h17600000, end_addr: 32'h17700000},// magia_tile_x22_y11_sam_idx -'{idx: '{x: 22, y: 11, port_id: 0}, start_addr: 32'h17500000, end_addr: 32'h17600000},// magia_tile_x21_y11_sam_idx -'{idx: '{x: 21, y: 11, port_id: 0}, start_addr: 32'h17400000, end_addr: 32'h17500000},// magia_tile_x20_y11_sam_idx -'{idx: '{x: 20, y: 11, port_id: 0}, start_addr: 32'h17300000, end_addr: 32'h17400000},// magia_tile_x19_y11_sam_idx -'{idx: '{x: 19, y: 11, port_id: 0}, start_addr: 32'h17200000, end_addr: 32'h17300000},// magia_tile_x18_y11_sam_idx -'{idx: '{x: 18, y: 11, port_id: 0}, start_addr: 32'h17100000, end_addr: 32'h17200000},// magia_tile_x17_y11_sam_idx -'{idx: '{x: 17, y: 11, port_id: 0}, start_addr: 32'h17000000, end_addr: 32'h17100000},// magia_tile_x16_y11_sam_idx -'{idx: '{x: 16, y: 11, port_id: 0}, start_addr: 32'h16f00000, end_addr: 32'h17000000},// magia_tile_x15_y11_sam_idx -'{idx: '{x: 15, y: 11, port_id: 0}, start_addr: 32'h16e00000, end_addr: 32'h16f00000},// magia_tile_x14_y11_sam_idx -'{idx: '{x: 14, y: 11, port_id: 0}, start_addr: 32'h16d00000, end_addr: 32'h16e00000},// magia_tile_x13_y11_sam_idx -'{idx: '{x: 13, y: 11, port_id: 0}, start_addr: 32'h16c00000, end_addr: 32'h16d00000},// magia_tile_x12_y11_sam_idx -'{idx: '{x: 12, y: 11, port_id: 0}, start_addr: 32'h16b00000, end_addr: 32'h16c00000},// magia_tile_x11_y11_sam_idx -'{idx: '{x: 11, y: 11, port_id: 0}, start_addr: 32'h16a00000, end_addr: 32'h16b00000},// magia_tile_x10_y11_sam_idx -'{idx: '{x: 10, y: 11, port_id: 0}, start_addr: 32'h16900000, end_addr: 32'h16a00000},// magia_tile_x9_y11_sam_idx -'{idx: '{x: 9, y: 11, port_id: 0}, start_addr: 32'h16800000, end_addr: 32'h16900000},// magia_tile_x8_y11_sam_idx -'{idx: '{x: 8, y: 11, port_id: 0}, start_addr: 32'h16700000, end_addr: 32'h16800000},// magia_tile_x7_y11_sam_idx -'{idx: '{x: 7, y: 11, port_id: 0}, start_addr: 32'h16600000, end_addr: 32'h16700000},// magia_tile_x6_y11_sam_idx -'{idx: '{x: 6, y: 11, port_id: 0}, start_addr: 32'h16500000, end_addr: 32'h16600000},// magia_tile_x5_y11_sam_idx -'{idx: '{x: 5, y: 11, port_id: 0}, start_addr: 32'h16400000, end_addr: 32'h16500000},// magia_tile_x4_y11_sam_idx -'{idx: '{x: 4, y: 11, port_id: 0}, start_addr: 32'h16300000, end_addr: 32'h16400000},// magia_tile_x3_y11_sam_idx -'{idx: '{x: 3, y: 11, port_id: 0}, start_addr: 32'h16200000, end_addr: 32'h16300000},// magia_tile_x2_y11_sam_idx -'{idx: '{x: 2, y: 11, port_id: 0}, start_addr: 32'h16100000, end_addr: 32'h16200000},// magia_tile_x1_y11_sam_idx -'{idx: '{x: 1, y: 11, port_id: 0}, start_addr: 32'h16000000, end_addr: 32'h16100000},// magia_tile_x0_y11_sam_idx -'{idx: '{x: 32, y: 10, port_id: 0}, start_addr: 32'h15f00000, end_addr: 32'h16000000},// magia_tile_x31_y10_sam_idx -'{idx: '{x: 31, y: 10, port_id: 0}, start_addr: 32'h15e00000, end_addr: 32'h15f00000},// magia_tile_x30_y10_sam_idx -'{idx: '{x: 30, y: 10, port_id: 0}, start_addr: 32'h15d00000, end_addr: 32'h15e00000},// magia_tile_x29_y10_sam_idx -'{idx: '{x: 29, y: 10, port_id: 0}, start_addr: 32'h15c00000, end_addr: 32'h15d00000},// magia_tile_x28_y10_sam_idx -'{idx: '{x: 28, y: 10, port_id: 0}, start_addr: 32'h15b00000, end_addr: 32'h15c00000},// magia_tile_x27_y10_sam_idx -'{idx: '{x: 27, y: 10, port_id: 0}, start_addr: 32'h15a00000, end_addr: 32'h15b00000},// magia_tile_x26_y10_sam_idx -'{idx: '{x: 26, y: 10, port_id: 0}, start_addr: 32'h15900000, end_addr: 32'h15a00000},// magia_tile_x25_y10_sam_idx -'{idx: '{x: 25, y: 10, port_id: 0}, start_addr: 32'h15800000, end_addr: 32'h15900000},// magia_tile_x24_y10_sam_idx -'{idx: '{x: 24, y: 10, port_id: 0}, start_addr: 32'h15700000, end_addr: 32'h15800000},// magia_tile_x23_y10_sam_idx -'{idx: '{x: 23, y: 10, port_id: 0}, start_addr: 32'h15600000, end_addr: 32'h15700000},// magia_tile_x22_y10_sam_idx -'{idx: '{x: 22, y: 10, port_id: 0}, start_addr: 32'h15500000, end_addr: 32'h15600000},// magia_tile_x21_y10_sam_idx -'{idx: '{x: 21, y: 10, port_id: 0}, start_addr: 32'h15400000, end_addr: 32'h15500000},// magia_tile_x20_y10_sam_idx -'{idx: '{x: 20, y: 10, port_id: 0}, start_addr: 32'h15300000, end_addr: 32'h15400000},// magia_tile_x19_y10_sam_idx -'{idx: '{x: 19, y: 10, port_id: 0}, start_addr: 32'h15200000, end_addr: 32'h15300000},// magia_tile_x18_y10_sam_idx -'{idx: '{x: 18, y: 10, port_id: 0}, start_addr: 32'h15100000, end_addr: 32'h15200000},// magia_tile_x17_y10_sam_idx -'{idx: '{x: 17, y: 10, port_id: 0}, start_addr: 32'h15000000, end_addr: 32'h15100000},// magia_tile_x16_y10_sam_idx -'{idx: '{x: 16, y: 10, port_id: 0}, start_addr: 32'h14f00000, end_addr: 32'h15000000},// magia_tile_x15_y10_sam_idx -'{idx: '{x: 15, y: 10, port_id: 0}, start_addr: 32'h14e00000, end_addr: 32'h14f00000},// magia_tile_x14_y10_sam_idx -'{idx: '{x: 14, y: 10, port_id: 0}, start_addr: 32'h14d00000, end_addr: 32'h14e00000},// magia_tile_x13_y10_sam_idx -'{idx: '{x: 13, y: 10, port_id: 0}, start_addr: 32'h14c00000, end_addr: 32'h14d00000},// magia_tile_x12_y10_sam_idx -'{idx: '{x: 12, y: 10, port_id: 0}, start_addr: 32'h14b00000, end_addr: 32'h14c00000},// magia_tile_x11_y10_sam_idx -'{idx: '{x: 11, y: 10, port_id: 0}, start_addr: 32'h14a00000, end_addr: 32'h14b00000},// magia_tile_x10_y10_sam_idx -'{idx: '{x: 10, y: 10, port_id: 0}, start_addr: 32'h14900000, end_addr: 32'h14a00000},// magia_tile_x9_y10_sam_idx -'{idx: '{x: 9, y: 10, port_id: 0}, start_addr: 32'h14800000, end_addr: 32'h14900000},// magia_tile_x8_y10_sam_idx -'{idx: '{x: 8, y: 10, port_id: 0}, start_addr: 32'h14700000, end_addr: 32'h14800000},// magia_tile_x7_y10_sam_idx -'{idx: '{x: 7, y: 10, port_id: 0}, start_addr: 32'h14600000, end_addr: 32'h14700000},// magia_tile_x6_y10_sam_idx -'{idx: '{x: 6, y: 10, port_id: 0}, start_addr: 32'h14500000, end_addr: 32'h14600000},// magia_tile_x5_y10_sam_idx -'{idx: '{x: 5, y: 10, port_id: 0}, start_addr: 32'h14400000, end_addr: 32'h14500000},// magia_tile_x4_y10_sam_idx -'{idx: '{x: 4, y: 10, port_id: 0}, start_addr: 32'h14300000, end_addr: 32'h14400000},// magia_tile_x3_y10_sam_idx -'{idx: '{x: 3, y: 10, port_id: 0}, start_addr: 32'h14200000, end_addr: 32'h14300000},// magia_tile_x2_y10_sam_idx -'{idx: '{x: 2, y: 10, port_id: 0}, start_addr: 32'h14100000, end_addr: 32'h14200000},// magia_tile_x1_y10_sam_idx -'{idx: '{x: 1, y: 10, port_id: 0}, start_addr: 32'h14000000, end_addr: 32'h14100000},// magia_tile_x0_y10_sam_idx -'{idx: '{x: 32, y: 9, port_id: 0}, start_addr: 32'h13f00000, end_addr: 32'h14000000},// magia_tile_x31_y9_sam_idx -'{idx: '{x: 31, y: 9, port_id: 0}, start_addr: 32'h13e00000, end_addr: 32'h13f00000},// magia_tile_x30_y9_sam_idx -'{idx: '{x: 30, y: 9, port_id: 0}, start_addr: 32'h13d00000, end_addr: 32'h13e00000},// magia_tile_x29_y9_sam_idx -'{idx: '{x: 29, y: 9, port_id: 0}, start_addr: 32'h13c00000, end_addr: 32'h13d00000},// magia_tile_x28_y9_sam_idx -'{idx: '{x: 28, y: 9, port_id: 0}, start_addr: 32'h13b00000, end_addr: 32'h13c00000},// magia_tile_x27_y9_sam_idx -'{idx: '{x: 27, y: 9, port_id: 0}, start_addr: 32'h13a00000, end_addr: 32'h13b00000},// magia_tile_x26_y9_sam_idx -'{idx: '{x: 26, y: 9, port_id: 0}, start_addr: 32'h13900000, end_addr: 32'h13a00000},// magia_tile_x25_y9_sam_idx -'{idx: '{x: 25, y: 9, port_id: 0}, start_addr: 32'h13800000, end_addr: 32'h13900000},// magia_tile_x24_y9_sam_idx -'{idx: '{x: 24, y: 9, port_id: 0}, start_addr: 32'h13700000, end_addr: 32'h13800000},// magia_tile_x23_y9_sam_idx -'{idx: '{x: 23, y: 9, port_id: 0}, start_addr: 32'h13600000, end_addr: 32'h13700000},// magia_tile_x22_y9_sam_idx -'{idx: '{x: 22, y: 9, port_id: 0}, start_addr: 32'h13500000, end_addr: 32'h13600000},// magia_tile_x21_y9_sam_idx -'{idx: '{x: 21, y: 9, port_id: 0}, start_addr: 32'h13400000, end_addr: 32'h13500000},// magia_tile_x20_y9_sam_idx -'{idx: '{x: 20, y: 9, port_id: 0}, start_addr: 32'h13300000, end_addr: 32'h13400000},// magia_tile_x19_y9_sam_idx -'{idx: '{x: 19, y: 9, port_id: 0}, start_addr: 32'h13200000, end_addr: 32'h13300000},// magia_tile_x18_y9_sam_idx -'{idx: '{x: 18, y: 9, port_id: 0}, start_addr: 32'h13100000, end_addr: 32'h13200000},// magia_tile_x17_y9_sam_idx -'{idx: '{x: 17, y: 9, port_id: 0}, start_addr: 32'h13000000, end_addr: 32'h13100000},// magia_tile_x16_y9_sam_idx -'{idx: '{x: 16, y: 9, port_id: 0}, start_addr: 32'h12f00000, end_addr: 32'h13000000},// magia_tile_x15_y9_sam_idx -'{idx: '{x: 15, y: 9, port_id: 0}, start_addr: 32'h12e00000, end_addr: 32'h12f00000},// magia_tile_x14_y9_sam_idx -'{idx: '{x: 14, y: 9, port_id: 0}, start_addr: 32'h12d00000, end_addr: 32'h12e00000},// magia_tile_x13_y9_sam_idx -'{idx: '{x: 13, y: 9, port_id: 0}, start_addr: 32'h12c00000, end_addr: 32'h12d00000},// magia_tile_x12_y9_sam_idx -'{idx: '{x: 12, y: 9, port_id: 0}, start_addr: 32'h12b00000, end_addr: 32'h12c00000},// magia_tile_x11_y9_sam_idx -'{idx: '{x: 11, y: 9, port_id: 0}, start_addr: 32'h12a00000, end_addr: 32'h12b00000},// magia_tile_x10_y9_sam_idx -'{idx: '{x: 10, y: 9, port_id: 0}, start_addr: 32'h12900000, end_addr: 32'h12a00000},// magia_tile_x9_y9_sam_idx -'{idx: '{x: 9, y: 9, port_id: 0}, start_addr: 32'h12800000, end_addr: 32'h12900000},// magia_tile_x8_y9_sam_idx -'{idx: '{x: 8, y: 9, port_id: 0}, start_addr: 32'h12700000, end_addr: 32'h12800000},// magia_tile_x7_y9_sam_idx -'{idx: '{x: 7, y: 9, port_id: 0}, start_addr: 32'h12600000, end_addr: 32'h12700000},// magia_tile_x6_y9_sam_idx -'{idx: '{x: 6, y: 9, port_id: 0}, start_addr: 32'h12500000, end_addr: 32'h12600000},// magia_tile_x5_y9_sam_idx -'{idx: '{x: 5, y: 9, port_id: 0}, start_addr: 32'h12400000, end_addr: 32'h12500000},// magia_tile_x4_y9_sam_idx -'{idx: '{x: 4, y: 9, port_id: 0}, start_addr: 32'h12300000, end_addr: 32'h12400000},// magia_tile_x3_y9_sam_idx -'{idx: '{x: 3, y: 9, port_id: 0}, start_addr: 32'h12200000, end_addr: 32'h12300000},// magia_tile_x2_y9_sam_idx -'{idx: '{x: 2, y: 9, port_id: 0}, start_addr: 32'h12100000, end_addr: 32'h12200000},// magia_tile_x1_y9_sam_idx -'{idx: '{x: 1, y: 9, port_id: 0}, start_addr: 32'h12000000, end_addr: 32'h12100000},// magia_tile_x0_y9_sam_idx -'{idx: '{x: 32, y: 8, port_id: 0}, start_addr: 32'h11f00000, end_addr: 32'h12000000},// magia_tile_x31_y8_sam_idx -'{idx: '{x: 31, y: 8, port_id: 0}, start_addr: 32'h11e00000, end_addr: 32'h11f00000},// magia_tile_x30_y8_sam_idx -'{idx: '{x: 30, y: 8, port_id: 0}, start_addr: 32'h11d00000, end_addr: 32'h11e00000},// magia_tile_x29_y8_sam_idx -'{idx: '{x: 29, y: 8, port_id: 0}, start_addr: 32'h11c00000, end_addr: 32'h11d00000},// magia_tile_x28_y8_sam_idx -'{idx: '{x: 28, y: 8, port_id: 0}, start_addr: 32'h11b00000, end_addr: 32'h11c00000},// magia_tile_x27_y8_sam_idx -'{idx: '{x: 27, y: 8, port_id: 0}, start_addr: 32'h11a00000, end_addr: 32'h11b00000},// magia_tile_x26_y8_sam_idx -'{idx: '{x: 26, y: 8, port_id: 0}, start_addr: 32'h11900000, end_addr: 32'h11a00000},// magia_tile_x25_y8_sam_idx -'{idx: '{x: 25, y: 8, port_id: 0}, start_addr: 32'h11800000, end_addr: 32'h11900000},// magia_tile_x24_y8_sam_idx -'{idx: '{x: 24, y: 8, port_id: 0}, start_addr: 32'h11700000, end_addr: 32'h11800000},// magia_tile_x23_y8_sam_idx -'{idx: '{x: 23, y: 8, port_id: 0}, start_addr: 32'h11600000, end_addr: 32'h11700000},// magia_tile_x22_y8_sam_idx -'{idx: '{x: 22, y: 8, port_id: 0}, start_addr: 32'h11500000, end_addr: 32'h11600000},// magia_tile_x21_y8_sam_idx -'{idx: '{x: 21, y: 8, port_id: 0}, start_addr: 32'h11400000, end_addr: 32'h11500000},// magia_tile_x20_y8_sam_idx -'{idx: '{x: 20, y: 8, port_id: 0}, start_addr: 32'h11300000, end_addr: 32'h11400000},// magia_tile_x19_y8_sam_idx -'{idx: '{x: 19, y: 8, port_id: 0}, start_addr: 32'h11200000, end_addr: 32'h11300000},// magia_tile_x18_y8_sam_idx -'{idx: '{x: 18, y: 8, port_id: 0}, start_addr: 32'h11100000, end_addr: 32'h11200000},// magia_tile_x17_y8_sam_idx -'{idx: '{x: 17, y: 8, port_id: 0}, start_addr: 32'h11000000, end_addr: 32'h11100000},// magia_tile_x16_y8_sam_idx -'{idx: '{x: 16, y: 8, port_id: 0}, start_addr: 32'h10f00000, end_addr: 32'h11000000},// magia_tile_x15_y8_sam_idx -'{idx: '{x: 15, y: 8, port_id: 0}, start_addr: 32'h10e00000, end_addr: 32'h10f00000},// magia_tile_x14_y8_sam_idx -'{idx: '{x: 14, y: 8, port_id: 0}, start_addr: 32'h10d00000, end_addr: 32'h10e00000},// magia_tile_x13_y8_sam_idx -'{idx: '{x: 13, y: 8, port_id: 0}, start_addr: 32'h10c00000, end_addr: 32'h10d00000},// magia_tile_x12_y8_sam_idx -'{idx: '{x: 12, y: 8, port_id: 0}, start_addr: 32'h10b00000, end_addr: 32'h10c00000},// magia_tile_x11_y8_sam_idx -'{idx: '{x: 11, y: 8, port_id: 0}, start_addr: 32'h10a00000, end_addr: 32'h10b00000},// magia_tile_x10_y8_sam_idx -'{idx: '{x: 10, y: 8, port_id: 0}, start_addr: 32'h10900000, end_addr: 32'h10a00000},// magia_tile_x9_y8_sam_idx -'{idx: '{x: 9, y: 8, port_id: 0}, start_addr: 32'h10800000, end_addr: 32'h10900000},// magia_tile_x8_y8_sam_idx -'{idx: '{x: 8, y: 8, port_id: 0}, start_addr: 32'h10700000, end_addr: 32'h10800000},// magia_tile_x7_y8_sam_idx -'{idx: '{x: 7, y: 8, port_id: 0}, start_addr: 32'h10600000, end_addr: 32'h10700000},// magia_tile_x6_y8_sam_idx -'{idx: '{x: 6, y: 8, port_id: 0}, start_addr: 32'h10500000, end_addr: 32'h10600000},// magia_tile_x5_y8_sam_idx -'{idx: '{x: 5, y: 8, port_id: 0}, start_addr: 32'h10400000, end_addr: 32'h10500000},// magia_tile_x4_y8_sam_idx -'{idx: '{x: 4, y: 8, port_id: 0}, start_addr: 32'h10300000, end_addr: 32'h10400000},// magia_tile_x3_y8_sam_idx -'{idx: '{x: 3, y: 8, port_id: 0}, start_addr: 32'h10200000, end_addr: 32'h10300000},// magia_tile_x2_y8_sam_idx -'{idx: '{x: 2, y: 8, port_id: 0}, start_addr: 32'h10100000, end_addr: 32'h10200000},// magia_tile_x1_y8_sam_idx -'{idx: '{x: 1, y: 8, port_id: 0}, start_addr: 32'h10000000, end_addr: 32'h10100000},// magia_tile_x0_y8_sam_idx -'{idx: '{x: 32, y: 7, port_id: 0}, start_addr: 32'h0ff00000, end_addr: 32'h10000000},// magia_tile_x31_y7_sam_idx -'{idx: '{x: 31, y: 7, port_id: 0}, start_addr: 32'h0fe00000, end_addr: 32'h0ff00000},// magia_tile_x30_y7_sam_idx -'{idx: '{x: 30, y: 7, port_id: 0}, start_addr: 32'h0fd00000, end_addr: 32'h0fe00000},// magia_tile_x29_y7_sam_idx -'{idx: '{x: 29, y: 7, port_id: 0}, start_addr: 32'h0fc00000, end_addr: 32'h0fd00000},// magia_tile_x28_y7_sam_idx -'{idx: '{x: 28, y: 7, port_id: 0}, start_addr: 32'h0fb00000, end_addr: 32'h0fc00000},// magia_tile_x27_y7_sam_idx -'{idx: '{x: 27, y: 7, port_id: 0}, start_addr: 32'h0fa00000, end_addr: 32'h0fb00000},// magia_tile_x26_y7_sam_idx -'{idx: '{x: 26, y: 7, port_id: 0}, start_addr: 32'h0f900000, end_addr: 32'h0fa00000},// magia_tile_x25_y7_sam_idx -'{idx: '{x: 25, y: 7, port_id: 0}, start_addr: 32'h0f800000, end_addr: 32'h0f900000},// magia_tile_x24_y7_sam_idx -'{idx: '{x: 24, y: 7, port_id: 0}, start_addr: 32'h0f700000, end_addr: 32'h0f800000},// magia_tile_x23_y7_sam_idx -'{idx: '{x: 23, y: 7, port_id: 0}, start_addr: 32'h0f600000, end_addr: 32'h0f700000},// magia_tile_x22_y7_sam_idx -'{idx: '{x: 22, y: 7, port_id: 0}, start_addr: 32'h0f500000, end_addr: 32'h0f600000},// magia_tile_x21_y7_sam_idx -'{idx: '{x: 21, y: 7, port_id: 0}, start_addr: 32'h0f400000, end_addr: 32'h0f500000},// magia_tile_x20_y7_sam_idx -'{idx: '{x: 20, y: 7, port_id: 0}, start_addr: 32'h0f300000, end_addr: 32'h0f400000},// magia_tile_x19_y7_sam_idx -'{idx: '{x: 19, y: 7, port_id: 0}, start_addr: 32'h0f200000, end_addr: 32'h0f300000},// magia_tile_x18_y7_sam_idx -'{idx: '{x: 18, y: 7, port_id: 0}, start_addr: 32'h0f100000, end_addr: 32'h0f200000},// magia_tile_x17_y7_sam_idx -'{idx: '{x: 17, y: 7, port_id: 0}, start_addr: 32'h0f000000, end_addr: 32'h0f100000},// magia_tile_x16_y7_sam_idx -'{idx: '{x: 16, y: 7, port_id: 0}, start_addr: 32'h0ef00000, end_addr: 32'h0f000000},// magia_tile_x15_y7_sam_idx -'{idx: '{x: 15, y: 7, port_id: 0}, start_addr: 32'h0ee00000, end_addr: 32'h0ef00000},// magia_tile_x14_y7_sam_idx -'{idx: '{x: 14, y: 7, port_id: 0}, start_addr: 32'h0ed00000, end_addr: 32'h0ee00000},// magia_tile_x13_y7_sam_idx -'{idx: '{x: 13, y: 7, port_id: 0}, start_addr: 32'h0ec00000, end_addr: 32'h0ed00000},// magia_tile_x12_y7_sam_idx -'{idx: '{x: 12, y: 7, port_id: 0}, start_addr: 32'h0eb00000, end_addr: 32'h0ec00000},// magia_tile_x11_y7_sam_idx -'{idx: '{x: 11, y: 7, port_id: 0}, start_addr: 32'h0ea00000, end_addr: 32'h0eb00000},// magia_tile_x10_y7_sam_idx -'{idx: '{x: 10, y: 7, port_id: 0}, start_addr: 32'h0e900000, end_addr: 32'h0ea00000},// magia_tile_x9_y7_sam_idx -'{idx: '{x: 9, y: 7, port_id: 0}, start_addr: 32'h0e800000, end_addr: 32'h0e900000},// magia_tile_x8_y7_sam_idx -'{idx: '{x: 8, y: 7, port_id: 0}, start_addr: 32'h0e700000, end_addr: 32'h0e800000},// magia_tile_x7_y7_sam_idx -'{idx: '{x: 7, y: 7, port_id: 0}, start_addr: 32'h0e600000, end_addr: 32'h0e700000},// magia_tile_x6_y7_sam_idx -'{idx: '{x: 6, y: 7, port_id: 0}, start_addr: 32'h0e500000, end_addr: 32'h0e600000},// magia_tile_x5_y7_sam_idx -'{idx: '{x: 5, y: 7, port_id: 0}, start_addr: 32'h0e400000, end_addr: 32'h0e500000},// magia_tile_x4_y7_sam_idx -'{idx: '{x: 4, y: 7, port_id: 0}, start_addr: 32'h0e300000, end_addr: 32'h0e400000},// magia_tile_x3_y7_sam_idx -'{idx: '{x: 3, y: 7, port_id: 0}, start_addr: 32'h0e200000, end_addr: 32'h0e300000},// magia_tile_x2_y7_sam_idx -'{idx: '{x: 2, y: 7, port_id: 0}, start_addr: 32'h0e100000, end_addr: 32'h0e200000},// magia_tile_x1_y7_sam_idx -'{idx: '{x: 1, y: 7, port_id: 0}, start_addr: 32'h0e000000, end_addr: 32'h0e100000},// magia_tile_x0_y7_sam_idx -'{idx: '{x: 32, y: 6, port_id: 0}, start_addr: 32'h0df00000, end_addr: 32'h0e000000},// magia_tile_x31_y6_sam_idx -'{idx: '{x: 31, y: 6, port_id: 0}, start_addr: 32'h0de00000, end_addr: 32'h0df00000},// magia_tile_x30_y6_sam_idx -'{idx: '{x: 30, y: 6, port_id: 0}, start_addr: 32'h0dd00000, end_addr: 32'h0de00000},// magia_tile_x29_y6_sam_idx -'{idx: '{x: 29, y: 6, port_id: 0}, start_addr: 32'h0dc00000, end_addr: 32'h0dd00000},// magia_tile_x28_y6_sam_idx -'{idx: '{x: 28, y: 6, port_id: 0}, start_addr: 32'h0db00000, end_addr: 32'h0dc00000},// magia_tile_x27_y6_sam_idx -'{idx: '{x: 27, y: 6, port_id: 0}, start_addr: 32'h0da00000, end_addr: 32'h0db00000},// magia_tile_x26_y6_sam_idx -'{idx: '{x: 26, y: 6, port_id: 0}, start_addr: 32'h0d900000, end_addr: 32'h0da00000},// magia_tile_x25_y6_sam_idx -'{idx: '{x: 25, y: 6, port_id: 0}, start_addr: 32'h0d800000, end_addr: 32'h0d900000},// magia_tile_x24_y6_sam_idx -'{idx: '{x: 24, y: 6, port_id: 0}, start_addr: 32'h0d700000, end_addr: 32'h0d800000},// magia_tile_x23_y6_sam_idx -'{idx: '{x: 23, y: 6, port_id: 0}, start_addr: 32'h0d600000, end_addr: 32'h0d700000},// magia_tile_x22_y6_sam_idx -'{idx: '{x: 22, y: 6, port_id: 0}, start_addr: 32'h0d500000, end_addr: 32'h0d600000},// magia_tile_x21_y6_sam_idx -'{idx: '{x: 21, y: 6, port_id: 0}, start_addr: 32'h0d400000, end_addr: 32'h0d500000},// magia_tile_x20_y6_sam_idx -'{idx: '{x: 20, y: 6, port_id: 0}, start_addr: 32'h0d300000, end_addr: 32'h0d400000},// magia_tile_x19_y6_sam_idx -'{idx: '{x: 19, y: 6, port_id: 0}, start_addr: 32'h0d200000, end_addr: 32'h0d300000},// magia_tile_x18_y6_sam_idx -'{idx: '{x: 18, y: 6, port_id: 0}, start_addr: 32'h0d100000, end_addr: 32'h0d200000},// magia_tile_x17_y6_sam_idx -'{idx: '{x: 17, y: 6, port_id: 0}, start_addr: 32'h0d000000, end_addr: 32'h0d100000},// magia_tile_x16_y6_sam_idx -'{idx: '{x: 16, y: 6, port_id: 0}, start_addr: 32'h0cf00000, end_addr: 32'h0d000000},// magia_tile_x15_y6_sam_idx -'{idx: '{x: 15, y: 6, port_id: 0}, start_addr: 32'h0ce00000, end_addr: 32'h0cf00000},// magia_tile_x14_y6_sam_idx -'{idx: '{x: 14, y: 6, port_id: 0}, start_addr: 32'h0cd00000, end_addr: 32'h0ce00000},// magia_tile_x13_y6_sam_idx -'{idx: '{x: 13, y: 6, port_id: 0}, start_addr: 32'h0cc00000, end_addr: 32'h0cd00000},// magia_tile_x12_y6_sam_idx -'{idx: '{x: 12, y: 6, port_id: 0}, start_addr: 32'h0cb00000, end_addr: 32'h0cc00000},// magia_tile_x11_y6_sam_idx -'{idx: '{x: 11, y: 6, port_id: 0}, start_addr: 32'h0ca00000, end_addr: 32'h0cb00000},// magia_tile_x10_y6_sam_idx -'{idx: '{x: 10, y: 6, port_id: 0}, start_addr: 32'h0c900000, end_addr: 32'h0ca00000},// magia_tile_x9_y6_sam_idx -'{idx: '{x: 9, y: 6, port_id: 0}, start_addr: 32'h0c800000, end_addr: 32'h0c900000},// magia_tile_x8_y6_sam_idx -'{idx: '{x: 8, y: 6, port_id: 0}, start_addr: 32'h0c700000, end_addr: 32'h0c800000},// magia_tile_x7_y6_sam_idx -'{idx: '{x: 7, y: 6, port_id: 0}, start_addr: 32'h0c600000, end_addr: 32'h0c700000},// magia_tile_x6_y6_sam_idx -'{idx: '{x: 6, y: 6, port_id: 0}, start_addr: 32'h0c500000, end_addr: 32'h0c600000},// magia_tile_x5_y6_sam_idx -'{idx: '{x: 5, y: 6, port_id: 0}, start_addr: 32'h0c400000, end_addr: 32'h0c500000},// magia_tile_x4_y6_sam_idx -'{idx: '{x: 4, y: 6, port_id: 0}, start_addr: 32'h0c300000, end_addr: 32'h0c400000},// magia_tile_x3_y6_sam_idx -'{idx: '{x: 3, y: 6, port_id: 0}, start_addr: 32'h0c200000, end_addr: 32'h0c300000},// magia_tile_x2_y6_sam_idx -'{idx: '{x: 2, y: 6, port_id: 0}, start_addr: 32'h0c100000, end_addr: 32'h0c200000},// magia_tile_x1_y6_sam_idx -'{idx: '{x: 1, y: 6, port_id: 0}, start_addr: 32'h0c000000, end_addr: 32'h0c100000},// magia_tile_x0_y6_sam_idx -'{idx: '{x: 32, y: 5, port_id: 0}, start_addr: 32'h0bf00000, end_addr: 32'h0c000000},// magia_tile_x31_y5_sam_idx -'{idx: '{x: 31, y: 5, port_id: 0}, start_addr: 32'h0be00000, end_addr: 32'h0bf00000},// magia_tile_x30_y5_sam_idx -'{idx: '{x: 30, y: 5, port_id: 0}, start_addr: 32'h0bd00000, end_addr: 32'h0be00000},// magia_tile_x29_y5_sam_idx -'{idx: '{x: 29, y: 5, port_id: 0}, start_addr: 32'h0bc00000, end_addr: 32'h0bd00000},// magia_tile_x28_y5_sam_idx -'{idx: '{x: 28, y: 5, port_id: 0}, start_addr: 32'h0bb00000, end_addr: 32'h0bc00000},// magia_tile_x27_y5_sam_idx -'{idx: '{x: 27, y: 5, port_id: 0}, start_addr: 32'h0ba00000, end_addr: 32'h0bb00000},// magia_tile_x26_y5_sam_idx -'{idx: '{x: 26, y: 5, port_id: 0}, start_addr: 32'h0b900000, end_addr: 32'h0ba00000},// magia_tile_x25_y5_sam_idx -'{idx: '{x: 25, y: 5, port_id: 0}, start_addr: 32'h0b800000, end_addr: 32'h0b900000},// magia_tile_x24_y5_sam_idx -'{idx: '{x: 24, y: 5, port_id: 0}, start_addr: 32'h0b700000, end_addr: 32'h0b800000},// magia_tile_x23_y5_sam_idx -'{idx: '{x: 23, y: 5, port_id: 0}, start_addr: 32'h0b600000, end_addr: 32'h0b700000},// magia_tile_x22_y5_sam_idx -'{idx: '{x: 22, y: 5, port_id: 0}, start_addr: 32'h0b500000, end_addr: 32'h0b600000},// magia_tile_x21_y5_sam_idx -'{idx: '{x: 21, y: 5, port_id: 0}, start_addr: 32'h0b400000, end_addr: 32'h0b500000},// magia_tile_x20_y5_sam_idx -'{idx: '{x: 20, y: 5, port_id: 0}, start_addr: 32'h0b300000, end_addr: 32'h0b400000},// magia_tile_x19_y5_sam_idx -'{idx: '{x: 19, y: 5, port_id: 0}, start_addr: 32'h0b200000, end_addr: 32'h0b300000},// magia_tile_x18_y5_sam_idx -'{idx: '{x: 18, y: 5, port_id: 0}, start_addr: 32'h0b100000, end_addr: 32'h0b200000},// magia_tile_x17_y5_sam_idx -'{idx: '{x: 17, y: 5, port_id: 0}, start_addr: 32'h0b000000, end_addr: 32'h0b100000},// magia_tile_x16_y5_sam_idx -'{idx: '{x: 16, y: 5, port_id: 0}, start_addr: 32'h0af00000, end_addr: 32'h0b000000},// magia_tile_x15_y5_sam_idx -'{idx: '{x: 15, y: 5, port_id: 0}, start_addr: 32'h0ae00000, end_addr: 32'h0af00000},// magia_tile_x14_y5_sam_idx -'{idx: '{x: 14, y: 5, port_id: 0}, start_addr: 32'h0ad00000, end_addr: 32'h0ae00000},// magia_tile_x13_y5_sam_idx -'{idx: '{x: 13, y: 5, port_id: 0}, start_addr: 32'h0ac00000, end_addr: 32'h0ad00000},// magia_tile_x12_y5_sam_idx -'{idx: '{x: 12, y: 5, port_id: 0}, start_addr: 32'h0ab00000, end_addr: 32'h0ac00000},// magia_tile_x11_y5_sam_idx -'{idx: '{x: 11, y: 5, port_id: 0}, start_addr: 32'h0aa00000, end_addr: 32'h0ab00000},// magia_tile_x10_y5_sam_idx -'{idx: '{x: 10, y: 5, port_id: 0}, start_addr: 32'h0a900000, end_addr: 32'h0aa00000},// magia_tile_x9_y5_sam_idx -'{idx: '{x: 9, y: 5, port_id: 0}, start_addr: 32'h0a800000, end_addr: 32'h0a900000},// magia_tile_x8_y5_sam_idx -'{idx: '{x: 8, y: 5, port_id: 0}, start_addr: 32'h0a700000, end_addr: 32'h0a800000},// magia_tile_x7_y5_sam_idx -'{idx: '{x: 7, y: 5, port_id: 0}, start_addr: 32'h0a600000, end_addr: 32'h0a700000},// magia_tile_x6_y5_sam_idx -'{idx: '{x: 6, y: 5, port_id: 0}, start_addr: 32'h0a500000, end_addr: 32'h0a600000},// magia_tile_x5_y5_sam_idx -'{idx: '{x: 5, y: 5, port_id: 0}, start_addr: 32'h0a400000, end_addr: 32'h0a500000},// magia_tile_x4_y5_sam_idx -'{idx: '{x: 4, y: 5, port_id: 0}, start_addr: 32'h0a300000, end_addr: 32'h0a400000},// magia_tile_x3_y5_sam_idx -'{idx: '{x: 3, y: 5, port_id: 0}, start_addr: 32'h0a200000, end_addr: 32'h0a300000},// magia_tile_x2_y5_sam_idx -'{idx: '{x: 2, y: 5, port_id: 0}, start_addr: 32'h0a100000, end_addr: 32'h0a200000},// magia_tile_x1_y5_sam_idx -'{idx: '{x: 1, y: 5, port_id: 0}, start_addr: 32'h0a000000, end_addr: 32'h0a100000},// magia_tile_x0_y5_sam_idx -'{idx: '{x: 32, y: 4, port_id: 0}, start_addr: 32'h09f00000, end_addr: 32'h0a000000},// magia_tile_x31_y4_sam_idx -'{idx: '{x: 31, y: 4, port_id: 0}, start_addr: 32'h09e00000, end_addr: 32'h09f00000},// magia_tile_x30_y4_sam_idx -'{idx: '{x: 30, y: 4, port_id: 0}, start_addr: 32'h09d00000, end_addr: 32'h09e00000},// magia_tile_x29_y4_sam_idx -'{idx: '{x: 29, y: 4, port_id: 0}, start_addr: 32'h09c00000, end_addr: 32'h09d00000},// magia_tile_x28_y4_sam_idx -'{idx: '{x: 28, y: 4, port_id: 0}, start_addr: 32'h09b00000, end_addr: 32'h09c00000},// magia_tile_x27_y4_sam_idx -'{idx: '{x: 27, y: 4, port_id: 0}, start_addr: 32'h09a00000, end_addr: 32'h09b00000},// magia_tile_x26_y4_sam_idx -'{idx: '{x: 26, y: 4, port_id: 0}, start_addr: 32'h09900000, end_addr: 32'h09a00000},// magia_tile_x25_y4_sam_idx -'{idx: '{x: 25, y: 4, port_id: 0}, start_addr: 32'h09800000, end_addr: 32'h09900000},// magia_tile_x24_y4_sam_idx -'{idx: '{x: 24, y: 4, port_id: 0}, start_addr: 32'h09700000, end_addr: 32'h09800000},// magia_tile_x23_y4_sam_idx -'{idx: '{x: 23, y: 4, port_id: 0}, start_addr: 32'h09600000, end_addr: 32'h09700000},// magia_tile_x22_y4_sam_idx -'{idx: '{x: 22, y: 4, port_id: 0}, start_addr: 32'h09500000, end_addr: 32'h09600000},// magia_tile_x21_y4_sam_idx -'{idx: '{x: 21, y: 4, port_id: 0}, start_addr: 32'h09400000, end_addr: 32'h09500000},// magia_tile_x20_y4_sam_idx -'{idx: '{x: 20, y: 4, port_id: 0}, start_addr: 32'h09300000, end_addr: 32'h09400000},// magia_tile_x19_y4_sam_idx -'{idx: '{x: 19, y: 4, port_id: 0}, start_addr: 32'h09200000, end_addr: 32'h09300000},// magia_tile_x18_y4_sam_idx -'{idx: '{x: 18, y: 4, port_id: 0}, start_addr: 32'h09100000, end_addr: 32'h09200000},// magia_tile_x17_y4_sam_idx -'{idx: '{x: 17, y: 4, port_id: 0}, start_addr: 32'h09000000, end_addr: 32'h09100000},// magia_tile_x16_y4_sam_idx -'{idx: '{x: 16, y: 4, port_id: 0}, start_addr: 32'h08f00000, end_addr: 32'h09000000},// magia_tile_x15_y4_sam_idx -'{idx: '{x: 15, y: 4, port_id: 0}, start_addr: 32'h08e00000, end_addr: 32'h08f00000},// magia_tile_x14_y4_sam_idx -'{idx: '{x: 14, y: 4, port_id: 0}, start_addr: 32'h08d00000, end_addr: 32'h08e00000},// magia_tile_x13_y4_sam_idx -'{idx: '{x: 13, y: 4, port_id: 0}, start_addr: 32'h08c00000, end_addr: 32'h08d00000},// magia_tile_x12_y4_sam_idx -'{idx: '{x: 12, y: 4, port_id: 0}, start_addr: 32'h08b00000, end_addr: 32'h08c00000},// magia_tile_x11_y4_sam_idx -'{idx: '{x: 11, y: 4, port_id: 0}, start_addr: 32'h08a00000, end_addr: 32'h08b00000},// magia_tile_x10_y4_sam_idx -'{idx: '{x: 10, y: 4, port_id: 0}, start_addr: 32'h08900000, end_addr: 32'h08a00000},// magia_tile_x9_y4_sam_idx -'{idx: '{x: 9, y: 4, port_id: 0}, start_addr: 32'h08800000, end_addr: 32'h08900000},// magia_tile_x8_y4_sam_idx -'{idx: '{x: 8, y: 4, port_id: 0}, start_addr: 32'h08700000, end_addr: 32'h08800000},// magia_tile_x7_y4_sam_idx -'{idx: '{x: 7, y: 4, port_id: 0}, start_addr: 32'h08600000, end_addr: 32'h08700000},// magia_tile_x6_y4_sam_idx -'{idx: '{x: 6, y: 4, port_id: 0}, start_addr: 32'h08500000, end_addr: 32'h08600000},// magia_tile_x5_y4_sam_idx -'{idx: '{x: 5, y: 4, port_id: 0}, start_addr: 32'h08400000, end_addr: 32'h08500000},// magia_tile_x4_y4_sam_idx -'{idx: '{x: 4, y: 4, port_id: 0}, start_addr: 32'h08300000, end_addr: 32'h08400000},// magia_tile_x3_y4_sam_idx -'{idx: '{x: 3, y: 4, port_id: 0}, start_addr: 32'h08200000, end_addr: 32'h08300000},// magia_tile_x2_y4_sam_idx -'{idx: '{x: 2, y: 4, port_id: 0}, start_addr: 32'h08100000, end_addr: 32'h08200000},// magia_tile_x1_y4_sam_idx -'{idx: '{x: 1, y: 4, port_id: 0}, start_addr: 32'h08000000, end_addr: 32'h08100000},// magia_tile_x0_y4_sam_idx -'{idx: '{x: 32, y: 3, port_id: 0}, start_addr: 32'h07f00000, end_addr: 32'h08000000},// magia_tile_x31_y3_sam_idx -'{idx: '{x: 31, y: 3, port_id: 0}, start_addr: 32'h07e00000, end_addr: 32'h07f00000},// magia_tile_x30_y3_sam_idx -'{idx: '{x: 30, y: 3, port_id: 0}, start_addr: 32'h07d00000, end_addr: 32'h07e00000},// magia_tile_x29_y3_sam_idx -'{idx: '{x: 29, y: 3, port_id: 0}, start_addr: 32'h07c00000, end_addr: 32'h07d00000},// magia_tile_x28_y3_sam_idx -'{idx: '{x: 28, y: 3, port_id: 0}, start_addr: 32'h07b00000, end_addr: 32'h07c00000},// magia_tile_x27_y3_sam_idx -'{idx: '{x: 27, y: 3, port_id: 0}, start_addr: 32'h07a00000, end_addr: 32'h07b00000},// magia_tile_x26_y3_sam_idx -'{idx: '{x: 26, y: 3, port_id: 0}, start_addr: 32'h07900000, end_addr: 32'h07a00000},// magia_tile_x25_y3_sam_idx -'{idx: '{x: 25, y: 3, port_id: 0}, start_addr: 32'h07800000, end_addr: 32'h07900000},// magia_tile_x24_y3_sam_idx -'{idx: '{x: 24, y: 3, port_id: 0}, start_addr: 32'h07700000, end_addr: 32'h07800000},// magia_tile_x23_y3_sam_idx -'{idx: '{x: 23, y: 3, port_id: 0}, start_addr: 32'h07600000, end_addr: 32'h07700000},// magia_tile_x22_y3_sam_idx -'{idx: '{x: 22, y: 3, port_id: 0}, start_addr: 32'h07500000, end_addr: 32'h07600000},// magia_tile_x21_y3_sam_idx -'{idx: '{x: 21, y: 3, port_id: 0}, start_addr: 32'h07400000, end_addr: 32'h07500000},// magia_tile_x20_y3_sam_idx -'{idx: '{x: 20, y: 3, port_id: 0}, start_addr: 32'h07300000, end_addr: 32'h07400000},// magia_tile_x19_y3_sam_idx -'{idx: '{x: 19, y: 3, port_id: 0}, start_addr: 32'h07200000, end_addr: 32'h07300000},// magia_tile_x18_y3_sam_idx -'{idx: '{x: 18, y: 3, port_id: 0}, start_addr: 32'h07100000, end_addr: 32'h07200000},// magia_tile_x17_y3_sam_idx -'{idx: '{x: 17, y: 3, port_id: 0}, start_addr: 32'h07000000, end_addr: 32'h07100000},// magia_tile_x16_y3_sam_idx -'{idx: '{x: 16, y: 3, port_id: 0}, start_addr: 32'h06f00000, end_addr: 32'h07000000},// magia_tile_x15_y3_sam_idx -'{idx: '{x: 15, y: 3, port_id: 0}, start_addr: 32'h06e00000, end_addr: 32'h06f00000},// magia_tile_x14_y3_sam_idx -'{idx: '{x: 14, y: 3, port_id: 0}, start_addr: 32'h06d00000, end_addr: 32'h06e00000},// magia_tile_x13_y3_sam_idx -'{idx: '{x: 13, y: 3, port_id: 0}, start_addr: 32'h06c00000, end_addr: 32'h06d00000},// magia_tile_x12_y3_sam_idx -'{idx: '{x: 12, y: 3, port_id: 0}, start_addr: 32'h06b00000, end_addr: 32'h06c00000},// magia_tile_x11_y3_sam_idx -'{idx: '{x: 11, y: 3, port_id: 0}, start_addr: 32'h06a00000, end_addr: 32'h06b00000},// magia_tile_x10_y3_sam_idx -'{idx: '{x: 10, y: 3, port_id: 0}, start_addr: 32'h06900000, end_addr: 32'h06a00000},// magia_tile_x9_y3_sam_idx -'{idx: '{x: 9, y: 3, port_id: 0}, start_addr: 32'h06800000, end_addr: 32'h06900000},// magia_tile_x8_y3_sam_idx -'{idx: '{x: 8, y: 3, port_id: 0}, start_addr: 32'h06700000, end_addr: 32'h06800000},// magia_tile_x7_y3_sam_idx -'{idx: '{x: 7, y: 3, port_id: 0}, start_addr: 32'h06600000, end_addr: 32'h06700000},// magia_tile_x6_y3_sam_idx -'{idx: '{x: 6, y: 3, port_id: 0}, start_addr: 32'h06500000, end_addr: 32'h06600000},// magia_tile_x5_y3_sam_idx -'{idx: '{x: 5, y: 3, port_id: 0}, start_addr: 32'h06400000, end_addr: 32'h06500000},// magia_tile_x4_y3_sam_idx -'{idx: '{x: 4, y: 3, port_id: 0}, start_addr: 32'h06300000, end_addr: 32'h06400000},// magia_tile_x3_y3_sam_idx -'{idx: '{x: 3, y: 3, port_id: 0}, start_addr: 32'h06200000, end_addr: 32'h06300000},// magia_tile_x2_y3_sam_idx -'{idx: '{x: 2, y: 3, port_id: 0}, start_addr: 32'h06100000, end_addr: 32'h06200000},// magia_tile_x1_y3_sam_idx -'{idx: '{x: 1, y: 3, port_id: 0}, start_addr: 32'h06000000, end_addr: 32'h06100000},// magia_tile_x0_y3_sam_idx -'{idx: '{x: 32, y: 2, port_id: 0}, start_addr: 32'h05f00000, end_addr: 32'h06000000},// magia_tile_x31_y2_sam_idx -'{idx: '{x: 31, y: 2, port_id: 0}, start_addr: 32'h05e00000, end_addr: 32'h05f00000},// magia_tile_x30_y2_sam_idx -'{idx: '{x: 30, y: 2, port_id: 0}, start_addr: 32'h05d00000, end_addr: 32'h05e00000},// magia_tile_x29_y2_sam_idx -'{idx: '{x: 29, y: 2, port_id: 0}, start_addr: 32'h05c00000, end_addr: 32'h05d00000},// magia_tile_x28_y2_sam_idx -'{idx: '{x: 28, y: 2, port_id: 0}, start_addr: 32'h05b00000, end_addr: 32'h05c00000},// magia_tile_x27_y2_sam_idx -'{idx: '{x: 27, y: 2, port_id: 0}, start_addr: 32'h05a00000, end_addr: 32'h05b00000},// magia_tile_x26_y2_sam_idx -'{idx: '{x: 26, y: 2, port_id: 0}, start_addr: 32'h05900000, end_addr: 32'h05a00000},// magia_tile_x25_y2_sam_idx -'{idx: '{x: 25, y: 2, port_id: 0}, start_addr: 32'h05800000, end_addr: 32'h05900000},// magia_tile_x24_y2_sam_idx -'{idx: '{x: 24, y: 2, port_id: 0}, start_addr: 32'h05700000, end_addr: 32'h05800000},// magia_tile_x23_y2_sam_idx -'{idx: '{x: 23, y: 2, port_id: 0}, start_addr: 32'h05600000, end_addr: 32'h05700000},// magia_tile_x22_y2_sam_idx -'{idx: '{x: 22, y: 2, port_id: 0}, start_addr: 32'h05500000, end_addr: 32'h05600000},// magia_tile_x21_y2_sam_idx -'{idx: '{x: 21, y: 2, port_id: 0}, start_addr: 32'h05400000, end_addr: 32'h05500000},// magia_tile_x20_y2_sam_idx -'{idx: '{x: 20, y: 2, port_id: 0}, start_addr: 32'h05300000, end_addr: 32'h05400000},// magia_tile_x19_y2_sam_idx -'{idx: '{x: 19, y: 2, port_id: 0}, start_addr: 32'h05200000, end_addr: 32'h05300000},// magia_tile_x18_y2_sam_idx -'{idx: '{x: 18, y: 2, port_id: 0}, start_addr: 32'h05100000, end_addr: 32'h05200000},// magia_tile_x17_y2_sam_idx -'{idx: '{x: 17, y: 2, port_id: 0}, start_addr: 32'h05000000, end_addr: 32'h05100000},// magia_tile_x16_y2_sam_idx -'{idx: '{x: 16, y: 2, port_id: 0}, start_addr: 32'h04f00000, end_addr: 32'h05000000},// magia_tile_x15_y2_sam_idx -'{idx: '{x: 15, y: 2, port_id: 0}, start_addr: 32'h04e00000, end_addr: 32'h04f00000},// magia_tile_x14_y2_sam_idx -'{idx: '{x: 14, y: 2, port_id: 0}, start_addr: 32'h04d00000, end_addr: 32'h04e00000},// magia_tile_x13_y2_sam_idx -'{idx: '{x: 13, y: 2, port_id: 0}, start_addr: 32'h04c00000, end_addr: 32'h04d00000},// magia_tile_x12_y2_sam_idx -'{idx: '{x: 12, y: 2, port_id: 0}, start_addr: 32'h04b00000, end_addr: 32'h04c00000},// magia_tile_x11_y2_sam_idx -'{idx: '{x: 11, y: 2, port_id: 0}, start_addr: 32'h04a00000, end_addr: 32'h04b00000},// magia_tile_x10_y2_sam_idx -'{idx: '{x: 10, y: 2, port_id: 0}, start_addr: 32'h04900000, end_addr: 32'h04a00000},// magia_tile_x9_y2_sam_idx -'{idx: '{x: 9, y: 2, port_id: 0}, start_addr: 32'h04800000, end_addr: 32'h04900000},// magia_tile_x8_y2_sam_idx -'{idx: '{x: 8, y: 2, port_id: 0}, start_addr: 32'h04700000, end_addr: 32'h04800000},// magia_tile_x7_y2_sam_idx -'{idx: '{x: 7, y: 2, port_id: 0}, start_addr: 32'h04600000, end_addr: 32'h04700000},// magia_tile_x6_y2_sam_idx -'{idx: '{x: 6, y: 2, port_id: 0}, start_addr: 32'h04500000, end_addr: 32'h04600000},// magia_tile_x5_y2_sam_idx -'{idx: '{x: 5, y: 2, port_id: 0}, start_addr: 32'h04400000, end_addr: 32'h04500000},// magia_tile_x4_y2_sam_idx -'{idx: '{x: 4, y: 2, port_id: 0}, start_addr: 32'h04300000, end_addr: 32'h04400000},// magia_tile_x3_y2_sam_idx -'{idx: '{x: 3, y: 2, port_id: 0}, start_addr: 32'h04200000, end_addr: 32'h04300000},// magia_tile_x2_y2_sam_idx -'{idx: '{x: 2, y: 2, port_id: 0}, start_addr: 32'h04100000, end_addr: 32'h04200000},// magia_tile_x1_y2_sam_idx -'{idx: '{x: 1, y: 2, port_id: 0}, start_addr: 32'h04000000, end_addr: 32'h04100000},// magia_tile_x0_y2_sam_idx -'{idx: '{x: 32, y: 1, port_id: 0}, start_addr: 32'h03f00000, end_addr: 32'h04000000},// magia_tile_x31_y1_sam_idx -'{idx: '{x: 31, y: 1, port_id: 0}, start_addr: 32'h03e00000, end_addr: 32'h03f00000},// magia_tile_x30_y1_sam_idx -'{idx: '{x: 30, y: 1, port_id: 0}, start_addr: 32'h03d00000, end_addr: 32'h03e00000},// magia_tile_x29_y1_sam_idx -'{idx: '{x: 29, y: 1, port_id: 0}, start_addr: 32'h03c00000, end_addr: 32'h03d00000},// magia_tile_x28_y1_sam_idx -'{idx: '{x: 28, y: 1, port_id: 0}, start_addr: 32'h03b00000, end_addr: 32'h03c00000},// magia_tile_x27_y1_sam_idx -'{idx: '{x: 27, y: 1, port_id: 0}, start_addr: 32'h03a00000, end_addr: 32'h03b00000},// magia_tile_x26_y1_sam_idx -'{idx: '{x: 26, y: 1, port_id: 0}, start_addr: 32'h03900000, end_addr: 32'h03a00000},// magia_tile_x25_y1_sam_idx -'{idx: '{x: 25, y: 1, port_id: 0}, start_addr: 32'h03800000, end_addr: 32'h03900000},// magia_tile_x24_y1_sam_idx -'{idx: '{x: 24, y: 1, port_id: 0}, start_addr: 32'h03700000, end_addr: 32'h03800000},// magia_tile_x23_y1_sam_idx -'{idx: '{x: 23, y: 1, port_id: 0}, start_addr: 32'h03600000, end_addr: 32'h03700000},// magia_tile_x22_y1_sam_idx -'{idx: '{x: 22, y: 1, port_id: 0}, start_addr: 32'h03500000, end_addr: 32'h03600000},// magia_tile_x21_y1_sam_idx -'{idx: '{x: 21, y: 1, port_id: 0}, start_addr: 32'h03400000, end_addr: 32'h03500000},// magia_tile_x20_y1_sam_idx -'{idx: '{x: 20, y: 1, port_id: 0}, start_addr: 32'h03300000, end_addr: 32'h03400000},// magia_tile_x19_y1_sam_idx -'{idx: '{x: 19, y: 1, port_id: 0}, start_addr: 32'h03200000, end_addr: 32'h03300000},// magia_tile_x18_y1_sam_idx -'{idx: '{x: 18, y: 1, port_id: 0}, start_addr: 32'h03100000, end_addr: 32'h03200000},// magia_tile_x17_y1_sam_idx -'{idx: '{x: 17, y: 1, port_id: 0}, start_addr: 32'h03000000, end_addr: 32'h03100000},// magia_tile_x16_y1_sam_idx -'{idx: '{x: 16, y: 1, port_id: 0}, start_addr: 32'h02f00000, end_addr: 32'h03000000},// magia_tile_x15_y1_sam_idx -'{idx: '{x: 15, y: 1, port_id: 0}, start_addr: 32'h02e00000, end_addr: 32'h02f00000},// magia_tile_x14_y1_sam_idx -'{idx: '{x: 14, y: 1, port_id: 0}, start_addr: 32'h02d00000, end_addr: 32'h02e00000},// magia_tile_x13_y1_sam_idx -'{idx: '{x: 13, y: 1, port_id: 0}, start_addr: 32'h02c00000, end_addr: 32'h02d00000},// magia_tile_x12_y1_sam_idx -'{idx: '{x: 12, y: 1, port_id: 0}, start_addr: 32'h02b00000, end_addr: 32'h02c00000},// magia_tile_x11_y1_sam_idx -'{idx: '{x: 11, y: 1, port_id: 0}, start_addr: 32'h02a00000, end_addr: 32'h02b00000},// magia_tile_x10_y1_sam_idx -'{idx: '{x: 10, y: 1, port_id: 0}, start_addr: 32'h02900000, end_addr: 32'h02a00000},// magia_tile_x9_y1_sam_idx -'{idx: '{x: 9, y: 1, port_id: 0}, start_addr: 32'h02800000, end_addr: 32'h02900000},// magia_tile_x8_y1_sam_idx -'{idx: '{x: 8, y: 1, port_id: 0}, start_addr: 32'h02700000, end_addr: 32'h02800000},// magia_tile_x7_y1_sam_idx -'{idx: '{x: 7, y: 1, port_id: 0}, start_addr: 32'h02600000, end_addr: 32'h02700000},// magia_tile_x6_y1_sam_idx -'{idx: '{x: 6, y: 1, port_id: 0}, start_addr: 32'h02500000, end_addr: 32'h02600000},// magia_tile_x5_y1_sam_idx -'{idx: '{x: 5, y: 1, port_id: 0}, start_addr: 32'h02400000, end_addr: 32'h02500000},// magia_tile_x4_y1_sam_idx -'{idx: '{x: 4, y: 1, port_id: 0}, start_addr: 32'h02300000, end_addr: 32'h02400000},// magia_tile_x3_y1_sam_idx -'{idx: '{x: 3, y: 1, port_id: 0}, start_addr: 32'h02200000, end_addr: 32'h02300000},// magia_tile_x2_y1_sam_idx -'{idx: '{x: 2, y: 1, port_id: 0}, start_addr: 32'h02100000, end_addr: 32'h02200000},// magia_tile_x1_y1_sam_idx -'{idx: '{x: 1, y: 1, port_id: 0}, start_addr: 32'h02000000, end_addr: 32'h02100000},// magia_tile_x0_y1_sam_idx -'{idx: '{x: 32, y: 0, port_id: 0}, start_addr: 32'h01f00000, end_addr: 32'h02000000},// magia_tile_x31_y0_sam_idx -'{idx: '{x: 31, y: 0, port_id: 0}, start_addr: 32'h01e00000, end_addr: 32'h01f00000},// magia_tile_x30_y0_sam_idx -'{idx: '{x: 30, y: 0, port_id: 0}, start_addr: 32'h01d00000, end_addr: 32'h01e00000},// magia_tile_x29_y0_sam_idx -'{idx: '{x: 29, y: 0, port_id: 0}, start_addr: 32'h01c00000, end_addr: 32'h01d00000},// magia_tile_x28_y0_sam_idx -'{idx: '{x: 28, y: 0, port_id: 0}, start_addr: 32'h01b00000, end_addr: 32'h01c00000},// magia_tile_x27_y0_sam_idx -'{idx: '{x: 27, y: 0, port_id: 0}, start_addr: 32'h01a00000, end_addr: 32'h01b00000},// magia_tile_x26_y0_sam_idx -'{idx: '{x: 26, y: 0, port_id: 0}, start_addr: 32'h01900000, end_addr: 32'h01a00000},// magia_tile_x25_y0_sam_idx -'{idx: '{x: 25, y: 0, port_id: 0}, start_addr: 32'h01800000, end_addr: 32'h01900000},// magia_tile_x24_y0_sam_idx -'{idx: '{x: 24, y: 0, port_id: 0}, start_addr: 32'h01700000, end_addr: 32'h01800000},// magia_tile_x23_y0_sam_idx -'{idx: '{x: 23, y: 0, port_id: 0}, start_addr: 32'h01600000, end_addr: 32'h01700000},// magia_tile_x22_y0_sam_idx -'{idx: '{x: 22, y: 0, port_id: 0}, start_addr: 32'h01500000, end_addr: 32'h01600000},// magia_tile_x21_y0_sam_idx -'{idx: '{x: 21, y: 0, port_id: 0}, start_addr: 32'h01400000, end_addr: 32'h01500000},// magia_tile_x20_y0_sam_idx -'{idx: '{x: 20, y: 0, port_id: 0}, start_addr: 32'h01300000, end_addr: 32'h01400000},// magia_tile_x19_y0_sam_idx -'{idx: '{x: 19, y: 0, port_id: 0}, start_addr: 32'h01200000, end_addr: 32'h01300000},// magia_tile_x18_y0_sam_idx -'{idx: '{x: 18, y: 0, port_id: 0}, start_addr: 32'h01100000, end_addr: 32'h01200000},// magia_tile_x17_y0_sam_idx -'{idx: '{x: 17, y: 0, port_id: 0}, start_addr: 32'h01000000, end_addr: 32'h01100000},// magia_tile_x16_y0_sam_idx -'{idx: '{x: 16, y: 0, port_id: 0}, start_addr: 32'h00f00000, end_addr: 32'h01000000},// magia_tile_x15_y0_sam_idx -'{idx: '{x: 15, y: 0, port_id: 0}, start_addr: 32'h00e00000, end_addr: 32'h00f00000},// magia_tile_x14_y0_sam_idx -'{idx: '{x: 14, y: 0, port_id: 0}, start_addr: 32'h00d00000, end_addr: 32'h00e00000},// magia_tile_x13_y0_sam_idx -'{idx: '{x: 13, y: 0, port_id: 0}, start_addr: 32'h00c00000, end_addr: 32'h00d00000},// magia_tile_x12_y0_sam_idx -'{idx: '{x: 12, y: 0, port_id: 0}, start_addr: 32'h00b00000, end_addr: 32'h00c00000},// magia_tile_x11_y0_sam_idx -'{idx: '{x: 11, y: 0, port_id: 0}, start_addr: 32'h00a00000, end_addr: 32'h00b00000},// magia_tile_x10_y0_sam_idx -'{idx: '{x: 10, y: 0, port_id: 0}, start_addr: 32'h00900000, end_addr: 32'h00a00000},// magia_tile_x9_y0_sam_idx -'{idx: '{x: 9, y: 0, port_id: 0}, start_addr: 32'h00800000, end_addr: 32'h00900000},// magia_tile_x8_y0_sam_idx -'{idx: '{x: 8, y: 0, port_id: 0}, start_addr: 32'h00700000, end_addr: 32'h00800000},// magia_tile_x7_y0_sam_idx -'{idx: '{x: 7, y: 0, port_id: 0}, start_addr: 32'h00600000, end_addr: 32'h00700000},// magia_tile_x6_y0_sam_idx -'{idx: '{x: 6, y: 0, port_id: 0}, start_addr: 32'h00500000, end_addr: 32'h00600000},// magia_tile_x5_y0_sam_idx -'{idx: '{x: 5, y: 0, port_id: 0}, start_addr: 32'h00400000, end_addr: 32'h00500000},// magia_tile_x4_y0_sam_idx -'{idx: '{x: 4, y: 0, port_id: 0}, start_addr: 32'h00300000, end_addr: 32'h00400000},// magia_tile_x3_y0_sam_idx -'{idx: '{x: 3, y: 0, port_id: 0}, start_addr: 32'h00200000, end_addr: 32'h00300000},// magia_tile_x2_y0_sam_idx -'{idx: '{x: 2, y: 0, port_id: 0}, start_addr: 32'h00100000, end_addr: 32'h00200000},// magia_tile_x1_y0_sam_idx -'{idx: '{x: 1, y: 0, port_id: 0}, start_addr: 32'h00000000, end_addr: 32'h00100000} // magia_tile_x0_y0_sam_idx +'{ idx: '{x: 0, y: 31, port_id: 0}, + start_addr: 32'hfe000000, + end_addr: 32'h100000000},// L231 +'{ idx: '{x: 0, y: 30, port_id: 0}, + start_addr: 32'hfc000000, + end_addr: 32'hfe000000},// L230 +'{ idx: '{x: 0, y: 29, port_id: 0}, + start_addr: 32'hfa000000, + end_addr: 32'hfc000000},// L229 +'{ idx: '{x: 0, y: 28, port_id: 0}, + start_addr: 32'hf8000000, + end_addr: 32'hfa000000},// L228 +'{ idx: '{x: 0, y: 27, port_id: 0}, + start_addr: 32'hf6000000, + end_addr: 32'hf8000000},// L227 +'{ idx: '{x: 0, y: 26, port_id: 0}, + start_addr: 32'hf4000000, + end_addr: 32'hf6000000},// L226 +'{ idx: '{x: 0, y: 25, port_id: 0}, + start_addr: 32'hf2000000, + end_addr: 32'hf4000000},// L225 +'{ idx: '{x: 0, y: 24, port_id: 0}, + start_addr: 32'hf0000000, + end_addr: 32'hf2000000},// L224 +'{ idx: '{x: 0, y: 23, port_id: 0}, + start_addr: 32'hee000000, + end_addr: 32'hf0000000},// L223 +'{ idx: '{x: 0, y: 22, port_id: 0}, + start_addr: 32'hec000000, + end_addr: 32'hee000000},// L222 +'{ idx: '{x: 0, y: 21, port_id: 0}, + start_addr: 32'hea000000, + end_addr: 32'hec000000},// L221 +'{ idx: '{x: 0, y: 20, port_id: 0}, + start_addr: 32'he8000000, + end_addr: 32'hea000000},// L220 +'{ idx: '{x: 0, y: 19, port_id: 0}, + start_addr: 32'he6000000, + end_addr: 32'he8000000},// L219 +'{ idx: '{x: 0, y: 18, port_id: 0}, + start_addr: 32'he4000000, + end_addr: 32'he6000000},// L218 +'{ idx: '{x: 0, y: 17, port_id: 0}, + start_addr: 32'he2000000, + end_addr: 32'he4000000},// L217 +'{ idx: '{x: 0, y: 16, port_id: 0}, + start_addr: 32'he0000000, + end_addr: 32'he2000000},// L216 +'{ idx: '{x: 0, y: 15, port_id: 0}, + start_addr: 32'hde000000, + end_addr: 32'he0000000},// L215 +'{ idx: '{x: 0, y: 14, port_id: 0}, + start_addr: 32'hdc000000, + end_addr: 32'hde000000},// L214 +'{ idx: '{x: 0, y: 13, port_id: 0}, + start_addr: 32'hda000000, + end_addr: 32'hdc000000},// L213 +'{ idx: '{x: 0, y: 12, port_id: 0}, + start_addr: 32'hd8000000, + end_addr: 32'hda000000},// L212 +'{ idx: '{x: 0, y: 11, port_id: 0}, + start_addr: 32'hd6000000, + end_addr: 32'hd8000000},// L211 +'{ idx: '{x: 0, y: 10, port_id: 0}, + start_addr: 32'hd4000000, + end_addr: 32'hd6000000},// L210 +'{ idx: '{x: 0, y: 9, port_id: 0}, + start_addr: 32'hd2000000, + end_addr: 32'hd4000000},// L29 +'{ idx: '{x: 0, y: 8, port_id: 0}, + start_addr: 32'hd0000000, + end_addr: 32'hd2000000},// L28 +'{ idx: '{x: 0, y: 7, port_id: 0}, + start_addr: 32'hce000000, + end_addr: 32'hd0000000},// L27 +'{ idx: '{x: 0, y: 6, port_id: 0}, + start_addr: 32'hcc000000, + end_addr: 32'hce000000},// L26 +'{ idx: '{x: 0, y: 5, port_id: 0}, + start_addr: 32'hca000000, + end_addr: 32'hcc000000},// L25 +'{ idx: '{x: 0, y: 4, port_id: 0}, + start_addr: 32'hc8000000, + end_addr: 32'hca000000},// L24 +'{ idx: '{x: 0, y: 3, port_id: 0}, + start_addr: 32'hc6000000, + end_addr: 32'hc8000000},// L23 +'{ idx: '{x: 0, y: 2, port_id: 0}, + start_addr: 32'hc4000000, + end_addr: 32'hc6000000},// L22 +'{ idx: '{x: 0, y: 1, port_id: 0}, + start_addr: 32'hc2000000, + end_addr: 32'hc4000000},// L21 +'{ idx: '{x: 0, y: 0, port_id: 0}, + start_addr: 32'hc0000000, + end_addr: 32'hc2000000},// L20 +'{ idx: '{x: 63, y: 31, port_id: 0}, + start_addr: 32'h3ff00000, + end_addr: 32'h40000000},// MagiaTileX31Y31 +'{ idx: '{x: 62, y: 31, port_id: 0}, + start_addr: 32'h3fe00000, + end_addr: 32'h3ff00000},// MagiaTileX30Y31 +'{ idx: '{x: 61, y: 31, port_id: 0}, + start_addr: 32'h3fd00000, + end_addr: 32'h3fe00000},// MagiaTileX29Y31 +'{ idx: '{x: 60, y: 31, port_id: 0}, + start_addr: 32'h3fc00000, + end_addr: 32'h3fd00000},// MagiaTileX28Y31 +'{ idx: '{x: 59, y: 31, port_id: 0}, + start_addr: 32'h3fb00000, + end_addr: 32'h3fc00000},// MagiaTileX27Y31 +'{ idx: '{x: 58, y: 31, port_id: 0}, + start_addr: 32'h3fa00000, + end_addr: 32'h3fb00000},// MagiaTileX26Y31 +'{ idx: '{x: 57, y: 31, port_id: 0}, + start_addr: 32'h3f900000, + end_addr: 32'h3fa00000},// MagiaTileX25Y31 +'{ idx: '{x: 56, y: 31, port_id: 0}, + start_addr: 32'h3f800000, + end_addr: 32'h3f900000},// MagiaTileX24Y31 +'{ idx: '{x: 55, y: 31, port_id: 0}, + start_addr: 32'h3f700000, + end_addr: 32'h3f800000},// MagiaTileX23Y31 +'{ idx: '{x: 54, y: 31, port_id: 0}, + start_addr: 32'h3f600000, + end_addr: 32'h3f700000},// MagiaTileX22Y31 +'{ idx: '{x: 53, y: 31, port_id: 0}, + start_addr: 32'h3f500000, + end_addr: 32'h3f600000},// MagiaTileX21Y31 +'{ idx: '{x: 52, y: 31, port_id: 0}, + start_addr: 32'h3f400000, + end_addr: 32'h3f500000},// MagiaTileX20Y31 +'{ idx: '{x: 51, y: 31, port_id: 0}, + start_addr: 32'h3f300000, + end_addr: 32'h3f400000},// MagiaTileX19Y31 +'{ idx: '{x: 50, y: 31, port_id: 0}, + start_addr: 32'h3f200000, + end_addr: 32'h3f300000},// MagiaTileX18Y31 +'{ idx: '{x: 49, y: 31, port_id: 0}, + start_addr: 32'h3f100000, + end_addr: 32'h3f200000},// MagiaTileX17Y31 +'{ idx: '{x: 48, y: 31, port_id: 0}, + start_addr: 32'h3f000000, + end_addr: 32'h3f100000},// MagiaTileX16Y31 +'{ idx: '{x: 47, y: 31, port_id: 0}, + start_addr: 32'h3ef00000, + end_addr: 32'h3f000000},// MagiaTileX15Y31 +'{ idx: '{x: 46, y: 31, port_id: 0}, + start_addr: 32'h3ee00000, + end_addr: 32'h3ef00000},// MagiaTileX14Y31 +'{ idx: '{x: 45, y: 31, port_id: 0}, + start_addr: 32'h3ed00000, + end_addr: 32'h3ee00000},// MagiaTileX13Y31 +'{ idx: '{x: 44, y: 31, port_id: 0}, + start_addr: 32'h3ec00000, + end_addr: 32'h3ed00000},// MagiaTileX12Y31 +'{ idx: '{x: 43, y: 31, port_id: 0}, + start_addr: 32'h3eb00000, + end_addr: 32'h3ec00000},// MagiaTileX11Y31 +'{ idx: '{x: 42, y: 31, port_id: 0}, + start_addr: 32'h3ea00000, + end_addr: 32'h3eb00000},// MagiaTileX10Y31 +'{ idx: '{x: 41, y: 31, port_id: 0}, + start_addr: 32'h3e900000, + end_addr: 32'h3ea00000},// MagiaTileX9Y31 +'{ idx: '{x: 40, y: 31, port_id: 0}, + start_addr: 32'h3e800000, + end_addr: 32'h3e900000},// MagiaTileX8Y31 +'{ idx: '{x: 39, y: 31, port_id: 0}, + start_addr: 32'h3e700000, + end_addr: 32'h3e800000},// MagiaTileX7Y31 +'{ idx: '{x: 38, y: 31, port_id: 0}, + start_addr: 32'h3e600000, + end_addr: 32'h3e700000},// MagiaTileX6Y31 +'{ idx: '{x: 37, y: 31, port_id: 0}, + start_addr: 32'h3e500000, + end_addr: 32'h3e600000},// MagiaTileX5Y31 +'{ idx: '{x: 36, y: 31, port_id: 0}, + start_addr: 32'h3e400000, + end_addr: 32'h3e500000},// MagiaTileX4Y31 +'{ idx: '{x: 35, y: 31, port_id: 0}, + start_addr: 32'h3e300000, + end_addr: 32'h3e400000},// MagiaTileX3Y31 +'{ idx: '{x: 34, y: 31, port_id: 0}, + start_addr: 32'h3e200000, + end_addr: 32'h3e300000},// MagiaTileX2Y31 +'{ idx: '{x: 33, y: 31, port_id: 0}, + start_addr: 32'h3e100000, + end_addr: 32'h3e200000},// MagiaTileX1Y31 +'{ idx: '{x: 32, y: 31, port_id: 0}, + start_addr: 32'h3e000000, + end_addr: 32'h3e100000},// MagiaTileX0Y31 +'{ idx: '{x: 63, y: 30, port_id: 0}, + start_addr: 32'h3df00000, + end_addr: 32'h3e000000},// MagiaTileX31Y30 +'{ idx: '{x: 62, y: 30, port_id: 0}, + start_addr: 32'h3de00000, + end_addr: 32'h3df00000},// MagiaTileX30Y30 +'{ idx: '{x: 61, y: 30, port_id: 0}, + start_addr: 32'h3dd00000, + end_addr: 32'h3de00000},// MagiaTileX29Y30 +'{ idx: '{x: 60, y: 30, port_id: 0}, + start_addr: 32'h3dc00000, + end_addr: 32'h3dd00000},// MagiaTileX28Y30 +'{ idx: '{x: 59, y: 30, port_id: 0}, + start_addr: 32'h3db00000, + end_addr: 32'h3dc00000},// MagiaTileX27Y30 +'{ idx: '{x: 58, y: 30, port_id: 0}, + start_addr: 32'h3da00000, + end_addr: 32'h3db00000},// MagiaTileX26Y30 +'{ idx: '{x: 57, y: 30, port_id: 0}, + start_addr: 32'h3d900000, + end_addr: 32'h3da00000},// MagiaTileX25Y30 +'{ idx: '{x: 56, y: 30, port_id: 0}, + start_addr: 32'h3d800000, + end_addr: 32'h3d900000},// MagiaTileX24Y30 +'{ idx: '{x: 55, y: 30, port_id: 0}, + start_addr: 32'h3d700000, + end_addr: 32'h3d800000},// MagiaTileX23Y30 +'{ idx: '{x: 54, y: 30, port_id: 0}, + start_addr: 32'h3d600000, + end_addr: 32'h3d700000},// MagiaTileX22Y30 +'{ idx: '{x: 53, y: 30, port_id: 0}, + start_addr: 32'h3d500000, + end_addr: 32'h3d600000},// MagiaTileX21Y30 +'{ idx: '{x: 52, y: 30, port_id: 0}, + start_addr: 32'h3d400000, + end_addr: 32'h3d500000},// MagiaTileX20Y30 +'{ idx: '{x: 51, y: 30, port_id: 0}, + start_addr: 32'h3d300000, + end_addr: 32'h3d400000},// MagiaTileX19Y30 +'{ idx: '{x: 50, y: 30, port_id: 0}, + start_addr: 32'h3d200000, + end_addr: 32'h3d300000},// MagiaTileX18Y30 +'{ idx: '{x: 49, y: 30, port_id: 0}, + start_addr: 32'h3d100000, + end_addr: 32'h3d200000},// MagiaTileX17Y30 +'{ idx: '{x: 48, y: 30, port_id: 0}, + start_addr: 32'h3d000000, + end_addr: 32'h3d100000},// MagiaTileX16Y30 +'{ idx: '{x: 47, y: 30, port_id: 0}, + start_addr: 32'h3cf00000, + end_addr: 32'h3d000000},// MagiaTileX15Y30 +'{ idx: '{x: 46, y: 30, port_id: 0}, + start_addr: 32'h3ce00000, + end_addr: 32'h3cf00000},// MagiaTileX14Y30 +'{ idx: '{x: 45, y: 30, port_id: 0}, + start_addr: 32'h3cd00000, + end_addr: 32'h3ce00000},// MagiaTileX13Y30 +'{ idx: '{x: 44, y: 30, port_id: 0}, + start_addr: 32'h3cc00000, + end_addr: 32'h3cd00000},// MagiaTileX12Y30 +'{ idx: '{x: 43, y: 30, port_id: 0}, + start_addr: 32'h3cb00000, + end_addr: 32'h3cc00000},// MagiaTileX11Y30 +'{ idx: '{x: 42, y: 30, port_id: 0}, + start_addr: 32'h3ca00000, + end_addr: 32'h3cb00000},// MagiaTileX10Y30 +'{ idx: '{x: 41, y: 30, port_id: 0}, + start_addr: 32'h3c900000, + end_addr: 32'h3ca00000},// MagiaTileX9Y30 +'{ idx: '{x: 40, y: 30, port_id: 0}, + start_addr: 32'h3c800000, + end_addr: 32'h3c900000},// MagiaTileX8Y30 +'{ idx: '{x: 39, y: 30, port_id: 0}, + start_addr: 32'h3c700000, + end_addr: 32'h3c800000},// MagiaTileX7Y30 +'{ idx: '{x: 38, y: 30, port_id: 0}, + start_addr: 32'h3c600000, + end_addr: 32'h3c700000},// MagiaTileX6Y30 +'{ idx: '{x: 37, y: 30, port_id: 0}, + start_addr: 32'h3c500000, + end_addr: 32'h3c600000},// MagiaTileX5Y30 +'{ idx: '{x: 36, y: 30, port_id: 0}, + start_addr: 32'h3c400000, + end_addr: 32'h3c500000},// MagiaTileX4Y30 +'{ idx: '{x: 35, y: 30, port_id: 0}, + start_addr: 32'h3c300000, + end_addr: 32'h3c400000},// MagiaTileX3Y30 +'{ idx: '{x: 34, y: 30, port_id: 0}, + start_addr: 32'h3c200000, + end_addr: 32'h3c300000},// MagiaTileX2Y30 +'{ idx: '{x: 33, y: 30, port_id: 0}, + start_addr: 32'h3c100000, + end_addr: 32'h3c200000},// MagiaTileX1Y30 +'{ idx: '{x: 32, y: 30, port_id: 0}, + start_addr: 32'h3c000000, + end_addr: 32'h3c100000},// MagiaTileX0Y30 +'{ idx: '{x: 63, y: 29, port_id: 0}, + start_addr: 32'h3bf00000, + end_addr: 32'h3c000000},// MagiaTileX31Y29 +'{ idx: '{x: 62, y: 29, port_id: 0}, + start_addr: 32'h3be00000, + end_addr: 32'h3bf00000},// MagiaTileX30Y29 +'{ idx: '{x: 61, y: 29, port_id: 0}, + start_addr: 32'h3bd00000, + end_addr: 32'h3be00000},// MagiaTileX29Y29 +'{ idx: '{x: 60, y: 29, port_id: 0}, + start_addr: 32'h3bc00000, + end_addr: 32'h3bd00000},// MagiaTileX28Y29 +'{ idx: '{x: 59, y: 29, port_id: 0}, + start_addr: 32'h3bb00000, + end_addr: 32'h3bc00000},// MagiaTileX27Y29 +'{ idx: '{x: 58, y: 29, port_id: 0}, + start_addr: 32'h3ba00000, + end_addr: 32'h3bb00000},// MagiaTileX26Y29 +'{ idx: '{x: 57, y: 29, port_id: 0}, + start_addr: 32'h3b900000, + end_addr: 32'h3ba00000},// MagiaTileX25Y29 +'{ idx: '{x: 56, y: 29, port_id: 0}, + start_addr: 32'h3b800000, + end_addr: 32'h3b900000},// MagiaTileX24Y29 +'{ idx: '{x: 55, y: 29, port_id: 0}, + start_addr: 32'h3b700000, + end_addr: 32'h3b800000},// MagiaTileX23Y29 +'{ idx: '{x: 54, y: 29, port_id: 0}, + start_addr: 32'h3b600000, + end_addr: 32'h3b700000},// MagiaTileX22Y29 +'{ idx: '{x: 53, y: 29, port_id: 0}, + start_addr: 32'h3b500000, + end_addr: 32'h3b600000},// MagiaTileX21Y29 +'{ idx: '{x: 52, y: 29, port_id: 0}, + start_addr: 32'h3b400000, + end_addr: 32'h3b500000},// MagiaTileX20Y29 +'{ idx: '{x: 51, y: 29, port_id: 0}, + start_addr: 32'h3b300000, + end_addr: 32'h3b400000},// MagiaTileX19Y29 +'{ idx: '{x: 50, y: 29, port_id: 0}, + start_addr: 32'h3b200000, + end_addr: 32'h3b300000},// MagiaTileX18Y29 +'{ idx: '{x: 49, y: 29, port_id: 0}, + start_addr: 32'h3b100000, + end_addr: 32'h3b200000},// MagiaTileX17Y29 +'{ idx: '{x: 48, y: 29, port_id: 0}, + start_addr: 32'h3b000000, + end_addr: 32'h3b100000},// MagiaTileX16Y29 +'{ idx: '{x: 47, y: 29, port_id: 0}, + start_addr: 32'h3af00000, + end_addr: 32'h3b000000},// MagiaTileX15Y29 +'{ idx: '{x: 46, y: 29, port_id: 0}, + start_addr: 32'h3ae00000, + end_addr: 32'h3af00000},// MagiaTileX14Y29 +'{ idx: '{x: 45, y: 29, port_id: 0}, + start_addr: 32'h3ad00000, + end_addr: 32'h3ae00000},// MagiaTileX13Y29 +'{ idx: '{x: 44, y: 29, port_id: 0}, + start_addr: 32'h3ac00000, + end_addr: 32'h3ad00000},// MagiaTileX12Y29 +'{ idx: '{x: 43, y: 29, port_id: 0}, + start_addr: 32'h3ab00000, + end_addr: 32'h3ac00000},// MagiaTileX11Y29 +'{ idx: '{x: 42, y: 29, port_id: 0}, + start_addr: 32'h3aa00000, + end_addr: 32'h3ab00000},// MagiaTileX10Y29 +'{ idx: '{x: 41, y: 29, port_id: 0}, + start_addr: 32'h3a900000, + end_addr: 32'h3aa00000},// MagiaTileX9Y29 +'{ idx: '{x: 40, y: 29, port_id: 0}, + start_addr: 32'h3a800000, + end_addr: 32'h3a900000},// MagiaTileX8Y29 +'{ idx: '{x: 39, y: 29, port_id: 0}, + start_addr: 32'h3a700000, + end_addr: 32'h3a800000},// MagiaTileX7Y29 +'{ idx: '{x: 38, y: 29, port_id: 0}, + start_addr: 32'h3a600000, + end_addr: 32'h3a700000},// MagiaTileX6Y29 +'{ idx: '{x: 37, y: 29, port_id: 0}, + start_addr: 32'h3a500000, + end_addr: 32'h3a600000},// MagiaTileX5Y29 +'{ idx: '{x: 36, y: 29, port_id: 0}, + start_addr: 32'h3a400000, + end_addr: 32'h3a500000},// MagiaTileX4Y29 +'{ idx: '{x: 35, y: 29, port_id: 0}, + start_addr: 32'h3a300000, + end_addr: 32'h3a400000},// MagiaTileX3Y29 +'{ idx: '{x: 34, y: 29, port_id: 0}, + start_addr: 32'h3a200000, + end_addr: 32'h3a300000},// MagiaTileX2Y29 +'{ idx: '{x: 33, y: 29, port_id: 0}, + start_addr: 32'h3a100000, + end_addr: 32'h3a200000},// MagiaTileX1Y29 +'{ idx: '{x: 32, y: 29, port_id: 0}, + start_addr: 32'h3a000000, + end_addr: 32'h3a100000},// MagiaTileX0Y29 +'{ idx: '{x: 63, y: 28, port_id: 0}, + start_addr: 32'h39f00000, + end_addr: 32'h3a000000},// MagiaTileX31Y28 +'{ idx: '{x: 62, y: 28, port_id: 0}, + start_addr: 32'h39e00000, + end_addr: 32'h39f00000},// MagiaTileX30Y28 +'{ idx: '{x: 61, y: 28, port_id: 0}, + start_addr: 32'h39d00000, + end_addr: 32'h39e00000},// MagiaTileX29Y28 +'{ idx: '{x: 60, y: 28, port_id: 0}, + start_addr: 32'h39c00000, + end_addr: 32'h39d00000},// MagiaTileX28Y28 +'{ idx: '{x: 59, y: 28, port_id: 0}, + start_addr: 32'h39b00000, + end_addr: 32'h39c00000},// MagiaTileX27Y28 +'{ idx: '{x: 58, y: 28, port_id: 0}, + start_addr: 32'h39a00000, + end_addr: 32'h39b00000},// MagiaTileX26Y28 +'{ idx: '{x: 57, y: 28, port_id: 0}, + start_addr: 32'h39900000, + end_addr: 32'h39a00000},// MagiaTileX25Y28 +'{ idx: '{x: 56, y: 28, port_id: 0}, + start_addr: 32'h39800000, + end_addr: 32'h39900000},// MagiaTileX24Y28 +'{ idx: '{x: 55, y: 28, port_id: 0}, + start_addr: 32'h39700000, + end_addr: 32'h39800000},// MagiaTileX23Y28 +'{ idx: '{x: 54, y: 28, port_id: 0}, + start_addr: 32'h39600000, + end_addr: 32'h39700000},// MagiaTileX22Y28 +'{ idx: '{x: 53, y: 28, port_id: 0}, + start_addr: 32'h39500000, + end_addr: 32'h39600000},// MagiaTileX21Y28 +'{ idx: '{x: 52, y: 28, port_id: 0}, + start_addr: 32'h39400000, + end_addr: 32'h39500000},// MagiaTileX20Y28 +'{ idx: '{x: 51, y: 28, port_id: 0}, + start_addr: 32'h39300000, + end_addr: 32'h39400000},// MagiaTileX19Y28 +'{ idx: '{x: 50, y: 28, port_id: 0}, + start_addr: 32'h39200000, + end_addr: 32'h39300000},// MagiaTileX18Y28 +'{ idx: '{x: 49, y: 28, port_id: 0}, + start_addr: 32'h39100000, + end_addr: 32'h39200000},// MagiaTileX17Y28 +'{ idx: '{x: 48, y: 28, port_id: 0}, + start_addr: 32'h39000000, + end_addr: 32'h39100000},// MagiaTileX16Y28 +'{ idx: '{x: 47, y: 28, port_id: 0}, + start_addr: 32'h38f00000, + end_addr: 32'h39000000},// MagiaTileX15Y28 +'{ idx: '{x: 46, y: 28, port_id: 0}, + start_addr: 32'h38e00000, + end_addr: 32'h38f00000},// MagiaTileX14Y28 +'{ idx: '{x: 45, y: 28, port_id: 0}, + start_addr: 32'h38d00000, + end_addr: 32'h38e00000},// MagiaTileX13Y28 +'{ idx: '{x: 44, y: 28, port_id: 0}, + start_addr: 32'h38c00000, + end_addr: 32'h38d00000},// MagiaTileX12Y28 +'{ idx: '{x: 43, y: 28, port_id: 0}, + start_addr: 32'h38b00000, + end_addr: 32'h38c00000},// MagiaTileX11Y28 +'{ idx: '{x: 42, y: 28, port_id: 0}, + start_addr: 32'h38a00000, + end_addr: 32'h38b00000},// MagiaTileX10Y28 +'{ idx: '{x: 41, y: 28, port_id: 0}, + start_addr: 32'h38900000, + end_addr: 32'h38a00000},// MagiaTileX9Y28 +'{ idx: '{x: 40, y: 28, port_id: 0}, + start_addr: 32'h38800000, + end_addr: 32'h38900000},// MagiaTileX8Y28 +'{ idx: '{x: 39, y: 28, port_id: 0}, + start_addr: 32'h38700000, + end_addr: 32'h38800000},// MagiaTileX7Y28 +'{ idx: '{x: 38, y: 28, port_id: 0}, + start_addr: 32'h38600000, + end_addr: 32'h38700000},// MagiaTileX6Y28 +'{ idx: '{x: 37, y: 28, port_id: 0}, + start_addr: 32'h38500000, + end_addr: 32'h38600000},// MagiaTileX5Y28 +'{ idx: '{x: 36, y: 28, port_id: 0}, + start_addr: 32'h38400000, + end_addr: 32'h38500000},// MagiaTileX4Y28 +'{ idx: '{x: 35, y: 28, port_id: 0}, + start_addr: 32'h38300000, + end_addr: 32'h38400000},// MagiaTileX3Y28 +'{ idx: '{x: 34, y: 28, port_id: 0}, + start_addr: 32'h38200000, + end_addr: 32'h38300000},// MagiaTileX2Y28 +'{ idx: '{x: 33, y: 28, port_id: 0}, + start_addr: 32'h38100000, + end_addr: 32'h38200000},// MagiaTileX1Y28 +'{ idx: '{x: 32, y: 28, port_id: 0}, + start_addr: 32'h38000000, + end_addr: 32'h38100000},// MagiaTileX0Y28 +'{ idx: '{x: 63, y: 27, port_id: 0}, + start_addr: 32'h37f00000, + end_addr: 32'h38000000},// MagiaTileX31Y27 +'{ idx: '{x: 62, y: 27, port_id: 0}, + start_addr: 32'h37e00000, + end_addr: 32'h37f00000},// MagiaTileX30Y27 +'{ idx: '{x: 61, y: 27, port_id: 0}, + start_addr: 32'h37d00000, + end_addr: 32'h37e00000},// MagiaTileX29Y27 +'{ idx: '{x: 60, y: 27, port_id: 0}, + start_addr: 32'h37c00000, + end_addr: 32'h37d00000},// MagiaTileX28Y27 +'{ idx: '{x: 59, y: 27, port_id: 0}, + start_addr: 32'h37b00000, + end_addr: 32'h37c00000},// MagiaTileX27Y27 +'{ idx: '{x: 58, y: 27, port_id: 0}, + start_addr: 32'h37a00000, + end_addr: 32'h37b00000},// MagiaTileX26Y27 +'{ idx: '{x: 57, y: 27, port_id: 0}, + start_addr: 32'h37900000, + end_addr: 32'h37a00000},// MagiaTileX25Y27 +'{ idx: '{x: 56, y: 27, port_id: 0}, + start_addr: 32'h37800000, + end_addr: 32'h37900000},// MagiaTileX24Y27 +'{ idx: '{x: 55, y: 27, port_id: 0}, + start_addr: 32'h37700000, + end_addr: 32'h37800000},// MagiaTileX23Y27 +'{ idx: '{x: 54, y: 27, port_id: 0}, + start_addr: 32'h37600000, + end_addr: 32'h37700000},// MagiaTileX22Y27 +'{ idx: '{x: 53, y: 27, port_id: 0}, + start_addr: 32'h37500000, + end_addr: 32'h37600000},// MagiaTileX21Y27 +'{ idx: '{x: 52, y: 27, port_id: 0}, + start_addr: 32'h37400000, + end_addr: 32'h37500000},// MagiaTileX20Y27 +'{ idx: '{x: 51, y: 27, port_id: 0}, + start_addr: 32'h37300000, + end_addr: 32'h37400000},// MagiaTileX19Y27 +'{ idx: '{x: 50, y: 27, port_id: 0}, + start_addr: 32'h37200000, + end_addr: 32'h37300000},// MagiaTileX18Y27 +'{ idx: '{x: 49, y: 27, port_id: 0}, + start_addr: 32'h37100000, + end_addr: 32'h37200000},// MagiaTileX17Y27 +'{ idx: '{x: 48, y: 27, port_id: 0}, + start_addr: 32'h37000000, + end_addr: 32'h37100000},// MagiaTileX16Y27 +'{ idx: '{x: 47, y: 27, port_id: 0}, + start_addr: 32'h36f00000, + end_addr: 32'h37000000},// MagiaTileX15Y27 +'{ idx: '{x: 46, y: 27, port_id: 0}, + start_addr: 32'h36e00000, + end_addr: 32'h36f00000},// MagiaTileX14Y27 +'{ idx: '{x: 45, y: 27, port_id: 0}, + start_addr: 32'h36d00000, + end_addr: 32'h36e00000},// MagiaTileX13Y27 +'{ idx: '{x: 44, y: 27, port_id: 0}, + start_addr: 32'h36c00000, + end_addr: 32'h36d00000},// MagiaTileX12Y27 +'{ idx: '{x: 43, y: 27, port_id: 0}, + start_addr: 32'h36b00000, + end_addr: 32'h36c00000},// MagiaTileX11Y27 +'{ idx: '{x: 42, y: 27, port_id: 0}, + start_addr: 32'h36a00000, + end_addr: 32'h36b00000},// MagiaTileX10Y27 +'{ idx: '{x: 41, y: 27, port_id: 0}, + start_addr: 32'h36900000, + end_addr: 32'h36a00000},// MagiaTileX9Y27 +'{ idx: '{x: 40, y: 27, port_id: 0}, + start_addr: 32'h36800000, + end_addr: 32'h36900000},// MagiaTileX8Y27 +'{ idx: '{x: 39, y: 27, port_id: 0}, + start_addr: 32'h36700000, + end_addr: 32'h36800000},// MagiaTileX7Y27 +'{ idx: '{x: 38, y: 27, port_id: 0}, + start_addr: 32'h36600000, + end_addr: 32'h36700000},// MagiaTileX6Y27 +'{ idx: '{x: 37, y: 27, port_id: 0}, + start_addr: 32'h36500000, + end_addr: 32'h36600000},// MagiaTileX5Y27 +'{ idx: '{x: 36, y: 27, port_id: 0}, + start_addr: 32'h36400000, + end_addr: 32'h36500000},// MagiaTileX4Y27 +'{ idx: '{x: 35, y: 27, port_id: 0}, + start_addr: 32'h36300000, + end_addr: 32'h36400000},// MagiaTileX3Y27 +'{ idx: '{x: 34, y: 27, port_id: 0}, + start_addr: 32'h36200000, + end_addr: 32'h36300000},// MagiaTileX2Y27 +'{ idx: '{x: 33, y: 27, port_id: 0}, + start_addr: 32'h36100000, + end_addr: 32'h36200000},// MagiaTileX1Y27 +'{ idx: '{x: 32, y: 27, port_id: 0}, + start_addr: 32'h36000000, + end_addr: 32'h36100000},// MagiaTileX0Y27 +'{ idx: '{x: 63, y: 26, port_id: 0}, + start_addr: 32'h35f00000, + end_addr: 32'h36000000},// MagiaTileX31Y26 +'{ idx: '{x: 62, y: 26, port_id: 0}, + start_addr: 32'h35e00000, + end_addr: 32'h35f00000},// MagiaTileX30Y26 +'{ idx: '{x: 61, y: 26, port_id: 0}, + start_addr: 32'h35d00000, + end_addr: 32'h35e00000},// MagiaTileX29Y26 +'{ idx: '{x: 60, y: 26, port_id: 0}, + start_addr: 32'h35c00000, + end_addr: 32'h35d00000},// MagiaTileX28Y26 +'{ idx: '{x: 59, y: 26, port_id: 0}, + start_addr: 32'h35b00000, + end_addr: 32'h35c00000},// MagiaTileX27Y26 +'{ idx: '{x: 58, y: 26, port_id: 0}, + start_addr: 32'h35a00000, + end_addr: 32'h35b00000},// MagiaTileX26Y26 +'{ idx: '{x: 57, y: 26, port_id: 0}, + start_addr: 32'h35900000, + end_addr: 32'h35a00000},// MagiaTileX25Y26 +'{ idx: '{x: 56, y: 26, port_id: 0}, + start_addr: 32'h35800000, + end_addr: 32'h35900000},// MagiaTileX24Y26 +'{ idx: '{x: 55, y: 26, port_id: 0}, + start_addr: 32'h35700000, + end_addr: 32'h35800000},// MagiaTileX23Y26 +'{ idx: '{x: 54, y: 26, port_id: 0}, + start_addr: 32'h35600000, + end_addr: 32'h35700000},// MagiaTileX22Y26 +'{ idx: '{x: 53, y: 26, port_id: 0}, + start_addr: 32'h35500000, + end_addr: 32'h35600000},// MagiaTileX21Y26 +'{ idx: '{x: 52, y: 26, port_id: 0}, + start_addr: 32'h35400000, + end_addr: 32'h35500000},// MagiaTileX20Y26 +'{ idx: '{x: 51, y: 26, port_id: 0}, + start_addr: 32'h35300000, + end_addr: 32'h35400000},// MagiaTileX19Y26 +'{ idx: '{x: 50, y: 26, port_id: 0}, + start_addr: 32'h35200000, + end_addr: 32'h35300000},// MagiaTileX18Y26 +'{ idx: '{x: 49, y: 26, port_id: 0}, + start_addr: 32'h35100000, + end_addr: 32'h35200000},// MagiaTileX17Y26 +'{ idx: '{x: 48, y: 26, port_id: 0}, + start_addr: 32'h35000000, + end_addr: 32'h35100000},// MagiaTileX16Y26 +'{ idx: '{x: 47, y: 26, port_id: 0}, + start_addr: 32'h34f00000, + end_addr: 32'h35000000},// MagiaTileX15Y26 +'{ idx: '{x: 46, y: 26, port_id: 0}, + start_addr: 32'h34e00000, + end_addr: 32'h34f00000},// MagiaTileX14Y26 +'{ idx: '{x: 45, y: 26, port_id: 0}, + start_addr: 32'h34d00000, + end_addr: 32'h34e00000},// MagiaTileX13Y26 +'{ idx: '{x: 44, y: 26, port_id: 0}, + start_addr: 32'h34c00000, + end_addr: 32'h34d00000},// MagiaTileX12Y26 +'{ idx: '{x: 43, y: 26, port_id: 0}, + start_addr: 32'h34b00000, + end_addr: 32'h34c00000},// MagiaTileX11Y26 +'{ idx: '{x: 42, y: 26, port_id: 0}, + start_addr: 32'h34a00000, + end_addr: 32'h34b00000},// MagiaTileX10Y26 +'{ idx: '{x: 41, y: 26, port_id: 0}, + start_addr: 32'h34900000, + end_addr: 32'h34a00000},// MagiaTileX9Y26 +'{ idx: '{x: 40, y: 26, port_id: 0}, + start_addr: 32'h34800000, + end_addr: 32'h34900000},// MagiaTileX8Y26 +'{ idx: '{x: 39, y: 26, port_id: 0}, + start_addr: 32'h34700000, + end_addr: 32'h34800000},// MagiaTileX7Y26 +'{ idx: '{x: 38, y: 26, port_id: 0}, + start_addr: 32'h34600000, + end_addr: 32'h34700000},// MagiaTileX6Y26 +'{ idx: '{x: 37, y: 26, port_id: 0}, + start_addr: 32'h34500000, + end_addr: 32'h34600000},// MagiaTileX5Y26 +'{ idx: '{x: 36, y: 26, port_id: 0}, + start_addr: 32'h34400000, + end_addr: 32'h34500000},// MagiaTileX4Y26 +'{ idx: '{x: 35, y: 26, port_id: 0}, + start_addr: 32'h34300000, + end_addr: 32'h34400000},// MagiaTileX3Y26 +'{ idx: '{x: 34, y: 26, port_id: 0}, + start_addr: 32'h34200000, + end_addr: 32'h34300000},// MagiaTileX2Y26 +'{ idx: '{x: 33, y: 26, port_id: 0}, + start_addr: 32'h34100000, + end_addr: 32'h34200000},// MagiaTileX1Y26 +'{ idx: '{x: 32, y: 26, port_id: 0}, + start_addr: 32'h34000000, + end_addr: 32'h34100000},// MagiaTileX0Y26 +'{ idx: '{x: 63, y: 25, port_id: 0}, + start_addr: 32'h33f00000, + end_addr: 32'h34000000},// MagiaTileX31Y25 +'{ idx: '{x: 62, y: 25, port_id: 0}, + start_addr: 32'h33e00000, + end_addr: 32'h33f00000},// MagiaTileX30Y25 +'{ idx: '{x: 61, y: 25, port_id: 0}, + start_addr: 32'h33d00000, + end_addr: 32'h33e00000},// MagiaTileX29Y25 +'{ idx: '{x: 60, y: 25, port_id: 0}, + start_addr: 32'h33c00000, + end_addr: 32'h33d00000},// MagiaTileX28Y25 +'{ idx: '{x: 59, y: 25, port_id: 0}, + start_addr: 32'h33b00000, + end_addr: 32'h33c00000},// MagiaTileX27Y25 +'{ idx: '{x: 58, y: 25, port_id: 0}, + start_addr: 32'h33a00000, + end_addr: 32'h33b00000},// MagiaTileX26Y25 +'{ idx: '{x: 57, y: 25, port_id: 0}, + start_addr: 32'h33900000, + end_addr: 32'h33a00000},// MagiaTileX25Y25 +'{ idx: '{x: 56, y: 25, port_id: 0}, + start_addr: 32'h33800000, + end_addr: 32'h33900000},// MagiaTileX24Y25 +'{ idx: '{x: 55, y: 25, port_id: 0}, + start_addr: 32'h33700000, + end_addr: 32'h33800000},// MagiaTileX23Y25 +'{ idx: '{x: 54, y: 25, port_id: 0}, + start_addr: 32'h33600000, + end_addr: 32'h33700000},// MagiaTileX22Y25 +'{ idx: '{x: 53, y: 25, port_id: 0}, + start_addr: 32'h33500000, + end_addr: 32'h33600000},// MagiaTileX21Y25 +'{ idx: '{x: 52, y: 25, port_id: 0}, + start_addr: 32'h33400000, + end_addr: 32'h33500000},// MagiaTileX20Y25 +'{ idx: '{x: 51, y: 25, port_id: 0}, + start_addr: 32'h33300000, + end_addr: 32'h33400000},// MagiaTileX19Y25 +'{ idx: '{x: 50, y: 25, port_id: 0}, + start_addr: 32'h33200000, + end_addr: 32'h33300000},// MagiaTileX18Y25 +'{ idx: '{x: 49, y: 25, port_id: 0}, + start_addr: 32'h33100000, + end_addr: 32'h33200000},// MagiaTileX17Y25 +'{ idx: '{x: 48, y: 25, port_id: 0}, + start_addr: 32'h33000000, + end_addr: 32'h33100000},// MagiaTileX16Y25 +'{ idx: '{x: 47, y: 25, port_id: 0}, + start_addr: 32'h32f00000, + end_addr: 32'h33000000},// MagiaTileX15Y25 +'{ idx: '{x: 46, y: 25, port_id: 0}, + start_addr: 32'h32e00000, + end_addr: 32'h32f00000},// MagiaTileX14Y25 +'{ idx: '{x: 45, y: 25, port_id: 0}, + start_addr: 32'h32d00000, + end_addr: 32'h32e00000},// MagiaTileX13Y25 +'{ idx: '{x: 44, y: 25, port_id: 0}, + start_addr: 32'h32c00000, + end_addr: 32'h32d00000},// MagiaTileX12Y25 +'{ idx: '{x: 43, y: 25, port_id: 0}, + start_addr: 32'h32b00000, + end_addr: 32'h32c00000},// MagiaTileX11Y25 +'{ idx: '{x: 42, y: 25, port_id: 0}, + start_addr: 32'h32a00000, + end_addr: 32'h32b00000},// MagiaTileX10Y25 +'{ idx: '{x: 41, y: 25, port_id: 0}, + start_addr: 32'h32900000, + end_addr: 32'h32a00000},// MagiaTileX9Y25 +'{ idx: '{x: 40, y: 25, port_id: 0}, + start_addr: 32'h32800000, + end_addr: 32'h32900000},// MagiaTileX8Y25 +'{ idx: '{x: 39, y: 25, port_id: 0}, + start_addr: 32'h32700000, + end_addr: 32'h32800000},// MagiaTileX7Y25 +'{ idx: '{x: 38, y: 25, port_id: 0}, + start_addr: 32'h32600000, + end_addr: 32'h32700000},// MagiaTileX6Y25 +'{ idx: '{x: 37, y: 25, port_id: 0}, + start_addr: 32'h32500000, + end_addr: 32'h32600000},// MagiaTileX5Y25 +'{ idx: '{x: 36, y: 25, port_id: 0}, + start_addr: 32'h32400000, + end_addr: 32'h32500000},// MagiaTileX4Y25 +'{ idx: '{x: 35, y: 25, port_id: 0}, + start_addr: 32'h32300000, + end_addr: 32'h32400000},// MagiaTileX3Y25 +'{ idx: '{x: 34, y: 25, port_id: 0}, + start_addr: 32'h32200000, + end_addr: 32'h32300000},// MagiaTileX2Y25 +'{ idx: '{x: 33, y: 25, port_id: 0}, + start_addr: 32'h32100000, + end_addr: 32'h32200000},// MagiaTileX1Y25 +'{ idx: '{x: 32, y: 25, port_id: 0}, + start_addr: 32'h32000000, + end_addr: 32'h32100000},// MagiaTileX0Y25 +'{ idx: '{x: 63, y: 24, port_id: 0}, + start_addr: 32'h31f00000, + end_addr: 32'h32000000},// MagiaTileX31Y24 +'{ idx: '{x: 62, y: 24, port_id: 0}, + start_addr: 32'h31e00000, + end_addr: 32'h31f00000},// MagiaTileX30Y24 +'{ idx: '{x: 61, y: 24, port_id: 0}, + start_addr: 32'h31d00000, + end_addr: 32'h31e00000},// MagiaTileX29Y24 +'{ idx: '{x: 60, y: 24, port_id: 0}, + start_addr: 32'h31c00000, + end_addr: 32'h31d00000},// MagiaTileX28Y24 +'{ idx: '{x: 59, y: 24, port_id: 0}, + start_addr: 32'h31b00000, + end_addr: 32'h31c00000},// MagiaTileX27Y24 +'{ idx: '{x: 58, y: 24, port_id: 0}, + start_addr: 32'h31a00000, + end_addr: 32'h31b00000},// MagiaTileX26Y24 +'{ idx: '{x: 57, y: 24, port_id: 0}, + start_addr: 32'h31900000, + end_addr: 32'h31a00000},// MagiaTileX25Y24 +'{ idx: '{x: 56, y: 24, port_id: 0}, + start_addr: 32'h31800000, + end_addr: 32'h31900000},// MagiaTileX24Y24 +'{ idx: '{x: 55, y: 24, port_id: 0}, + start_addr: 32'h31700000, + end_addr: 32'h31800000},// MagiaTileX23Y24 +'{ idx: '{x: 54, y: 24, port_id: 0}, + start_addr: 32'h31600000, + end_addr: 32'h31700000},// MagiaTileX22Y24 +'{ idx: '{x: 53, y: 24, port_id: 0}, + start_addr: 32'h31500000, + end_addr: 32'h31600000},// MagiaTileX21Y24 +'{ idx: '{x: 52, y: 24, port_id: 0}, + start_addr: 32'h31400000, + end_addr: 32'h31500000},// MagiaTileX20Y24 +'{ idx: '{x: 51, y: 24, port_id: 0}, + start_addr: 32'h31300000, + end_addr: 32'h31400000},// MagiaTileX19Y24 +'{ idx: '{x: 50, y: 24, port_id: 0}, + start_addr: 32'h31200000, + end_addr: 32'h31300000},// MagiaTileX18Y24 +'{ idx: '{x: 49, y: 24, port_id: 0}, + start_addr: 32'h31100000, + end_addr: 32'h31200000},// MagiaTileX17Y24 +'{ idx: '{x: 48, y: 24, port_id: 0}, + start_addr: 32'h31000000, + end_addr: 32'h31100000},// MagiaTileX16Y24 +'{ idx: '{x: 47, y: 24, port_id: 0}, + start_addr: 32'h30f00000, + end_addr: 32'h31000000},// MagiaTileX15Y24 +'{ idx: '{x: 46, y: 24, port_id: 0}, + start_addr: 32'h30e00000, + end_addr: 32'h30f00000},// MagiaTileX14Y24 +'{ idx: '{x: 45, y: 24, port_id: 0}, + start_addr: 32'h30d00000, + end_addr: 32'h30e00000},// MagiaTileX13Y24 +'{ idx: '{x: 44, y: 24, port_id: 0}, + start_addr: 32'h30c00000, + end_addr: 32'h30d00000},// MagiaTileX12Y24 +'{ idx: '{x: 43, y: 24, port_id: 0}, + start_addr: 32'h30b00000, + end_addr: 32'h30c00000},// MagiaTileX11Y24 +'{ idx: '{x: 42, y: 24, port_id: 0}, + start_addr: 32'h30a00000, + end_addr: 32'h30b00000},// MagiaTileX10Y24 +'{ idx: '{x: 41, y: 24, port_id: 0}, + start_addr: 32'h30900000, + end_addr: 32'h30a00000},// MagiaTileX9Y24 +'{ idx: '{x: 40, y: 24, port_id: 0}, + start_addr: 32'h30800000, + end_addr: 32'h30900000},// MagiaTileX8Y24 +'{ idx: '{x: 39, y: 24, port_id: 0}, + start_addr: 32'h30700000, + end_addr: 32'h30800000},// MagiaTileX7Y24 +'{ idx: '{x: 38, y: 24, port_id: 0}, + start_addr: 32'h30600000, + end_addr: 32'h30700000},// MagiaTileX6Y24 +'{ idx: '{x: 37, y: 24, port_id: 0}, + start_addr: 32'h30500000, + end_addr: 32'h30600000},// MagiaTileX5Y24 +'{ idx: '{x: 36, y: 24, port_id: 0}, + start_addr: 32'h30400000, + end_addr: 32'h30500000},// MagiaTileX4Y24 +'{ idx: '{x: 35, y: 24, port_id: 0}, + start_addr: 32'h30300000, + end_addr: 32'h30400000},// MagiaTileX3Y24 +'{ idx: '{x: 34, y: 24, port_id: 0}, + start_addr: 32'h30200000, + end_addr: 32'h30300000},// MagiaTileX2Y24 +'{ idx: '{x: 33, y: 24, port_id: 0}, + start_addr: 32'h30100000, + end_addr: 32'h30200000},// MagiaTileX1Y24 +'{ idx: '{x: 32, y: 24, port_id: 0}, + start_addr: 32'h30000000, + end_addr: 32'h30100000},// MagiaTileX0Y24 +'{ idx: '{x: 63, y: 23, port_id: 0}, + start_addr: 32'h2ff00000, + end_addr: 32'h30000000},// MagiaTileX31Y23 +'{ idx: '{x: 62, y: 23, port_id: 0}, + start_addr: 32'h2fe00000, + end_addr: 32'h2ff00000},// MagiaTileX30Y23 +'{ idx: '{x: 61, y: 23, port_id: 0}, + start_addr: 32'h2fd00000, + end_addr: 32'h2fe00000},// MagiaTileX29Y23 +'{ idx: '{x: 60, y: 23, port_id: 0}, + start_addr: 32'h2fc00000, + end_addr: 32'h2fd00000},// MagiaTileX28Y23 +'{ idx: '{x: 59, y: 23, port_id: 0}, + start_addr: 32'h2fb00000, + end_addr: 32'h2fc00000},// MagiaTileX27Y23 +'{ idx: '{x: 58, y: 23, port_id: 0}, + start_addr: 32'h2fa00000, + end_addr: 32'h2fb00000},// MagiaTileX26Y23 +'{ idx: '{x: 57, y: 23, port_id: 0}, + start_addr: 32'h2f900000, + end_addr: 32'h2fa00000},// MagiaTileX25Y23 +'{ idx: '{x: 56, y: 23, port_id: 0}, + start_addr: 32'h2f800000, + end_addr: 32'h2f900000},// MagiaTileX24Y23 +'{ idx: '{x: 55, y: 23, port_id: 0}, + start_addr: 32'h2f700000, + end_addr: 32'h2f800000},// MagiaTileX23Y23 +'{ idx: '{x: 54, y: 23, port_id: 0}, + start_addr: 32'h2f600000, + end_addr: 32'h2f700000},// MagiaTileX22Y23 +'{ idx: '{x: 53, y: 23, port_id: 0}, + start_addr: 32'h2f500000, + end_addr: 32'h2f600000},// MagiaTileX21Y23 +'{ idx: '{x: 52, y: 23, port_id: 0}, + start_addr: 32'h2f400000, + end_addr: 32'h2f500000},// MagiaTileX20Y23 +'{ idx: '{x: 51, y: 23, port_id: 0}, + start_addr: 32'h2f300000, + end_addr: 32'h2f400000},// MagiaTileX19Y23 +'{ idx: '{x: 50, y: 23, port_id: 0}, + start_addr: 32'h2f200000, + end_addr: 32'h2f300000},// MagiaTileX18Y23 +'{ idx: '{x: 49, y: 23, port_id: 0}, + start_addr: 32'h2f100000, + end_addr: 32'h2f200000},// MagiaTileX17Y23 +'{ idx: '{x: 48, y: 23, port_id: 0}, + start_addr: 32'h2f000000, + end_addr: 32'h2f100000},// MagiaTileX16Y23 +'{ idx: '{x: 47, y: 23, port_id: 0}, + start_addr: 32'h2ef00000, + end_addr: 32'h2f000000},// MagiaTileX15Y23 +'{ idx: '{x: 46, y: 23, port_id: 0}, + start_addr: 32'h2ee00000, + end_addr: 32'h2ef00000},// MagiaTileX14Y23 +'{ idx: '{x: 45, y: 23, port_id: 0}, + start_addr: 32'h2ed00000, + end_addr: 32'h2ee00000},// MagiaTileX13Y23 +'{ idx: '{x: 44, y: 23, port_id: 0}, + start_addr: 32'h2ec00000, + end_addr: 32'h2ed00000},// MagiaTileX12Y23 +'{ idx: '{x: 43, y: 23, port_id: 0}, + start_addr: 32'h2eb00000, + end_addr: 32'h2ec00000},// MagiaTileX11Y23 +'{ idx: '{x: 42, y: 23, port_id: 0}, + start_addr: 32'h2ea00000, + end_addr: 32'h2eb00000},// MagiaTileX10Y23 +'{ idx: '{x: 41, y: 23, port_id: 0}, + start_addr: 32'h2e900000, + end_addr: 32'h2ea00000},// MagiaTileX9Y23 +'{ idx: '{x: 40, y: 23, port_id: 0}, + start_addr: 32'h2e800000, + end_addr: 32'h2e900000},// MagiaTileX8Y23 +'{ idx: '{x: 39, y: 23, port_id: 0}, + start_addr: 32'h2e700000, + end_addr: 32'h2e800000},// MagiaTileX7Y23 +'{ idx: '{x: 38, y: 23, port_id: 0}, + start_addr: 32'h2e600000, + end_addr: 32'h2e700000},// MagiaTileX6Y23 +'{ idx: '{x: 37, y: 23, port_id: 0}, + start_addr: 32'h2e500000, + end_addr: 32'h2e600000},// MagiaTileX5Y23 +'{ idx: '{x: 36, y: 23, port_id: 0}, + start_addr: 32'h2e400000, + end_addr: 32'h2e500000},// MagiaTileX4Y23 +'{ idx: '{x: 35, y: 23, port_id: 0}, + start_addr: 32'h2e300000, + end_addr: 32'h2e400000},// MagiaTileX3Y23 +'{ idx: '{x: 34, y: 23, port_id: 0}, + start_addr: 32'h2e200000, + end_addr: 32'h2e300000},// MagiaTileX2Y23 +'{ idx: '{x: 33, y: 23, port_id: 0}, + start_addr: 32'h2e100000, + end_addr: 32'h2e200000},// MagiaTileX1Y23 +'{ idx: '{x: 32, y: 23, port_id: 0}, + start_addr: 32'h2e000000, + end_addr: 32'h2e100000},// MagiaTileX0Y23 +'{ idx: '{x: 63, y: 22, port_id: 0}, + start_addr: 32'h2df00000, + end_addr: 32'h2e000000},// MagiaTileX31Y22 +'{ idx: '{x: 62, y: 22, port_id: 0}, + start_addr: 32'h2de00000, + end_addr: 32'h2df00000},// MagiaTileX30Y22 +'{ idx: '{x: 61, y: 22, port_id: 0}, + start_addr: 32'h2dd00000, + end_addr: 32'h2de00000},// MagiaTileX29Y22 +'{ idx: '{x: 60, y: 22, port_id: 0}, + start_addr: 32'h2dc00000, + end_addr: 32'h2dd00000},// MagiaTileX28Y22 +'{ idx: '{x: 59, y: 22, port_id: 0}, + start_addr: 32'h2db00000, + end_addr: 32'h2dc00000},// MagiaTileX27Y22 +'{ idx: '{x: 58, y: 22, port_id: 0}, + start_addr: 32'h2da00000, + end_addr: 32'h2db00000},// MagiaTileX26Y22 +'{ idx: '{x: 57, y: 22, port_id: 0}, + start_addr: 32'h2d900000, + end_addr: 32'h2da00000},// MagiaTileX25Y22 +'{ idx: '{x: 56, y: 22, port_id: 0}, + start_addr: 32'h2d800000, + end_addr: 32'h2d900000},// MagiaTileX24Y22 +'{ idx: '{x: 55, y: 22, port_id: 0}, + start_addr: 32'h2d700000, + end_addr: 32'h2d800000},// MagiaTileX23Y22 +'{ idx: '{x: 54, y: 22, port_id: 0}, + start_addr: 32'h2d600000, + end_addr: 32'h2d700000},// MagiaTileX22Y22 +'{ idx: '{x: 53, y: 22, port_id: 0}, + start_addr: 32'h2d500000, + end_addr: 32'h2d600000},// MagiaTileX21Y22 +'{ idx: '{x: 52, y: 22, port_id: 0}, + start_addr: 32'h2d400000, + end_addr: 32'h2d500000},// MagiaTileX20Y22 +'{ idx: '{x: 51, y: 22, port_id: 0}, + start_addr: 32'h2d300000, + end_addr: 32'h2d400000},// MagiaTileX19Y22 +'{ idx: '{x: 50, y: 22, port_id: 0}, + start_addr: 32'h2d200000, + end_addr: 32'h2d300000},// MagiaTileX18Y22 +'{ idx: '{x: 49, y: 22, port_id: 0}, + start_addr: 32'h2d100000, + end_addr: 32'h2d200000},// MagiaTileX17Y22 +'{ idx: '{x: 48, y: 22, port_id: 0}, + start_addr: 32'h2d000000, + end_addr: 32'h2d100000},// MagiaTileX16Y22 +'{ idx: '{x: 47, y: 22, port_id: 0}, + start_addr: 32'h2cf00000, + end_addr: 32'h2d000000},// MagiaTileX15Y22 +'{ idx: '{x: 46, y: 22, port_id: 0}, + start_addr: 32'h2ce00000, + end_addr: 32'h2cf00000},// MagiaTileX14Y22 +'{ idx: '{x: 45, y: 22, port_id: 0}, + start_addr: 32'h2cd00000, + end_addr: 32'h2ce00000},// MagiaTileX13Y22 +'{ idx: '{x: 44, y: 22, port_id: 0}, + start_addr: 32'h2cc00000, + end_addr: 32'h2cd00000},// MagiaTileX12Y22 +'{ idx: '{x: 43, y: 22, port_id: 0}, + start_addr: 32'h2cb00000, + end_addr: 32'h2cc00000},// MagiaTileX11Y22 +'{ idx: '{x: 42, y: 22, port_id: 0}, + start_addr: 32'h2ca00000, + end_addr: 32'h2cb00000},// MagiaTileX10Y22 +'{ idx: '{x: 41, y: 22, port_id: 0}, + start_addr: 32'h2c900000, + end_addr: 32'h2ca00000},// MagiaTileX9Y22 +'{ idx: '{x: 40, y: 22, port_id: 0}, + start_addr: 32'h2c800000, + end_addr: 32'h2c900000},// MagiaTileX8Y22 +'{ idx: '{x: 39, y: 22, port_id: 0}, + start_addr: 32'h2c700000, + end_addr: 32'h2c800000},// MagiaTileX7Y22 +'{ idx: '{x: 38, y: 22, port_id: 0}, + start_addr: 32'h2c600000, + end_addr: 32'h2c700000},// MagiaTileX6Y22 +'{ idx: '{x: 37, y: 22, port_id: 0}, + start_addr: 32'h2c500000, + end_addr: 32'h2c600000},// MagiaTileX5Y22 +'{ idx: '{x: 36, y: 22, port_id: 0}, + start_addr: 32'h2c400000, + end_addr: 32'h2c500000},// MagiaTileX4Y22 +'{ idx: '{x: 35, y: 22, port_id: 0}, + start_addr: 32'h2c300000, + end_addr: 32'h2c400000},// MagiaTileX3Y22 +'{ idx: '{x: 34, y: 22, port_id: 0}, + start_addr: 32'h2c200000, + end_addr: 32'h2c300000},// MagiaTileX2Y22 +'{ idx: '{x: 33, y: 22, port_id: 0}, + start_addr: 32'h2c100000, + end_addr: 32'h2c200000},// MagiaTileX1Y22 +'{ idx: '{x: 32, y: 22, port_id: 0}, + start_addr: 32'h2c000000, + end_addr: 32'h2c100000},// MagiaTileX0Y22 +'{ idx: '{x: 63, y: 21, port_id: 0}, + start_addr: 32'h2bf00000, + end_addr: 32'h2c000000},// MagiaTileX31Y21 +'{ idx: '{x: 62, y: 21, port_id: 0}, + start_addr: 32'h2be00000, + end_addr: 32'h2bf00000},// MagiaTileX30Y21 +'{ idx: '{x: 61, y: 21, port_id: 0}, + start_addr: 32'h2bd00000, + end_addr: 32'h2be00000},// MagiaTileX29Y21 +'{ idx: '{x: 60, y: 21, port_id: 0}, + start_addr: 32'h2bc00000, + end_addr: 32'h2bd00000},// MagiaTileX28Y21 +'{ idx: '{x: 59, y: 21, port_id: 0}, + start_addr: 32'h2bb00000, + end_addr: 32'h2bc00000},// MagiaTileX27Y21 +'{ idx: '{x: 58, y: 21, port_id: 0}, + start_addr: 32'h2ba00000, + end_addr: 32'h2bb00000},// MagiaTileX26Y21 +'{ idx: '{x: 57, y: 21, port_id: 0}, + start_addr: 32'h2b900000, + end_addr: 32'h2ba00000},// MagiaTileX25Y21 +'{ idx: '{x: 56, y: 21, port_id: 0}, + start_addr: 32'h2b800000, + end_addr: 32'h2b900000},// MagiaTileX24Y21 +'{ idx: '{x: 55, y: 21, port_id: 0}, + start_addr: 32'h2b700000, + end_addr: 32'h2b800000},// MagiaTileX23Y21 +'{ idx: '{x: 54, y: 21, port_id: 0}, + start_addr: 32'h2b600000, + end_addr: 32'h2b700000},// MagiaTileX22Y21 +'{ idx: '{x: 53, y: 21, port_id: 0}, + start_addr: 32'h2b500000, + end_addr: 32'h2b600000},// MagiaTileX21Y21 +'{ idx: '{x: 52, y: 21, port_id: 0}, + start_addr: 32'h2b400000, + end_addr: 32'h2b500000},// MagiaTileX20Y21 +'{ idx: '{x: 51, y: 21, port_id: 0}, + start_addr: 32'h2b300000, + end_addr: 32'h2b400000},// MagiaTileX19Y21 +'{ idx: '{x: 50, y: 21, port_id: 0}, + start_addr: 32'h2b200000, + end_addr: 32'h2b300000},// MagiaTileX18Y21 +'{ idx: '{x: 49, y: 21, port_id: 0}, + start_addr: 32'h2b100000, + end_addr: 32'h2b200000},// MagiaTileX17Y21 +'{ idx: '{x: 48, y: 21, port_id: 0}, + start_addr: 32'h2b000000, + end_addr: 32'h2b100000},// MagiaTileX16Y21 +'{ idx: '{x: 47, y: 21, port_id: 0}, + start_addr: 32'h2af00000, + end_addr: 32'h2b000000},// MagiaTileX15Y21 +'{ idx: '{x: 46, y: 21, port_id: 0}, + start_addr: 32'h2ae00000, + end_addr: 32'h2af00000},// MagiaTileX14Y21 +'{ idx: '{x: 45, y: 21, port_id: 0}, + start_addr: 32'h2ad00000, + end_addr: 32'h2ae00000},// MagiaTileX13Y21 +'{ idx: '{x: 44, y: 21, port_id: 0}, + start_addr: 32'h2ac00000, + end_addr: 32'h2ad00000},// MagiaTileX12Y21 +'{ idx: '{x: 43, y: 21, port_id: 0}, + start_addr: 32'h2ab00000, + end_addr: 32'h2ac00000},// MagiaTileX11Y21 +'{ idx: '{x: 42, y: 21, port_id: 0}, + start_addr: 32'h2aa00000, + end_addr: 32'h2ab00000},// MagiaTileX10Y21 +'{ idx: '{x: 41, y: 21, port_id: 0}, + start_addr: 32'h2a900000, + end_addr: 32'h2aa00000},// MagiaTileX9Y21 +'{ idx: '{x: 40, y: 21, port_id: 0}, + start_addr: 32'h2a800000, + end_addr: 32'h2a900000},// MagiaTileX8Y21 +'{ idx: '{x: 39, y: 21, port_id: 0}, + start_addr: 32'h2a700000, + end_addr: 32'h2a800000},// MagiaTileX7Y21 +'{ idx: '{x: 38, y: 21, port_id: 0}, + start_addr: 32'h2a600000, + end_addr: 32'h2a700000},// MagiaTileX6Y21 +'{ idx: '{x: 37, y: 21, port_id: 0}, + start_addr: 32'h2a500000, + end_addr: 32'h2a600000},// MagiaTileX5Y21 +'{ idx: '{x: 36, y: 21, port_id: 0}, + start_addr: 32'h2a400000, + end_addr: 32'h2a500000},// MagiaTileX4Y21 +'{ idx: '{x: 35, y: 21, port_id: 0}, + start_addr: 32'h2a300000, + end_addr: 32'h2a400000},// MagiaTileX3Y21 +'{ idx: '{x: 34, y: 21, port_id: 0}, + start_addr: 32'h2a200000, + end_addr: 32'h2a300000},// MagiaTileX2Y21 +'{ idx: '{x: 33, y: 21, port_id: 0}, + start_addr: 32'h2a100000, + end_addr: 32'h2a200000},// MagiaTileX1Y21 +'{ idx: '{x: 32, y: 21, port_id: 0}, + start_addr: 32'h2a000000, + end_addr: 32'h2a100000},// MagiaTileX0Y21 +'{ idx: '{x: 63, y: 20, port_id: 0}, + start_addr: 32'h29f00000, + end_addr: 32'h2a000000},// MagiaTileX31Y20 +'{ idx: '{x: 62, y: 20, port_id: 0}, + start_addr: 32'h29e00000, + end_addr: 32'h29f00000},// MagiaTileX30Y20 +'{ idx: '{x: 61, y: 20, port_id: 0}, + start_addr: 32'h29d00000, + end_addr: 32'h29e00000},// MagiaTileX29Y20 +'{ idx: '{x: 60, y: 20, port_id: 0}, + start_addr: 32'h29c00000, + end_addr: 32'h29d00000},// MagiaTileX28Y20 +'{ idx: '{x: 59, y: 20, port_id: 0}, + start_addr: 32'h29b00000, + end_addr: 32'h29c00000},// MagiaTileX27Y20 +'{ idx: '{x: 58, y: 20, port_id: 0}, + start_addr: 32'h29a00000, + end_addr: 32'h29b00000},// MagiaTileX26Y20 +'{ idx: '{x: 57, y: 20, port_id: 0}, + start_addr: 32'h29900000, + end_addr: 32'h29a00000},// MagiaTileX25Y20 +'{ idx: '{x: 56, y: 20, port_id: 0}, + start_addr: 32'h29800000, + end_addr: 32'h29900000},// MagiaTileX24Y20 +'{ idx: '{x: 55, y: 20, port_id: 0}, + start_addr: 32'h29700000, + end_addr: 32'h29800000},// MagiaTileX23Y20 +'{ idx: '{x: 54, y: 20, port_id: 0}, + start_addr: 32'h29600000, + end_addr: 32'h29700000},// MagiaTileX22Y20 +'{ idx: '{x: 53, y: 20, port_id: 0}, + start_addr: 32'h29500000, + end_addr: 32'h29600000},// MagiaTileX21Y20 +'{ idx: '{x: 52, y: 20, port_id: 0}, + start_addr: 32'h29400000, + end_addr: 32'h29500000},// MagiaTileX20Y20 +'{ idx: '{x: 51, y: 20, port_id: 0}, + start_addr: 32'h29300000, + end_addr: 32'h29400000},// MagiaTileX19Y20 +'{ idx: '{x: 50, y: 20, port_id: 0}, + start_addr: 32'h29200000, + end_addr: 32'h29300000},// MagiaTileX18Y20 +'{ idx: '{x: 49, y: 20, port_id: 0}, + start_addr: 32'h29100000, + end_addr: 32'h29200000},// MagiaTileX17Y20 +'{ idx: '{x: 48, y: 20, port_id: 0}, + start_addr: 32'h29000000, + end_addr: 32'h29100000},// MagiaTileX16Y20 +'{ idx: '{x: 47, y: 20, port_id: 0}, + start_addr: 32'h28f00000, + end_addr: 32'h29000000},// MagiaTileX15Y20 +'{ idx: '{x: 46, y: 20, port_id: 0}, + start_addr: 32'h28e00000, + end_addr: 32'h28f00000},// MagiaTileX14Y20 +'{ idx: '{x: 45, y: 20, port_id: 0}, + start_addr: 32'h28d00000, + end_addr: 32'h28e00000},// MagiaTileX13Y20 +'{ idx: '{x: 44, y: 20, port_id: 0}, + start_addr: 32'h28c00000, + end_addr: 32'h28d00000},// MagiaTileX12Y20 +'{ idx: '{x: 43, y: 20, port_id: 0}, + start_addr: 32'h28b00000, + end_addr: 32'h28c00000},// MagiaTileX11Y20 +'{ idx: '{x: 42, y: 20, port_id: 0}, + start_addr: 32'h28a00000, + end_addr: 32'h28b00000},// MagiaTileX10Y20 +'{ idx: '{x: 41, y: 20, port_id: 0}, + start_addr: 32'h28900000, + end_addr: 32'h28a00000},// MagiaTileX9Y20 +'{ idx: '{x: 40, y: 20, port_id: 0}, + start_addr: 32'h28800000, + end_addr: 32'h28900000},// MagiaTileX8Y20 +'{ idx: '{x: 39, y: 20, port_id: 0}, + start_addr: 32'h28700000, + end_addr: 32'h28800000},// MagiaTileX7Y20 +'{ idx: '{x: 38, y: 20, port_id: 0}, + start_addr: 32'h28600000, + end_addr: 32'h28700000},// MagiaTileX6Y20 +'{ idx: '{x: 37, y: 20, port_id: 0}, + start_addr: 32'h28500000, + end_addr: 32'h28600000},// MagiaTileX5Y20 +'{ idx: '{x: 36, y: 20, port_id: 0}, + start_addr: 32'h28400000, + end_addr: 32'h28500000},// MagiaTileX4Y20 +'{ idx: '{x: 35, y: 20, port_id: 0}, + start_addr: 32'h28300000, + end_addr: 32'h28400000},// MagiaTileX3Y20 +'{ idx: '{x: 34, y: 20, port_id: 0}, + start_addr: 32'h28200000, + end_addr: 32'h28300000},// MagiaTileX2Y20 +'{ idx: '{x: 33, y: 20, port_id: 0}, + start_addr: 32'h28100000, + end_addr: 32'h28200000},// MagiaTileX1Y20 +'{ idx: '{x: 32, y: 20, port_id: 0}, + start_addr: 32'h28000000, + end_addr: 32'h28100000},// MagiaTileX0Y20 +'{ idx: '{x: 63, y: 19, port_id: 0}, + start_addr: 32'h27f00000, + end_addr: 32'h28000000},// MagiaTileX31Y19 +'{ idx: '{x: 62, y: 19, port_id: 0}, + start_addr: 32'h27e00000, + end_addr: 32'h27f00000},// MagiaTileX30Y19 +'{ idx: '{x: 61, y: 19, port_id: 0}, + start_addr: 32'h27d00000, + end_addr: 32'h27e00000},// MagiaTileX29Y19 +'{ idx: '{x: 60, y: 19, port_id: 0}, + start_addr: 32'h27c00000, + end_addr: 32'h27d00000},// MagiaTileX28Y19 +'{ idx: '{x: 59, y: 19, port_id: 0}, + start_addr: 32'h27b00000, + end_addr: 32'h27c00000},// MagiaTileX27Y19 +'{ idx: '{x: 58, y: 19, port_id: 0}, + start_addr: 32'h27a00000, + end_addr: 32'h27b00000},// MagiaTileX26Y19 +'{ idx: '{x: 57, y: 19, port_id: 0}, + start_addr: 32'h27900000, + end_addr: 32'h27a00000},// MagiaTileX25Y19 +'{ idx: '{x: 56, y: 19, port_id: 0}, + start_addr: 32'h27800000, + end_addr: 32'h27900000},// MagiaTileX24Y19 +'{ idx: '{x: 55, y: 19, port_id: 0}, + start_addr: 32'h27700000, + end_addr: 32'h27800000},// MagiaTileX23Y19 +'{ idx: '{x: 54, y: 19, port_id: 0}, + start_addr: 32'h27600000, + end_addr: 32'h27700000},// MagiaTileX22Y19 +'{ idx: '{x: 53, y: 19, port_id: 0}, + start_addr: 32'h27500000, + end_addr: 32'h27600000},// MagiaTileX21Y19 +'{ idx: '{x: 52, y: 19, port_id: 0}, + start_addr: 32'h27400000, + end_addr: 32'h27500000},// MagiaTileX20Y19 +'{ idx: '{x: 51, y: 19, port_id: 0}, + start_addr: 32'h27300000, + end_addr: 32'h27400000},// MagiaTileX19Y19 +'{ idx: '{x: 50, y: 19, port_id: 0}, + start_addr: 32'h27200000, + end_addr: 32'h27300000},// MagiaTileX18Y19 +'{ idx: '{x: 49, y: 19, port_id: 0}, + start_addr: 32'h27100000, + end_addr: 32'h27200000},// MagiaTileX17Y19 +'{ idx: '{x: 48, y: 19, port_id: 0}, + start_addr: 32'h27000000, + end_addr: 32'h27100000},// MagiaTileX16Y19 +'{ idx: '{x: 47, y: 19, port_id: 0}, + start_addr: 32'h26f00000, + end_addr: 32'h27000000},// MagiaTileX15Y19 +'{ idx: '{x: 46, y: 19, port_id: 0}, + start_addr: 32'h26e00000, + end_addr: 32'h26f00000},// MagiaTileX14Y19 +'{ idx: '{x: 45, y: 19, port_id: 0}, + start_addr: 32'h26d00000, + end_addr: 32'h26e00000},// MagiaTileX13Y19 +'{ idx: '{x: 44, y: 19, port_id: 0}, + start_addr: 32'h26c00000, + end_addr: 32'h26d00000},// MagiaTileX12Y19 +'{ idx: '{x: 43, y: 19, port_id: 0}, + start_addr: 32'h26b00000, + end_addr: 32'h26c00000},// MagiaTileX11Y19 +'{ idx: '{x: 42, y: 19, port_id: 0}, + start_addr: 32'h26a00000, + end_addr: 32'h26b00000},// MagiaTileX10Y19 +'{ idx: '{x: 41, y: 19, port_id: 0}, + start_addr: 32'h26900000, + end_addr: 32'h26a00000},// MagiaTileX9Y19 +'{ idx: '{x: 40, y: 19, port_id: 0}, + start_addr: 32'h26800000, + end_addr: 32'h26900000},// MagiaTileX8Y19 +'{ idx: '{x: 39, y: 19, port_id: 0}, + start_addr: 32'h26700000, + end_addr: 32'h26800000},// MagiaTileX7Y19 +'{ idx: '{x: 38, y: 19, port_id: 0}, + start_addr: 32'h26600000, + end_addr: 32'h26700000},// MagiaTileX6Y19 +'{ idx: '{x: 37, y: 19, port_id: 0}, + start_addr: 32'h26500000, + end_addr: 32'h26600000},// MagiaTileX5Y19 +'{ idx: '{x: 36, y: 19, port_id: 0}, + start_addr: 32'h26400000, + end_addr: 32'h26500000},// MagiaTileX4Y19 +'{ idx: '{x: 35, y: 19, port_id: 0}, + start_addr: 32'h26300000, + end_addr: 32'h26400000},// MagiaTileX3Y19 +'{ idx: '{x: 34, y: 19, port_id: 0}, + start_addr: 32'h26200000, + end_addr: 32'h26300000},// MagiaTileX2Y19 +'{ idx: '{x: 33, y: 19, port_id: 0}, + start_addr: 32'h26100000, + end_addr: 32'h26200000},// MagiaTileX1Y19 +'{ idx: '{x: 32, y: 19, port_id: 0}, + start_addr: 32'h26000000, + end_addr: 32'h26100000},// MagiaTileX0Y19 +'{ idx: '{x: 63, y: 18, port_id: 0}, + start_addr: 32'h25f00000, + end_addr: 32'h26000000},// MagiaTileX31Y18 +'{ idx: '{x: 62, y: 18, port_id: 0}, + start_addr: 32'h25e00000, + end_addr: 32'h25f00000},// MagiaTileX30Y18 +'{ idx: '{x: 61, y: 18, port_id: 0}, + start_addr: 32'h25d00000, + end_addr: 32'h25e00000},// MagiaTileX29Y18 +'{ idx: '{x: 60, y: 18, port_id: 0}, + start_addr: 32'h25c00000, + end_addr: 32'h25d00000},// MagiaTileX28Y18 +'{ idx: '{x: 59, y: 18, port_id: 0}, + start_addr: 32'h25b00000, + end_addr: 32'h25c00000},// MagiaTileX27Y18 +'{ idx: '{x: 58, y: 18, port_id: 0}, + start_addr: 32'h25a00000, + end_addr: 32'h25b00000},// MagiaTileX26Y18 +'{ idx: '{x: 57, y: 18, port_id: 0}, + start_addr: 32'h25900000, + end_addr: 32'h25a00000},// MagiaTileX25Y18 +'{ idx: '{x: 56, y: 18, port_id: 0}, + start_addr: 32'h25800000, + end_addr: 32'h25900000},// MagiaTileX24Y18 +'{ idx: '{x: 55, y: 18, port_id: 0}, + start_addr: 32'h25700000, + end_addr: 32'h25800000},// MagiaTileX23Y18 +'{ idx: '{x: 54, y: 18, port_id: 0}, + start_addr: 32'h25600000, + end_addr: 32'h25700000},// MagiaTileX22Y18 +'{ idx: '{x: 53, y: 18, port_id: 0}, + start_addr: 32'h25500000, + end_addr: 32'h25600000},// MagiaTileX21Y18 +'{ idx: '{x: 52, y: 18, port_id: 0}, + start_addr: 32'h25400000, + end_addr: 32'h25500000},// MagiaTileX20Y18 +'{ idx: '{x: 51, y: 18, port_id: 0}, + start_addr: 32'h25300000, + end_addr: 32'h25400000},// MagiaTileX19Y18 +'{ idx: '{x: 50, y: 18, port_id: 0}, + start_addr: 32'h25200000, + end_addr: 32'h25300000},// MagiaTileX18Y18 +'{ idx: '{x: 49, y: 18, port_id: 0}, + start_addr: 32'h25100000, + end_addr: 32'h25200000},// MagiaTileX17Y18 +'{ idx: '{x: 48, y: 18, port_id: 0}, + start_addr: 32'h25000000, + end_addr: 32'h25100000},// MagiaTileX16Y18 +'{ idx: '{x: 47, y: 18, port_id: 0}, + start_addr: 32'h24f00000, + end_addr: 32'h25000000},// MagiaTileX15Y18 +'{ idx: '{x: 46, y: 18, port_id: 0}, + start_addr: 32'h24e00000, + end_addr: 32'h24f00000},// MagiaTileX14Y18 +'{ idx: '{x: 45, y: 18, port_id: 0}, + start_addr: 32'h24d00000, + end_addr: 32'h24e00000},// MagiaTileX13Y18 +'{ idx: '{x: 44, y: 18, port_id: 0}, + start_addr: 32'h24c00000, + end_addr: 32'h24d00000},// MagiaTileX12Y18 +'{ idx: '{x: 43, y: 18, port_id: 0}, + start_addr: 32'h24b00000, + end_addr: 32'h24c00000},// MagiaTileX11Y18 +'{ idx: '{x: 42, y: 18, port_id: 0}, + start_addr: 32'h24a00000, + end_addr: 32'h24b00000},// MagiaTileX10Y18 +'{ idx: '{x: 41, y: 18, port_id: 0}, + start_addr: 32'h24900000, + end_addr: 32'h24a00000},// MagiaTileX9Y18 +'{ idx: '{x: 40, y: 18, port_id: 0}, + start_addr: 32'h24800000, + end_addr: 32'h24900000},// MagiaTileX8Y18 +'{ idx: '{x: 39, y: 18, port_id: 0}, + start_addr: 32'h24700000, + end_addr: 32'h24800000},// MagiaTileX7Y18 +'{ idx: '{x: 38, y: 18, port_id: 0}, + start_addr: 32'h24600000, + end_addr: 32'h24700000},// MagiaTileX6Y18 +'{ idx: '{x: 37, y: 18, port_id: 0}, + start_addr: 32'h24500000, + end_addr: 32'h24600000},// MagiaTileX5Y18 +'{ idx: '{x: 36, y: 18, port_id: 0}, + start_addr: 32'h24400000, + end_addr: 32'h24500000},// MagiaTileX4Y18 +'{ idx: '{x: 35, y: 18, port_id: 0}, + start_addr: 32'h24300000, + end_addr: 32'h24400000},// MagiaTileX3Y18 +'{ idx: '{x: 34, y: 18, port_id: 0}, + start_addr: 32'h24200000, + end_addr: 32'h24300000},// MagiaTileX2Y18 +'{ idx: '{x: 33, y: 18, port_id: 0}, + start_addr: 32'h24100000, + end_addr: 32'h24200000},// MagiaTileX1Y18 +'{ idx: '{x: 32, y: 18, port_id: 0}, + start_addr: 32'h24000000, + end_addr: 32'h24100000},// MagiaTileX0Y18 +'{ idx: '{x: 63, y: 17, port_id: 0}, + start_addr: 32'h23f00000, + end_addr: 32'h24000000},// MagiaTileX31Y17 +'{ idx: '{x: 62, y: 17, port_id: 0}, + start_addr: 32'h23e00000, + end_addr: 32'h23f00000},// MagiaTileX30Y17 +'{ idx: '{x: 61, y: 17, port_id: 0}, + start_addr: 32'h23d00000, + end_addr: 32'h23e00000},// MagiaTileX29Y17 +'{ idx: '{x: 60, y: 17, port_id: 0}, + start_addr: 32'h23c00000, + end_addr: 32'h23d00000},// MagiaTileX28Y17 +'{ idx: '{x: 59, y: 17, port_id: 0}, + start_addr: 32'h23b00000, + end_addr: 32'h23c00000},// MagiaTileX27Y17 +'{ idx: '{x: 58, y: 17, port_id: 0}, + start_addr: 32'h23a00000, + end_addr: 32'h23b00000},// MagiaTileX26Y17 +'{ idx: '{x: 57, y: 17, port_id: 0}, + start_addr: 32'h23900000, + end_addr: 32'h23a00000},// MagiaTileX25Y17 +'{ idx: '{x: 56, y: 17, port_id: 0}, + start_addr: 32'h23800000, + end_addr: 32'h23900000},// MagiaTileX24Y17 +'{ idx: '{x: 55, y: 17, port_id: 0}, + start_addr: 32'h23700000, + end_addr: 32'h23800000},// MagiaTileX23Y17 +'{ idx: '{x: 54, y: 17, port_id: 0}, + start_addr: 32'h23600000, + end_addr: 32'h23700000},// MagiaTileX22Y17 +'{ idx: '{x: 53, y: 17, port_id: 0}, + start_addr: 32'h23500000, + end_addr: 32'h23600000},// MagiaTileX21Y17 +'{ idx: '{x: 52, y: 17, port_id: 0}, + start_addr: 32'h23400000, + end_addr: 32'h23500000},// MagiaTileX20Y17 +'{ idx: '{x: 51, y: 17, port_id: 0}, + start_addr: 32'h23300000, + end_addr: 32'h23400000},// MagiaTileX19Y17 +'{ idx: '{x: 50, y: 17, port_id: 0}, + start_addr: 32'h23200000, + end_addr: 32'h23300000},// MagiaTileX18Y17 +'{ idx: '{x: 49, y: 17, port_id: 0}, + start_addr: 32'h23100000, + end_addr: 32'h23200000},// MagiaTileX17Y17 +'{ idx: '{x: 48, y: 17, port_id: 0}, + start_addr: 32'h23000000, + end_addr: 32'h23100000},// MagiaTileX16Y17 +'{ idx: '{x: 47, y: 17, port_id: 0}, + start_addr: 32'h22f00000, + end_addr: 32'h23000000},// MagiaTileX15Y17 +'{ idx: '{x: 46, y: 17, port_id: 0}, + start_addr: 32'h22e00000, + end_addr: 32'h22f00000},// MagiaTileX14Y17 +'{ idx: '{x: 45, y: 17, port_id: 0}, + start_addr: 32'h22d00000, + end_addr: 32'h22e00000},// MagiaTileX13Y17 +'{ idx: '{x: 44, y: 17, port_id: 0}, + start_addr: 32'h22c00000, + end_addr: 32'h22d00000},// MagiaTileX12Y17 +'{ idx: '{x: 43, y: 17, port_id: 0}, + start_addr: 32'h22b00000, + end_addr: 32'h22c00000},// MagiaTileX11Y17 +'{ idx: '{x: 42, y: 17, port_id: 0}, + start_addr: 32'h22a00000, + end_addr: 32'h22b00000},// MagiaTileX10Y17 +'{ idx: '{x: 41, y: 17, port_id: 0}, + start_addr: 32'h22900000, + end_addr: 32'h22a00000},// MagiaTileX9Y17 +'{ idx: '{x: 40, y: 17, port_id: 0}, + start_addr: 32'h22800000, + end_addr: 32'h22900000},// MagiaTileX8Y17 +'{ idx: '{x: 39, y: 17, port_id: 0}, + start_addr: 32'h22700000, + end_addr: 32'h22800000},// MagiaTileX7Y17 +'{ idx: '{x: 38, y: 17, port_id: 0}, + start_addr: 32'h22600000, + end_addr: 32'h22700000},// MagiaTileX6Y17 +'{ idx: '{x: 37, y: 17, port_id: 0}, + start_addr: 32'h22500000, + end_addr: 32'h22600000},// MagiaTileX5Y17 +'{ idx: '{x: 36, y: 17, port_id: 0}, + start_addr: 32'h22400000, + end_addr: 32'h22500000},// MagiaTileX4Y17 +'{ idx: '{x: 35, y: 17, port_id: 0}, + start_addr: 32'h22300000, + end_addr: 32'h22400000},// MagiaTileX3Y17 +'{ idx: '{x: 34, y: 17, port_id: 0}, + start_addr: 32'h22200000, + end_addr: 32'h22300000},// MagiaTileX2Y17 +'{ idx: '{x: 33, y: 17, port_id: 0}, + start_addr: 32'h22100000, + end_addr: 32'h22200000},// MagiaTileX1Y17 +'{ idx: '{x: 32, y: 17, port_id: 0}, + start_addr: 32'h22000000, + end_addr: 32'h22100000},// MagiaTileX0Y17 +'{ idx: '{x: 63, y: 16, port_id: 0}, + start_addr: 32'h21f00000, + end_addr: 32'h22000000},// MagiaTileX31Y16 +'{ idx: '{x: 62, y: 16, port_id: 0}, + start_addr: 32'h21e00000, + end_addr: 32'h21f00000},// MagiaTileX30Y16 +'{ idx: '{x: 61, y: 16, port_id: 0}, + start_addr: 32'h21d00000, + end_addr: 32'h21e00000},// MagiaTileX29Y16 +'{ idx: '{x: 60, y: 16, port_id: 0}, + start_addr: 32'h21c00000, + end_addr: 32'h21d00000},// MagiaTileX28Y16 +'{ idx: '{x: 59, y: 16, port_id: 0}, + start_addr: 32'h21b00000, + end_addr: 32'h21c00000},// MagiaTileX27Y16 +'{ idx: '{x: 58, y: 16, port_id: 0}, + start_addr: 32'h21a00000, + end_addr: 32'h21b00000},// MagiaTileX26Y16 +'{ idx: '{x: 57, y: 16, port_id: 0}, + start_addr: 32'h21900000, + end_addr: 32'h21a00000},// MagiaTileX25Y16 +'{ idx: '{x: 56, y: 16, port_id: 0}, + start_addr: 32'h21800000, + end_addr: 32'h21900000},// MagiaTileX24Y16 +'{ idx: '{x: 55, y: 16, port_id: 0}, + start_addr: 32'h21700000, + end_addr: 32'h21800000},// MagiaTileX23Y16 +'{ idx: '{x: 54, y: 16, port_id: 0}, + start_addr: 32'h21600000, + end_addr: 32'h21700000},// MagiaTileX22Y16 +'{ idx: '{x: 53, y: 16, port_id: 0}, + start_addr: 32'h21500000, + end_addr: 32'h21600000},// MagiaTileX21Y16 +'{ idx: '{x: 52, y: 16, port_id: 0}, + start_addr: 32'h21400000, + end_addr: 32'h21500000},// MagiaTileX20Y16 +'{ idx: '{x: 51, y: 16, port_id: 0}, + start_addr: 32'h21300000, + end_addr: 32'h21400000},// MagiaTileX19Y16 +'{ idx: '{x: 50, y: 16, port_id: 0}, + start_addr: 32'h21200000, + end_addr: 32'h21300000},// MagiaTileX18Y16 +'{ idx: '{x: 49, y: 16, port_id: 0}, + start_addr: 32'h21100000, + end_addr: 32'h21200000},// MagiaTileX17Y16 +'{ idx: '{x: 48, y: 16, port_id: 0}, + start_addr: 32'h21000000, + end_addr: 32'h21100000},// MagiaTileX16Y16 +'{ idx: '{x: 47, y: 16, port_id: 0}, + start_addr: 32'h20f00000, + end_addr: 32'h21000000},// MagiaTileX15Y16 +'{ idx: '{x: 46, y: 16, port_id: 0}, + start_addr: 32'h20e00000, + end_addr: 32'h20f00000},// MagiaTileX14Y16 +'{ idx: '{x: 45, y: 16, port_id: 0}, + start_addr: 32'h20d00000, + end_addr: 32'h20e00000},// MagiaTileX13Y16 +'{ idx: '{x: 44, y: 16, port_id: 0}, + start_addr: 32'h20c00000, + end_addr: 32'h20d00000},// MagiaTileX12Y16 +'{ idx: '{x: 43, y: 16, port_id: 0}, + start_addr: 32'h20b00000, + end_addr: 32'h20c00000},// MagiaTileX11Y16 +'{ idx: '{x: 42, y: 16, port_id: 0}, + start_addr: 32'h20a00000, + end_addr: 32'h20b00000},// MagiaTileX10Y16 +'{ idx: '{x: 41, y: 16, port_id: 0}, + start_addr: 32'h20900000, + end_addr: 32'h20a00000},// MagiaTileX9Y16 +'{ idx: '{x: 40, y: 16, port_id: 0}, + start_addr: 32'h20800000, + end_addr: 32'h20900000},// MagiaTileX8Y16 +'{ idx: '{x: 39, y: 16, port_id: 0}, + start_addr: 32'h20700000, + end_addr: 32'h20800000},// MagiaTileX7Y16 +'{ idx: '{x: 38, y: 16, port_id: 0}, + start_addr: 32'h20600000, + end_addr: 32'h20700000},// MagiaTileX6Y16 +'{ idx: '{x: 37, y: 16, port_id: 0}, + start_addr: 32'h20500000, + end_addr: 32'h20600000},// MagiaTileX5Y16 +'{ idx: '{x: 36, y: 16, port_id: 0}, + start_addr: 32'h20400000, + end_addr: 32'h20500000},// MagiaTileX4Y16 +'{ idx: '{x: 35, y: 16, port_id: 0}, + start_addr: 32'h20300000, + end_addr: 32'h20400000},// MagiaTileX3Y16 +'{ idx: '{x: 34, y: 16, port_id: 0}, + start_addr: 32'h20200000, + end_addr: 32'h20300000},// MagiaTileX2Y16 +'{ idx: '{x: 33, y: 16, port_id: 0}, + start_addr: 32'h20100000, + end_addr: 32'h20200000},// MagiaTileX1Y16 +'{ idx: '{x: 32, y: 16, port_id: 0}, + start_addr: 32'h20000000, + end_addr: 32'h20100000},// MagiaTileX0Y16 +'{ idx: '{x: 63, y: 15, port_id: 0}, + start_addr: 32'h1ff00000, + end_addr: 32'h20000000},// MagiaTileX31Y15 +'{ idx: '{x: 62, y: 15, port_id: 0}, + start_addr: 32'h1fe00000, + end_addr: 32'h1ff00000},// MagiaTileX30Y15 +'{ idx: '{x: 61, y: 15, port_id: 0}, + start_addr: 32'h1fd00000, + end_addr: 32'h1fe00000},// MagiaTileX29Y15 +'{ idx: '{x: 60, y: 15, port_id: 0}, + start_addr: 32'h1fc00000, + end_addr: 32'h1fd00000},// MagiaTileX28Y15 +'{ idx: '{x: 59, y: 15, port_id: 0}, + start_addr: 32'h1fb00000, + end_addr: 32'h1fc00000},// MagiaTileX27Y15 +'{ idx: '{x: 58, y: 15, port_id: 0}, + start_addr: 32'h1fa00000, + end_addr: 32'h1fb00000},// MagiaTileX26Y15 +'{ idx: '{x: 57, y: 15, port_id: 0}, + start_addr: 32'h1f900000, + end_addr: 32'h1fa00000},// MagiaTileX25Y15 +'{ idx: '{x: 56, y: 15, port_id: 0}, + start_addr: 32'h1f800000, + end_addr: 32'h1f900000},// MagiaTileX24Y15 +'{ idx: '{x: 55, y: 15, port_id: 0}, + start_addr: 32'h1f700000, + end_addr: 32'h1f800000},// MagiaTileX23Y15 +'{ idx: '{x: 54, y: 15, port_id: 0}, + start_addr: 32'h1f600000, + end_addr: 32'h1f700000},// MagiaTileX22Y15 +'{ idx: '{x: 53, y: 15, port_id: 0}, + start_addr: 32'h1f500000, + end_addr: 32'h1f600000},// MagiaTileX21Y15 +'{ idx: '{x: 52, y: 15, port_id: 0}, + start_addr: 32'h1f400000, + end_addr: 32'h1f500000},// MagiaTileX20Y15 +'{ idx: '{x: 51, y: 15, port_id: 0}, + start_addr: 32'h1f300000, + end_addr: 32'h1f400000},// MagiaTileX19Y15 +'{ idx: '{x: 50, y: 15, port_id: 0}, + start_addr: 32'h1f200000, + end_addr: 32'h1f300000},// MagiaTileX18Y15 +'{ idx: '{x: 49, y: 15, port_id: 0}, + start_addr: 32'h1f100000, + end_addr: 32'h1f200000},// MagiaTileX17Y15 +'{ idx: '{x: 48, y: 15, port_id: 0}, + start_addr: 32'h1f000000, + end_addr: 32'h1f100000},// MagiaTileX16Y15 +'{ idx: '{x: 47, y: 15, port_id: 0}, + start_addr: 32'h1ef00000, + end_addr: 32'h1f000000},// MagiaTileX15Y15 +'{ idx: '{x: 46, y: 15, port_id: 0}, + start_addr: 32'h1ee00000, + end_addr: 32'h1ef00000},// MagiaTileX14Y15 +'{ idx: '{x: 45, y: 15, port_id: 0}, + start_addr: 32'h1ed00000, + end_addr: 32'h1ee00000},// MagiaTileX13Y15 +'{ idx: '{x: 44, y: 15, port_id: 0}, + start_addr: 32'h1ec00000, + end_addr: 32'h1ed00000},// MagiaTileX12Y15 +'{ idx: '{x: 43, y: 15, port_id: 0}, + start_addr: 32'h1eb00000, + end_addr: 32'h1ec00000},// MagiaTileX11Y15 +'{ idx: '{x: 42, y: 15, port_id: 0}, + start_addr: 32'h1ea00000, + end_addr: 32'h1eb00000},// MagiaTileX10Y15 +'{ idx: '{x: 41, y: 15, port_id: 0}, + start_addr: 32'h1e900000, + end_addr: 32'h1ea00000},// MagiaTileX9Y15 +'{ idx: '{x: 40, y: 15, port_id: 0}, + start_addr: 32'h1e800000, + end_addr: 32'h1e900000},// MagiaTileX8Y15 +'{ idx: '{x: 39, y: 15, port_id: 0}, + start_addr: 32'h1e700000, + end_addr: 32'h1e800000},// MagiaTileX7Y15 +'{ idx: '{x: 38, y: 15, port_id: 0}, + start_addr: 32'h1e600000, + end_addr: 32'h1e700000},// MagiaTileX6Y15 +'{ idx: '{x: 37, y: 15, port_id: 0}, + start_addr: 32'h1e500000, + end_addr: 32'h1e600000},// MagiaTileX5Y15 +'{ idx: '{x: 36, y: 15, port_id: 0}, + start_addr: 32'h1e400000, + end_addr: 32'h1e500000},// MagiaTileX4Y15 +'{ idx: '{x: 35, y: 15, port_id: 0}, + start_addr: 32'h1e300000, + end_addr: 32'h1e400000},// MagiaTileX3Y15 +'{ idx: '{x: 34, y: 15, port_id: 0}, + start_addr: 32'h1e200000, + end_addr: 32'h1e300000},// MagiaTileX2Y15 +'{ idx: '{x: 33, y: 15, port_id: 0}, + start_addr: 32'h1e100000, + end_addr: 32'h1e200000},// MagiaTileX1Y15 +'{ idx: '{x: 32, y: 15, port_id: 0}, + start_addr: 32'h1e000000, + end_addr: 32'h1e100000},// MagiaTileX0Y15 +'{ idx: '{x: 63, y: 14, port_id: 0}, + start_addr: 32'h1df00000, + end_addr: 32'h1e000000},// MagiaTileX31Y14 +'{ idx: '{x: 62, y: 14, port_id: 0}, + start_addr: 32'h1de00000, + end_addr: 32'h1df00000},// MagiaTileX30Y14 +'{ idx: '{x: 61, y: 14, port_id: 0}, + start_addr: 32'h1dd00000, + end_addr: 32'h1de00000},// MagiaTileX29Y14 +'{ idx: '{x: 60, y: 14, port_id: 0}, + start_addr: 32'h1dc00000, + end_addr: 32'h1dd00000},// MagiaTileX28Y14 +'{ idx: '{x: 59, y: 14, port_id: 0}, + start_addr: 32'h1db00000, + end_addr: 32'h1dc00000},// MagiaTileX27Y14 +'{ idx: '{x: 58, y: 14, port_id: 0}, + start_addr: 32'h1da00000, + end_addr: 32'h1db00000},// MagiaTileX26Y14 +'{ idx: '{x: 57, y: 14, port_id: 0}, + start_addr: 32'h1d900000, + end_addr: 32'h1da00000},// MagiaTileX25Y14 +'{ idx: '{x: 56, y: 14, port_id: 0}, + start_addr: 32'h1d800000, + end_addr: 32'h1d900000},// MagiaTileX24Y14 +'{ idx: '{x: 55, y: 14, port_id: 0}, + start_addr: 32'h1d700000, + end_addr: 32'h1d800000},// MagiaTileX23Y14 +'{ idx: '{x: 54, y: 14, port_id: 0}, + start_addr: 32'h1d600000, + end_addr: 32'h1d700000},// MagiaTileX22Y14 +'{ idx: '{x: 53, y: 14, port_id: 0}, + start_addr: 32'h1d500000, + end_addr: 32'h1d600000},// MagiaTileX21Y14 +'{ idx: '{x: 52, y: 14, port_id: 0}, + start_addr: 32'h1d400000, + end_addr: 32'h1d500000},// MagiaTileX20Y14 +'{ idx: '{x: 51, y: 14, port_id: 0}, + start_addr: 32'h1d300000, + end_addr: 32'h1d400000},// MagiaTileX19Y14 +'{ idx: '{x: 50, y: 14, port_id: 0}, + start_addr: 32'h1d200000, + end_addr: 32'h1d300000},// MagiaTileX18Y14 +'{ idx: '{x: 49, y: 14, port_id: 0}, + start_addr: 32'h1d100000, + end_addr: 32'h1d200000},// MagiaTileX17Y14 +'{ idx: '{x: 48, y: 14, port_id: 0}, + start_addr: 32'h1d000000, + end_addr: 32'h1d100000},// MagiaTileX16Y14 +'{ idx: '{x: 47, y: 14, port_id: 0}, + start_addr: 32'h1cf00000, + end_addr: 32'h1d000000},// MagiaTileX15Y14 +'{ idx: '{x: 46, y: 14, port_id: 0}, + start_addr: 32'h1ce00000, + end_addr: 32'h1cf00000},// MagiaTileX14Y14 +'{ idx: '{x: 45, y: 14, port_id: 0}, + start_addr: 32'h1cd00000, + end_addr: 32'h1ce00000},// MagiaTileX13Y14 +'{ idx: '{x: 44, y: 14, port_id: 0}, + start_addr: 32'h1cc00000, + end_addr: 32'h1cd00000},// MagiaTileX12Y14 +'{ idx: '{x: 43, y: 14, port_id: 0}, + start_addr: 32'h1cb00000, + end_addr: 32'h1cc00000},// MagiaTileX11Y14 +'{ idx: '{x: 42, y: 14, port_id: 0}, + start_addr: 32'h1ca00000, + end_addr: 32'h1cb00000},// MagiaTileX10Y14 +'{ idx: '{x: 41, y: 14, port_id: 0}, + start_addr: 32'h1c900000, + end_addr: 32'h1ca00000},// MagiaTileX9Y14 +'{ idx: '{x: 40, y: 14, port_id: 0}, + start_addr: 32'h1c800000, + end_addr: 32'h1c900000},// MagiaTileX8Y14 +'{ idx: '{x: 39, y: 14, port_id: 0}, + start_addr: 32'h1c700000, + end_addr: 32'h1c800000},// MagiaTileX7Y14 +'{ idx: '{x: 38, y: 14, port_id: 0}, + start_addr: 32'h1c600000, + end_addr: 32'h1c700000},// MagiaTileX6Y14 +'{ idx: '{x: 37, y: 14, port_id: 0}, + start_addr: 32'h1c500000, + end_addr: 32'h1c600000},// MagiaTileX5Y14 +'{ idx: '{x: 36, y: 14, port_id: 0}, + start_addr: 32'h1c400000, + end_addr: 32'h1c500000},// MagiaTileX4Y14 +'{ idx: '{x: 35, y: 14, port_id: 0}, + start_addr: 32'h1c300000, + end_addr: 32'h1c400000},// MagiaTileX3Y14 +'{ idx: '{x: 34, y: 14, port_id: 0}, + start_addr: 32'h1c200000, + end_addr: 32'h1c300000},// MagiaTileX2Y14 +'{ idx: '{x: 33, y: 14, port_id: 0}, + start_addr: 32'h1c100000, + end_addr: 32'h1c200000},// MagiaTileX1Y14 +'{ idx: '{x: 32, y: 14, port_id: 0}, + start_addr: 32'h1c000000, + end_addr: 32'h1c100000},// MagiaTileX0Y14 +'{ idx: '{x: 63, y: 13, port_id: 0}, + start_addr: 32'h1bf00000, + end_addr: 32'h1c000000},// MagiaTileX31Y13 +'{ idx: '{x: 62, y: 13, port_id: 0}, + start_addr: 32'h1be00000, + end_addr: 32'h1bf00000},// MagiaTileX30Y13 +'{ idx: '{x: 61, y: 13, port_id: 0}, + start_addr: 32'h1bd00000, + end_addr: 32'h1be00000},// MagiaTileX29Y13 +'{ idx: '{x: 60, y: 13, port_id: 0}, + start_addr: 32'h1bc00000, + end_addr: 32'h1bd00000},// MagiaTileX28Y13 +'{ idx: '{x: 59, y: 13, port_id: 0}, + start_addr: 32'h1bb00000, + end_addr: 32'h1bc00000},// MagiaTileX27Y13 +'{ idx: '{x: 58, y: 13, port_id: 0}, + start_addr: 32'h1ba00000, + end_addr: 32'h1bb00000},// MagiaTileX26Y13 +'{ idx: '{x: 57, y: 13, port_id: 0}, + start_addr: 32'h1b900000, + end_addr: 32'h1ba00000},// MagiaTileX25Y13 +'{ idx: '{x: 56, y: 13, port_id: 0}, + start_addr: 32'h1b800000, + end_addr: 32'h1b900000},// MagiaTileX24Y13 +'{ idx: '{x: 55, y: 13, port_id: 0}, + start_addr: 32'h1b700000, + end_addr: 32'h1b800000},// MagiaTileX23Y13 +'{ idx: '{x: 54, y: 13, port_id: 0}, + start_addr: 32'h1b600000, + end_addr: 32'h1b700000},// MagiaTileX22Y13 +'{ idx: '{x: 53, y: 13, port_id: 0}, + start_addr: 32'h1b500000, + end_addr: 32'h1b600000},// MagiaTileX21Y13 +'{ idx: '{x: 52, y: 13, port_id: 0}, + start_addr: 32'h1b400000, + end_addr: 32'h1b500000},// MagiaTileX20Y13 +'{ idx: '{x: 51, y: 13, port_id: 0}, + start_addr: 32'h1b300000, + end_addr: 32'h1b400000},// MagiaTileX19Y13 +'{ idx: '{x: 50, y: 13, port_id: 0}, + start_addr: 32'h1b200000, + end_addr: 32'h1b300000},// MagiaTileX18Y13 +'{ idx: '{x: 49, y: 13, port_id: 0}, + start_addr: 32'h1b100000, + end_addr: 32'h1b200000},// MagiaTileX17Y13 +'{ idx: '{x: 48, y: 13, port_id: 0}, + start_addr: 32'h1b000000, + end_addr: 32'h1b100000},// MagiaTileX16Y13 +'{ idx: '{x: 47, y: 13, port_id: 0}, + start_addr: 32'h1af00000, + end_addr: 32'h1b000000},// MagiaTileX15Y13 +'{ idx: '{x: 46, y: 13, port_id: 0}, + start_addr: 32'h1ae00000, + end_addr: 32'h1af00000},// MagiaTileX14Y13 +'{ idx: '{x: 45, y: 13, port_id: 0}, + start_addr: 32'h1ad00000, + end_addr: 32'h1ae00000},// MagiaTileX13Y13 +'{ idx: '{x: 44, y: 13, port_id: 0}, + start_addr: 32'h1ac00000, + end_addr: 32'h1ad00000},// MagiaTileX12Y13 +'{ idx: '{x: 43, y: 13, port_id: 0}, + start_addr: 32'h1ab00000, + end_addr: 32'h1ac00000},// MagiaTileX11Y13 +'{ idx: '{x: 42, y: 13, port_id: 0}, + start_addr: 32'h1aa00000, + end_addr: 32'h1ab00000},// MagiaTileX10Y13 +'{ idx: '{x: 41, y: 13, port_id: 0}, + start_addr: 32'h1a900000, + end_addr: 32'h1aa00000},// MagiaTileX9Y13 +'{ idx: '{x: 40, y: 13, port_id: 0}, + start_addr: 32'h1a800000, + end_addr: 32'h1a900000},// MagiaTileX8Y13 +'{ idx: '{x: 39, y: 13, port_id: 0}, + start_addr: 32'h1a700000, + end_addr: 32'h1a800000},// MagiaTileX7Y13 +'{ idx: '{x: 38, y: 13, port_id: 0}, + start_addr: 32'h1a600000, + end_addr: 32'h1a700000},// MagiaTileX6Y13 +'{ idx: '{x: 37, y: 13, port_id: 0}, + start_addr: 32'h1a500000, + end_addr: 32'h1a600000},// MagiaTileX5Y13 +'{ idx: '{x: 36, y: 13, port_id: 0}, + start_addr: 32'h1a400000, + end_addr: 32'h1a500000},// MagiaTileX4Y13 +'{ idx: '{x: 35, y: 13, port_id: 0}, + start_addr: 32'h1a300000, + end_addr: 32'h1a400000},// MagiaTileX3Y13 +'{ idx: '{x: 34, y: 13, port_id: 0}, + start_addr: 32'h1a200000, + end_addr: 32'h1a300000},// MagiaTileX2Y13 +'{ idx: '{x: 33, y: 13, port_id: 0}, + start_addr: 32'h1a100000, + end_addr: 32'h1a200000},// MagiaTileX1Y13 +'{ idx: '{x: 32, y: 13, port_id: 0}, + start_addr: 32'h1a000000, + end_addr: 32'h1a100000},// MagiaTileX0Y13 +'{ idx: '{x: 63, y: 12, port_id: 0}, + start_addr: 32'h19f00000, + end_addr: 32'h1a000000},// MagiaTileX31Y12 +'{ idx: '{x: 62, y: 12, port_id: 0}, + start_addr: 32'h19e00000, + end_addr: 32'h19f00000},// MagiaTileX30Y12 +'{ idx: '{x: 61, y: 12, port_id: 0}, + start_addr: 32'h19d00000, + end_addr: 32'h19e00000},// MagiaTileX29Y12 +'{ idx: '{x: 60, y: 12, port_id: 0}, + start_addr: 32'h19c00000, + end_addr: 32'h19d00000},// MagiaTileX28Y12 +'{ idx: '{x: 59, y: 12, port_id: 0}, + start_addr: 32'h19b00000, + end_addr: 32'h19c00000},// MagiaTileX27Y12 +'{ idx: '{x: 58, y: 12, port_id: 0}, + start_addr: 32'h19a00000, + end_addr: 32'h19b00000},// MagiaTileX26Y12 +'{ idx: '{x: 57, y: 12, port_id: 0}, + start_addr: 32'h19900000, + end_addr: 32'h19a00000},// MagiaTileX25Y12 +'{ idx: '{x: 56, y: 12, port_id: 0}, + start_addr: 32'h19800000, + end_addr: 32'h19900000},// MagiaTileX24Y12 +'{ idx: '{x: 55, y: 12, port_id: 0}, + start_addr: 32'h19700000, + end_addr: 32'h19800000},// MagiaTileX23Y12 +'{ idx: '{x: 54, y: 12, port_id: 0}, + start_addr: 32'h19600000, + end_addr: 32'h19700000},// MagiaTileX22Y12 +'{ idx: '{x: 53, y: 12, port_id: 0}, + start_addr: 32'h19500000, + end_addr: 32'h19600000},// MagiaTileX21Y12 +'{ idx: '{x: 52, y: 12, port_id: 0}, + start_addr: 32'h19400000, + end_addr: 32'h19500000},// MagiaTileX20Y12 +'{ idx: '{x: 51, y: 12, port_id: 0}, + start_addr: 32'h19300000, + end_addr: 32'h19400000},// MagiaTileX19Y12 +'{ idx: '{x: 50, y: 12, port_id: 0}, + start_addr: 32'h19200000, + end_addr: 32'h19300000},// MagiaTileX18Y12 +'{ idx: '{x: 49, y: 12, port_id: 0}, + start_addr: 32'h19100000, + end_addr: 32'h19200000},// MagiaTileX17Y12 +'{ idx: '{x: 48, y: 12, port_id: 0}, + start_addr: 32'h19000000, + end_addr: 32'h19100000},// MagiaTileX16Y12 +'{ idx: '{x: 47, y: 12, port_id: 0}, + start_addr: 32'h18f00000, + end_addr: 32'h19000000},// MagiaTileX15Y12 +'{ idx: '{x: 46, y: 12, port_id: 0}, + start_addr: 32'h18e00000, + end_addr: 32'h18f00000},// MagiaTileX14Y12 +'{ idx: '{x: 45, y: 12, port_id: 0}, + start_addr: 32'h18d00000, + end_addr: 32'h18e00000},// MagiaTileX13Y12 +'{ idx: '{x: 44, y: 12, port_id: 0}, + start_addr: 32'h18c00000, + end_addr: 32'h18d00000},// MagiaTileX12Y12 +'{ idx: '{x: 43, y: 12, port_id: 0}, + start_addr: 32'h18b00000, + end_addr: 32'h18c00000},// MagiaTileX11Y12 +'{ idx: '{x: 42, y: 12, port_id: 0}, + start_addr: 32'h18a00000, + end_addr: 32'h18b00000},// MagiaTileX10Y12 +'{ idx: '{x: 41, y: 12, port_id: 0}, + start_addr: 32'h18900000, + end_addr: 32'h18a00000},// MagiaTileX9Y12 +'{ idx: '{x: 40, y: 12, port_id: 0}, + start_addr: 32'h18800000, + end_addr: 32'h18900000},// MagiaTileX8Y12 +'{ idx: '{x: 39, y: 12, port_id: 0}, + start_addr: 32'h18700000, + end_addr: 32'h18800000},// MagiaTileX7Y12 +'{ idx: '{x: 38, y: 12, port_id: 0}, + start_addr: 32'h18600000, + end_addr: 32'h18700000},// MagiaTileX6Y12 +'{ idx: '{x: 37, y: 12, port_id: 0}, + start_addr: 32'h18500000, + end_addr: 32'h18600000},// MagiaTileX5Y12 +'{ idx: '{x: 36, y: 12, port_id: 0}, + start_addr: 32'h18400000, + end_addr: 32'h18500000},// MagiaTileX4Y12 +'{ idx: '{x: 35, y: 12, port_id: 0}, + start_addr: 32'h18300000, + end_addr: 32'h18400000},// MagiaTileX3Y12 +'{ idx: '{x: 34, y: 12, port_id: 0}, + start_addr: 32'h18200000, + end_addr: 32'h18300000},// MagiaTileX2Y12 +'{ idx: '{x: 33, y: 12, port_id: 0}, + start_addr: 32'h18100000, + end_addr: 32'h18200000},// MagiaTileX1Y12 +'{ idx: '{x: 32, y: 12, port_id: 0}, + start_addr: 32'h18000000, + end_addr: 32'h18100000},// MagiaTileX0Y12 +'{ idx: '{x: 63, y: 11, port_id: 0}, + start_addr: 32'h17f00000, + end_addr: 32'h18000000},// MagiaTileX31Y11 +'{ idx: '{x: 62, y: 11, port_id: 0}, + start_addr: 32'h17e00000, + end_addr: 32'h17f00000},// MagiaTileX30Y11 +'{ idx: '{x: 61, y: 11, port_id: 0}, + start_addr: 32'h17d00000, + end_addr: 32'h17e00000},// MagiaTileX29Y11 +'{ idx: '{x: 60, y: 11, port_id: 0}, + start_addr: 32'h17c00000, + end_addr: 32'h17d00000},// MagiaTileX28Y11 +'{ idx: '{x: 59, y: 11, port_id: 0}, + start_addr: 32'h17b00000, + end_addr: 32'h17c00000},// MagiaTileX27Y11 +'{ idx: '{x: 58, y: 11, port_id: 0}, + start_addr: 32'h17a00000, + end_addr: 32'h17b00000},// MagiaTileX26Y11 +'{ idx: '{x: 57, y: 11, port_id: 0}, + start_addr: 32'h17900000, + end_addr: 32'h17a00000},// MagiaTileX25Y11 +'{ idx: '{x: 56, y: 11, port_id: 0}, + start_addr: 32'h17800000, + end_addr: 32'h17900000},// MagiaTileX24Y11 +'{ idx: '{x: 55, y: 11, port_id: 0}, + start_addr: 32'h17700000, + end_addr: 32'h17800000},// MagiaTileX23Y11 +'{ idx: '{x: 54, y: 11, port_id: 0}, + start_addr: 32'h17600000, + end_addr: 32'h17700000},// MagiaTileX22Y11 +'{ idx: '{x: 53, y: 11, port_id: 0}, + start_addr: 32'h17500000, + end_addr: 32'h17600000},// MagiaTileX21Y11 +'{ idx: '{x: 52, y: 11, port_id: 0}, + start_addr: 32'h17400000, + end_addr: 32'h17500000},// MagiaTileX20Y11 +'{ idx: '{x: 51, y: 11, port_id: 0}, + start_addr: 32'h17300000, + end_addr: 32'h17400000},// MagiaTileX19Y11 +'{ idx: '{x: 50, y: 11, port_id: 0}, + start_addr: 32'h17200000, + end_addr: 32'h17300000},// MagiaTileX18Y11 +'{ idx: '{x: 49, y: 11, port_id: 0}, + start_addr: 32'h17100000, + end_addr: 32'h17200000},// MagiaTileX17Y11 +'{ idx: '{x: 48, y: 11, port_id: 0}, + start_addr: 32'h17000000, + end_addr: 32'h17100000},// MagiaTileX16Y11 +'{ idx: '{x: 47, y: 11, port_id: 0}, + start_addr: 32'h16f00000, + end_addr: 32'h17000000},// MagiaTileX15Y11 +'{ idx: '{x: 46, y: 11, port_id: 0}, + start_addr: 32'h16e00000, + end_addr: 32'h16f00000},// MagiaTileX14Y11 +'{ idx: '{x: 45, y: 11, port_id: 0}, + start_addr: 32'h16d00000, + end_addr: 32'h16e00000},// MagiaTileX13Y11 +'{ idx: '{x: 44, y: 11, port_id: 0}, + start_addr: 32'h16c00000, + end_addr: 32'h16d00000},// MagiaTileX12Y11 +'{ idx: '{x: 43, y: 11, port_id: 0}, + start_addr: 32'h16b00000, + end_addr: 32'h16c00000},// MagiaTileX11Y11 +'{ idx: '{x: 42, y: 11, port_id: 0}, + start_addr: 32'h16a00000, + end_addr: 32'h16b00000},// MagiaTileX10Y11 +'{ idx: '{x: 41, y: 11, port_id: 0}, + start_addr: 32'h16900000, + end_addr: 32'h16a00000},// MagiaTileX9Y11 +'{ idx: '{x: 40, y: 11, port_id: 0}, + start_addr: 32'h16800000, + end_addr: 32'h16900000},// MagiaTileX8Y11 +'{ idx: '{x: 39, y: 11, port_id: 0}, + start_addr: 32'h16700000, + end_addr: 32'h16800000},// MagiaTileX7Y11 +'{ idx: '{x: 38, y: 11, port_id: 0}, + start_addr: 32'h16600000, + end_addr: 32'h16700000},// MagiaTileX6Y11 +'{ idx: '{x: 37, y: 11, port_id: 0}, + start_addr: 32'h16500000, + end_addr: 32'h16600000},// MagiaTileX5Y11 +'{ idx: '{x: 36, y: 11, port_id: 0}, + start_addr: 32'h16400000, + end_addr: 32'h16500000},// MagiaTileX4Y11 +'{ idx: '{x: 35, y: 11, port_id: 0}, + start_addr: 32'h16300000, + end_addr: 32'h16400000},// MagiaTileX3Y11 +'{ idx: '{x: 34, y: 11, port_id: 0}, + start_addr: 32'h16200000, + end_addr: 32'h16300000},// MagiaTileX2Y11 +'{ idx: '{x: 33, y: 11, port_id: 0}, + start_addr: 32'h16100000, + end_addr: 32'h16200000},// MagiaTileX1Y11 +'{ idx: '{x: 32, y: 11, port_id: 0}, + start_addr: 32'h16000000, + end_addr: 32'h16100000},// MagiaTileX0Y11 +'{ idx: '{x: 63, y: 10, port_id: 0}, + start_addr: 32'h15f00000, + end_addr: 32'h16000000},// MagiaTileX31Y10 +'{ idx: '{x: 62, y: 10, port_id: 0}, + start_addr: 32'h15e00000, + end_addr: 32'h15f00000},// MagiaTileX30Y10 +'{ idx: '{x: 61, y: 10, port_id: 0}, + start_addr: 32'h15d00000, + end_addr: 32'h15e00000},// MagiaTileX29Y10 +'{ idx: '{x: 60, y: 10, port_id: 0}, + start_addr: 32'h15c00000, + end_addr: 32'h15d00000},// MagiaTileX28Y10 +'{ idx: '{x: 59, y: 10, port_id: 0}, + start_addr: 32'h15b00000, + end_addr: 32'h15c00000},// MagiaTileX27Y10 +'{ idx: '{x: 58, y: 10, port_id: 0}, + start_addr: 32'h15a00000, + end_addr: 32'h15b00000},// MagiaTileX26Y10 +'{ idx: '{x: 57, y: 10, port_id: 0}, + start_addr: 32'h15900000, + end_addr: 32'h15a00000},// MagiaTileX25Y10 +'{ idx: '{x: 56, y: 10, port_id: 0}, + start_addr: 32'h15800000, + end_addr: 32'h15900000},// MagiaTileX24Y10 +'{ idx: '{x: 55, y: 10, port_id: 0}, + start_addr: 32'h15700000, + end_addr: 32'h15800000},// MagiaTileX23Y10 +'{ idx: '{x: 54, y: 10, port_id: 0}, + start_addr: 32'h15600000, + end_addr: 32'h15700000},// MagiaTileX22Y10 +'{ idx: '{x: 53, y: 10, port_id: 0}, + start_addr: 32'h15500000, + end_addr: 32'h15600000},// MagiaTileX21Y10 +'{ idx: '{x: 52, y: 10, port_id: 0}, + start_addr: 32'h15400000, + end_addr: 32'h15500000},// MagiaTileX20Y10 +'{ idx: '{x: 51, y: 10, port_id: 0}, + start_addr: 32'h15300000, + end_addr: 32'h15400000},// MagiaTileX19Y10 +'{ idx: '{x: 50, y: 10, port_id: 0}, + start_addr: 32'h15200000, + end_addr: 32'h15300000},// MagiaTileX18Y10 +'{ idx: '{x: 49, y: 10, port_id: 0}, + start_addr: 32'h15100000, + end_addr: 32'h15200000},// MagiaTileX17Y10 +'{ idx: '{x: 48, y: 10, port_id: 0}, + start_addr: 32'h15000000, + end_addr: 32'h15100000},// MagiaTileX16Y10 +'{ idx: '{x: 47, y: 10, port_id: 0}, + start_addr: 32'h14f00000, + end_addr: 32'h15000000},// MagiaTileX15Y10 +'{ idx: '{x: 46, y: 10, port_id: 0}, + start_addr: 32'h14e00000, + end_addr: 32'h14f00000},// MagiaTileX14Y10 +'{ idx: '{x: 45, y: 10, port_id: 0}, + start_addr: 32'h14d00000, + end_addr: 32'h14e00000},// MagiaTileX13Y10 +'{ idx: '{x: 44, y: 10, port_id: 0}, + start_addr: 32'h14c00000, + end_addr: 32'h14d00000},// MagiaTileX12Y10 +'{ idx: '{x: 43, y: 10, port_id: 0}, + start_addr: 32'h14b00000, + end_addr: 32'h14c00000},// MagiaTileX11Y10 +'{ idx: '{x: 42, y: 10, port_id: 0}, + start_addr: 32'h14a00000, + end_addr: 32'h14b00000},// MagiaTileX10Y10 +'{ idx: '{x: 41, y: 10, port_id: 0}, + start_addr: 32'h14900000, + end_addr: 32'h14a00000},// MagiaTileX9Y10 +'{ idx: '{x: 40, y: 10, port_id: 0}, + start_addr: 32'h14800000, + end_addr: 32'h14900000},// MagiaTileX8Y10 +'{ idx: '{x: 39, y: 10, port_id: 0}, + start_addr: 32'h14700000, + end_addr: 32'h14800000},// MagiaTileX7Y10 +'{ idx: '{x: 38, y: 10, port_id: 0}, + start_addr: 32'h14600000, + end_addr: 32'h14700000},// MagiaTileX6Y10 +'{ idx: '{x: 37, y: 10, port_id: 0}, + start_addr: 32'h14500000, + end_addr: 32'h14600000},// MagiaTileX5Y10 +'{ idx: '{x: 36, y: 10, port_id: 0}, + start_addr: 32'h14400000, + end_addr: 32'h14500000},// MagiaTileX4Y10 +'{ idx: '{x: 35, y: 10, port_id: 0}, + start_addr: 32'h14300000, + end_addr: 32'h14400000},// MagiaTileX3Y10 +'{ idx: '{x: 34, y: 10, port_id: 0}, + start_addr: 32'h14200000, + end_addr: 32'h14300000},// MagiaTileX2Y10 +'{ idx: '{x: 33, y: 10, port_id: 0}, + start_addr: 32'h14100000, + end_addr: 32'h14200000},// MagiaTileX1Y10 +'{ idx: '{x: 32, y: 10, port_id: 0}, + start_addr: 32'h14000000, + end_addr: 32'h14100000},// MagiaTileX0Y10 +'{ idx: '{x: 63, y: 9, port_id: 0}, + start_addr: 32'h13f00000, + end_addr: 32'h14000000},// MagiaTileX31Y9 +'{ idx: '{x: 62, y: 9, port_id: 0}, + start_addr: 32'h13e00000, + end_addr: 32'h13f00000},// MagiaTileX30Y9 +'{ idx: '{x: 61, y: 9, port_id: 0}, + start_addr: 32'h13d00000, + end_addr: 32'h13e00000},// MagiaTileX29Y9 +'{ idx: '{x: 60, y: 9, port_id: 0}, + start_addr: 32'h13c00000, + end_addr: 32'h13d00000},// MagiaTileX28Y9 +'{ idx: '{x: 59, y: 9, port_id: 0}, + start_addr: 32'h13b00000, + end_addr: 32'h13c00000},// MagiaTileX27Y9 +'{ idx: '{x: 58, y: 9, port_id: 0}, + start_addr: 32'h13a00000, + end_addr: 32'h13b00000},// MagiaTileX26Y9 +'{ idx: '{x: 57, y: 9, port_id: 0}, + start_addr: 32'h13900000, + end_addr: 32'h13a00000},// MagiaTileX25Y9 +'{ idx: '{x: 56, y: 9, port_id: 0}, + start_addr: 32'h13800000, + end_addr: 32'h13900000},// MagiaTileX24Y9 +'{ idx: '{x: 55, y: 9, port_id: 0}, + start_addr: 32'h13700000, + end_addr: 32'h13800000},// MagiaTileX23Y9 +'{ idx: '{x: 54, y: 9, port_id: 0}, + start_addr: 32'h13600000, + end_addr: 32'h13700000},// MagiaTileX22Y9 +'{ idx: '{x: 53, y: 9, port_id: 0}, + start_addr: 32'h13500000, + end_addr: 32'h13600000},// MagiaTileX21Y9 +'{ idx: '{x: 52, y: 9, port_id: 0}, + start_addr: 32'h13400000, + end_addr: 32'h13500000},// MagiaTileX20Y9 +'{ idx: '{x: 51, y: 9, port_id: 0}, + start_addr: 32'h13300000, + end_addr: 32'h13400000},// MagiaTileX19Y9 +'{ idx: '{x: 50, y: 9, port_id: 0}, + start_addr: 32'h13200000, + end_addr: 32'h13300000},// MagiaTileX18Y9 +'{ idx: '{x: 49, y: 9, port_id: 0}, + start_addr: 32'h13100000, + end_addr: 32'h13200000},// MagiaTileX17Y9 +'{ idx: '{x: 48, y: 9, port_id: 0}, + start_addr: 32'h13000000, + end_addr: 32'h13100000},// MagiaTileX16Y9 +'{ idx: '{x: 47, y: 9, port_id: 0}, + start_addr: 32'h12f00000, + end_addr: 32'h13000000},// MagiaTileX15Y9 +'{ idx: '{x: 46, y: 9, port_id: 0}, + start_addr: 32'h12e00000, + end_addr: 32'h12f00000},// MagiaTileX14Y9 +'{ idx: '{x: 45, y: 9, port_id: 0}, + start_addr: 32'h12d00000, + end_addr: 32'h12e00000},// MagiaTileX13Y9 +'{ idx: '{x: 44, y: 9, port_id: 0}, + start_addr: 32'h12c00000, + end_addr: 32'h12d00000},// MagiaTileX12Y9 +'{ idx: '{x: 43, y: 9, port_id: 0}, + start_addr: 32'h12b00000, + end_addr: 32'h12c00000},// MagiaTileX11Y9 +'{ idx: '{x: 42, y: 9, port_id: 0}, + start_addr: 32'h12a00000, + end_addr: 32'h12b00000},// MagiaTileX10Y9 +'{ idx: '{x: 41, y: 9, port_id: 0}, + start_addr: 32'h12900000, + end_addr: 32'h12a00000},// MagiaTileX9Y9 +'{ idx: '{x: 40, y: 9, port_id: 0}, + start_addr: 32'h12800000, + end_addr: 32'h12900000},// MagiaTileX8Y9 +'{ idx: '{x: 39, y: 9, port_id: 0}, + start_addr: 32'h12700000, + end_addr: 32'h12800000},// MagiaTileX7Y9 +'{ idx: '{x: 38, y: 9, port_id: 0}, + start_addr: 32'h12600000, + end_addr: 32'h12700000},// MagiaTileX6Y9 +'{ idx: '{x: 37, y: 9, port_id: 0}, + start_addr: 32'h12500000, + end_addr: 32'h12600000},// MagiaTileX5Y9 +'{ idx: '{x: 36, y: 9, port_id: 0}, + start_addr: 32'h12400000, + end_addr: 32'h12500000},// MagiaTileX4Y9 +'{ idx: '{x: 35, y: 9, port_id: 0}, + start_addr: 32'h12300000, + end_addr: 32'h12400000},// MagiaTileX3Y9 +'{ idx: '{x: 34, y: 9, port_id: 0}, + start_addr: 32'h12200000, + end_addr: 32'h12300000},// MagiaTileX2Y9 +'{ idx: '{x: 33, y: 9, port_id: 0}, + start_addr: 32'h12100000, + end_addr: 32'h12200000},// MagiaTileX1Y9 +'{ idx: '{x: 32, y: 9, port_id: 0}, + start_addr: 32'h12000000, + end_addr: 32'h12100000},// MagiaTileX0Y9 +'{ idx: '{x: 63, y: 8, port_id: 0}, + start_addr: 32'h11f00000, + end_addr: 32'h12000000},// MagiaTileX31Y8 +'{ idx: '{x: 62, y: 8, port_id: 0}, + start_addr: 32'h11e00000, + end_addr: 32'h11f00000},// MagiaTileX30Y8 +'{ idx: '{x: 61, y: 8, port_id: 0}, + start_addr: 32'h11d00000, + end_addr: 32'h11e00000},// MagiaTileX29Y8 +'{ idx: '{x: 60, y: 8, port_id: 0}, + start_addr: 32'h11c00000, + end_addr: 32'h11d00000},// MagiaTileX28Y8 +'{ idx: '{x: 59, y: 8, port_id: 0}, + start_addr: 32'h11b00000, + end_addr: 32'h11c00000},// MagiaTileX27Y8 +'{ idx: '{x: 58, y: 8, port_id: 0}, + start_addr: 32'h11a00000, + end_addr: 32'h11b00000},// MagiaTileX26Y8 +'{ idx: '{x: 57, y: 8, port_id: 0}, + start_addr: 32'h11900000, + end_addr: 32'h11a00000},// MagiaTileX25Y8 +'{ idx: '{x: 56, y: 8, port_id: 0}, + start_addr: 32'h11800000, + end_addr: 32'h11900000},// MagiaTileX24Y8 +'{ idx: '{x: 55, y: 8, port_id: 0}, + start_addr: 32'h11700000, + end_addr: 32'h11800000},// MagiaTileX23Y8 +'{ idx: '{x: 54, y: 8, port_id: 0}, + start_addr: 32'h11600000, + end_addr: 32'h11700000},// MagiaTileX22Y8 +'{ idx: '{x: 53, y: 8, port_id: 0}, + start_addr: 32'h11500000, + end_addr: 32'h11600000},// MagiaTileX21Y8 +'{ idx: '{x: 52, y: 8, port_id: 0}, + start_addr: 32'h11400000, + end_addr: 32'h11500000},// MagiaTileX20Y8 +'{ idx: '{x: 51, y: 8, port_id: 0}, + start_addr: 32'h11300000, + end_addr: 32'h11400000},// MagiaTileX19Y8 +'{ idx: '{x: 50, y: 8, port_id: 0}, + start_addr: 32'h11200000, + end_addr: 32'h11300000},// MagiaTileX18Y8 +'{ idx: '{x: 49, y: 8, port_id: 0}, + start_addr: 32'h11100000, + end_addr: 32'h11200000},// MagiaTileX17Y8 +'{ idx: '{x: 48, y: 8, port_id: 0}, + start_addr: 32'h11000000, + end_addr: 32'h11100000},// MagiaTileX16Y8 +'{ idx: '{x: 47, y: 8, port_id: 0}, + start_addr: 32'h10f00000, + end_addr: 32'h11000000},// MagiaTileX15Y8 +'{ idx: '{x: 46, y: 8, port_id: 0}, + start_addr: 32'h10e00000, + end_addr: 32'h10f00000},// MagiaTileX14Y8 +'{ idx: '{x: 45, y: 8, port_id: 0}, + start_addr: 32'h10d00000, + end_addr: 32'h10e00000},// MagiaTileX13Y8 +'{ idx: '{x: 44, y: 8, port_id: 0}, + start_addr: 32'h10c00000, + end_addr: 32'h10d00000},// MagiaTileX12Y8 +'{ idx: '{x: 43, y: 8, port_id: 0}, + start_addr: 32'h10b00000, + end_addr: 32'h10c00000},// MagiaTileX11Y8 +'{ idx: '{x: 42, y: 8, port_id: 0}, + start_addr: 32'h10a00000, + end_addr: 32'h10b00000},// MagiaTileX10Y8 +'{ idx: '{x: 41, y: 8, port_id: 0}, + start_addr: 32'h10900000, + end_addr: 32'h10a00000},// MagiaTileX9Y8 +'{ idx: '{x: 40, y: 8, port_id: 0}, + start_addr: 32'h10800000, + end_addr: 32'h10900000},// MagiaTileX8Y8 +'{ idx: '{x: 39, y: 8, port_id: 0}, + start_addr: 32'h10700000, + end_addr: 32'h10800000},// MagiaTileX7Y8 +'{ idx: '{x: 38, y: 8, port_id: 0}, + start_addr: 32'h10600000, + end_addr: 32'h10700000},// MagiaTileX6Y8 +'{ idx: '{x: 37, y: 8, port_id: 0}, + start_addr: 32'h10500000, + end_addr: 32'h10600000},// MagiaTileX5Y8 +'{ idx: '{x: 36, y: 8, port_id: 0}, + start_addr: 32'h10400000, + end_addr: 32'h10500000},// MagiaTileX4Y8 +'{ idx: '{x: 35, y: 8, port_id: 0}, + start_addr: 32'h10300000, + end_addr: 32'h10400000},// MagiaTileX3Y8 +'{ idx: '{x: 34, y: 8, port_id: 0}, + start_addr: 32'h10200000, + end_addr: 32'h10300000},// MagiaTileX2Y8 +'{ idx: '{x: 33, y: 8, port_id: 0}, + start_addr: 32'h10100000, + end_addr: 32'h10200000},// MagiaTileX1Y8 +'{ idx: '{x: 32, y: 8, port_id: 0}, + start_addr: 32'h10000000, + end_addr: 32'h10100000},// MagiaTileX0Y8 +'{ idx: '{x: 63, y: 7, port_id: 0}, + start_addr: 32'h0ff00000, + end_addr: 32'h10000000},// MagiaTileX31Y7 +'{ idx: '{x: 62, y: 7, port_id: 0}, + start_addr: 32'h0fe00000, + end_addr: 32'h0ff00000},// MagiaTileX30Y7 +'{ idx: '{x: 61, y: 7, port_id: 0}, + start_addr: 32'h0fd00000, + end_addr: 32'h0fe00000},// MagiaTileX29Y7 +'{ idx: '{x: 60, y: 7, port_id: 0}, + start_addr: 32'h0fc00000, + end_addr: 32'h0fd00000},// MagiaTileX28Y7 +'{ idx: '{x: 59, y: 7, port_id: 0}, + start_addr: 32'h0fb00000, + end_addr: 32'h0fc00000},// MagiaTileX27Y7 +'{ idx: '{x: 58, y: 7, port_id: 0}, + start_addr: 32'h0fa00000, + end_addr: 32'h0fb00000},// MagiaTileX26Y7 +'{ idx: '{x: 57, y: 7, port_id: 0}, + start_addr: 32'h0f900000, + end_addr: 32'h0fa00000},// MagiaTileX25Y7 +'{ idx: '{x: 56, y: 7, port_id: 0}, + start_addr: 32'h0f800000, + end_addr: 32'h0f900000},// MagiaTileX24Y7 +'{ idx: '{x: 55, y: 7, port_id: 0}, + start_addr: 32'h0f700000, + end_addr: 32'h0f800000},// MagiaTileX23Y7 +'{ idx: '{x: 54, y: 7, port_id: 0}, + start_addr: 32'h0f600000, + end_addr: 32'h0f700000},// MagiaTileX22Y7 +'{ idx: '{x: 53, y: 7, port_id: 0}, + start_addr: 32'h0f500000, + end_addr: 32'h0f600000},// MagiaTileX21Y7 +'{ idx: '{x: 52, y: 7, port_id: 0}, + start_addr: 32'h0f400000, + end_addr: 32'h0f500000},// MagiaTileX20Y7 +'{ idx: '{x: 51, y: 7, port_id: 0}, + start_addr: 32'h0f300000, + end_addr: 32'h0f400000},// MagiaTileX19Y7 +'{ idx: '{x: 50, y: 7, port_id: 0}, + start_addr: 32'h0f200000, + end_addr: 32'h0f300000},// MagiaTileX18Y7 +'{ idx: '{x: 49, y: 7, port_id: 0}, + start_addr: 32'h0f100000, + end_addr: 32'h0f200000},// MagiaTileX17Y7 +'{ idx: '{x: 48, y: 7, port_id: 0}, + start_addr: 32'h0f000000, + end_addr: 32'h0f100000},// MagiaTileX16Y7 +'{ idx: '{x: 47, y: 7, port_id: 0}, + start_addr: 32'h0ef00000, + end_addr: 32'h0f000000},// MagiaTileX15Y7 +'{ idx: '{x: 46, y: 7, port_id: 0}, + start_addr: 32'h0ee00000, + end_addr: 32'h0ef00000},// MagiaTileX14Y7 +'{ idx: '{x: 45, y: 7, port_id: 0}, + start_addr: 32'h0ed00000, + end_addr: 32'h0ee00000},// MagiaTileX13Y7 +'{ idx: '{x: 44, y: 7, port_id: 0}, + start_addr: 32'h0ec00000, + end_addr: 32'h0ed00000},// MagiaTileX12Y7 +'{ idx: '{x: 43, y: 7, port_id: 0}, + start_addr: 32'h0eb00000, + end_addr: 32'h0ec00000},// MagiaTileX11Y7 +'{ idx: '{x: 42, y: 7, port_id: 0}, + start_addr: 32'h0ea00000, + end_addr: 32'h0eb00000},// MagiaTileX10Y7 +'{ idx: '{x: 41, y: 7, port_id: 0}, + start_addr: 32'h0e900000, + end_addr: 32'h0ea00000},// MagiaTileX9Y7 +'{ idx: '{x: 40, y: 7, port_id: 0}, + start_addr: 32'h0e800000, + end_addr: 32'h0e900000},// MagiaTileX8Y7 +'{ idx: '{x: 39, y: 7, port_id: 0}, + start_addr: 32'h0e700000, + end_addr: 32'h0e800000},// MagiaTileX7Y7 +'{ idx: '{x: 38, y: 7, port_id: 0}, + start_addr: 32'h0e600000, + end_addr: 32'h0e700000},// MagiaTileX6Y7 +'{ idx: '{x: 37, y: 7, port_id: 0}, + start_addr: 32'h0e500000, + end_addr: 32'h0e600000},// MagiaTileX5Y7 +'{ idx: '{x: 36, y: 7, port_id: 0}, + start_addr: 32'h0e400000, + end_addr: 32'h0e500000},// MagiaTileX4Y7 +'{ idx: '{x: 35, y: 7, port_id: 0}, + start_addr: 32'h0e300000, + end_addr: 32'h0e400000},// MagiaTileX3Y7 +'{ idx: '{x: 34, y: 7, port_id: 0}, + start_addr: 32'h0e200000, + end_addr: 32'h0e300000},// MagiaTileX2Y7 +'{ idx: '{x: 33, y: 7, port_id: 0}, + start_addr: 32'h0e100000, + end_addr: 32'h0e200000},// MagiaTileX1Y7 +'{ idx: '{x: 32, y: 7, port_id: 0}, + start_addr: 32'h0e000000, + end_addr: 32'h0e100000},// MagiaTileX0Y7 +'{ idx: '{x: 63, y: 6, port_id: 0}, + start_addr: 32'h0df00000, + end_addr: 32'h0e000000},// MagiaTileX31Y6 +'{ idx: '{x: 62, y: 6, port_id: 0}, + start_addr: 32'h0de00000, + end_addr: 32'h0df00000},// MagiaTileX30Y6 +'{ idx: '{x: 61, y: 6, port_id: 0}, + start_addr: 32'h0dd00000, + end_addr: 32'h0de00000},// MagiaTileX29Y6 +'{ idx: '{x: 60, y: 6, port_id: 0}, + start_addr: 32'h0dc00000, + end_addr: 32'h0dd00000},// MagiaTileX28Y6 +'{ idx: '{x: 59, y: 6, port_id: 0}, + start_addr: 32'h0db00000, + end_addr: 32'h0dc00000},// MagiaTileX27Y6 +'{ idx: '{x: 58, y: 6, port_id: 0}, + start_addr: 32'h0da00000, + end_addr: 32'h0db00000},// MagiaTileX26Y6 +'{ idx: '{x: 57, y: 6, port_id: 0}, + start_addr: 32'h0d900000, + end_addr: 32'h0da00000},// MagiaTileX25Y6 +'{ idx: '{x: 56, y: 6, port_id: 0}, + start_addr: 32'h0d800000, + end_addr: 32'h0d900000},// MagiaTileX24Y6 +'{ idx: '{x: 55, y: 6, port_id: 0}, + start_addr: 32'h0d700000, + end_addr: 32'h0d800000},// MagiaTileX23Y6 +'{ idx: '{x: 54, y: 6, port_id: 0}, + start_addr: 32'h0d600000, + end_addr: 32'h0d700000},// MagiaTileX22Y6 +'{ idx: '{x: 53, y: 6, port_id: 0}, + start_addr: 32'h0d500000, + end_addr: 32'h0d600000},// MagiaTileX21Y6 +'{ idx: '{x: 52, y: 6, port_id: 0}, + start_addr: 32'h0d400000, + end_addr: 32'h0d500000},// MagiaTileX20Y6 +'{ idx: '{x: 51, y: 6, port_id: 0}, + start_addr: 32'h0d300000, + end_addr: 32'h0d400000},// MagiaTileX19Y6 +'{ idx: '{x: 50, y: 6, port_id: 0}, + start_addr: 32'h0d200000, + end_addr: 32'h0d300000},// MagiaTileX18Y6 +'{ idx: '{x: 49, y: 6, port_id: 0}, + start_addr: 32'h0d100000, + end_addr: 32'h0d200000},// MagiaTileX17Y6 +'{ idx: '{x: 48, y: 6, port_id: 0}, + start_addr: 32'h0d000000, + end_addr: 32'h0d100000},// MagiaTileX16Y6 +'{ idx: '{x: 47, y: 6, port_id: 0}, + start_addr: 32'h0cf00000, + end_addr: 32'h0d000000},// MagiaTileX15Y6 +'{ idx: '{x: 46, y: 6, port_id: 0}, + start_addr: 32'h0ce00000, + end_addr: 32'h0cf00000},// MagiaTileX14Y6 +'{ idx: '{x: 45, y: 6, port_id: 0}, + start_addr: 32'h0cd00000, + end_addr: 32'h0ce00000},// MagiaTileX13Y6 +'{ idx: '{x: 44, y: 6, port_id: 0}, + start_addr: 32'h0cc00000, + end_addr: 32'h0cd00000},// MagiaTileX12Y6 +'{ idx: '{x: 43, y: 6, port_id: 0}, + start_addr: 32'h0cb00000, + end_addr: 32'h0cc00000},// MagiaTileX11Y6 +'{ idx: '{x: 42, y: 6, port_id: 0}, + start_addr: 32'h0ca00000, + end_addr: 32'h0cb00000},// MagiaTileX10Y6 +'{ idx: '{x: 41, y: 6, port_id: 0}, + start_addr: 32'h0c900000, + end_addr: 32'h0ca00000},// MagiaTileX9Y6 +'{ idx: '{x: 40, y: 6, port_id: 0}, + start_addr: 32'h0c800000, + end_addr: 32'h0c900000},// MagiaTileX8Y6 +'{ idx: '{x: 39, y: 6, port_id: 0}, + start_addr: 32'h0c700000, + end_addr: 32'h0c800000},// MagiaTileX7Y6 +'{ idx: '{x: 38, y: 6, port_id: 0}, + start_addr: 32'h0c600000, + end_addr: 32'h0c700000},// MagiaTileX6Y6 +'{ idx: '{x: 37, y: 6, port_id: 0}, + start_addr: 32'h0c500000, + end_addr: 32'h0c600000},// MagiaTileX5Y6 +'{ idx: '{x: 36, y: 6, port_id: 0}, + start_addr: 32'h0c400000, + end_addr: 32'h0c500000},// MagiaTileX4Y6 +'{ idx: '{x: 35, y: 6, port_id: 0}, + start_addr: 32'h0c300000, + end_addr: 32'h0c400000},// MagiaTileX3Y6 +'{ idx: '{x: 34, y: 6, port_id: 0}, + start_addr: 32'h0c200000, + end_addr: 32'h0c300000},// MagiaTileX2Y6 +'{ idx: '{x: 33, y: 6, port_id: 0}, + start_addr: 32'h0c100000, + end_addr: 32'h0c200000},// MagiaTileX1Y6 +'{ idx: '{x: 32, y: 6, port_id: 0}, + start_addr: 32'h0c000000, + end_addr: 32'h0c100000},// MagiaTileX0Y6 +'{ idx: '{x: 63, y: 5, port_id: 0}, + start_addr: 32'h0bf00000, + end_addr: 32'h0c000000},// MagiaTileX31Y5 +'{ idx: '{x: 62, y: 5, port_id: 0}, + start_addr: 32'h0be00000, + end_addr: 32'h0bf00000},// MagiaTileX30Y5 +'{ idx: '{x: 61, y: 5, port_id: 0}, + start_addr: 32'h0bd00000, + end_addr: 32'h0be00000},// MagiaTileX29Y5 +'{ idx: '{x: 60, y: 5, port_id: 0}, + start_addr: 32'h0bc00000, + end_addr: 32'h0bd00000},// MagiaTileX28Y5 +'{ idx: '{x: 59, y: 5, port_id: 0}, + start_addr: 32'h0bb00000, + end_addr: 32'h0bc00000},// MagiaTileX27Y5 +'{ idx: '{x: 58, y: 5, port_id: 0}, + start_addr: 32'h0ba00000, + end_addr: 32'h0bb00000},// MagiaTileX26Y5 +'{ idx: '{x: 57, y: 5, port_id: 0}, + start_addr: 32'h0b900000, + end_addr: 32'h0ba00000},// MagiaTileX25Y5 +'{ idx: '{x: 56, y: 5, port_id: 0}, + start_addr: 32'h0b800000, + end_addr: 32'h0b900000},// MagiaTileX24Y5 +'{ idx: '{x: 55, y: 5, port_id: 0}, + start_addr: 32'h0b700000, + end_addr: 32'h0b800000},// MagiaTileX23Y5 +'{ idx: '{x: 54, y: 5, port_id: 0}, + start_addr: 32'h0b600000, + end_addr: 32'h0b700000},// MagiaTileX22Y5 +'{ idx: '{x: 53, y: 5, port_id: 0}, + start_addr: 32'h0b500000, + end_addr: 32'h0b600000},// MagiaTileX21Y5 +'{ idx: '{x: 52, y: 5, port_id: 0}, + start_addr: 32'h0b400000, + end_addr: 32'h0b500000},// MagiaTileX20Y5 +'{ idx: '{x: 51, y: 5, port_id: 0}, + start_addr: 32'h0b300000, + end_addr: 32'h0b400000},// MagiaTileX19Y5 +'{ idx: '{x: 50, y: 5, port_id: 0}, + start_addr: 32'h0b200000, + end_addr: 32'h0b300000},// MagiaTileX18Y5 +'{ idx: '{x: 49, y: 5, port_id: 0}, + start_addr: 32'h0b100000, + end_addr: 32'h0b200000},// MagiaTileX17Y5 +'{ idx: '{x: 48, y: 5, port_id: 0}, + start_addr: 32'h0b000000, + end_addr: 32'h0b100000},// MagiaTileX16Y5 +'{ idx: '{x: 47, y: 5, port_id: 0}, + start_addr: 32'h0af00000, + end_addr: 32'h0b000000},// MagiaTileX15Y5 +'{ idx: '{x: 46, y: 5, port_id: 0}, + start_addr: 32'h0ae00000, + end_addr: 32'h0af00000},// MagiaTileX14Y5 +'{ idx: '{x: 45, y: 5, port_id: 0}, + start_addr: 32'h0ad00000, + end_addr: 32'h0ae00000},// MagiaTileX13Y5 +'{ idx: '{x: 44, y: 5, port_id: 0}, + start_addr: 32'h0ac00000, + end_addr: 32'h0ad00000},// MagiaTileX12Y5 +'{ idx: '{x: 43, y: 5, port_id: 0}, + start_addr: 32'h0ab00000, + end_addr: 32'h0ac00000},// MagiaTileX11Y5 +'{ idx: '{x: 42, y: 5, port_id: 0}, + start_addr: 32'h0aa00000, + end_addr: 32'h0ab00000},// MagiaTileX10Y5 +'{ idx: '{x: 41, y: 5, port_id: 0}, + start_addr: 32'h0a900000, + end_addr: 32'h0aa00000},// MagiaTileX9Y5 +'{ idx: '{x: 40, y: 5, port_id: 0}, + start_addr: 32'h0a800000, + end_addr: 32'h0a900000},// MagiaTileX8Y5 +'{ idx: '{x: 39, y: 5, port_id: 0}, + start_addr: 32'h0a700000, + end_addr: 32'h0a800000},// MagiaTileX7Y5 +'{ idx: '{x: 38, y: 5, port_id: 0}, + start_addr: 32'h0a600000, + end_addr: 32'h0a700000},// MagiaTileX6Y5 +'{ idx: '{x: 37, y: 5, port_id: 0}, + start_addr: 32'h0a500000, + end_addr: 32'h0a600000},// MagiaTileX5Y5 +'{ idx: '{x: 36, y: 5, port_id: 0}, + start_addr: 32'h0a400000, + end_addr: 32'h0a500000},// MagiaTileX4Y5 +'{ idx: '{x: 35, y: 5, port_id: 0}, + start_addr: 32'h0a300000, + end_addr: 32'h0a400000},// MagiaTileX3Y5 +'{ idx: '{x: 34, y: 5, port_id: 0}, + start_addr: 32'h0a200000, + end_addr: 32'h0a300000},// MagiaTileX2Y5 +'{ idx: '{x: 33, y: 5, port_id: 0}, + start_addr: 32'h0a100000, + end_addr: 32'h0a200000},// MagiaTileX1Y5 +'{ idx: '{x: 32, y: 5, port_id: 0}, + start_addr: 32'h0a000000, + end_addr: 32'h0a100000},// MagiaTileX0Y5 +'{ idx: '{x: 63, y: 4, port_id: 0}, + start_addr: 32'h09f00000, + end_addr: 32'h0a000000},// MagiaTileX31Y4 +'{ idx: '{x: 62, y: 4, port_id: 0}, + start_addr: 32'h09e00000, + end_addr: 32'h09f00000},// MagiaTileX30Y4 +'{ idx: '{x: 61, y: 4, port_id: 0}, + start_addr: 32'h09d00000, + end_addr: 32'h09e00000},// MagiaTileX29Y4 +'{ idx: '{x: 60, y: 4, port_id: 0}, + start_addr: 32'h09c00000, + end_addr: 32'h09d00000},// MagiaTileX28Y4 +'{ idx: '{x: 59, y: 4, port_id: 0}, + start_addr: 32'h09b00000, + end_addr: 32'h09c00000},// MagiaTileX27Y4 +'{ idx: '{x: 58, y: 4, port_id: 0}, + start_addr: 32'h09a00000, + end_addr: 32'h09b00000},// MagiaTileX26Y4 +'{ idx: '{x: 57, y: 4, port_id: 0}, + start_addr: 32'h09900000, + end_addr: 32'h09a00000},// MagiaTileX25Y4 +'{ idx: '{x: 56, y: 4, port_id: 0}, + start_addr: 32'h09800000, + end_addr: 32'h09900000},// MagiaTileX24Y4 +'{ idx: '{x: 55, y: 4, port_id: 0}, + start_addr: 32'h09700000, + end_addr: 32'h09800000},// MagiaTileX23Y4 +'{ idx: '{x: 54, y: 4, port_id: 0}, + start_addr: 32'h09600000, + end_addr: 32'h09700000},// MagiaTileX22Y4 +'{ idx: '{x: 53, y: 4, port_id: 0}, + start_addr: 32'h09500000, + end_addr: 32'h09600000},// MagiaTileX21Y4 +'{ idx: '{x: 52, y: 4, port_id: 0}, + start_addr: 32'h09400000, + end_addr: 32'h09500000},// MagiaTileX20Y4 +'{ idx: '{x: 51, y: 4, port_id: 0}, + start_addr: 32'h09300000, + end_addr: 32'h09400000},// MagiaTileX19Y4 +'{ idx: '{x: 50, y: 4, port_id: 0}, + start_addr: 32'h09200000, + end_addr: 32'h09300000},// MagiaTileX18Y4 +'{ idx: '{x: 49, y: 4, port_id: 0}, + start_addr: 32'h09100000, + end_addr: 32'h09200000},// MagiaTileX17Y4 +'{ idx: '{x: 48, y: 4, port_id: 0}, + start_addr: 32'h09000000, + end_addr: 32'h09100000},// MagiaTileX16Y4 +'{ idx: '{x: 47, y: 4, port_id: 0}, + start_addr: 32'h08f00000, + end_addr: 32'h09000000},// MagiaTileX15Y4 +'{ idx: '{x: 46, y: 4, port_id: 0}, + start_addr: 32'h08e00000, + end_addr: 32'h08f00000},// MagiaTileX14Y4 +'{ idx: '{x: 45, y: 4, port_id: 0}, + start_addr: 32'h08d00000, + end_addr: 32'h08e00000},// MagiaTileX13Y4 +'{ idx: '{x: 44, y: 4, port_id: 0}, + start_addr: 32'h08c00000, + end_addr: 32'h08d00000},// MagiaTileX12Y4 +'{ idx: '{x: 43, y: 4, port_id: 0}, + start_addr: 32'h08b00000, + end_addr: 32'h08c00000},// MagiaTileX11Y4 +'{ idx: '{x: 42, y: 4, port_id: 0}, + start_addr: 32'h08a00000, + end_addr: 32'h08b00000},// MagiaTileX10Y4 +'{ idx: '{x: 41, y: 4, port_id: 0}, + start_addr: 32'h08900000, + end_addr: 32'h08a00000},// MagiaTileX9Y4 +'{ idx: '{x: 40, y: 4, port_id: 0}, + start_addr: 32'h08800000, + end_addr: 32'h08900000},// MagiaTileX8Y4 +'{ idx: '{x: 39, y: 4, port_id: 0}, + start_addr: 32'h08700000, + end_addr: 32'h08800000},// MagiaTileX7Y4 +'{ idx: '{x: 38, y: 4, port_id: 0}, + start_addr: 32'h08600000, + end_addr: 32'h08700000},// MagiaTileX6Y4 +'{ idx: '{x: 37, y: 4, port_id: 0}, + start_addr: 32'h08500000, + end_addr: 32'h08600000},// MagiaTileX5Y4 +'{ idx: '{x: 36, y: 4, port_id: 0}, + start_addr: 32'h08400000, + end_addr: 32'h08500000},// MagiaTileX4Y4 +'{ idx: '{x: 35, y: 4, port_id: 0}, + start_addr: 32'h08300000, + end_addr: 32'h08400000},// MagiaTileX3Y4 +'{ idx: '{x: 34, y: 4, port_id: 0}, + start_addr: 32'h08200000, + end_addr: 32'h08300000},// MagiaTileX2Y4 +'{ idx: '{x: 33, y: 4, port_id: 0}, + start_addr: 32'h08100000, + end_addr: 32'h08200000},// MagiaTileX1Y4 +'{ idx: '{x: 32, y: 4, port_id: 0}, + start_addr: 32'h08000000, + end_addr: 32'h08100000},// MagiaTileX0Y4 +'{ idx: '{x: 63, y: 3, port_id: 0}, + start_addr: 32'h07f00000, + end_addr: 32'h08000000},// MagiaTileX31Y3 +'{ idx: '{x: 62, y: 3, port_id: 0}, + start_addr: 32'h07e00000, + end_addr: 32'h07f00000},// MagiaTileX30Y3 +'{ idx: '{x: 61, y: 3, port_id: 0}, + start_addr: 32'h07d00000, + end_addr: 32'h07e00000},// MagiaTileX29Y3 +'{ idx: '{x: 60, y: 3, port_id: 0}, + start_addr: 32'h07c00000, + end_addr: 32'h07d00000},// MagiaTileX28Y3 +'{ idx: '{x: 59, y: 3, port_id: 0}, + start_addr: 32'h07b00000, + end_addr: 32'h07c00000},// MagiaTileX27Y3 +'{ idx: '{x: 58, y: 3, port_id: 0}, + start_addr: 32'h07a00000, + end_addr: 32'h07b00000},// MagiaTileX26Y3 +'{ idx: '{x: 57, y: 3, port_id: 0}, + start_addr: 32'h07900000, + end_addr: 32'h07a00000},// MagiaTileX25Y3 +'{ idx: '{x: 56, y: 3, port_id: 0}, + start_addr: 32'h07800000, + end_addr: 32'h07900000},// MagiaTileX24Y3 +'{ idx: '{x: 55, y: 3, port_id: 0}, + start_addr: 32'h07700000, + end_addr: 32'h07800000},// MagiaTileX23Y3 +'{ idx: '{x: 54, y: 3, port_id: 0}, + start_addr: 32'h07600000, + end_addr: 32'h07700000},// MagiaTileX22Y3 +'{ idx: '{x: 53, y: 3, port_id: 0}, + start_addr: 32'h07500000, + end_addr: 32'h07600000},// MagiaTileX21Y3 +'{ idx: '{x: 52, y: 3, port_id: 0}, + start_addr: 32'h07400000, + end_addr: 32'h07500000},// MagiaTileX20Y3 +'{ idx: '{x: 51, y: 3, port_id: 0}, + start_addr: 32'h07300000, + end_addr: 32'h07400000},// MagiaTileX19Y3 +'{ idx: '{x: 50, y: 3, port_id: 0}, + start_addr: 32'h07200000, + end_addr: 32'h07300000},// MagiaTileX18Y3 +'{ idx: '{x: 49, y: 3, port_id: 0}, + start_addr: 32'h07100000, + end_addr: 32'h07200000},// MagiaTileX17Y3 +'{ idx: '{x: 48, y: 3, port_id: 0}, + start_addr: 32'h07000000, + end_addr: 32'h07100000},// MagiaTileX16Y3 +'{ idx: '{x: 47, y: 3, port_id: 0}, + start_addr: 32'h06f00000, + end_addr: 32'h07000000},// MagiaTileX15Y3 +'{ idx: '{x: 46, y: 3, port_id: 0}, + start_addr: 32'h06e00000, + end_addr: 32'h06f00000},// MagiaTileX14Y3 +'{ idx: '{x: 45, y: 3, port_id: 0}, + start_addr: 32'h06d00000, + end_addr: 32'h06e00000},// MagiaTileX13Y3 +'{ idx: '{x: 44, y: 3, port_id: 0}, + start_addr: 32'h06c00000, + end_addr: 32'h06d00000},// MagiaTileX12Y3 +'{ idx: '{x: 43, y: 3, port_id: 0}, + start_addr: 32'h06b00000, + end_addr: 32'h06c00000},// MagiaTileX11Y3 +'{ idx: '{x: 42, y: 3, port_id: 0}, + start_addr: 32'h06a00000, + end_addr: 32'h06b00000},// MagiaTileX10Y3 +'{ idx: '{x: 41, y: 3, port_id: 0}, + start_addr: 32'h06900000, + end_addr: 32'h06a00000},// MagiaTileX9Y3 +'{ idx: '{x: 40, y: 3, port_id: 0}, + start_addr: 32'h06800000, + end_addr: 32'h06900000},// MagiaTileX8Y3 +'{ idx: '{x: 39, y: 3, port_id: 0}, + start_addr: 32'h06700000, + end_addr: 32'h06800000},// MagiaTileX7Y3 +'{ idx: '{x: 38, y: 3, port_id: 0}, + start_addr: 32'h06600000, + end_addr: 32'h06700000},// MagiaTileX6Y3 +'{ idx: '{x: 37, y: 3, port_id: 0}, + start_addr: 32'h06500000, + end_addr: 32'h06600000},// MagiaTileX5Y3 +'{ idx: '{x: 36, y: 3, port_id: 0}, + start_addr: 32'h06400000, + end_addr: 32'h06500000},// MagiaTileX4Y3 +'{ idx: '{x: 35, y: 3, port_id: 0}, + start_addr: 32'h06300000, + end_addr: 32'h06400000},// MagiaTileX3Y3 +'{ idx: '{x: 34, y: 3, port_id: 0}, + start_addr: 32'h06200000, + end_addr: 32'h06300000},// MagiaTileX2Y3 +'{ idx: '{x: 33, y: 3, port_id: 0}, + start_addr: 32'h06100000, + end_addr: 32'h06200000},// MagiaTileX1Y3 +'{ idx: '{x: 32, y: 3, port_id: 0}, + start_addr: 32'h06000000, + end_addr: 32'h06100000},// MagiaTileX0Y3 +'{ idx: '{x: 63, y: 2, port_id: 0}, + start_addr: 32'h05f00000, + end_addr: 32'h06000000},// MagiaTileX31Y2 +'{ idx: '{x: 62, y: 2, port_id: 0}, + start_addr: 32'h05e00000, + end_addr: 32'h05f00000},// MagiaTileX30Y2 +'{ idx: '{x: 61, y: 2, port_id: 0}, + start_addr: 32'h05d00000, + end_addr: 32'h05e00000},// MagiaTileX29Y2 +'{ idx: '{x: 60, y: 2, port_id: 0}, + start_addr: 32'h05c00000, + end_addr: 32'h05d00000},// MagiaTileX28Y2 +'{ idx: '{x: 59, y: 2, port_id: 0}, + start_addr: 32'h05b00000, + end_addr: 32'h05c00000},// MagiaTileX27Y2 +'{ idx: '{x: 58, y: 2, port_id: 0}, + start_addr: 32'h05a00000, + end_addr: 32'h05b00000},// MagiaTileX26Y2 +'{ idx: '{x: 57, y: 2, port_id: 0}, + start_addr: 32'h05900000, + end_addr: 32'h05a00000},// MagiaTileX25Y2 +'{ idx: '{x: 56, y: 2, port_id: 0}, + start_addr: 32'h05800000, + end_addr: 32'h05900000},// MagiaTileX24Y2 +'{ idx: '{x: 55, y: 2, port_id: 0}, + start_addr: 32'h05700000, + end_addr: 32'h05800000},// MagiaTileX23Y2 +'{ idx: '{x: 54, y: 2, port_id: 0}, + start_addr: 32'h05600000, + end_addr: 32'h05700000},// MagiaTileX22Y2 +'{ idx: '{x: 53, y: 2, port_id: 0}, + start_addr: 32'h05500000, + end_addr: 32'h05600000},// MagiaTileX21Y2 +'{ idx: '{x: 52, y: 2, port_id: 0}, + start_addr: 32'h05400000, + end_addr: 32'h05500000},// MagiaTileX20Y2 +'{ idx: '{x: 51, y: 2, port_id: 0}, + start_addr: 32'h05300000, + end_addr: 32'h05400000},// MagiaTileX19Y2 +'{ idx: '{x: 50, y: 2, port_id: 0}, + start_addr: 32'h05200000, + end_addr: 32'h05300000},// MagiaTileX18Y2 +'{ idx: '{x: 49, y: 2, port_id: 0}, + start_addr: 32'h05100000, + end_addr: 32'h05200000},// MagiaTileX17Y2 +'{ idx: '{x: 48, y: 2, port_id: 0}, + start_addr: 32'h05000000, + end_addr: 32'h05100000},// MagiaTileX16Y2 +'{ idx: '{x: 47, y: 2, port_id: 0}, + start_addr: 32'h04f00000, + end_addr: 32'h05000000},// MagiaTileX15Y2 +'{ idx: '{x: 46, y: 2, port_id: 0}, + start_addr: 32'h04e00000, + end_addr: 32'h04f00000},// MagiaTileX14Y2 +'{ idx: '{x: 45, y: 2, port_id: 0}, + start_addr: 32'h04d00000, + end_addr: 32'h04e00000},// MagiaTileX13Y2 +'{ idx: '{x: 44, y: 2, port_id: 0}, + start_addr: 32'h04c00000, + end_addr: 32'h04d00000},// MagiaTileX12Y2 +'{ idx: '{x: 43, y: 2, port_id: 0}, + start_addr: 32'h04b00000, + end_addr: 32'h04c00000},// MagiaTileX11Y2 +'{ idx: '{x: 42, y: 2, port_id: 0}, + start_addr: 32'h04a00000, + end_addr: 32'h04b00000},// MagiaTileX10Y2 +'{ idx: '{x: 41, y: 2, port_id: 0}, + start_addr: 32'h04900000, + end_addr: 32'h04a00000},// MagiaTileX9Y2 +'{ idx: '{x: 40, y: 2, port_id: 0}, + start_addr: 32'h04800000, + end_addr: 32'h04900000},// MagiaTileX8Y2 +'{ idx: '{x: 39, y: 2, port_id: 0}, + start_addr: 32'h04700000, + end_addr: 32'h04800000},// MagiaTileX7Y2 +'{ idx: '{x: 38, y: 2, port_id: 0}, + start_addr: 32'h04600000, + end_addr: 32'h04700000},// MagiaTileX6Y2 +'{ idx: '{x: 37, y: 2, port_id: 0}, + start_addr: 32'h04500000, + end_addr: 32'h04600000},// MagiaTileX5Y2 +'{ idx: '{x: 36, y: 2, port_id: 0}, + start_addr: 32'h04400000, + end_addr: 32'h04500000},// MagiaTileX4Y2 +'{ idx: '{x: 35, y: 2, port_id: 0}, + start_addr: 32'h04300000, + end_addr: 32'h04400000},// MagiaTileX3Y2 +'{ idx: '{x: 34, y: 2, port_id: 0}, + start_addr: 32'h04200000, + end_addr: 32'h04300000},// MagiaTileX2Y2 +'{ idx: '{x: 33, y: 2, port_id: 0}, + start_addr: 32'h04100000, + end_addr: 32'h04200000},// MagiaTileX1Y2 +'{ idx: '{x: 32, y: 2, port_id: 0}, + start_addr: 32'h04000000, + end_addr: 32'h04100000},// MagiaTileX0Y2 +'{ idx: '{x: 63, y: 1, port_id: 0}, + start_addr: 32'h03f00000, + end_addr: 32'h04000000},// MagiaTileX31Y1 +'{ idx: '{x: 62, y: 1, port_id: 0}, + start_addr: 32'h03e00000, + end_addr: 32'h03f00000},// MagiaTileX30Y1 +'{ idx: '{x: 61, y: 1, port_id: 0}, + start_addr: 32'h03d00000, + end_addr: 32'h03e00000},// MagiaTileX29Y1 +'{ idx: '{x: 60, y: 1, port_id: 0}, + start_addr: 32'h03c00000, + end_addr: 32'h03d00000},// MagiaTileX28Y1 +'{ idx: '{x: 59, y: 1, port_id: 0}, + start_addr: 32'h03b00000, + end_addr: 32'h03c00000},// MagiaTileX27Y1 +'{ idx: '{x: 58, y: 1, port_id: 0}, + start_addr: 32'h03a00000, + end_addr: 32'h03b00000},// MagiaTileX26Y1 +'{ idx: '{x: 57, y: 1, port_id: 0}, + start_addr: 32'h03900000, + end_addr: 32'h03a00000},// MagiaTileX25Y1 +'{ idx: '{x: 56, y: 1, port_id: 0}, + start_addr: 32'h03800000, + end_addr: 32'h03900000},// MagiaTileX24Y1 +'{ idx: '{x: 55, y: 1, port_id: 0}, + start_addr: 32'h03700000, + end_addr: 32'h03800000},// MagiaTileX23Y1 +'{ idx: '{x: 54, y: 1, port_id: 0}, + start_addr: 32'h03600000, + end_addr: 32'h03700000},// MagiaTileX22Y1 +'{ idx: '{x: 53, y: 1, port_id: 0}, + start_addr: 32'h03500000, + end_addr: 32'h03600000},// MagiaTileX21Y1 +'{ idx: '{x: 52, y: 1, port_id: 0}, + start_addr: 32'h03400000, + end_addr: 32'h03500000},// MagiaTileX20Y1 +'{ idx: '{x: 51, y: 1, port_id: 0}, + start_addr: 32'h03300000, + end_addr: 32'h03400000},// MagiaTileX19Y1 +'{ idx: '{x: 50, y: 1, port_id: 0}, + start_addr: 32'h03200000, + end_addr: 32'h03300000},// MagiaTileX18Y1 +'{ idx: '{x: 49, y: 1, port_id: 0}, + start_addr: 32'h03100000, + end_addr: 32'h03200000},// MagiaTileX17Y1 +'{ idx: '{x: 48, y: 1, port_id: 0}, + start_addr: 32'h03000000, + end_addr: 32'h03100000},// MagiaTileX16Y1 +'{ idx: '{x: 47, y: 1, port_id: 0}, + start_addr: 32'h02f00000, + end_addr: 32'h03000000},// MagiaTileX15Y1 +'{ idx: '{x: 46, y: 1, port_id: 0}, + start_addr: 32'h02e00000, + end_addr: 32'h02f00000},// MagiaTileX14Y1 +'{ idx: '{x: 45, y: 1, port_id: 0}, + start_addr: 32'h02d00000, + end_addr: 32'h02e00000},// MagiaTileX13Y1 +'{ idx: '{x: 44, y: 1, port_id: 0}, + start_addr: 32'h02c00000, + end_addr: 32'h02d00000},// MagiaTileX12Y1 +'{ idx: '{x: 43, y: 1, port_id: 0}, + start_addr: 32'h02b00000, + end_addr: 32'h02c00000},// MagiaTileX11Y1 +'{ idx: '{x: 42, y: 1, port_id: 0}, + start_addr: 32'h02a00000, + end_addr: 32'h02b00000},// MagiaTileX10Y1 +'{ idx: '{x: 41, y: 1, port_id: 0}, + start_addr: 32'h02900000, + end_addr: 32'h02a00000},// MagiaTileX9Y1 +'{ idx: '{x: 40, y: 1, port_id: 0}, + start_addr: 32'h02800000, + end_addr: 32'h02900000},// MagiaTileX8Y1 +'{ idx: '{x: 39, y: 1, port_id: 0}, + start_addr: 32'h02700000, + end_addr: 32'h02800000},// MagiaTileX7Y1 +'{ idx: '{x: 38, y: 1, port_id: 0}, + start_addr: 32'h02600000, + end_addr: 32'h02700000},// MagiaTileX6Y1 +'{ idx: '{x: 37, y: 1, port_id: 0}, + start_addr: 32'h02500000, + end_addr: 32'h02600000},// MagiaTileX5Y1 +'{ idx: '{x: 36, y: 1, port_id: 0}, + start_addr: 32'h02400000, + end_addr: 32'h02500000},// MagiaTileX4Y1 +'{ idx: '{x: 35, y: 1, port_id: 0}, + start_addr: 32'h02300000, + end_addr: 32'h02400000},// MagiaTileX3Y1 +'{ idx: '{x: 34, y: 1, port_id: 0}, + start_addr: 32'h02200000, + end_addr: 32'h02300000},// MagiaTileX2Y1 +'{ idx: '{x: 33, y: 1, port_id: 0}, + start_addr: 32'h02100000, + end_addr: 32'h02200000},// MagiaTileX1Y1 +'{ idx: '{x: 32, y: 1, port_id: 0}, + start_addr: 32'h02000000, + end_addr: 32'h02100000},// MagiaTileX0Y1 +'{ idx: '{x: 63, y: 0, port_id: 0}, + start_addr: 32'h01f00000, + end_addr: 32'h02000000},// MagiaTileX31Y0 +'{ idx: '{x: 62, y: 0, port_id: 0}, + start_addr: 32'h01e00000, + end_addr: 32'h01f00000},// MagiaTileX30Y0 +'{ idx: '{x: 61, y: 0, port_id: 0}, + start_addr: 32'h01d00000, + end_addr: 32'h01e00000},// MagiaTileX29Y0 +'{ idx: '{x: 60, y: 0, port_id: 0}, + start_addr: 32'h01c00000, + end_addr: 32'h01d00000},// MagiaTileX28Y0 +'{ idx: '{x: 59, y: 0, port_id: 0}, + start_addr: 32'h01b00000, + end_addr: 32'h01c00000},// MagiaTileX27Y0 +'{ idx: '{x: 58, y: 0, port_id: 0}, + start_addr: 32'h01a00000, + end_addr: 32'h01b00000},// MagiaTileX26Y0 +'{ idx: '{x: 57, y: 0, port_id: 0}, + start_addr: 32'h01900000, + end_addr: 32'h01a00000},// MagiaTileX25Y0 +'{ idx: '{x: 56, y: 0, port_id: 0}, + start_addr: 32'h01800000, + end_addr: 32'h01900000},// MagiaTileX24Y0 +'{ idx: '{x: 55, y: 0, port_id: 0}, + start_addr: 32'h01700000, + end_addr: 32'h01800000},// MagiaTileX23Y0 +'{ idx: '{x: 54, y: 0, port_id: 0}, + start_addr: 32'h01600000, + end_addr: 32'h01700000},// MagiaTileX22Y0 +'{ idx: '{x: 53, y: 0, port_id: 0}, + start_addr: 32'h01500000, + end_addr: 32'h01600000},// MagiaTileX21Y0 +'{ idx: '{x: 52, y: 0, port_id: 0}, + start_addr: 32'h01400000, + end_addr: 32'h01500000},// MagiaTileX20Y0 +'{ idx: '{x: 51, y: 0, port_id: 0}, + start_addr: 32'h01300000, + end_addr: 32'h01400000},// MagiaTileX19Y0 +'{ idx: '{x: 50, y: 0, port_id: 0}, + start_addr: 32'h01200000, + end_addr: 32'h01300000},// MagiaTileX18Y0 +'{ idx: '{x: 49, y: 0, port_id: 0}, + start_addr: 32'h01100000, + end_addr: 32'h01200000},// MagiaTileX17Y0 +'{ idx: '{x: 48, y: 0, port_id: 0}, + start_addr: 32'h01000000, + end_addr: 32'h01100000},// MagiaTileX16Y0 +'{ idx: '{x: 47, y: 0, port_id: 0}, + start_addr: 32'h00f00000, + end_addr: 32'h01000000},// MagiaTileX15Y0 +'{ idx: '{x: 46, y: 0, port_id: 0}, + start_addr: 32'h00e00000, + end_addr: 32'h00f00000},// MagiaTileX14Y0 +'{ idx: '{x: 45, y: 0, port_id: 0}, + start_addr: 32'h00d00000, + end_addr: 32'h00e00000},// MagiaTileX13Y0 +'{ idx: '{x: 44, y: 0, port_id: 0}, + start_addr: 32'h00c00000, + end_addr: 32'h00d00000},// MagiaTileX12Y0 +'{ idx: '{x: 43, y: 0, port_id: 0}, + start_addr: 32'h00b00000, + end_addr: 32'h00c00000},// MagiaTileX11Y0 +'{ idx: '{x: 42, y: 0, port_id: 0}, + start_addr: 32'h00a00000, + end_addr: 32'h00b00000},// MagiaTileX10Y0 +'{ idx: '{x: 41, y: 0, port_id: 0}, + start_addr: 32'h00900000, + end_addr: 32'h00a00000},// MagiaTileX9Y0 +'{ idx: '{x: 40, y: 0, port_id: 0}, + start_addr: 32'h00800000, + end_addr: 32'h00900000},// MagiaTileX8Y0 +'{ idx: '{x: 39, y: 0, port_id: 0}, + start_addr: 32'h00700000, + end_addr: 32'h00800000},// MagiaTileX7Y0 +'{ idx: '{x: 38, y: 0, port_id: 0}, + start_addr: 32'h00600000, + end_addr: 32'h00700000},// MagiaTileX6Y0 +'{ idx: '{x: 37, y: 0, port_id: 0}, + start_addr: 32'h00500000, + end_addr: 32'h00600000},// MagiaTileX5Y0 +'{ idx: '{x: 36, y: 0, port_id: 0}, + start_addr: 32'h00400000, + end_addr: 32'h00500000},// MagiaTileX4Y0 +'{ idx: '{x: 35, y: 0, port_id: 0}, + start_addr: 32'h00300000, + end_addr: 32'h00400000},// MagiaTileX3Y0 +'{ idx: '{x: 34, y: 0, port_id: 0}, + start_addr: 32'h00200000, + end_addr: 32'h00300000},// MagiaTileX2Y0 +'{ idx: '{x: 33, y: 0, port_id: 0}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX1Y0 +'{ idx: '{x: 32, y: 0, port_id: 0}, + start_addr: 32'h00000000, + end_addr: 32'h00100000} // MagiaTileX0Y0 + +}; + + localparam int unsigned CollectiveSamNumRules = 1056; + +typedef struct packed { + int unsigned offset; + int unsigned len; + int unsigned base_id; +} collective_mask_sel_t; + +typedef struct packed { + id_t id; + collective_mask_sel_t mask_x; + collective_mask_sel_t mask_y; +} collective_idx_t; + +typedef struct packed { + collective_idx_t idx; + logic [31:0] start_addr; + logic [31:0] end_addr; +} collective_sam_rule_t; + +localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ +'{ idx: '{ id: '{x: 0, y: 31, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hfe000000, + end_addr: 32'h100000000},// L231 +'{ idx: '{ id: '{x: 0, y: 30, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hfc000000, + end_addr: 32'hfe000000},// L230 +'{ idx: '{ id: '{x: 0, y: 29, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hfa000000, + end_addr: 32'hfc000000},// L229 +'{ idx: '{ id: '{x: 0, y: 28, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf8000000, + end_addr: 32'hfa000000},// L228 +'{ idx: '{ id: '{x: 0, y: 27, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf6000000, + end_addr: 32'hf8000000},// L227 +'{ idx: '{ id: '{x: 0, y: 26, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf4000000, + end_addr: 32'hf6000000},// L226 +'{ idx: '{ id: '{x: 0, y: 25, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf2000000, + end_addr: 32'hf4000000},// L225 +'{ idx: '{ id: '{x: 0, y: 24, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hf0000000, + end_addr: 32'hf2000000},// L224 +'{ idx: '{ id: '{x: 0, y: 23, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hee000000, + end_addr: 32'hf0000000},// L223 +'{ idx: '{ id: '{x: 0, y: 22, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hec000000, + end_addr: 32'hee000000},// L222 +'{ idx: '{ id: '{x: 0, y: 21, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hea000000, + end_addr: 32'hec000000},// L221 +'{ idx: '{ id: '{x: 0, y: 20, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he8000000, + end_addr: 32'hea000000},// L220 +'{ idx: '{ id: '{x: 0, y: 19, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he6000000, + end_addr: 32'he8000000},// L219 +'{ idx: '{ id: '{x: 0, y: 18, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he4000000, + end_addr: 32'he6000000},// L218 +'{ idx: '{ id: '{x: 0, y: 17, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he2000000, + end_addr: 32'he4000000},// L217 +'{ idx: '{ id: '{x: 0, y: 16, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'he0000000, + end_addr: 32'he2000000},// L216 +'{ idx: '{ id: '{x: 0, y: 15, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hde000000, + end_addr: 32'he0000000},// L215 +'{ idx: '{ id: '{x: 0, y: 14, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hdc000000, + end_addr: 32'hde000000},// L214 +'{ idx: '{ id: '{x: 0, y: 13, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hda000000, + end_addr: 32'hdc000000},// L213 +'{ idx: '{ id: '{x: 0, y: 12, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd8000000, + end_addr: 32'hda000000},// L212 +'{ idx: '{ id: '{x: 0, y: 11, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd6000000, + end_addr: 32'hd8000000},// L211 +'{ idx: '{ id: '{x: 0, y: 10, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd4000000, + end_addr: 32'hd6000000},// L210 +'{ idx: '{ id: '{x: 0, y: 9, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd2000000, + end_addr: 32'hd4000000},// L29 +'{ idx: '{ id: '{x: 0, y: 8, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hd0000000, + end_addr: 32'hd2000000},// L28 +'{ idx: '{ id: '{x: 0, y: 7, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hce000000, + end_addr: 32'hd0000000},// L27 +'{ idx: '{ id: '{x: 0, y: 6, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hcc000000, + end_addr: 32'hce000000},// L26 +'{ idx: '{ id: '{x: 0, y: 5, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hca000000, + end_addr: 32'hcc000000},// L25 +'{ idx: '{ id: '{x: 0, y: 4, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc8000000, + end_addr: 32'hca000000},// L24 +'{ idx: '{ id: '{x: 0, y: 3, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc6000000, + end_addr: 32'hc8000000},// L23 +'{ idx: '{ id: '{x: 0, y: 2, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc4000000, + end_addr: 32'hc6000000},// L22 +'{ idx: '{ id: '{x: 0, y: 1, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc2000000, + end_addr: 32'hc4000000},// L21 +'{ idx: '{ id: '{x: 0, y: 0, port_id: 0}, + mask_x: '{ default: '0}, + mask_y: '{ default: '0}}, + start_addr: 32'hc0000000, + end_addr: 32'hc2000000},// L20 +'{ idx: '{ id: '{x: 63, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ff00000, + end_addr: 32'h40000000},// MagiaTileX31Y31 +'{ idx: '{ id: '{x: 62, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3fe00000, + end_addr: 32'h3ff00000},// MagiaTileX30Y31 +'{ idx: '{ id: '{x: 61, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3fd00000, + end_addr: 32'h3fe00000},// MagiaTileX29Y31 +'{ idx: '{ id: '{x: 60, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3fc00000, + end_addr: 32'h3fd00000},// MagiaTileX28Y31 +'{ idx: '{ id: '{x: 59, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3fb00000, + end_addr: 32'h3fc00000},// MagiaTileX27Y31 +'{ idx: '{ id: '{x: 58, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3fa00000, + end_addr: 32'h3fb00000},// MagiaTileX26Y31 +'{ idx: '{ id: '{x: 57, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3f900000, + end_addr: 32'h3fa00000},// MagiaTileX25Y31 +'{ idx: '{ id: '{x: 56, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3f800000, + end_addr: 32'h3f900000},// MagiaTileX24Y31 +'{ idx: '{ id: '{x: 55, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3f700000, + end_addr: 32'h3f800000},// MagiaTileX23Y31 +'{ idx: '{ id: '{x: 54, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3f600000, + end_addr: 32'h3f700000},// MagiaTileX22Y31 +'{ idx: '{ id: '{x: 53, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3f500000, + end_addr: 32'h3f600000},// MagiaTileX21Y31 +'{ idx: '{ id: '{x: 52, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3f400000, + end_addr: 32'h3f500000},// MagiaTileX20Y31 +'{ idx: '{ id: '{x: 51, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3f300000, + end_addr: 32'h3f400000},// MagiaTileX19Y31 +'{ idx: '{ id: '{x: 50, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3f200000, + end_addr: 32'h3f300000},// MagiaTileX18Y31 +'{ idx: '{ id: '{x: 49, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3f100000, + end_addr: 32'h3f200000},// MagiaTileX17Y31 +'{ idx: '{ id: '{x: 48, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3f000000, + end_addr: 32'h3f100000},// MagiaTileX16Y31 +'{ idx: '{ id: '{x: 47, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ef00000, + end_addr: 32'h3f000000},// MagiaTileX15Y31 +'{ idx: '{ id: '{x: 46, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ee00000, + end_addr: 32'h3ef00000},// MagiaTileX14Y31 +'{ idx: '{ id: '{x: 45, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ed00000, + end_addr: 32'h3ee00000},// MagiaTileX13Y31 +'{ idx: '{ id: '{x: 44, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ec00000, + end_addr: 32'h3ed00000},// MagiaTileX12Y31 +'{ idx: '{ id: '{x: 43, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3eb00000, + end_addr: 32'h3ec00000},// MagiaTileX11Y31 +'{ idx: '{ id: '{x: 42, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ea00000, + end_addr: 32'h3eb00000},// MagiaTileX10Y31 +'{ idx: '{ id: '{x: 41, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3e900000, + end_addr: 32'h3ea00000},// MagiaTileX9Y31 +'{ idx: '{ id: '{x: 40, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3e800000, + end_addr: 32'h3e900000},// MagiaTileX8Y31 +'{ idx: '{ id: '{x: 39, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3e700000, + end_addr: 32'h3e800000},// MagiaTileX7Y31 +'{ idx: '{ id: '{x: 38, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3e600000, + end_addr: 32'h3e700000},// MagiaTileX6Y31 +'{ idx: '{ id: '{x: 37, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3e500000, + end_addr: 32'h3e600000},// MagiaTileX5Y31 +'{ idx: '{ id: '{x: 36, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3e400000, + end_addr: 32'h3e500000},// MagiaTileX4Y31 +'{ idx: '{ id: '{x: 35, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3e300000, + end_addr: 32'h3e400000},// MagiaTileX3Y31 +'{ idx: '{ id: '{x: 34, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3e200000, + end_addr: 32'h3e300000},// MagiaTileX2Y31 +'{ idx: '{ id: '{x: 33, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3e100000, + end_addr: 32'h3e200000},// MagiaTileX1Y31 +'{ idx: '{ id: '{x: 32, y: 31, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3e000000, + end_addr: 32'h3e100000},// MagiaTileX0Y31 +'{ idx: '{ id: '{x: 63, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3df00000, + end_addr: 32'h3e000000},// MagiaTileX31Y30 +'{ idx: '{ id: '{x: 62, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3de00000, + end_addr: 32'h3df00000},// MagiaTileX30Y30 +'{ idx: '{ id: '{x: 61, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3dd00000, + end_addr: 32'h3de00000},// MagiaTileX29Y30 +'{ idx: '{ id: '{x: 60, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3dc00000, + end_addr: 32'h3dd00000},// MagiaTileX28Y30 +'{ idx: '{ id: '{x: 59, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3db00000, + end_addr: 32'h3dc00000},// MagiaTileX27Y30 +'{ idx: '{ id: '{x: 58, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3da00000, + end_addr: 32'h3db00000},// MagiaTileX26Y30 +'{ idx: '{ id: '{x: 57, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3d900000, + end_addr: 32'h3da00000},// MagiaTileX25Y30 +'{ idx: '{ id: '{x: 56, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3d800000, + end_addr: 32'h3d900000},// MagiaTileX24Y30 +'{ idx: '{ id: '{x: 55, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3d700000, + end_addr: 32'h3d800000},// MagiaTileX23Y30 +'{ idx: '{ id: '{x: 54, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3d600000, + end_addr: 32'h3d700000},// MagiaTileX22Y30 +'{ idx: '{ id: '{x: 53, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3d500000, + end_addr: 32'h3d600000},// MagiaTileX21Y30 +'{ idx: '{ id: '{x: 52, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3d400000, + end_addr: 32'h3d500000},// MagiaTileX20Y30 +'{ idx: '{ id: '{x: 51, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3d300000, + end_addr: 32'h3d400000},// MagiaTileX19Y30 +'{ idx: '{ id: '{x: 50, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3d200000, + end_addr: 32'h3d300000},// MagiaTileX18Y30 +'{ idx: '{ id: '{x: 49, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3d100000, + end_addr: 32'h3d200000},// MagiaTileX17Y30 +'{ idx: '{ id: '{x: 48, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3d000000, + end_addr: 32'h3d100000},// MagiaTileX16Y30 +'{ idx: '{ id: '{x: 47, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3cf00000, + end_addr: 32'h3d000000},// MagiaTileX15Y30 +'{ idx: '{ id: '{x: 46, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ce00000, + end_addr: 32'h3cf00000},// MagiaTileX14Y30 +'{ idx: '{ id: '{x: 45, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3cd00000, + end_addr: 32'h3ce00000},// MagiaTileX13Y30 +'{ idx: '{ id: '{x: 44, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3cc00000, + end_addr: 32'h3cd00000},// MagiaTileX12Y30 +'{ idx: '{ id: '{x: 43, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3cb00000, + end_addr: 32'h3cc00000},// MagiaTileX11Y30 +'{ idx: '{ id: '{x: 42, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ca00000, + end_addr: 32'h3cb00000},// MagiaTileX10Y30 +'{ idx: '{ id: '{x: 41, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3c900000, + end_addr: 32'h3ca00000},// MagiaTileX9Y30 +'{ idx: '{ id: '{x: 40, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3c800000, + end_addr: 32'h3c900000},// MagiaTileX8Y30 +'{ idx: '{ id: '{x: 39, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3c700000, + end_addr: 32'h3c800000},// MagiaTileX7Y30 +'{ idx: '{ id: '{x: 38, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3c600000, + end_addr: 32'h3c700000},// MagiaTileX6Y30 +'{ idx: '{ id: '{x: 37, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3c500000, + end_addr: 32'h3c600000},// MagiaTileX5Y30 +'{ idx: '{ id: '{x: 36, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3c400000, + end_addr: 32'h3c500000},// MagiaTileX4Y30 +'{ idx: '{ id: '{x: 35, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3c300000, + end_addr: 32'h3c400000},// MagiaTileX3Y30 +'{ idx: '{ id: '{x: 34, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3c200000, + end_addr: 32'h3c300000},// MagiaTileX2Y30 +'{ idx: '{ id: '{x: 33, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3c100000, + end_addr: 32'h3c200000},// MagiaTileX1Y30 +'{ idx: '{ id: '{x: 32, y: 30, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3c000000, + end_addr: 32'h3c100000},// MagiaTileX0Y30 +'{ idx: '{ id: '{x: 63, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3bf00000, + end_addr: 32'h3c000000},// MagiaTileX31Y29 +'{ idx: '{ id: '{x: 62, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3be00000, + end_addr: 32'h3bf00000},// MagiaTileX30Y29 +'{ idx: '{ id: '{x: 61, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3bd00000, + end_addr: 32'h3be00000},// MagiaTileX29Y29 +'{ idx: '{ id: '{x: 60, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3bc00000, + end_addr: 32'h3bd00000},// MagiaTileX28Y29 +'{ idx: '{ id: '{x: 59, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3bb00000, + end_addr: 32'h3bc00000},// MagiaTileX27Y29 +'{ idx: '{ id: '{x: 58, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ba00000, + end_addr: 32'h3bb00000},// MagiaTileX26Y29 +'{ idx: '{ id: '{x: 57, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3b900000, + end_addr: 32'h3ba00000},// MagiaTileX25Y29 +'{ idx: '{ id: '{x: 56, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3b800000, + end_addr: 32'h3b900000},// MagiaTileX24Y29 +'{ idx: '{ id: '{x: 55, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3b700000, + end_addr: 32'h3b800000},// MagiaTileX23Y29 +'{ idx: '{ id: '{x: 54, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3b600000, + end_addr: 32'h3b700000},// MagiaTileX22Y29 +'{ idx: '{ id: '{x: 53, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3b500000, + end_addr: 32'h3b600000},// MagiaTileX21Y29 +'{ idx: '{ id: '{x: 52, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3b400000, + end_addr: 32'h3b500000},// MagiaTileX20Y29 +'{ idx: '{ id: '{x: 51, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3b300000, + end_addr: 32'h3b400000},// MagiaTileX19Y29 +'{ idx: '{ id: '{x: 50, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3b200000, + end_addr: 32'h3b300000},// MagiaTileX18Y29 +'{ idx: '{ id: '{x: 49, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3b100000, + end_addr: 32'h3b200000},// MagiaTileX17Y29 +'{ idx: '{ id: '{x: 48, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3b000000, + end_addr: 32'h3b100000},// MagiaTileX16Y29 +'{ idx: '{ id: '{x: 47, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3af00000, + end_addr: 32'h3b000000},// MagiaTileX15Y29 +'{ idx: '{ id: '{x: 46, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ae00000, + end_addr: 32'h3af00000},// MagiaTileX14Y29 +'{ idx: '{ id: '{x: 45, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ad00000, + end_addr: 32'h3ae00000},// MagiaTileX13Y29 +'{ idx: '{ id: '{x: 44, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ac00000, + end_addr: 32'h3ad00000},// MagiaTileX12Y29 +'{ idx: '{ id: '{x: 43, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3ab00000, + end_addr: 32'h3ac00000},// MagiaTileX11Y29 +'{ idx: '{ id: '{x: 42, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3aa00000, + end_addr: 32'h3ab00000},// MagiaTileX10Y29 +'{ idx: '{ id: '{x: 41, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3a900000, + end_addr: 32'h3aa00000},// MagiaTileX9Y29 +'{ idx: '{ id: '{x: 40, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3a800000, + end_addr: 32'h3a900000},// MagiaTileX8Y29 +'{ idx: '{ id: '{x: 39, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3a700000, + end_addr: 32'h3a800000},// MagiaTileX7Y29 +'{ idx: '{ id: '{x: 38, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3a600000, + end_addr: 32'h3a700000},// MagiaTileX6Y29 +'{ idx: '{ id: '{x: 37, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3a500000, + end_addr: 32'h3a600000},// MagiaTileX5Y29 +'{ idx: '{ id: '{x: 36, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3a400000, + end_addr: 32'h3a500000},// MagiaTileX4Y29 +'{ idx: '{ id: '{x: 35, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3a300000, + end_addr: 32'h3a400000},// MagiaTileX3Y29 +'{ idx: '{ id: '{x: 34, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3a200000, + end_addr: 32'h3a300000},// MagiaTileX2Y29 +'{ idx: '{ id: '{x: 33, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3a100000, + end_addr: 32'h3a200000},// MagiaTileX1Y29 +'{ idx: '{ id: '{x: 32, y: 29, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h3a000000, + end_addr: 32'h3a100000},// MagiaTileX0Y29 +'{ idx: '{ id: '{x: 63, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39f00000, + end_addr: 32'h3a000000},// MagiaTileX31Y28 +'{ idx: '{ id: '{x: 62, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39e00000, + end_addr: 32'h39f00000},// MagiaTileX30Y28 +'{ idx: '{ id: '{x: 61, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39d00000, + end_addr: 32'h39e00000},// MagiaTileX29Y28 +'{ idx: '{ id: '{x: 60, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39c00000, + end_addr: 32'h39d00000},// MagiaTileX28Y28 +'{ idx: '{ id: '{x: 59, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39b00000, + end_addr: 32'h39c00000},// MagiaTileX27Y28 +'{ idx: '{ id: '{x: 58, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39a00000, + end_addr: 32'h39b00000},// MagiaTileX26Y28 +'{ idx: '{ id: '{x: 57, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39900000, + end_addr: 32'h39a00000},// MagiaTileX25Y28 +'{ idx: '{ id: '{x: 56, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39800000, + end_addr: 32'h39900000},// MagiaTileX24Y28 +'{ idx: '{ id: '{x: 55, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39700000, + end_addr: 32'h39800000},// MagiaTileX23Y28 +'{ idx: '{ id: '{x: 54, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39600000, + end_addr: 32'h39700000},// MagiaTileX22Y28 +'{ idx: '{ id: '{x: 53, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39500000, + end_addr: 32'h39600000},// MagiaTileX21Y28 +'{ idx: '{ id: '{x: 52, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39400000, + end_addr: 32'h39500000},// MagiaTileX20Y28 +'{ idx: '{ id: '{x: 51, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39300000, + end_addr: 32'h39400000},// MagiaTileX19Y28 +'{ idx: '{ id: '{x: 50, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39200000, + end_addr: 32'h39300000},// MagiaTileX18Y28 +'{ idx: '{ id: '{x: 49, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39100000, + end_addr: 32'h39200000},// MagiaTileX17Y28 +'{ idx: '{ id: '{x: 48, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h39000000, + end_addr: 32'h39100000},// MagiaTileX16Y28 +'{ idx: '{ id: '{x: 47, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38f00000, + end_addr: 32'h39000000},// MagiaTileX15Y28 +'{ idx: '{ id: '{x: 46, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38e00000, + end_addr: 32'h38f00000},// MagiaTileX14Y28 +'{ idx: '{ id: '{x: 45, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38d00000, + end_addr: 32'h38e00000},// MagiaTileX13Y28 +'{ idx: '{ id: '{x: 44, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38c00000, + end_addr: 32'h38d00000},// MagiaTileX12Y28 +'{ idx: '{ id: '{x: 43, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38b00000, + end_addr: 32'h38c00000},// MagiaTileX11Y28 +'{ idx: '{ id: '{x: 42, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38a00000, + end_addr: 32'h38b00000},// MagiaTileX10Y28 +'{ idx: '{ id: '{x: 41, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38900000, + end_addr: 32'h38a00000},// MagiaTileX9Y28 +'{ idx: '{ id: '{x: 40, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38800000, + end_addr: 32'h38900000},// MagiaTileX8Y28 +'{ idx: '{ id: '{x: 39, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38700000, + end_addr: 32'h38800000},// MagiaTileX7Y28 +'{ idx: '{ id: '{x: 38, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38600000, + end_addr: 32'h38700000},// MagiaTileX6Y28 +'{ idx: '{ id: '{x: 37, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38500000, + end_addr: 32'h38600000},// MagiaTileX5Y28 +'{ idx: '{ id: '{x: 36, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38400000, + end_addr: 32'h38500000},// MagiaTileX4Y28 +'{ idx: '{ id: '{x: 35, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38300000, + end_addr: 32'h38400000},// MagiaTileX3Y28 +'{ idx: '{ id: '{x: 34, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38200000, + end_addr: 32'h38300000},// MagiaTileX2Y28 +'{ idx: '{ id: '{x: 33, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38100000, + end_addr: 32'h38200000},// MagiaTileX1Y28 +'{ idx: '{ id: '{x: 32, y: 28, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h38000000, + end_addr: 32'h38100000},// MagiaTileX0Y28 +'{ idx: '{ id: '{x: 63, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37f00000, + end_addr: 32'h38000000},// MagiaTileX31Y27 +'{ idx: '{ id: '{x: 62, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37e00000, + end_addr: 32'h37f00000},// MagiaTileX30Y27 +'{ idx: '{ id: '{x: 61, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37d00000, + end_addr: 32'h37e00000},// MagiaTileX29Y27 +'{ idx: '{ id: '{x: 60, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37c00000, + end_addr: 32'h37d00000},// MagiaTileX28Y27 +'{ idx: '{ id: '{x: 59, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37b00000, + end_addr: 32'h37c00000},// MagiaTileX27Y27 +'{ idx: '{ id: '{x: 58, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37a00000, + end_addr: 32'h37b00000},// MagiaTileX26Y27 +'{ idx: '{ id: '{x: 57, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37900000, + end_addr: 32'h37a00000},// MagiaTileX25Y27 +'{ idx: '{ id: '{x: 56, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37800000, + end_addr: 32'h37900000},// MagiaTileX24Y27 +'{ idx: '{ id: '{x: 55, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37700000, + end_addr: 32'h37800000},// MagiaTileX23Y27 +'{ idx: '{ id: '{x: 54, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37600000, + end_addr: 32'h37700000},// MagiaTileX22Y27 +'{ idx: '{ id: '{x: 53, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37500000, + end_addr: 32'h37600000},// MagiaTileX21Y27 +'{ idx: '{ id: '{x: 52, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37400000, + end_addr: 32'h37500000},// MagiaTileX20Y27 +'{ idx: '{ id: '{x: 51, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37300000, + end_addr: 32'h37400000},// MagiaTileX19Y27 +'{ idx: '{ id: '{x: 50, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37200000, + end_addr: 32'h37300000},// MagiaTileX18Y27 +'{ idx: '{ id: '{x: 49, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37100000, + end_addr: 32'h37200000},// MagiaTileX17Y27 +'{ idx: '{ id: '{x: 48, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h37000000, + end_addr: 32'h37100000},// MagiaTileX16Y27 +'{ idx: '{ id: '{x: 47, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36f00000, + end_addr: 32'h37000000},// MagiaTileX15Y27 +'{ idx: '{ id: '{x: 46, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36e00000, + end_addr: 32'h36f00000},// MagiaTileX14Y27 +'{ idx: '{ id: '{x: 45, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36d00000, + end_addr: 32'h36e00000},// MagiaTileX13Y27 +'{ idx: '{ id: '{x: 44, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36c00000, + end_addr: 32'h36d00000},// MagiaTileX12Y27 +'{ idx: '{ id: '{x: 43, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36b00000, + end_addr: 32'h36c00000},// MagiaTileX11Y27 +'{ idx: '{ id: '{x: 42, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36a00000, + end_addr: 32'h36b00000},// MagiaTileX10Y27 +'{ idx: '{ id: '{x: 41, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36900000, + end_addr: 32'h36a00000},// MagiaTileX9Y27 +'{ idx: '{ id: '{x: 40, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36800000, + end_addr: 32'h36900000},// MagiaTileX8Y27 +'{ idx: '{ id: '{x: 39, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36700000, + end_addr: 32'h36800000},// MagiaTileX7Y27 +'{ idx: '{ id: '{x: 38, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36600000, + end_addr: 32'h36700000},// MagiaTileX6Y27 +'{ idx: '{ id: '{x: 37, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36500000, + end_addr: 32'h36600000},// MagiaTileX5Y27 +'{ idx: '{ id: '{x: 36, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36400000, + end_addr: 32'h36500000},// MagiaTileX4Y27 +'{ idx: '{ id: '{x: 35, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36300000, + end_addr: 32'h36400000},// MagiaTileX3Y27 +'{ idx: '{ id: '{x: 34, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36200000, + end_addr: 32'h36300000},// MagiaTileX2Y27 +'{ idx: '{ id: '{x: 33, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36100000, + end_addr: 32'h36200000},// MagiaTileX1Y27 +'{ idx: '{ id: '{x: 32, y: 27, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h36000000, + end_addr: 32'h36100000},// MagiaTileX0Y27 +'{ idx: '{ id: '{x: 63, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35f00000, + end_addr: 32'h36000000},// MagiaTileX31Y26 +'{ idx: '{ id: '{x: 62, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35e00000, + end_addr: 32'h35f00000},// MagiaTileX30Y26 +'{ idx: '{ id: '{x: 61, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35d00000, + end_addr: 32'h35e00000},// MagiaTileX29Y26 +'{ idx: '{ id: '{x: 60, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35c00000, + end_addr: 32'h35d00000},// MagiaTileX28Y26 +'{ idx: '{ id: '{x: 59, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35b00000, + end_addr: 32'h35c00000},// MagiaTileX27Y26 +'{ idx: '{ id: '{x: 58, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35a00000, + end_addr: 32'h35b00000},// MagiaTileX26Y26 +'{ idx: '{ id: '{x: 57, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35900000, + end_addr: 32'h35a00000},// MagiaTileX25Y26 +'{ idx: '{ id: '{x: 56, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35800000, + end_addr: 32'h35900000},// MagiaTileX24Y26 +'{ idx: '{ id: '{x: 55, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35700000, + end_addr: 32'h35800000},// MagiaTileX23Y26 +'{ idx: '{ id: '{x: 54, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35600000, + end_addr: 32'h35700000},// MagiaTileX22Y26 +'{ idx: '{ id: '{x: 53, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35500000, + end_addr: 32'h35600000},// MagiaTileX21Y26 +'{ idx: '{ id: '{x: 52, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35400000, + end_addr: 32'h35500000},// MagiaTileX20Y26 +'{ idx: '{ id: '{x: 51, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35300000, + end_addr: 32'h35400000},// MagiaTileX19Y26 +'{ idx: '{ id: '{x: 50, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35200000, + end_addr: 32'h35300000},// MagiaTileX18Y26 +'{ idx: '{ id: '{x: 49, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35100000, + end_addr: 32'h35200000},// MagiaTileX17Y26 +'{ idx: '{ id: '{x: 48, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h35000000, + end_addr: 32'h35100000},// MagiaTileX16Y26 +'{ idx: '{ id: '{x: 47, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34f00000, + end_addr: 32'h35000000},// MagiaTileX15Y26 +'{ idx: '{ id: '{x: 46, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34e00000, + end_addr: 32'h34f00000},// MagiaTileX14Y26 +'{ idx: '{ id: '{x: 45, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34d00000, + end_addr: 32'h34e00000},// MagiaTileX13Y26 +'{ idx: '{ id: '{x: 44, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34c00000, + end_addr: 32'h34d00000},// MagiaTileX12Y26 +'{ idx: '{ id: '{x: 43, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34b00000, + end_addr: 32'h34c00000},// MagiaTileX11Y26 +'{ idx: '{ id: '{x: 42, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34a00000, + end_addr: 32'h34b00000},// MagiaTileX10Y26 +'{ idx: '{ id: '{x: 41, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34900000, + end_addr: 32'h34a00000},// MagiaTileX9Y26 +'{ idx: '{ id: '{x: 40, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34800000, + end_addr: 32'h34900000},// MagiaTileX8Y26 +'{ idx: '{ id: '{x: 39, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34700000, + end_addr: 32'h34800000},// MagiaTileX7Y26 +'{ idx: '{ id: '{x: 38, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34600000, + end_addr: 32'h34700000},// MagiaTileX6Y26 +'{ idx: '{ id: '{x: 37, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34500000, + end_addr: 32'h34600000},// MagiaTileX5Y26 +'{ idx: '{ id: '{x: 36, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34400000, + end_addr: 32'h34500000},// MagiaTileX4Y26 +'{ idx: '{ id: '{x: 35, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34300000, + end_addr: 32'h34400000},// MagiaTileX3Y26 +'{ idx: '{ id: '{x: 34, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34200000, + end_addr: 32'h34300000},// MagiaTileX2Y26 +'{ idx: '{ id: '{x: 33, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34100000, + end_addr: 32'h34200000},// MagiaTileX1Y26 +'{ idx: '{ id: '{x: 32, y: 26, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h34000000, + end_addr: 32'h34100000},// MagiaTileX0Y26 +'{ idx: '{ id: '{x: 63, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33f00000, + end_addr: 32'h34000000},// MagiaTileX31Y25 +'{ idx: '{ id: '{x: 62, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33e00000, + end_addr: 32'h33f00000},// MagiaTileX30Y25 +'{ idx: '{ id: '{x: 61, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33d00000, + end_addr: 32'h33e00000},// MagiaTileX29Y25 +'{ idx: '{ id: '{x: 60, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33c00000, + end_addr: 32'h33d00000},// MagiaTileX28Y25 +'{ idx: '{ id: '{x: 59, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33b00000, + end_addr: 32'h33c00000},// MagiaTileX27Y25 +'{ idx: '{ id: '{x: 58, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33a00000, + end_addr: 32'h33b00000},// MagiaTileX26Y25 +'{ idx: '{ id: '{x: 57, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33900000, + end_addr: 32'h33a00000},// MagiaTileX25Y25 +'{ idx: '{ id: '{x: 56, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33800000, + end_addr: 32'h33900000},// MagiaTileX24Y25 +'{ idx: '{ id: '{x: 55, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33700000, + end_addr: 32'h33800000},// MagiaTileX23Y25 +'{ idx: '{ id: '{x: 54, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33600000, + end_addr: 32'h33700000},// MagiaTileX22Y25 +'{ idx: '{ id: '{x: 53, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33500000, + end_addr: 32'h33600000},// MagiaTileX21Y25 +'{ idx: '{ id: '{x: 52, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33400000, + end_addr: 32'h33500000},// MagiaTileX20Y25 +'{ idx: '{ id: '{x: 51, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33300000, + end_addr: 32'h33400000},// MagiaTileX19Y25 +'{ idx: '{ id: '{x: 50, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33200000, + end_addr: 32'h33300000},// MagiaTileX18Y25 +'{ idx: '{ id: '{x: 49, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33100000, + end_addr: 32'h33200000},// MagiaTileX17Y25 +'{ idx: '{ id: '{x: 48, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h33000000, + end_addr: 32'h33100000},// MagiaTileX16Y25 +'{ idx: '{ id: '{x: 47, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32f00000, + end_addr: 32'h33000000},// MagiaTileX15Y25 +'{ idx: '{ id: '{x: 46, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32e00000, + end_addr: 32'h32f00000},// MagiaTileX14Y25 +'{ idx: '{ id: '{x: 45, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32d00000, + end_addr: 32'h32e00000},// MagiaTileX13Y25 +'{ idx: '{ id: '{x: 44, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32c00000, + end_addr: 32'h32d00000},// MagiaTileX12Y25 +'{ idx: '{ id: '{x: 43, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32b00000, + end_addr: 32'h32c00000},// MagiaTileX11Y25 +'{ idx: '{ id: '{x: 42, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32a00000, + end_addr: 32'h32b00000},// MagiaTileX10Y25 +'{ idx: '{ id: '{x: 41, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32900000, + end_addr: 32'h32a00000},// MagiaTileX9Y25 +'{ idx: '{ id: '{x: 40, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32800000, + end_addr: 32'h32900000},// MagiaTileX8Y25 +'{ idx: '{ id: '{x: 39, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32700000, + end_addr: 32'h32800000},// MagiaTileX7Y25 +'{ idx: '{ id: '{x: 38, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32600000, + end_addr: 32'h32700000},// MagiaTileX6Y25 +'{ idx: '{ id: '{x: 37, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32500000, + end_addr: 32'h32600000},// MagiaTileX5Y25 +'{ idx: '{ id: '{x: 36, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32400000, + end_addr: 32'h32500000},// MagiaTileX4Y25 +'{ idx: '{ id: '{x: 35, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32300000, + end_addr: 32'h32400000},// MagiaTileX3Y25 +'{ idx: '{ id: '{x: 34, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32200000, + end_addr: 32'h32300000},// MagiaTileX2Y25 +'{ idx: '{ id: '{x: 33, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32100000, + end_addr: 32'h32200000},// MagiaTileX1Y25 +'{ idx: '{ id: '{x: 32, y: 25, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h32000000, + end_addr: 32'h32100000},// MagiaTileX0Y25 +'{ idx: '{ id: '{x: 63, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31f00000, + end_addr: 32'h32000000},// MagiaTileX31Y24 +'{ idx: '{ id: '{x: 62, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31e00000, + end_addr: 32'h31f00000},// MagiaTileX30Y24 +'{ idx: '{ id: '{x: 61, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31d00000, + end_addr: 32'h31e00000},// MagiaTileX29Y24 +'{ idx: '{ id: '{x: 60, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31c00000, + end_addr: 32'h31d00000},// MagiaTileX28Y24 +'{ idx: '{ id: '{x: 59, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31b00000, + end_addr: 32'h31c00000},// MagiaTileX27Y24 +'{ idx: '{ id: '{x: 58, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31a00000, + end_addr: 32'h31b00000},// MagiaTileX26Y24 +'{ idx: '{ id: '{x: 57, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31900000, + end_addr: 32'h31a00000},// MagiaTileX25Y24 +'{ idx: '{ id: '{x: 56, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31800000, + end_addr: 32'h31900000},// MagiaTileX24Y24 +'{ idx: '{ id: '{x: 55, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31700000, + end_addr: 32'h31800000},// MagiaTileX23Y24 +'{ idx: '{ id: '{x: 54, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31600000, + end_addr: 32'h31700000},// MagiaTileX22Y24 +'{ idx: '{ id: '{x: 53, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31500000, + end_addr: 32'h31600000},// MagiaTileX21Y24 +'{ idx: '{ id: '{x: 52, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31400000, + end_addr: 32'h31500000},// MagiaTileX20Y24 +'{ idx: '{ id: '{x: 51, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31300000, + end_addr: 32'h31400000},// MagiaTileX19Y24 +'{ idx: '{ id: '{x: 50, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31200000, + end_addr: 32'h31300000},// MagiaTileX18Y24 +'{ idx: '{ id: '{x: 49, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31100000, + end_addr: 32'h31200000},// MagiaTileX17Y24 +'{ idx: '{ id: '{x: 48, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h31000000, + end_addr: 32'h31100000},// MagiaTileX16Y24 +'{ idx: '{ id: '{x: 47, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30f00000, + end_addr: 32'h31000000},// MagiaTileX15Y24 +'{ idx: '{ id: '{x: 46, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30e00000, + end_addr: 32'h30f00000},// MagiaTileX14Y24 +'{ idx: '{ id: '{x: 45, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30d00000, + end_addr: 32'h30e00000},// MagiaTileX13Y24 +'{ idx: '{ id: '{x: 44, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30c00000, + end_addr: 32'h30d00000},// MagiaTileX12Y24 +'{ idx: '{ id: '{x: 43, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30b00000, + end_addr: 32'h30c00000},// MagiaTileX11Y24 +'{ idx: '{ id: '{x: 42, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30a00000, + end_addr: 32'h30b00000},// MagiaTileX10Y24 +'{ idx: '{ id: '{x: 41, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30900000, + end_addr: 32'h30a00000},// MagiaTileX9Y24 +'{ idx: '{ id: '{x: 40, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30800000, + end_addr: 32'h30900000},// MagiaTileX8Y24 +'{ idx: '{ id: '{x: 39, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30700000, + end_addr: 32'h30800000},// MagiaTileX7Y24 +'{ idx: '{ id: '{x: 38, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30600000, + end_addr: 32'h30700000},// MagiaTileX6Y24 +'{ idx: '{ id: '{x: 37, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30500000, + end_addr: 32'h30600000},// MagiaTileX5Y24 +'{ idx: '{ id: '{x: 36, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30400000, + end_addr: 32'h30500000},// MagiaTileX4Y24 +'{ idx: '{ id: '{x: 35, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30300000, + end_addr: 32'h30400000},// MagiaTileX3Y24 +'{ idx: '{ id: '{x: 34, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30200000, + end_addr: 32'h30300000},// MagiaTileX2Y24 +'{ idx: '{ id: '{x: 33, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30100000, + end_addr: 32'h30200000},// MagiaTileX1Y24 +'{ idx: '{ id: '{x: 32, y: 24, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h30000000, + end_addr: 32'h30100000},// MagiaTileX0Y24 +'{ idx: '{ id: '{x: 63, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ff00000, + end_addr: 32'h30000000},// MagiaTileX31Y23 +'{ idx: '{ id: '{x: 62, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2fe00000, + end_addr: 32'h2ff00000},// MagiaTileX30Y23 +'{ idx: '{ id: '{x: 61, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2fd00000, + end_addr: 32'h2fe00000},// MagiaTileX29Y23 +'{ idx: '{ id: '{x: 60, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2fc00000, + end_addr: 32'h2fd00000},// MagiaTileX28Y23 +'{ idx: '{ id: '{x: 59, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2fb00000, + end_addr: 32'h2fc00000},// MagiaTileX27Y23 +'{ idx: '{ id: '{x: 58, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2fa00000, + end_addr: 32'h2fb00000},// MagiaTileX26Y23 +'{ idx: '{ id: '{x: 57, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2f900000, + end_addr: 32'h2fa00000},// MagiaTileX25Y23 +'{ idx: '{ id: '{x: 56, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2f800000, + end_addr: 32'h2f900000},// MagiaTileX24Y23 +'{ idx: '{ id: '{x: 55, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2f700000, + end_addr: 32'h2f800000},// MagiaTileX23Y23 +'{ idx: '{ id: '{x: 54, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2f600000, + end_addr: 32'h2f700000},// MagiaTileX22Y23 +'{ idx: '{ id: '{x: 53, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2f500000, + end_addr: 32'h2f600000},// MagiaTileX21Y23 +'{ idx: '{ id: '{x: 52, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2f400000, + end_addr: 32'h2f500000},// MagiaTileX20Y23 +'{ idx: '{ id: '{x: 51, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2f300000, + end_addr: 32'h2f400000},// MagiaTileX19Y23 +'{ idx: '{ id: '{x: 50, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2f200000, + end_addr: 32'h2f300000},// MagiaTileX18Y23 +'{ idx: '{ id: '{x: 49, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2f100000, + end_addr: 32'h2f200000},// MagiaTileX17Y23 +'{ idx: '{ id: '{x: 48, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2f000000, + end_addr: 32'h2f100000},// MagiaTileX16Y23 +'{ idx: '{ id: '{x: 47, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ef00000, + end_addr: 32'h2f000000},// MagiaTileX15Y23 +'{ idx: '{ id: '{x: 46, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ee00000, + end_addr: 32'h2ef00000},// MagiaTileX14Y23 +'{ idx: '{ id: '{x: 45, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ed00000, + end_addr: 32'h2ee00000},// MagiaTileX13Y23 +'{ idx: '{ id: '{x: 44, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ec00000, + end_addr: 32'h2ed00000},// MagiaTileX12Y23 +'{ idx: '{ id: '{x: 43, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2eb00000, + end_addr: 32'h2ec00000},// MagiaTileX11Y23 +'{ idx: '{ id: '{x: 42, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ea00000, + end_addr: 32'h2eb00000},// MagiaTileX10Y23 +'{ idx: '{ id: '{x: 41, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2e900000, + end_addr: 32'h2ea00000},// MagiaTileX9Y23 +'{ idx: '{ id: '{x: 40, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2e800000, + end_addr: 32'h2e900000},// MagiaTileX8Y23 +'{ idx: '{ id: '{x: 39, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2e700000, + end_addr: 32'h2e800000},// MagiaTileX7Y23 +'{ idx: '{ id: '{x: 38, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2e600000, + end_addr: 32'h2e700000},// MagiaTileX6Y23 +'{ idx: '{ id: '{x: 37, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2e500000, + end_addr: 32'h2e600000},// MagiaTileX5Y23 +'{ idx: '{ id: '{x: 36, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2e400000, + end_addr: 32'h2e500000},// MagiaTileX4Y23 +'{ idx: '{ id: '{x: 35, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2e300000, + end_addr: 32'h2e400000},// MagiaTileX3Y23 +'{ idx: '{ id: '{x: 34, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2e200000, + end_addr: 32'h2e300000},// MagiaTileX2Y23 +'{ idx: '{ id: '{x: 33, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2e100000, + end_addr: 32'h2e200000},// MagiaTileX1Y23 +'{ idx: '{ id: '{x: 32, y: 23, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2e000000, + end_addr: 32'h2e100000},// MagiaTileX0Y23 +'{ idx: '{ id: '{x: 63, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2df00000, + end_addr: 32'h2e000000},// MagiaTileX31Y22 +'{ idx: '{ id: '{x: 62, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2de00000, + end_addr: 32'h2df00000},// MagiaTileX30Y22 +'{ idx: '{ id: '{x: 61, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2dd00000, + end_addr: 32'h2de00000},// MagiaTileX29Y22 +'{ idx: '{ id: '{x: 60, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2dc00000, + end_addr: 32'h2dd00000},// MagiaTileX28Y22 +'{ idx: '{ id: '{x: 59, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2db00000, + end_addr: 32'h2dc00000},// MagiaTileX27Y22 +'{ idx: '{ id: '{x: 58, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2da00000, + end_addr: 32'h2db00000},// MagiaTileX26Y22 +'{ idx: '{ id: '{x: 57, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2d900000, + end_addr: 32'h2da00000},// MagiaTileX25Y22 +'{ idx: '{ id: '{x: 56, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2d800000, + end_addr: 32'h2d900000},// MagiaTileX24Y22 +'{ idx: '{ id: '{x: 55, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2d700000, + end_addr: 32'h2d800000},// MagiaTileX23Y22 +'{ idx: '{ id: '{x: 54, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2d600000, + end_addr: 32'h2d700000},// MagiaTileX22Y22 +'{ idx: '{ id: '{x: 53, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2d500000, + end_addr: 32'h2d600000},// MagiaTileX21Y22 +'{ idx: '{ id: '{x: 52, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2d400000, + end_addr: 32'h2d500000},// MagiaTileX20Y22 +'{ idx: '{ id: '{x: 51, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2d300000, + end_addr: 32'h2d400000},// MagiaTileX19Y22 +'{ idx: '{ id: '{x: 50, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2d200000, + end_addr: 32'h2d300000},// MagiaTileX18Y22 +'{ idx: '{ id: '{x: 49, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2d100000, + end_addr: 32'h2d200000},// MagiaTileX17Y22 +'{ idx: '{ id: '{x: 48, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2d000000, + end_addr: 32'h2d100000},// MagiaTileX16Y22 +'{ idx: '{ id: '{x: 47, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2cf00000, + end_addr: 32'h2d000000},// MagiaTileX15Y22 +'{ idx: '{ id: '{x: 46, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ce00000, + end_addr: 32'h2cf00000},// MagiaTileX14Y22 +'{ idx: '{ id: '{x: 45, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2cd00000, + end_addr: 32'h2ce00000},// MagiaTileX13Y22 +'{ idx: '{ id: '{x: 44, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2cc00000, + end_addr: 32'h2cd00000},// MagiaTileX12Y22 +'{ idx: '{ id: '{x: 43, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2cb00000, + end_addr: 32'h2cc00000},// MagiaTileX11Y22 +'{ idx: '{ id: '{x: 42, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ca00000, + end_addr: 32'h2cb00000},// MagiaTileX10Y22 +'{ idx: '{ id: '{x: 41, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2c900000, + end_addr: 32'h2ca00000},// MagiaTileX9Y22 +'{ idx: '{ id: '{x: 40, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2c800000, + end_addr: 32'h2c900000},// MagiaTileX8Y22 +'{ idx: '{ id: '{x: 39, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2c700000, + end_addr: 32'h2c800000},// MagiaTileX7Y22 +'{ idx: '{ id: '{x: 38, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2c600000, + end_addr: 32'h2c700000},// MagiaTileX6Y22 +'{ idx: '{ id: '{x: 37, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2c500000, + end_addr: 32'h2c600000},// MagiaTileX5Y22 +'{ idx: '{ id: '{x: 36, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2c400000, + end_addr: 32'h2c500000},// MagiaTileX4Y22 +'{ idx: '{ id: '{x: 35, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2c300000, + end_addr: 32'h2c400000},// MagiaTileX3Y22 +'{ idx: '{ id: '{x: 34, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2c200000, + end_addr: 32'h2c300000},// MagiaTileX2Y22 +'{ idx: '{ id: '{x: 33, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2c100000, + end_addr: 32'h2c200000},// MagiaTileX1Y22 +'{ idx: '{ id: '{x: 32, y: 22, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2c000000, + end_addr: 32'h2c100000},// MagiaTileX0Y22 +'{ idx: '{ id: '{x: 63, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2bf00000, + end_addr: 32'h2c000000},// MagiaTileX31Y21 +'{ idx: '{ id: '{x: 62, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2be00000, + end_addr: 32'h2bf00000},// MagiaTileX30Y21 +'{ idx: '{ id: '{x: 61, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2bd00000, + end_addr: 32'h2be00000},// MagiaTileX29Y21 +'{ idx: '{ id: '{x: 60, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2bc00000, + end_addr: 32'h2bd00000},// MagiaTileX28Y21 +'{ idx: '{ id: '{x: 59, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2bb00000, + end_addr: 32'h2bc00000},// MagiaTileX27Y21 +'{ idx: '{ id: '{x: 58, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ba00000, + end_addr: 32'h2bb00000},// MagiaTileX26Y21 +'{ idx: '{ id: '{x: 57, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2b900000, + end_addr: 32'h2ba00000},// MagiaTileX25Y21 +'{ idx: '{ id: '{x: 56, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2b800000, + end_addr: 32'h2b900000},// MagiaTileX24Y21 +'{ idx: '{ id: '{x: 55, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2b700000, + end_addr: 32'h2b800000},// MagiaTileX23Y21 +'{ idx: '{ id: '{x: 54, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2b600000, + end_addr: 32'h2b700000},// MagiaTileX22Y21 +'{ idx: '{ id: '{x: 53, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2b500000, + end_addr: 32'h2b600000},// MagiaTileX21Y21 +'{ idx: '{ id: '{x: 52, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2b400000, + end_addr: 32'h2b500000},// MagiaTileX20Y21 +'{ idx: '{ id: '{x: 51, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2b300000, + end_addr: 32'h2b400000},// MagiaTileX19Y21 +'{ idx: '{ id: '{x: 50, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2b200000, + end_addr: 32'h2b300000},// MagiaTileX18Y21 +'{ idx: '{ id: '{x: 49, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2b100000, + end_addr: 32'h2b200000},// MagiaTileX17Y21 +'{ idx: '{ id: '{x: 48, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2b000000, + end_addr: 32'h2b100000},// MagiaTileX16Y21 +'{ idx: '{ id: '{x: 47, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2af00000, + end_addr: 32'h2b000000},// MagiaTileX15Y21 +'{ idx: '{ id: '{x: 46, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ae00000, + end_addr: 32'h2af00000},// MagiaTileX14Y21 +'{ idx: '{ id: '{x: 45, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ad00000, + end_addr: 32'h2ae00000},// MagiaTileX13Y21 +'{ idx: '{ id: '{x: 44, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ac00000, + end_addr: 32'h2ad00000},// MagiaTileX12Y21 +'{ idx: '{ id: '{x: 43, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2ab00000, + end_addr: 32'h2ac00000},// MagiaTileX11Y21 +'{ idx: '{ id: '{x: 42, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2aa00000, + end_addr: 32'h2ab00000},// MagiaTileX10Y21 +'{ idx: '{ id: '{x: 41, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2a900000, + end_addr: 32'h2aa00000},// MagiaTileX9Y21 +'{ idx: '{ id: '{x: 40, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2a800000, + end_addr: 32'h2a900000},// MagiaTileX8Y21 +'{ idx: '{ id: '{x: 39, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2a700000, + end_addr: 32'h2a800000},// MagiaTileX7Y21 +'{ idx: '{ id: '{x: 38, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2a600000, + end_addr: 32'h2a700000},// MagiaTileX6Y21 +'{ idx: '{ id: '{x: 37, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2a500000, + end_addr: 32'h2a600000},// MagiaTileX5Y21 +'{ idx: '{ id: '{x: 36, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2a400000, + end_addr: 32'h2a500000},// MagiaTileX4Y21 +'{ idx: '{ id: '{x: 35, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2a300000, + end_addr: 32'h2a400000},// MagiaTileX3Y21 +'{ idx: '{ id: '{x: 34, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2a200000, + end_addr: 32'h2a300000},// MagiaTileX2Y21 +'{ idx: '{ id: '{x: 33, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2a100000, + end_addr: 32'h2a200000},// MagiaTileX1Y21 +'{ idx: '{ id: '{x: 32, y: 21, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h2a000000, + end_addr: 32'h2a100000},// MagiaTileX0Y21 +'{ idx: '{ id: '{x: 63, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29f00000, + end_addr: 32'h2a000000},// MagiaTileX31Y20 +'{ idx: '{ id: '{x: 62, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29e00000, + end_addr: 32'h29f00000},// MagiaTileX30Y20 +'{ idx: '{ id: '{x: 61, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29d00000, + end_addr: 32'h29e00000},// MagiaTileX29Y20 +'{ idx: '{ id: '{x: 60, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29c00000, + end_addr: 32'h29d00000},// MagiaTileX28Y20 +'{ idx: '{ id: '{x: 59, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29b00000, + end_addr: 32'h29c00000},// MagiaTileX27Y20 +'{ idx: '{ id: '{x: 58, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29a00000, + end_addr: 32'h29b00000},// MagiaTileX26Y20 +'{ idx: '{ id: '{x: 57, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29900000, + end_addr: 32'h29a00000},// MagiaTileX25Y20 +'{ idx: '{ id: '{x: 56, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29800000, + end_addr: 32'h29900000},// MagiaTileX24Y20 +'{ idx: '{ id: '{x: 55, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29700000, + end_addr: 32'h29800000},// MagiaTileX23Y20 +'{ idx: '{ id: '{x: 54, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29600000, + end_addr: 32'h29700000},// MagiaTileX22Y20 +'{ idx: '{ id: '{x: 53, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29500000, + end_addr: 32'h29600000},// MagiaTileX21Y20 +'{ idx: '{ id: '{x: 52, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29400000, + end_addr: 32'h29500000},// MagiaTileX20Y20 +'{ idx: '{ id: '{x: 51, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29300000, + end_addr: 32'h29400000},// MagiaTileX19Y20 +'{ idx: '{ id: '{x: 50, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29200000, + end_addr: 32'h29300000},// MagiaTileX18Y20 +'{ idx: '{ id: '{x: 49, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29100000, + end_addr: 32'h29200000},// MagiaTileX17Y20 +'{ idx: '{ id: '{x: 48, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h29000000, + end_addr: 32'h29100000},// MagiaTileX16Y20 +'{ idx: '{ id: '{x: 47, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28f00000, + end_addr: 32'h29000000},// MagiaTileX15Y20 +'{ idx: '{ id: '{x: 46, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28e00000, + end_addr: 32'h28f00000},// MagiaTileX14Y20 +'{ idx: '{ id: '{x: 45, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28d00000, + end_addr: 32'h28e00000},// MagiaTileX13Y20 +'{ idx: '{ id: '{x: 44, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28c00000, + end_addr: 32'h28d00000},// MagiaTileX12Y20 +'{ idx: '{ id: '{x: 43, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28b00000, + end_addr: 32'h28c00000},// MagiaTileX11Y20 +'{ idx: '{ id: '{x: 42, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28a00000, + end_addr: 32'h28b00000},// MagiaTileX10Y20 +'{ idx: '{ id: '{x: 41, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28900000, + end_addr: 32'h28a00000},// MagiaTileX9Y20 +'{ idx: '{ id: '{x: 40, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28800000, + end_addr: 32'h28900000},// MagiaTileX8Y20 +'{ idx: '{ id: '{x: 39, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28700000, + end_addr: 32'h28800000},// MagiaTileX7Y20 +'{ idx: '{ id: '{x: 38, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28600000, + end_addr: 32'h28700000},// MagiaTileX6Y20 +'{ idx: '{ id: '{x: 37, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28500000, + end_addr: 32'h28600000},// MagiaTileX5Y20 +'{ idx: '{ id: '{x: 36, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28400000, + end_addr: 32'h28500000},// MagiaTileX4Y20 +'{ idx: '{ id: '{x: 35, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28300000, + end_addr: 32'h28400000},// MagiaTileX3Y20 +'{ idx: '{ id: '{x: 34, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28200000, + end_addr: 32'h28300000},// MagiaTileX2Y20 +'{ idx: '{ id: '{x: 33, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28100000, + end_addr: 32'h28200000},// MagiaTileX1Y20 +'{ idx: '{ id: '{x: 32, y: 20, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h28000000, + end_addr: 32'h28100000},// MagiaTileX0Y20 +'{ idx: '{ id: '{x: 63, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27f00000, + end_addr: 32'h28000000},// MagiaTileX31Y19 +'{ idx: '{ id: '{x: 62, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27e00000, + end_addr: 32'h27f00000},// MagiaTileX30Y19 +'{ idx: '{ id: '{x: 61, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27d00000, + end_addr: 32'h27e00000},// MagiaTileX29Y19 +'{ idx: '{ id: '{x: 60, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27c00000, + end_addr: 32'h27d00000},// MagiaTileX28Y19 +'{ idx: '{ id: '{x: 59, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27b00000, + end_addr: 32'h27c00000},// MagiaTileX27Y19 +'{ idx: '{ id: '{x: 58, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27a00000, + end_addr: 32'h27b00000},// MagiaTileX26Y19 +'{ idx: '{ id: '{x: 57, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27900000, + end_addr: 32'h27a00000},// MagiaTileX25Y19 +'{ idx: '{ id: '{x: 56, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27800000, + end_addr: 32'h27900000},// MagiaTileX24Y19 +'{ idx: '{ id: '{x: 55, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27700000, + end_addr: 32'h27800000},// MagiaTileX23Y19 +'{ idx: '{ id: '{x: 54, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27600000, + end_addr: 32'h27700000},// MagiaTileX22Y19 +'{ idx: '{ id: '{x: 53, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27500000, + end_addr: 32'h27600000},// MagiaTileX21Y19 +'{ idx: '{ id: '{x: 52, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27400000, + end_addr: 32'h27500000},// MagiaTileX20Y19 +'{ idx: '{ id: '{x: 51, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27300000, + end_addr: 32'h27400000},// MagiaTileX19Y19 +'{ idx: '{ id: '{x: 50, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27200000, + end_addr: 32'h27300000},// MagiaTileX18Y19 +'{ idx: '{ id: '{x: 49, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27100000, + end_addr: 32'h27200000},// MagiaTileX17Y19 +'{ idx: '{ id: '{x: 48, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h27000000, + end_addr: 32'h27100000},// MagiaTileX16Y19 +'{ idx: '{ id: '{x: 47, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26f00000, + end_addr: 32'h27000000},// MagiaTileX15Y19 +'{ idx: '{ id: '{x: 46, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26e00000, + end_addr: 32'h26f00000},// MagiaTileX14Y19 +'{ idx: '{ id: '{x: 45, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26d00000, + end_addr: 32'h26e00000},// MagiaTileX13Y19 +'{ idx: '{ id: '{x: 44, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26c00000, + end_addr: 32'h26d00000},// MagiaTileX12Y19 +'{ idx: '{ id: '{x: 43, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26b00000, + end_addr: 32'h26c00000},// MagiaTileX11Y19 +'{ idx: '{ id: '{x: 42, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26a00000, + end_addr: 32'h26b00000},// MagiaTileX10Y19 +'{ idx: '{ id: '{x: 41, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26900000, + end_addr: 32'h26a00000},// MagiaTileX9Y19 +'{ idx: '{ id: '{x: 40, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26800000, + end_addr: 32'h26900000},// MagiaTileX8Y19 +'{ idx: '{ id: '{x: 39, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26700000, + end_addr: 32'h26800000},// MagiaTileX7Y19 +'{ idx: '{ id: '{x: 38, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26600000, + end_addr: 32'h26700000},// MagiaTileX6Y19 +'{ idx: '{ id: '{x: 37, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26500000, + end_addr: 32'h26600000},// MagiaTileX5Y19 +'{ idx: '{ id: '{x: 36, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26400000, + end_addr: 32'h26500000},// MagiaTileX4Y19 +'{ idx: '{ id: '{x: 35, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26300000, + end_addr: 32'h26400000},// MagiaTileX3Y19 +'{ idx: '{ id: '{x: 34, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26200000, + end_addr: 32'h26300000},// MagiaTileX2Y19 +'{ idx: '{ id: '{x: 33, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26100000, + end_addr: 32'h26200000},// MagiaTileX1Y19 +'{ idx: '{ id: '{x: 32, y: 19, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h26000000, + end_addr: 32'h26100000},// MagiaTileX0Y19 +'{ idx: '{ id: '{x: 63, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25f00000, + end_addr: 32'h26000000},// MagiaTileX31Y18 +'{ idx: '{ id: '{x: 62, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25e00000, + end_addr: 32'h25f00000},// MagiaTileX30Y18 +'{ idx: '{ id: '{x: 61, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25d00000, + end_addr: 32'h25e00000},// MagiaTileX29Y18 +'{ idx: '{ id: '{x: 60, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25c00000, + end_addr: 32'h25d00000},// MagiaTileX28Y18 +'{ idx: '{ id: '{x: 59, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25b00000, + end_addr: 32'h25c00000},// MagiaTileX27Y18 +'{ idx: '{ id: '{x: 58, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25a00000, + end_addr: 32'h25b00000},// MagiaTileX26Y18 +'{ idx: '{ id: '{x: 57, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25900000, + end_addr: 32'h25a00000},// MagiaTileX25Y18 +'{ idx: '{ id: '{x: 56, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25800000, + end_addr: 32'h25900000},// MagiaTileX24Y18 +'{ idx: '{ id: '{x: 55, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25700000, + end_addr: 32'h25800000},// MagiaTileX23Y18 +'{ idx: '{ id: '{x: 54, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25600000, + end_addr: 32'h25700000},// MagiaTileX22Y18 +'{ idx: '{ id: '{x: 53, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25500000, + end_addr: 32'h25600000},// MagiaTileX21Y18 +'{ idx: '{ id: '{x: 52, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25400000, + end_addr: 32'h25500000},// MagiaTileX20Y18 +'{ idx: '{ id: '{x: 51, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25300000, + end_addr: 32'h25400000},// MagiaTileX19Y18 +'{ idx: '{ id: '{x: 50, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25200000, + end_addr: 32'h25300000},// MagiaTileX18Y18 +'{ idx: '{ id: '{x: 49, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25100000, + end_addr: 32'h25200000},// MagiaTileX17Y18 +'{ idx: '{ id: '{x: 48, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h25000000, + end_addr: 32'h25100000},// MagiaTileX16Y18 +'{ idx: '{ id: '{x: 47, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24f00000, + end_addr: 32'h25000000},// MagiaTileX15Y18 +'{ idx: '{ id: '{x: 46, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24e00000, + end_addr: 32'h24f00000},// MagiaTileX14Y18 +'{ idx: '{ id: '{x: 45, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24d00000, + end_addr: 32'h24e00000},// MagiaTileX13Y18 +'{ idx: '{ id: '{x: 44, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24c00000, + end_addr: 32'h24d00000},// MagiaTileX12Y18 +'{ idx: '{ id: '{x: 43, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24b00000, + end_addr: 32'h24c00000},// MagiaTileX11Y18 +'{ idx: '{ id: '{x: 42, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24a00000, + end_addr: 32'h24b00000},// MagiaTileX10Y18 +'{ idx: '{ id: '{x: 41, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24900000, + end_addr: 32'h24a00000},// MagiaTileX9Y18 +'{ idx: '{ id: '{x: 40, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24800000, + end_addr: 32'h24900000},// MagiaTileX8Y18 +'{ idx: '{ id: '{x: 39, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24700000, + end_addr: 32'h24800000},// MagiaTileX7Y18 +'{ idx: '{ id: '{x: 38, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24600000, + end_addr: 32'h24700000},// MagiaTileX6Y18 +'{ idx: '{ id: '{x: 37, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24500000, + end_addr: 32'h24600000},// MagiaTileX5Y18 +'{ idx: '{ id: '{x: 36, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24400000, + end_addr: 32'h24500000},// MagiaTileX4Y18 +'{ idx: '{ id: '{x: 35, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24300000, + end_addr: 32'h24400000},// MagiaTileX3Y18 +'{ idx: '{ id: '{x: 34, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24200000, + end_addr: 32'h24300000},// MagiaTileX2Y18 +'{ idx: '{ id: '{x: 33, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24100000, + end_addr: 32'h24200000},// MagiaTileX1Y18 +'{ idx: '{ id: '{x: 32, y: 18, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h24000000, + end_addr: 32'h24100000},// MagiaTileX0Y18 +'{ idx: '{ id: '{x: 63, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23f00000, + end_addr: 32'h24000000},// MagiaTileX31Y17 +'{ idx: '{ id: '{x: 62, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23e00000, + end_addr: 32'h23f00000},// MagiaTileX30Y17 +'{ idx: '{ id: '{x: 61, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23d00000, + end_addr: 32'h23e00000},// MagiaTileX29Y17 +'{ idx: '{ id: '{x: 60, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23c00000, + end_addr: 32'h23d00000},// MagiaTileX28Y17 +'{ idx: '{ id: '{x: 59, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23b00000, + end_addr: 32'h23c00000},// MagiaTileX27Y17 +'{ idx: '{ id: '{x: 58, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23a00000, + end_addr: 32'h23b00000},// MagiaTileX26Y17 +'{ idx: '{ id: '{x: 57, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23900000, + end_addr: 32'h23a00000},// MagiaTileX25Y17 +'{ idx: '{ id: '{x: 56, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23800000, + end_addr: 32'h23900000},// MagiaTileX24Y17 +'{ idx: '{ id: '{x: 55, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23700000, + end_addr: 32'h23800000},// MagiaTileX23Y17 +'{ idx: '{ id: '{x: 54, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23600000, + end_addr: 32'h23700000},// MagiaTileX22Y17 +'{ idx: '{ id: '{x: 53, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23500000, + end_addr: 32'h23600000},// MagiaTileX21Y17 +'{ idx: '{ id: '{x: 52, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23400000, + end_addr: 32'h23500000},// MagiaTileX20Y17 +'{ idx: '{ id: '{x: 51, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23300000, + end_addr: 32'h23400000},// MagiaTileX19Y17 +'{ idx: '{ id: '{x: 50, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23200000, + end_addr: 32'h23300000},// MagiaTileX18Y17 +'{ idx: '{ id: '{x: 49, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23100000, + end_addr: 32'h23200000},// MagiaTileX17Y17 +'{ idx: '{ id: '{x: 48, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h23000000, + end_addr: 32'h23100000},// MagiaTileX16Y17 +'{ idx: '{ id: '{x: 47, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22f00000, + end_addr: 32'h23000000},// MagiaTileX15Y17 +'{ idx: '{ id: '{x: 46, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22e00000, + end_addr: 32'h22f00000},// MagiaTileX14Y17 +'{ idx: '{ id: '{x: 45, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22d00000, + end_addr: 32'h22e00000},// MagiaTileX13Y17 +'{ idx: '{ id: '{x: 44, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22c00000, + end_addr: 32'h22d00000},// MagiaTileX12Y17 +'{ idx: '{ id: '{x: 43, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22b00000, + end_addr: 32'h22c00000},// MagiaTileX11Y17 +'{ idx: '{ id: '{x: 42, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22a00000, + end_addr: 32'h22b00000},// MagiaTileX10Y17 +'{ idx: '{ id: '{x: 41, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22900000, + end_addr: 32'h22a00000},// MagiaTileX9Y17 +'{ idx: '{ id: '{x: 40, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22800000, + end_addr: 32'h22900000},// MagiaTileX8Y17 +'{ idx: '{ id: '{x: 39, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22700000, + end_addr: 32'h22800000},// MagiaTileX7Y17 +'{ idx: '{ id: '{x: 38, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22600000, + end_addr: 32'h22700000},// MagiaTileX6Y17 +'{ idx: '{ id: '{x: 37, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22500000, + end_addr: 32'h22600000},// MagiaTileX5Y17 +'{ idx: '{ id: '{x: 36, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22400000, + end_addr: 32'h22500000},// MagiaTileX4Y17 +'{ idx: '{ id: '{x: 35, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22300000, + end_addr: 32'h22400000},// MagiaTileX3Y17 +'{ idx: '{ id: '{x: 34, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22200000, + end_addr: 32'h22300000},// MagiaTileX2Y17 +'{ idx: '{ id: '{x: 33, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22100000, + end_addr: 32'h22200000},// MagiaTileX1Y17 +'{ idx: '{ id: '{x: 32, y: 17, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h22000000, + end_addr: 32'h22100000},// MagiaTileX0Y17 +'{ idx: '{ id: '{x: 63, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21f00000, + end_addr: 32'h22000000},// MagiaTileX31Y16 +'{ idx: '{ id: '{x: 62, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21e00000, + end_addr: 32'h21f00000},// MagiaTileX30Y16 +'{ idx: '{ id: '{x: 61, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21d00000, + end_addr: 32'h21e00000},// MagiaTileX29Y16 +'{ idx: '{ id: '{x: 60, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21c00000, + end_addr: 32'h21d00000},// MagiaTileX28Y16 +'{ idx: '{ id: '{x: 59, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21b00000, + end_addr: 32'h21c00000},// MagiaTileX27Y16 +'{ idx: '{ id: '{x: 58, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21a00000, + end_addr: 32'h21b00000},// MagiaTileX26Y16 +'{ idx: '{ id: '{x: 57, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21900000, + end_addr: 32'h21a00000},// MagiaTileX25Y16 +'{ idx: '{ id: '{x: 56, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21800000, + end_addr: 32'h21900000},// MagiaTileX24Y16 +'{ idx: '{ id: '{x: 55, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21700000, + end_addr: 32'h21800000},// MagiaTileX23Y16 +'{ idx: '{ id: '{x: 54, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21600000, + end_addr: 32'h21700000},// MagiaTileX22Y16 +'{ idx: '{ id: '{x: 53, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21500000, + end_addr: 32'h21600000},// MagiaTileX21Y16 +'{ idx: '{ id: '{x: 52, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21400000, + end_addr: 32'h21500000},// MagiaTileX20Y16 +'{ idx: '{ id: '{x: 51, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21300000, + end_addr: 32'h21400000},// MagiaTileX19Y16 +'{ idx: '{ id: '{x: 50, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21200000, + end_addr: 32'h21300000},// MagiaTileX18Y16 +'{ idx: '{ id: '{x: 49, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21100000, + end_addr: 32'h21200000},// MagiaTileX17Y16 +'{ idx: '{ id: '{x: 48, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h21000000, + end_addr: 32'h21100000},// MagiaTileX16Y16 +'{ idx: '{ id: '{x: 47, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20f00000, + end_addr: 32'h21000000},// MagiaTileX15Y16 +'{ idx: '{ id: '{x: 46, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20e00000, + end_addr: 32'h20f00000},// MagiaTileX14Y16 +'{ idx: '{ id: '{x: 45, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20d00000, + end_addr: 32'h20e00000},// MagiaTileX13Y16 +'{ idx: '{ id: '{x: 44, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20c00000, + end_addr: 32'h20d00000},// MagiaTileX12Y16 +'{ idx: '{ id: '{x: 43, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20b00000, + end_addr: 32'h20c00000},// MagiaTileX11Y16 +'{ idx: '{ id: '{x: 42, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20a00000, + end_addr: 32'h20b00000},// MagiaTileX10Y16 +'{ idx: '{ id: '{x: 41, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20900000, + end_addr: 32'h20a00000},// MagiaTileX9Y16 +'{ idx: '{ id: '{x: 40, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20800000, + end_addr: 32'h20900000},// MagiaTileX8Y16 +'{ idx: '{ id: '{x: 39, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20700000, + end_addr: 32'h20800000},// MagiaTileX7Y16 +'{ idx: '{ id: '{x: 38, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20600000, + end_addr: 32'h20700000},// MagiaTileX6Y16 +'{ idx: '{ id: '{x: 37, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20500000, + end_addr: 32'h20600000},// MagiaTileX5Y16 +'{ idx: '{ id: '{x: 36, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20400000, + end_addr: 32'h20500000},// MagiaTileX4Y16 +'{ idx: '{ id: '{x: 35, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20300000, + end_addr: 32'h20400000},// MagiaTileX3Y16 +'{ idx: '{ id: '{x: 34, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20200000, + end_addr: 32'h20300000},// MagiaTileX2Y16 +'{ idx: '{ id: '{x: 33, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20100000, + end_addr: 32'h20200000},// MagiaTileX1Y16 +'{ idx: '{ id: '{x: 32, y: 16, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h20000000, + end_addr: 32'h20100000},// MagiaTileX0Y16 +'{ idx: '{ id: '{x: 63, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ff00000, + end_addr: 32'h20000000},// MagiaTileX31Y15 +'{ idx: '{ id: '{x: 62, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1fe00000, + end_addr: 32'h1ff00000},// MagiaTileX30Y15 +'{ idx: '{ id: '{x: 61, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1fd00000, + end_addr: 32'h1fe00000},// MagiaTileX29Y15 +'{ idx: '{ id: '{x: 60, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1fc00000, + end_addr: 32'h1fd00000},// MagiaTileX28Y15 +'{ idx: '{ id: '{x: 59, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1fb00000, + end_addr: 32'h1fc00000},// MagiaTileX27Y15 +'{ idx: '{ id: '{x: 58, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1fa00000, + end_addr: 32'h1fb00000},// MagiaTileX26Y15 +'{ idx: '{ id: '{x: 57, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1f900000, + end_addr: 32'h1fa00000},// MagiaTileX25Y15 +'{ idx: '{ id: '{x: 56, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1f800000, + end_addr: 32'h1f900000},// MagiaTileX24Y15 +'{ idx: '{ id: '{x: 55, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1f700000, + end_addr: 32'h1f800000},// MagiaTileX23Y15 +'{ idx: '{ id: '{x: 54, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1f600000, + end_addr: 32'h1f700000},// MagiaTileX22Y15 +'{ idx: '{ id: '{x: 53, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1f500000, + end_addr: 32'h1f600000},// MagiaTileX21Y15 +'{ idx: '{ id: '{x: 52, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1f400000, + end_addr: 32'h1f500000},// MagiaTileX20Y15 +'{ idx: '{ id: '{x: 51, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1f300000, + end_addr: 32'h1f400000},// MagiaTileX19Y15 +'{ idx: '{ id: '{x: 50, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1f200000, + end_addr: 32'h1f300000},// MagiaTileX18Y15 +'{ idx: '{ id: '{x: 49, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1f100000, + end_addr: 32'h1f200000},// MagiaTileX17Y15 +'{ idx: '{ id: '{x: 48, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1f000000, + end_addr: 32'h1f100000},// MagiaTileX16Y15 +'{ idx: '{ id: '{x: 47, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ef00000, + end_addr: 32'h1f000000},// MagiaTileX15Y15 +'{ idx: '{ id: '{x: 46, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ee00000, + end_addr: 32'h1ef00000},// MagiaTileX14Y15 +'{ idx: '{ id: '{x: 45, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ed00000, + end_addr: 32'h1ee00000},// MagiaTileX13Y15 +'{ idx: '{ id: '{x: 44, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ec00000, + end_addr: 32'h1ed00000},// MagiaTileX12Y15 +'{ idx: '{ id: '{x: 43, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1eb00000, + end_addr: 32'h1ec00000},// MagiaTileX11Y15 +'{ idx: '{ id: '{x: 42, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ea00000, + end_addr: 32'h1eb00000},// MagiaTileX10Y15 +'{ idx: '{ id: '{x: 41, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1e900000, + end_addr: 32'h1ea00000},// MagiaTileX9Y15 +'{ idx: '{ id: '{x: 40, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1e800000, + end_addr: 32'h1e900000},// MagiaTileX8Y15 +'{ idx: '{ id: '{x: 39, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1e700000, + end_addr: 32'h1e800000},// MagiaTileX7Y15 +'{ idx: '{ id: '{x: 38, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1e600000, + end_addr: 32'h1e700000},// MagiaTileX6Y15 +'{ idx: '{ id: '{x: 37, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1e500000, + end_addr: 32'h1e600000},// MagiaTileX5Y15 +'{ idx: '{ id: '{x: 36, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1e400000, + end_addr: 32'h1e500000},// MagiaTileX4Y15 +'{ idx: '{ id: '{x: 35, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1e300000, + end_addr: 32'h1e400000},// MagiaTileX3Y15 +'{ idx: '{ id: '{x: 34, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1e200000, + end_addr: 32'h1e300000},// MagiaTileX2Y15 +'{ idx: '{ id: '{x: 33, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1e100000, + end_addr: 32'h1e200000},// MagiaTileX1Y15 +'{ idx: '{ id: '{x: 32, y: 15, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1e000000, + end_addr: 32'h1e100000},// MagiaTileX0Y15 +'{ idx: '{ id: '{x: 63, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1df00000, + end_addr: 32'h1e000000},// MagiaTileX31Y14 +'{ idx: '{ id: '{x: 62, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1de00000, + end_addr: 32'h1df00000},// MagiaTileX30Y14 +'{ idx: '{ id: '{x: 61, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1dd00000, + end_addr: 32'h1de00000},// MagiaTileX29Y14 +'{ idx: '{ id: '{x: 60, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1dc00000, + end_addr: 32'h1dd00000},// MagiaTileX28Y14 +'{ idx: '{ id: '{x: 59, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1db00000, + end_addr: 32'h1dc00000},// MagiaTileX27Y14 +'{ idx: '{ id: '{x: 58, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1da00000, + end_addr: 32'h1db00000},// MagiaTileX26Y14 +'{ idx: '{ id: '{x: 57, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1d900000, + end_addr: 32'h1da00000},// MagiaTileX25Y14 +'{ idx: '{ id: '{x: 56, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1d800000, + end_addr: 32'h1d900000},// MagiaTileX24Y14 +'{ idx: '{ id: '{x: 55, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1d700000, + end_addr: 32'h1d800000},// MagiaTileX23Y14 +'{ idx: '{ id: '{x: 54, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1d600000, + end_addr: 32'h1d700000},// MagiaTileX22Y14 +'{ idx: '{ id: '{x: 53, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1d500000, + end_addr: 32'h1d600000},// MagiaTileX21Y14 +'{ idx: '{ id: '{x: 52, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1d400000, + end_addr: 32'h1d500000},// MagiaTileX20Y14 +'{ idx: '{ id: '{x: 51, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1d300000, + end_addr: 32'h1d400000},// MagiaTileX19Y14 +'{ idx: '{ id: '{x: 50, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1d200000, + end_addr: 32'h1d300000},// MagiaTileX18Y14 +'{ idx: '{ id: '{x: 49, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1d100000, + end_addr: 32'h1d200000},// MagiaTileX17Y14 +'{ idx: '{ id: '{x: 48, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1d000000, + end_addr: 32'h1d100000},// MagiaTileX16Y14 +'{ idx: '{ id: '{x: 47, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1cf00000, + end_addr: 32'h1d000000},// MagiaTileX15Y14 +'{ idx: '{ id: '{x: 46, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ce00000, + end_addr: 32'h1cf00000},// MagiaTileX14Y14 +'{ idx: '{ id: '{x: 45, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1cd00000, + end_addr: 32'h1ce00000},// MagiaTileX13Y14 +'{ idx: '{ id: '{x: 44, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1cc00000, + end_addr: 32'h1cd00000},// MagiaTileX12Y14 +'{ idx: '{ id: '{x: 43, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1cb00000, + end_addr: 32'h1cc00000},// MagiaTileX11Y14 +'{ idx: '{ id: '{x: 42, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ca00000, + end_addr: 32'h1cb00000},// MagiaTileX10Y14 +'{ idx: '{ id: '{x: 41, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1c900000, + end_addr: 32'h1ca00000},// MagiaTileX9Y14 +'{ idx: '{ id: '{x: 40, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1c800000, + end_addr: 32'h1c900000},// MagiaTileX8Y14 +'{ idx: '{ id: '{x: 39, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1c700000, + end_addr: 32'h1c800000},// MagiaTileX7Y14 +'{ idx: '{ id: '{x: 38, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1c600000, + end_addr: 32'h1c700000},// MagiaTileX6Y14 +'{ idx: '{ id: '{x: 37, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1c500000, + end_addr: 32'h1c600000},// MagiaTileX5Y14 +'{ idx: '{ id: '{x: 36, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1c400000, + end_addr: 32'h1c500000},// MagiaTileX4Y14 +'{ idx: '{ id: '{x: 35, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1c300000, + end_addr: 32'h1c400000},// MagiaTileX3Y14 +'{ idx: '{ id: '{x: 34, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1c200000, + end_addr: 32'h1c300000},// MagiaTileX2Y14 +'{ idx: '{ id: '{x: 33, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1c100000, + end_addr: 32'h1c200000},// MagiaTileX1Y14 +'{ idx: '{ id: '{x: 32, y: 14, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1c000000, + end_addr: 32'h1c100000},// MagiaTileX0Y14 +'{ idx: '{ id: '{x: 63, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1bf00000, + end_addr: 32'h1c000000},// MagiaTileX31Y13 +'{ idx: '{ id: '{x: 62, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1be00000, + end_addr: 32'h1bf00000},// MagiaTileX30Y13 +'{ idx: '{ id: '{x: 61, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1bd00000, + end_addr: 32'h1be00000},// MagiaTileX29Y13 +'{ idx: '{ id: '{x: 60, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1bc00000, + end_addr: 32'h1bd00000},// MagiaTileX28Y13 +'{ idx: '{ id: '{x: 59, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1bb00000, + end_addr: 32'h1bc00000},// MagiaTileX27Y13 +'{ idx: '{ id: '{x: 58, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ba00000, + end_addr: 32'h1bb00000},// MagiaTileX26Y13 +'{ idx: '{ id: '{x: 57, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1b900000, + end_addr: 32'h1ba00000},// MagiaTileX25Y13 +'{ idx: '{ id: '{x: 56, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1b800000, + end_addr: 32'h1b900000},// MagiaTileX24Y13 +'{ idx: '{ id: '{x: 55, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1b700000, + end_addr: 32'h1b800000},// MagiaTileX23Y13 +'{ idx: '{ id: '{x: 54, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1b600000, + end_addr: 32'h1b700000},// MagiaTileX22Y13 +'{ idx: '{ id: '{x: 53, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1b500000, + end_addr: 32'h1b600000},// MagiaTileX21Y13 +'{ idx: '{ id: '{x: 52, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1b400000, + end_addr: 32'h1b500000},// MagiaTileX20Y13 +'{ idx: '{ id: '{x: 51, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1b300000, + end_addr: 32'h1b400000},// MagiaTileX19Y13 +'{ idx: '{ id: '{x: 50, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1b200000, + end_addr: 32'h1b300000},// MagiaTileX18Y13 +'{ idx: '{ id: '{x: 49, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1b100000, + end_addr: 32'h1b200000},// MagiaTileX17Y13 +'{ idx: '{ id: '{x: 48, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1b000000, + end_addr: 32'h1b100000},// MagiaTileX16Y13 +'{ idx: '{ id: '{x: 47, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1af00000, + end_addr: 32'h1b000000},// MagiaTileX15Y13 +'{ idx: '{ id: '{x: 46, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ae00000, + end_addr: 32'h1af00000},// MagiaTileX14Y13 +'{ idx: '{ id: '{x: 45, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ad00000, + end_addr: 32'h1ae00000},// MagiaTileX13Y13 +'{ idx: '{ id: '{x: 44, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ac00000, + end_addr: 32'h1ad00000},// MagiaTileX12Y13 +'{ idx: '{ id: '{x: 43, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1ab00000, + end_addr: 32'h1ac00000},// MagiaTileX11Y13 +'{ idx: '{ id: '{x: 42, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1aa00000, + end_addr: 32'h1ab00000},// MagiaTileX10Y13 +'{ idx: '{ id: '{x: 41, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1a900000, + end_addr: 32'h1aa00000},// MagiaTileX9Y13 +'{ idx: '{ id: '{x: 40, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1a800000, + end_addr: 32'h1a900000},// MagiaTileX8Y13 +'{ idx: '{ id: '{x: 39, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1a700000, + end_addr: 32'h1a800000},// MagiaTileX7Y13 +'{ idx: '{ id: '{x: 38, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1a600000, + end_addr: 32'h1a700000},// MagiaTileX6Y13 +'{ idx: '{ id: '{x: 37, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1a500000, + end_addr: 32'h1a600000},// MagiaTileX5Y13 +'{ idx: '{ id: '{x: 36, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1a400000, + end_addr: 32'h1a500000},// MagiaTileX4Y13 +'{ idx: '{ id: '{x: 35, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1a300000, + end_addr: 32'h1a400000},// MagiaTileX3Y13 +'{ idx: '{ id: '{x: 34, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1a200000, + end_addr: 32'h1a300000},// MagiaTileX2Y13 +'{ idx: '{ id: '{x: 33, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1a100000, + end_addr: 32'h1a200000},// MagiaTileX1Y13 +'{ idx: '{ id: '{x: 32, y: 13, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h1a000000, + end_addr: 32'h1a100000},// MagiaTileX0Y13 +'{ idx: '{ id: '{x: 63, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19f00000, + end_addr: 32'h1a000000},// MagiaTileX31Y12 +'{ idx: '{ id: '{x: 62, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19e00000, + end_addr: 32'h19f00000},// MagiaTileX30Y12 +'{ idx: '{ id: '{x: 61, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19d00000, + end_addr: 32'h19e00000},// MagiaTileX29Y12 +'{ idx: '{ id: '{x: 60, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19c00000, + end_addr: 32'h19d00000},// MagiaTileX28Y12 +'{ idx: '{ id: '{x: 59, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19b00000, + end_addr: 32'h19c00000},// MagiaTileX27Y12 +'{ idx: '{ id: '{x: 58, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19a00000, + end_addr: 32'h19b00000},// MagiaTileX26Y12 +'{ idx: '{ id: '{x: 57, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19900000, + end_addr: 32'h19a00000},// MagiaTileX25Y12 +'{ idx: '{ id: '{x: 56, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19800000, + end_addr: 32'h19900000},// MagiaTileX24Y12 +'{ idx: '{ id: '{x: 55, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19700000, + end_addr: 32'h19800000},// MagiaTileX23Y12 +'{ idx: '{ id: '{x: 54, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19600000, + end_addr: 32'h19700000},// MagiaTileX22Y12 +'{ idx: '{ id: '{x: 53, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19500000, + end_addr: 32'h19600000},// MagiaTileX21Y12 +'{ idx: '{ id: '{x: 52, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19400000, + end_addr: 32'h19500000},// MagiaTileX20Y12 +'{ idx: '{ id: '{x: 51, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19300000, + end_addr: 32'h19400000},// MagiaTileX19Y12 +'{ idx: '{ id: '{x: 50, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19200000, + end_addr: 32'h19300000},// MagiaTileX18Y12 +'{ idx: '{ id: '{x: 49, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19100000, + end_addr: 32'h19200000},// MagiaTileX17Y12 +'{ idx: '{ id: '{x: 48, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h19000000, + end_addr: 32'h19100000},// MagiaTileX16Y12 +'{ idx: '{ id: '{x: 47, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18f00000, + end_addr: 32'h19000000},// MagiaTileX15Y12 +'{ idx: '{ id: '{x: 46, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18e00000, + end_addr: 32'h18f00000},// MagiaTileX14Y12 +'{ idx: '{ id: '{x: 45, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18d00000, + end_addr: 32'h18e00000},// MagiaTileX13Y12 +'{ idx: '{ id: '{x: 44, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18c00000, + end_addr: 32'h18d00000},// MagiaTileX12Y12 +'{ idx: '{ id: '{x: 43, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18b00000, + end_addr: 32'h18c00000},// MagiaTileX11Y12 +'{ idx: '{ id: '{x: 42, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18a00000, + end_addr: 32'h18b00000},// MagiaTileX10Y12 +'{ idx: '{ id: '{x: 41, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18900000, + end_addr: 32'h18a00000},// MagiaTileX9Y12 +'{ idx: '{ id: '{x: 40, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18800000, + end_addr: 32'h18900000},// MagiaTileX8Y12 +'{ idx: '{ id: '{x: 39, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18700000, + end_addr: 32'h18800000},// MagiaTileX7Y12 +'{ idx: '{ id: '{x: 38, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18600000, + end_addr: 32'h18700000},// MagiaTileX6Y12 +'{ idx: '{ id: '{x: 37, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18500000, + end_addr: 32'h18600000},// MagiaTileX5Y12 +'{ idx: '{ id: '{x: 36, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18400000, + end_addr: 32'h18500000},// MagiaTileX4Y12 +'{ idx: '{ id: '{x: 35, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18300000, + end_addr: 32'h18400000},// MagiaTileX3Y12 +'{ idx: '{ id: '{x: 34, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18200000, + end_addr: 32'h18300000},// MagiaTileX2Y12 +'{ idx: '{ id: '{x: 33, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18100000, + end_addr: 32'h18200000},// MagiaTileX1Y12 +'{ idx: '{ id: '{x: 32, y: 12, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h18000000, + end_addr: 32'h18100000},// MagiaTileX0Y12 +'{ idx: '{ id: '{x: 63, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17f00000, + end_addr: 32'h18000000},// MagiaTileX31Y11 +'{ idx: '{ id: '{x: 62, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17e00000, + end_addr: 32'h17f00000},// MagiaTileX30Y11 +'{ idx: '{ id: '{x: 61, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17d00000, + end_addr: 32'h17e00000},// MagiaTileX29Y11 +'{ idx: '{ id: '{x: 60, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17c00000, + end_addr: 32'h17d00000},// MagiaTileX28Y11 +'{ idx: '{ id: '{x: 59, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17b00000, + end_addr: 32'h17c00000},// MagiaTileX27Y11 +'{ idx: '{ id: '{x: 58, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17a00000, + end_addr: 32'h17b00000},// MagiaTileX26Y11 +'{ idx: '{ id: '{x: 57, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17900000, + end_addr: 32'h17a00000},// MagiaTileX25Y11 +'{ idx: '{ id: '{x: 56, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17800000, + end_addr: 32'h17900000},// MagiaTileX24Y11 +'{ idx: '{ id: '{x: 55, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17700000, + end_addr: 32'h17800000},// MagiaTileX23Y11 +'{ idx: '{ id: '{x: 54, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17600000, + end_addr: 32'h17700000},// MagiaTileX22Y11 +'{ idx: '{ id: '{x: 53, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17500000, + end_addr: 32'h17600000},// MagiaTileX21Y11 +'{ idx: '{ id: '{x: 52, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17400000, + end_addr: 32'h17500000},// MagiaTileX20Y11 +'{ idx: '{ id: '{x: 51, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17300000, + end_addr: 32'h17400000},// MagiaTileX19Y11 +'{ idx: '{ id: '{x: 50, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17200000, + end_addr: 32'h17300000},// MagiaTileX18Y11 +'{ idx: '{ id: '{x: 49, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17100000, + end_addr: 32'h17200000},// MagiaTileX17Y11 +'{ idx: '{ id: '{x: 48, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h17000000, + end_addr: 32'h17100000},// MagiaTileX16Y11 +'{ idx: '{ id: '{x: 47, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16f00000, + end_addr: 32'h17000000},// MagiaTileX15Y11 +'{ idx: '{ id: '{x: 46, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16e00000, + end_addr: 32'h16f00000},// MagiaTileX14Y11 +'{ idx: '{ id: '{x: 45, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16d00000, + end_addr: 32'h16e00000},// MagiaTileX13Y11 +'{ idx: '{ id: '{x: 44, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16c00000, + end_addr: 32'h16d00000},// MagiaTileX12Y11 +'{ idx: '{ id: '{x: 43, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16b00000, + end_addr: 32'h16c00000},// MagiaTileX11Y11 +'{ idx: '{ id: '{x: 42, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16a00000, + end_addr: 32'h16b00000},// MagiaTileX10Y11 +'{ idx: '{ id: '{x: 41, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16900000, + end_addr: 32'h16a00000},// MagiaTileX9Y11 +'{ idx: '{ id: '{x: 40, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16800000, + end_addr: 32'h16900000},// MagiaTileX8Y11 +'{ idx: '{ id: '{x: 39, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16700000, + end_addr: 32'h16800000},// MagiaTileX7Y11 +'{ idx: '{ id: '{x: 38, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16600000, + end_addr: 32'h16700000},// MagiaTileX6Y11 +'{ idx: '{ id: '{x: 37, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16500000, + end_addr: 32'h16600000},// MagiaTileX5Y11 +'{ idx: '{ id: '{x: 36, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16400000, + end_addr: 32'h16500000},// MagiaTileX4Y11 +'{ idx: '{ id: '{x: 35, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16300000, + end_addr: 32'h16400000},// MagiaTileX3Y11 +'{ idx: '{ id: '{x: 34, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16200000, + end_addr: 32'h16300000},// MagiaTileX2Y11 +'{ idx: '{ id: '{x: 33, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16100000, + end_addr: 32'h16200000},// MagiaTileX1Y11 +'{ idx: '{ id: '{x: 32, y: 11, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h16000000, + end_addr: 32'h16100000},// MagiaTileX0Y11 +'{ idx: '{ id: '{x: 63, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15f00000, + end_addr: 32'h16000000},// MagiaTileX31Y10 +'{ idx: '{ id: '{x: 62, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15e00000, + end_addr: 32'h15f00000},// MagiaTileX30Y10 +'{ idx: '{ id: '{x: 61, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15d00000, + end_addr: 32'h15e00000},// MagiaTileX29Y10 +'{ idx: '{ id: '{x: 60, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15c00000, + end_addr: 32'h15d00000},// MagiaTileX28Y10 +'{ idx: '{ id: '{x: 59, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15b00000, + end_addr: 32'h15c00000},// MagiaTileX27Y10 +'{ idx: '{ id: '{x: 58, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15a00000, + end_addr: 32'h15b00000},// MagiaTileX26Y10 +'{ idx: '{ id: '{x: 57, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15900000, + end_addr: 32'h15a00000},// MagiaTileX25Y10 +'{ idx: '{ id: '{x: 56, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15800000, + end_addr: 32'h15900000},// MagiaTileX24Y10 +'{ idx: '{ id: '{x: 55, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15700000, + end_addr: 32'h15800000},// MagiaTileX23Y10 +'{ idx: '{ id: '{x: 54, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15600000, + end_addr: 32'h15700000},// MagiaTileX22Y10 +'{ idx: '{ id: '{x: 53, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15500000, + end_addr: 32'h15600000},// MagiaTileX21Y10 +'{ idx: '{ id: '{x: 52, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15400000, + end_addr: 32'h15500000},// MagiaTileX20Y10 +'{ idx: '{ id: '{x: 51, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15300000, + end_addr: 32'h15400000},// MagiaTileX19Y10 +'{ idx: '{ id: '{x: 50, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15200000, + end_addr: 32'h15300000},// MagiaTileX18Y10 +'{ idx: '{ id: '{x: 49, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15100000, + end_addr: 32'h15200000},// MagiaTileX17Y10 +'{ idx: '{ id: '{x: 48, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h15000000, + end_addr: 32'h15100000},// MagiaTileX16Y10 +'{ idx: '{ id: '{x: 47, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14f00000, + end_addr: 32'h15000000},// MagiaTileX15Y10 +'{ idx: '{ id: '{x: 46, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14e00000, + end_addr: 32'h14f00000},// MagiaTileX14Y10 +'{ idx: '{ id: '{x: 45, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14d00000, + end_addr: 32'h14e00000},// MagiaTileX13Y10 +'{ idx: '{ id: '{x: 44, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14c00000, + end_addr: 32'h14d00000},// MagiaTileX12Y10 +'{ idx: '{ id: '{x: 43, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14b00000, + end_addr: 32'h14c00000},// MagiaTileX11Y10 +'{ idx: '{ id: '{x: 42, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14a00000, + end_addr: 32'h14b00000},// MagiaTileX10Y10 +'{ idx: '{ id: '{x: 41, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14900000, + end_addr: 32'h14a00000},// MagiaTileX9Y10 +'{ idx: '{ id: '{x: 40, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14800000, + end_addr: 32'h14900000},// MagiaTileX8Y10 +'{ idx: '{ id: '{x: 39, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14700000, + end_addr: 32'h14800000},// MagiaTileX7Y10 +'{ idx: '{ id: '{x: 38, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14600000, + end_addr: 32'h14700000},// MagiaTileX6Y10 +'{ idx: '{ id: '{x: 37, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14500000, + end_addr: 32'h14600000},// MagiaTileX5Y10 +'{ idx: '{ id: '{x: 36, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14400000, + end_addr: 32'h14500000},// MagiaTileX4Y10 +'{ idx: '{ id: '{x: 35, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14300000, + end_addr: 32'h14400000},// MagiaTileX3Y10 +'{ idx: '{ id: '{x: 34, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14200000, + end_addr: 32'h14300000},// MagiaTileX2Y10 +'{ idx: '{ id: '{x: 33, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14100000, + end_addr: 32'h14200000},// MagiaTileX1Y10 +'{ idx: '{ id: '{x: 32, y: 10, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h14000000, + end_addr: 32'h14100000},// MagiaTileX0Y10 +'{ idx: '{ id: '{x: 63, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13f00000, + end_addr: 32'h14000000},// MagiaTileX31Y9 +'{ idx: '{ id: '{x: 62, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13e00000, + end_addr: 32'h13f00000},// MagiaTileX30Y9 +'{ idx: '{ id: '{x: 61, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13d00000, + end_addr: 32'h13e00000},// MagiaTileX29Y9 +'{ idx: '{ id: '{x: 60, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13c00000, + end_addr: 32'h13d00000},// MagiaTileX28Y9 +'{ idx: '{ id: '{x: 59, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13b00000, + end_addr: 32'h13c00000},// MagiaTileX27Y9 +'{ idx: '{ id: '{x: 58, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13a00000, + end_addr: 32'h13b00000},// MagiaTileX26Y9 +'{ idx: '{ id: '{x: 57, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13900000, + end_addr: 32'h13a00000},// MagiaTileX25Y9 +'{ idx: '{ id: '{x: 56, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13800000, + end_addr: 32'h13900000},// MagiaTileX24Y9 +'{ idx: '{ id: '{x: 55, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13700000, + end_addr: 32'h13800000},// MagiaTileX23Y9 +'{ idx: '{ id: '{x: 54, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13600000, + end_addr: 32'h13700000},// MagiaTileX22Y9 +'{ idx: '{ id: '{x: 53, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13500000, + end_addr: 32'h13600000},// MagiaTileX21Y9 +'{ idx: '{ id: '{x: 52, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13400000, + end_addr: 32'h13500000},// MagiaTileX20Y9 +'{ idx: '{ id: '{x: 51, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13300000, + end_addr: 32'h13400000},// MagiaTileX19Y9 +'{ idx: '{ id: '{x: 50, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13200000, + end_addr: 32'h13300000},// MagiaTileX18Y9 +'{ idx: '{ id: '{x: 49, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13100000, + end_addr: 32'h13200000},// MagiaTileX17Y9 +'{ idx: '{ id: '{x: 48, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h13000000, + end_addr: 32'h13100000},// MagiaTileX16Y9 +'{ idx: '{ id: '{x: 47, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12f00000, + end_addr: 32'h13000000},// MagiaTileX15Y9 +'{ idx: '{ id: '{x: 46, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12e00000, + end_addr: 32'h12f00000},// MagiaTileX14Y9 +'{ idx: '{ id: '{x: 45, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12d00000, + end_addr: 32'h12e00000},// MagiaTileX13Y9 +'{ idx: '{ id: '{x: 44, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12c00000, + end_addr: 32'h12d00000},// MagiaTileX12Y9 +'{ idx: '{ id: '{x: 43, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12b00000, + end_addr: 32'h12c00000},// MagiaTileX11Y9 +'{ idx: '{ id: '{x: 42, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12a00000, + end_addr: 32'h12b00000},// MagiaTileX10Y9 +'{ idx: '{ id: '{x: 41, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12900000, + end_addr: 32'h12a00000},// MagiaTileX9Y9 +'{ idx: '{ id: '{x: 40, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12800000, + end_addr: 32'h12900000},// MagiaTileX8Y9 +'{ idx: '{ id: '{x: 39, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12700000, + end_addr: 32'h12800000},// MagiaTileX7Y9 +'{ idx: '{ id: '{x: 38, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12600000, + end_addr: 32'h12700000},// MagiaTileX6Y9 +'{ idx: '{ id: '{x: 37, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12500000, + end_addr: 32'h12600000},// MagiaTileX5Y9 +'{ idx: '{ id: '{x: 36, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12400000, + end_addr: 32'h12500000},// MagiaTileX4Y9 +'{ idx: '{ id: '{x: 35, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12300000, + end_addr: 32'h12400000},// MagiaTileX3Y9 +'{ idx: '{ id: '{x: 34, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12200000, + end_addr: 32'h12300000},// MagiaTileX2Y9 +'{ idx: '{ id: '{x: 33, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12100000, + end_addr: 32'h12200000},// MagiaTileX1Y9 +'{ idx: '{ id: '{x: 32, y: 9, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h12000000, + end_addr: 32'h12100000},// MagiaTileX0Y9 +'{ idx: '{ id: '{x: 63, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11f00000, + end_addr: 32'h12000000},// MagiaTileX31Y8 +'{ idx: '{ id: '{x: 62, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11e00000, + end_addr: 32'h11f00000},// MagiaTileX30Y8 +'{ idx: '{ id: '{x: 61, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11d00000, + end_addr: 32'h11e00000},// MagiaTileX29Y8 +'{ idx: '{ id: '{x: 60, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11c00000, + end_addr: 32'h11d00000},// MagiaTileX28Y8 +'{ idx: '{ id: '{x: 59, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11b00000, + end_addr: 32'h11c00000},// MagiaTileX27Y8 +'{ idx: '{ id: '{x: 58, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11a00000, + end_addr: 32'h11b00000},// MagiaTileX26Y8 +'{ idx: '{ id: '{x: 57, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11900000, + end_addr: 32'h11a00000},// MagiaTileX25Y8 +'{ idx: '{ id: '{x: 56, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11800000, + end_addr: 32'h11900000},// MagiaTileX24Y8 +'{ idx: '{ id: '{x: 55, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11700000, + end_addr: 32'h11800000},// MagiaTileX23Y8 +'{ idx: '{ id: '{x: 54, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11600000, + end_addr: 32'h11700000},// MagiaTileX22Y8 +'{ idx: '{ id: '{x: 53, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11500000, + end_addr: 32'h11600000},// MagiaTileX21Y8 +'{ idx: '{ id: '{x: 52, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11400000, + end_addr: 32'h11500000},// MagiaTileX20Y8 +'{ idx: '{ id: '{x: 51, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11300000, + end_addr: 32'h11400000},// MagiaTileX19Y8 +'{ idx: '{ id: '{x: 50, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11200000, + end_addr: 32'h11300000},// MagiaTileX18Y8 +'{ idx: '{ id: '{x: 49, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11100000, + end_addr: 32'h11200000},// MagiaTileX17Y8 +'{ idx: '{ id: '{x: 48, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h11000000, + end_addr: 32'h11100000},// MagiaTileX16Y8 +'{ idx: '{ id: '{x: 47, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10f00000, + end_addr: 32'h11000000},// MagiaTileX15Y8 +'{ idx: '{ id: '{x: 46, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10e00000, + end_addr: 32'h10f00000},// MagiaTileX14Y8 +'{ idx: '{ id: '{x: 45, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10d00000, + end_addr: 32'h10e00000},// MagiaTileX13Y8 +'{ idx: '{ id: '{x: 44, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10c00000, + end_addr: 32'h10d00000},// MagiaTileX12Y8 +'{ idx: '{ id: '{x: 43, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10b00000, + end_addr: 32'h10c00000},// MagiaTileX11Y8 +'{ idx: '{ id: '{x: 42, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10a00000, + end_addr: 32'h10b00000},// MagiaTileX10Y8 +'{ idx: '{ id: '{x: 41, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10900000, + end_addr: 32'h10a00000},// MagiaTileX9Y8 +'{ idx: '{ id: '{x: 40, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10800000, + end_addr: 32'h10900000},// MagiaTileX8Y8 +'{ idx: '{ id: '{x: 39, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10700000, + end_addr: 32'h10800000},// MagiaTileX7Y8 +'{ idx: '{ id: '{x: 38, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10600000, + end_addr: 32'h10700000},// MagiaTileX6Y8 +'{ idx: '{ id: '{x: 37, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10500000, + end_addr: 32'h10600000},// MagiaTileX5Y8 +'{ idx: '{ id: '{x: 36, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10400000, + end_addr: 32'h10500000},// MagiaTileX4Y8 +'{ idx: '{ id: '{x: 35, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10300000, + end_addr: 32'h10400000},// MagiaTileX3Y8 +'{ idx: '{ id: '{x: 34, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10200000, + end_addr: 32'h10300000},// MagiaTileX2Y8 +'{ idx: '{ id: '{x: 33, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10100000, + end_addr: 32'h10200000},// MagiaTileX1Y8 +'{ idx: '{ id: '{x: 32, y: 8, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h10000000, + end_addr: 32'h10100000},// MagiaTileX0Y8 +'{ idx: '{ id: '{x: 63, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ff00000, + end_addr: 32'h10000000},// MagiaTileX31Y7 +'{ idx: '{ id: '{x: 62, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0fe00000, + end_addr: 32'h0ff00000},// MagiaTileX30Y7 +'{ idx: '{ id: '{x: 61, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0fd00000, + end_addr: 32'h0fe00000},// MagiaTileX29Y7 +'{ idx: '{ id: '{x: 60, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0fc00000, + end_addr: 32'h0fd00000},// MagiaTileX28Y7 +'{ idx: '{ id: '{x: 59, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0fb00000, + end_addr: 32'h0fc00000},// MagiaTileX27Y7 +'{ idx: '{ id: '{x: 58, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0fa00000, + end_addr: 32'h0fb00000},// MagiaTileX26Y7 +'{ idx: '{ id: '{x: 57, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0f900000, + end_addr: 32'h0fa00000},// MagiaTileX25Y7 +'{ idx: '{ id: '{x: 56, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0f800000, + end_addr: 32'h0f900000},// MagiaTileX24Y7 +'{ idx: '{ id: '{x: 55, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0f700000, + end_addr: 32'h0f800000},// MagiaTileX23Y7 +'{ idx: '{ id: '{x: 54, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0f600000, + end_addr: 32'h0f700000},// MagiaTileX22Y7 +'{ idx: '{ id: '{x: 53, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0f500000, + end_addr: 32'h0f600000},// MagiaTileX21Y7 +'{ idx: '{ id: '{x: 52, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0f400000, + end_addr: 32'h0f500000},// MagiaTileX20Y7 +'{ idx: '{ id: '{x: 51, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0f300000, + end_addr: 32'h0f400000},// MagiaTileX19Y7 +'{ idx: '{ id: '{x: 50, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0f200000, + end_addr: 32'h0f300000},// MagiaTileX18Y7 +'{ idx: '{ id: '{x: 49, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0f100000, + end_addr: 32'h0f200000},// MagiaTileX17Y7 +'{ idx: '{ id: '{x: 48, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0f000000, + end_addr: 32'h0f100000},// MagiaTileX16Y7 +'{ idx: '{ id: '{x: 47, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ef00000, + end_addr: 32'h0f000000},// MagiaTileX15Y7 +'{ idx: '{ id: '{x: 46, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ee00000, + end_addr: 32'h0ef00000},// MagiaTileX14Y7 +'{ idx: '{ id: '{x: 45, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ed00000, + end_addr: 32'h0ee00000},// MagiaTileX13Y7 +'{ idx: '{ id: '{x: 44, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ec00000, + end_addr: 32'h0ed00000},// MagiaTileX12Y7 +'{ idx: '{ id: '{x: 43, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0eb00000, + end_addr: 32'h0ec00000},// MagiaTileX11Y7 +'{ idx: '{ id: '{x: 42, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ea00000, + end_addr: 32'h0eb00000},// MagiaTileX10Y7 +'{ idx: '{ id: '{x: 41, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0e900000, + end_addr: 32'h0ea00000},// MagiaTileX9Y7 +'{ idx: '{ id: '{x: 40, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0e800000, + end_addr: 32'h0e900000},// MagiaTileX8Y7 +'{ idx: '{ id: '{x: 39, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0e700000, + end_addr: 32'h0e800000},// MagiaTileX7Y7 +'{ idx: '{ id: '{x: 38, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0e600000, + end_addr: 32'h0e700000},// MagiaTileX6Y7 +'{ idx: '{ id: '{x: 37, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0e500000, + end_addr: 32'h0e600000},// MagiaTileX5Y7 +'{ idx: '{ id: '{x: 36, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0e400000, + end_addr: 32'h0e500000},// MagiaTileX4Y7 +'{ idx: '{ id: '{x: 35, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0e300000, + end_addr: 32'h0e400000},// MagiaTileX3Y7 +'{ idx: '{ id: '{x: 34, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0e200000, + end_addr: 32'h0e300000},// MagiaTileX2Y7 +'{ idx: '{ id: '{x: 33, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0e100000, + end_addr: 32'h0e200000},// MagiaTileX1Y7 +'{ idx: '{ id: '{x: 32, y: 7, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0e000000, + end_addr: 32'h0e100000},// MagiaTileX0Y7 +'{ idx: '{ id: '{x: 63, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0df00000, + end_addr: 32'h0e000000},// MagiaTileX31Y6 +'{ idx: '{ id: '{x: 62, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0de00000, + end_addr: 32'h0df00000},// MagiaTileX30Y6 +'{ idx: '{ id: '{x: 61, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0dd00000, + end_addr: 32'h0de00000},// MagiaTileX29Y6 +'{ idx: '{ id: '{x: 60, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0dc00000, + end_addr: 32'h0dd00000},// MagiaTileX28Y6 +'{ idx: '{ id: '{x: 59, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0db00000, + end_addr: 32'h0dc00000},// MagiaTileX27Y6 +'{ idx: '{ id: '{x: 58, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0da00000, + end_addr: 32'h0db00000},// MagiaTileX26Y6 +'{ idx: '{ id: '{x: 57, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0d900000, + end_addr: 32'h0da00000},// MagiaTileX25Y6 +'{ idx: '{ id: '{x: 56, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0d800000, + end_addr: 32'h0d900000},// MagiaTileX24Y6 +'{ idx: '{ id: '{x: 55, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0d700000, + end_addr: 32'h0d800000},// MagiaTileX23Y6 +'{ idx: '{ id: '{x: 54, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0d600000, + end_addr: 32'h0d700000},// MagiaTileX22Y6 +'{ idx: '{ id: '{x: 53, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0d500000, + end_addr: 32'h0d600000},// MagiaTileX21Y6 +'{ idx: '{ id: '{x: 52, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0d400000, + end_addr: 32'h0d500000},// MagiaTileX20Y6 +'{ idx: '{ id: '{x: 51, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0d300000, + end_addr: 32'h0d400000},// MagiaTileX19Y6 +'{ idx: '{ id: '{x: 50, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0d200000, + end_addr: 32'h0d300000},// MagiaTileX18Y6 +'{ idx: '{ id: '{x: 49, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0d100000, + end_addr: 32'h0d200000},// MagiaTileX17Y6 +'{ idx: '{ id: '{x: 48, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0d000000, + end_addr: 32'h0d100000},// MagiaTileX16Y6 +'{ idx: '{ id: '{x: 47, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0cf00000, + end_addr: 32'h0d000000},// MagiaTileX15Y6 +'{ idx: '{ id: '{x: 46, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ce00000, + end_addr: 32'h0cf00000},// MagiaTileX14Y6 +'{ idx: '{ id: '{x: 45, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0cd00000, + end_addr: 32'h0ce00000},// MagiaTileX13Y6 +'{ idx: '{ id: '{x: 44, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0cc00000, + end_addr: 32'h0cd00000},// MagiaTileX12Y6 +'{ idx: '{ id: '{x: 43, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0cb00000, + end_addr: 32'h0cc00000},// MagiaTileX11Y6 +'{ idx: '{ id: '{x: 42, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ca00000, + end_addr: 32'h0cb00000},// MagiaTileX10Y6 +'{ idx: '{ id: '{x: 41, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0c900000, + end_addr: 32'h0ca00000},// MagiaTileX9Y6 +'{ idx: '{ id: '{x: 40, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0c800000, + end_addr: 32'h0c900000},// MagiaTileX8Y6 +'{ idx: '{ id: '{x: 39, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0c700000, + end_addr: 32'h0c800000},// MagiaTileX7Y6 +'{ idx: '{ id: '{x: 38, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0c600000, + end_addr: 32'h0c700000},// MagiaTileX6Y6 +'{ idx: '{ id: '{x: 37, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0c500000, + end_addr: 32'h0c600000},// MagiaTileX5Y6 +'{ idx: '{ id: '{x: 36, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0c400000, + end_addr: 32'h0c500000},// MagiaTileX4Y6 +'{ idx: '{ id: '{x: 35, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0c300000, + end_addr: 32'h0c400000},// MagiaTileX3Y6 +'{ idx: '{ id: '{x: 34, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0c200000, + end_addr: 32'h0c300000},// MagiaTileX2Y6 +'{ idx: '{ id: '{x: 33, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0c100000, + end_addr: 32'h0c200000},// MagiaTileX1Y6 +'{ idx: '{ id: '{x: 32, y: 6, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0c000000, + end_addr: 32'h0c100000},// MagiaTileX0Y6 +'{ idx: '{ id: '{x: 63, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0bf00000, + end_addr: 32'h0c000000},// MagiaTileX31Y5 +'{ idx: '{ id: '{x: 62, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0be00000, + end_addr: 32'h0bf00000},// MagiaTileX30Y5 +'{ idx: '{ id: '{x: 61, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0bd00000, + end_addr: 32'h0be00000},// MagiaTileX29Y5 +'{ idx: '{ id: '{x: 60, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0bc00000, + end_addr: 32'h0bd00000},// MagiaTileX28Y5 +'{ idx: '{ id: '{x: 59, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0bb00000, + end_addr: 32'h0bc00000},// MagiaTileX27Y5 +'{ idx: '{ id: '{x: 58, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ba00000, + end_addr: 32'h0bb00000},// MagiaTileX26Y5 +'{ idx: '{ id: '{x: 57, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0b900000, + end_addr: 32'h0ba00000},// MagiaTileX25Y5 +'{ idx: '{ id: '{x: 56, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0b800000, + end_addr: 32'h0b900000},// MagiaTileX24Y5 +'{ idx: '{ id: '{x: 55, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0b700000, + end_addr: 32'h0b800000},// MagiaTileX23Y5 +'{ idx: '{ id: '{x: 54, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0b600000, + end_addr: 32'h0b700000},// MagiaTileX22Y5 +'{ idx: '{ id: '{x: 53, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0b500000, + end_addr: 32'h0b600000},// MagiaTileX21Y5 +'{ idx: '{ id: '{x: 52, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0b400000, + end_addr: 32'h0b500000},// MagiaTileX20Y5 +'{ idx: '{ id: '{x: 51, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0b300000, + end_addr: 32'h0b400000},// MagiaTileX19Y5 +'{ idx: '{ id: '{x: 50, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0b200000, + end_addr: 32'h0b300000},// MagiaTileX18Y5 +'{ idx: '{ id: '{x: 49, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0b100000, + end_addr: 32'h0b200000},// MagiaTileX17Y5 +'{ idx: '{ id: '{x: 48, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0b000000, + end_addr: 32'h0b100000},// MagiaTileX16Y5 +'{ idx: '{ id: '{x: 47, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0af00000, + end_addr: 32'h0b000000},// MagiaTileX15Y5 +'{ idx: '{ id: '{x: 46, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ae00000, + end_addr: 32'h0af00000},// MagiaTileX14Y5 +'{ idx: '{ id: '{x: 45, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ad00000, + end_addr: 32'h0ae00000},// MagiaTileX13Y5 +'{ idx: '{ id: '{x: 44, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ac00000, + end_addr: 32'h0ad00000},// MagiaTileX12Y5 +'{ idx: '{ id: '{x: 43, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0ab00000, + end_addr: 32'h0ac00000},// MagiaTileX11Y5 +'{ idx: '{ id: '{x: 42, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0aa00000, + end_addr: 32'h0ab00000},// MagiaTileX10Y5 +'{ idx: '{ id: '{x: 41, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0a900000, + end_addr: 32'h0aa00000},// MagiaTileX9Y5 +'{ idx: '{ id: '{x: 40, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0a800000, + end_addr: 32'h0a900000},// MagiaTileX8Y5 +'{ idx: '{ id: '{x: 39, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0a700000, + end_addr: 32'h0a800000},// MagiaTileX7Y5 +'{ idx: '{ id: '{x: 38, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0a600000, + end_addr: 32'h0a700000},// MagiaTileX6Y5 +'{ idx: '{ id: '{x: 37, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0a500000, + end_addr: 32'h0a600000},// MagiaTileX5Y5 +'{ idx: '{ id: '{x: 36, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0a400000, + end_addr: 32'h0a500000},// MagiaTileX4Y5 +'{ idx: '{ id: '{x: 35, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0a300000, + end_addr: 32'h0a400000},// MagiaTileX3Y5 +'{ idx: '{ id: '{x: 34, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0a200000, + end_addr: 32'h0a300000},// MagiaTileX2Y5 +'{ idx: '{ id: '{x: 33, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0a100000, + end_addr: 32'h0a200000},// MagiaTileX1Y5 +'{ idx: '{ id: '{x: 32, y: 5, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h0a000000, + end_addr: 32'h0a100000},// MagiaTileX0Y5 +'{ idx: '{ id: '{x: 63, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09f00000, + end_addr: 32'h0a000000},// MagiaTileX31Y4 +'{ idx: '{ id: '{x: 62, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09e00000, + end_addr: 32'h09f00000},// MagiaTileX30Y4 +'{ idx: '{ id: '{x: 61, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09d00000, + end_addr: 32'h09e00000},// MagiaTileX29Y4 +'{ idx: '{ id: '{x: 60, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09c00000, + end_addr: 32'h09d00000},// MagiaTileX28Y4 +'{ idx: '{ id: '{x: 59, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09b00000, + end_addr: 32'h09c00000},// MagiaTileX27Y4 +'{ idx: '{ id: '{x: 58, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09a00000, + end_addr: 32'h09b00000},// MagiaTileX26Y4 +'{ idx: '{ id: '{x: 57, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09900000, + end_addr: 32'h09a00000},// MagiaTileX25Y4 +'{ idx: '{ id: '{x: 56, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09800000, + end_addr: 32'h09900000},// MagiaTileX24Y4 +'{ idx: '{ id: '{x: 55, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09700000, + end_addr: 32'h09800000},// MagiaTileX23Y4 +'{ idx: '{ id: '{x: 54, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09600000, + end_addr: 32'h09700000},// MagiaTileX22Y4 +'{ idx: '{ id: '{x: 53, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09500000, + end_addr: 32'h09600000},// MagiaTileX21Y4 +'{ idx: '{ id: '{x: 52, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09400000, + end_addr: 32'h09500000},// MagiaTileX20Y4 +'{ idx: '{ id: '{x: 51, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09300000, + end_addr: 32'h09400000},// MagiaTileX19Y4 +'{ idx: '{ id: '{x: 50, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09200000, + end_addr: 32'h09300000},// MagiaTileX18Y4 +'{ idx: '{ id: '{x: 49, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09100000, + end_addr: 32'h09200000},// MagiaTileX17Y4 +'{ idx: '{ id: '{x: 48, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h09000000, + end_addr: 32'h09100000},// MagiaTileX16Y4 +'{ idx: '{ id: '{x: 47, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08f00000, + end_addr: 32'h09000000},// MagiaTileX15Y4 +'{ idx: '{ id: '{x: 46, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08e00000, + end_addr: 32'h08f00000},// MagiaTileX14Y4 +'{ idx: '{ id: '{x: 45, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08d00000, + end_addr: 32'h08e00000},// MagiaTileX13Y4 +'{ idx: '{ id: '{x: 44, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08c00000, + end_addr: 32'h08d00000},// MagiaTileX12Y4 +'{ idx: '{ id: '{x: 43, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08b00000, + end_addr: 32'h08c00000},// MagiaTileX11Y4 +'{ idx: '{ id: '{x: 42, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08a00000, + end_addr: 32'h08b00000},// MagiaTileX10Y4 +'{ idx: '{ id: '{x: 41, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08900000, + end_addr: 32'h08a00000},// MagiaTileX9Y4 +'{ idx: '{ id: '{x: 40, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08800000, + end_addr: 32'h08900000},// MagiaTileX8Y4 +'{ idx: '{ id: '{x: 39, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08700000, + end_addr: 32'h08800000},// MagiaTileX7Y4 +'{ idx: '{ id: '{x: 38, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08600000, + end_addr: 32'h08700000},// MagiaTileX6Y4 +'{ idx: '{ id: '{x: 37, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08500000, + end_addr: 32'h08600000},// MagiaTileX5Y4 +'{ idx: '{ id: '{x: 36, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08400000, + end_addr: 32'h08500000},// MagiaTileX4Y4 +'{ idx: '{ id: '{x: 35, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08300000, + end_addr: 32'h08400000},// MagiaTileX3Y4 +'{ idx: '{ id: '{x: 34, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08200000, + end_addr: 32'h08300000},// MagiaTileX2Y4 +'{ idx: '{ id: '{x: 33, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08100000, + end_addr: 32'h08200000},// MagiaTileX1Y4 +'{ idx: '{ id: '{x: 32, y: 4, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h08000000, + end_addr: 32'h08100000},// MagiaTileX0Y4 +'{ idx: '{ id: '{x: 63, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07f00000, + end_addr: 32'h08000000},// MagiaTileX31Y3 +'{ idx: '{ id: '{x: 62, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07e00000, + end_addr: 32'h07f00000},// MagiaTileX30Y3 +'{ idx: '{ id: '{x: 61, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07d00000, + end_addr: 32'h07e00000},// MagiaTileX29Y3 +'{ idx: '{ id: '{x: 60, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07c00000, + end_addr: 32'h07d00000},// MagiaTileX28Y3 +'{ idx: '{ id: '{x: 59, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07b00000, + end_addr: 32'h07c00000},// MagiaTileX27Y3 +'{ idx: '{ id: '{x: 58, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07a00000, + end_addr: 32'h07b00000},// MagiaTileX26Y3 +'{ idx: '{ id: '{x: 57, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07900000, + end_addr: 32'h07a00000},// MagiaTileX25Y3 +'{ idx: '{ id: '{x: 56, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07800000, + end_addr: 32'h07900000},// MagiaTileX24Y3 +'{ idx: '{ id: '{x: 55, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07700000, + end_addr: 32'h07800000},// MagiaTileX23Y3 +'{ idx: '{ id: '{x: 54, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07600000, + end_addr: 32'h07700000},// MagiaTileX22Y3 +'{ idx: '{ id: '{x: 53, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07500000, + end_addr: 32'h07600000},// MagiaTileX21Y3 +'{ idx: '{ id: '{x: 52, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07400000, + end_addr: 32'h07500000},// MagiaTileX20Y3 +'{ idx: '{ id: '{x: 51, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07300000, + end_addr: 32'h07400000},// MagiaTileX19Y3 +'{ idx: '{ id: '{x: 50, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07200000, + end_addr: 32'h07300000},// MagiaTileX18Y3 +'{ idx: '{ id: '{x: 49, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07100000, + end_addr: 32'h07200000},// MagiaTileX17Y3 +'{ idx: '{ id: '{x: 48, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h07000000, + end_addr: 32'h07100000},// MagiaTileX16Y3 +'{ idx: '{ id: '{x: 47, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06f00000, + end_addr: 32'h07000000},// MagiaTileX15Y3 +'{ idx: '{ id: '{x: 46, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06e00000, + end_addr: 32'h06f00000},// MagiaTileX14Y3 +'{ idx: '{ id: '{x: 45, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06d00000, + end_addr: 32'h06e00000},// MagiaTileX13Y3 +'{ idx: '{ id: '{x: 44, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06c00000, + end_addr: 32'h06d00000},// MagiaTileX12Y3 +'{ idx: '{ id: '{x: 43, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06b00000, + end_addr: 32'h06c00000},// MagiaTileX11Y3 +'{ idx: '{ id: '{x: 42, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06a00000, + end_addr: 32'h06b00000},// MagiaTileX10Y3 +'{ idx: '{ id: '{x: 41, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06900000, + end_addr: 32'h06a00000},// MagiaTileX9Y3 +'{ idx: '{ id: '{x: 40, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06800000, + end_addr: 32'h06900000},// MagiaTileX8Y3 +'{ idx: '{ id: '{x: 39, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06700000, + end_addr: 32'h06800000},// MagiaTileX7Y3 +'{ idx: '{ id: '{x: 38, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06600000, + end_addr: 32'h06700000},// MagiaTileX6Y3 +'{ idx: '{ id: '{x: 37, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06500000, + end_addr: 32'h06600000},// MagiaTileX5Y3 +'{ idx: '{ id: '{x: 36, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06400000, + end_addr: 32'h06500000},// MagiaTileX4Y3 +'{ idx: '{ id: '{x: 35, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06300000, + end_addr: 32'h06400000},// MagiaTileX3Y3 +'{ idx: '{ id: '{x: 34, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06200000, + end_addr: 32'h06300000},// MagiaTileX2Y3 +'{ idx: '{ id: '{x: 33, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06100000, + end_addr: 32'h06200000},// MagiaTileX1Y3 +'{ idx: '{ id: '{x: 32, y: 3, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h06000000, + end_addr: 32'h06100000},// MagiaTileX0Y3 +'{ idx: '{ id: '{x: 63, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05f00000, + end_addr: 32'h06000000},// MagiaTileX31Y2 +'{ idx: '{ id: '{x: 62, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05e00000, + end_addr: 32'h05f00000},// MagiaTileX30Y2 +'{ idx: '{ id: '{x: 61, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05d00000, + end_addr: 32'h05e00000},// MagiaTileX29Y2 +'{ idx: '{ id: '{x: 60, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05c00000, + end_addr: 32'h05d00000},// MagiaTileX28Y2 +'{ idx: '{ id: '{x: 59, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05b00000, + end_addr: 32'h05c00000},// MagiaTileX27Y2 +'{ idx: '{ id: '{x: 58, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05a00000, + end_addr: 32'h05b00000},// MagiaTileX26Y2 +'{ idx: '{ id: '{x: 57, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05900000, + end_addr: 32'h05a00000},// MagiaTileX25Y2 +'{ idx: '{ id: '{x: 56, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05800000, + end_addr: 32'h05900000},// MagiaTileX24Y2 +'{ idx: '{ id: '{x: 55, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05700000, + end_addr: 32'h05800000},// MagiaTileX23Y2 +'{ idx: '{ id: '{x: 54, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05600000, + end_addr: 32'h05700000},// MagiaTileX22Y2 +'{ idx: '{ id: '{x: 53, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05500000, + end_addr: 32'h05600000},// MagiaTileX21Y2 +'{ idx: '{ id: '{x: 52, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05400000, + end_addr: 32'h05500000},// MagiaTileX20Y2 +'{ idx: '{ id: '{x: 51, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05300000, + end_addr: 32'h05400000},// MagiaTileX19Y2 +'{ idx: '{ id: '{x: 50, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05200000, + end_addr: 32'h05300000},// MagiaTileX18Y2 +'{ idx: '{ id: '{x: 49, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05100000, + end_addr: 32'h05200000},// MagiaTileX17Y2 +'{ idx: '{ id: '{x: 48, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h05000000, + end_addr: 32'h05100000},// MagiaTileX16Y2 +'{ idx: '{ id: '{x: 47, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04f00000, + end_addr: 32'h05000000},// MagiaTileX15Y2 +'{ idx: '{ id: '{x: 46, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04e00000, + end_addr: 32'h04f00000},// MagiaTileX14Y2 +'{ idx: '{ id: '{x: 45, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04d00000, + end_addr: 32'h04e00000},// MagiaTileX13Y2 +'{ idx: '{ id: '{x: 44, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04c00000, + end_addr: 32'h04d00000},// MagiaTileX12Y2 +'{ idx: '{ id: '{x: 43, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04b00000, + end_addr: 32'h04c00000},// MagiaTileX11Y2 +'{ idx: '{ id: '{x: 42, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04a00000, + end_addr: 32'h04b00000},// MagiaTileX10Y2 +'{ idx: '{ id: '{x: 41, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04900000, + end_addr: 32'h04a00000},// MagiaTileX9Y2 +'{ idx: '{ id: '{x: 40, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04800000, + end_addr: 32'h04900000},// MagiaTileX8Y2 +'{ idx: '{ id: '{x: 39, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04700000, + end_addr: 32'h04800000},// MagiaTileX7Y2 +'{ idx: '{ id: '{x: 38, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04600000, + end_addr: 32'h04700000},// MagiaTileX6Y2 +'{ idx: '{ id: '{x: 37, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04500000, + end_addr: 32'h04600000},// MagiaTileX5Y2 +'{ idx: '{ id: '{x: 36, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04400000, + end_addr: 32'h04500000},// MagiaTileX4Y2 +'{ idx: '{ id: '{x: 35, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04300000, + end_addr: 32'h04400000},// MagiaTileX3Y2 +'{ idx: '{ id: '{x: 34, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04200000, + end_addr: 32'h04300000},// MagiaTileX2Y2 +'{ idx: '{ id: '{x: 33, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04100000, + end_addr: 32'h04200000},// MagiaTileX1Y2 +'{ idx: '{ id: '{x: 32, y: 2, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h04000000, + end_addr: 32'h04100000},// MagiaTileX0Y2 +'{ idx: '{ id: '{x: 63, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03f00000, + end_addr: 32'h04000000},// MagiaTileX31Y1 +'{ idx: '{ id: '{x: 62, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03e00000, + end_addr: 32'h03f00000},// MagiaTileX30Y1 +'{ idx: '{ id: '{x: 61, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03d00000, + end_addr: 32'h03e00000},// MagiaTileX29Y1 +'{ idx: '{ id: '{x: 60, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03c00000, + end_addr: 32'h03d00000},// MagiaTileX28Y1 +'{ idx: '{ id: '{x: 59, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03b00000, + end_addr: 32'h03c00000},// MagiaTileX27Y1 +'{ idx: '{ id: '{x: 58, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03a00000, + end_addr: 32'h03b00000},// MagiaTileX26Y1 +'{ idx: '{ id: '{x: 57, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03900000, + end_addr: 32'h03a00000},// MagiaTileX25Y1 +'{ idx: '{ id: '{x: 56, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03800000, + end_addr: 32'h03900000},// MagiaTileX24Y1 +'{ idx: '{ id: '{x: 55, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03700000, + end_addr: 32'h03800000},// MagiaTileX23Y1 +'{ idx: '{ id: '{x: 54, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03600000, + end_addr: 32'h03700000},// MagiaTileX22Y1 +'{ idx: '{ id: '{x: 53, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03500000, + end_addr: 32'h03600000},// MagiaTileX21Y1 +'{ idx: '{ id: '{x: 52, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03400000, + end_addr: 32'h03500000},// MagiaTileX20Y1 +'{ idx: '{ id: '{x: 51, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03300000, + end_addr: 32'h03400000},// MagiaTileX19Y1 +'{ idx: '{ id: '{x: 50, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03200000, + end_addr: 32'h03300000},// MagiaTileX18Y1 +'{ idx: '{ id: '{x: 49, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03100000, + end_addr: 32'h03200000},// MagiaTileX17Y1 +'{ idx: '{ id: '{x: 48, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h03000000, + end_addr: 32'h03100000},// MagiaTileX16Y1 +'{ idx: '{ id: '{x: 47, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02f00000, + end_addr: 32'h03000000},// MagiaTileX15Y1 +'{ idx: '{ id: '{x: 46, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02e00000, + end_addr: 32'h02f00000},// MagiaTileX14Y1 +'{ idx: '{ id: '{x: 45, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02d00000, + end_addr: 32'h02e00000},// MagiaTileX13Y1 +'{ idx: '{ id: '{x: 44, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02c00000, + end_addr: 32'h02d00000},// MagiaTileX12Y1 +'{ idx: '{ id: '{x: 43, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02b00000, + end_addr: 32'h02c00000},// MagiaTileX11Y1 +'{ idx: '{ id: '{x: 42, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02a00000, + end_addr: 32'h02b00000},// MagiaTileX10Y1 +'{ idx: '{ id: '{x: 41, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02900000, + end_addr: 32'h02a00000},// MagiaTileX9Y1 +'{ idx: '{ id: '{x: 40, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02800000, + end_addr: 32'h02900000},// MagiaTileX8Y1 +'{ idx: '{ id: '{x: 39, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02700000, + end_addr: 32'h02800000},// MagiaTileX7Y1 +'{ idx: '{ id: '{x: 38, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02600000, + end_addr: 32'h02700000},// MagiaTileX6Y1 +'{ idx: '{ id: '{x: 37, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02500000, + end_addr: 32'h02600000},// MagiaTileX5Y1 +'{ idx: '{ id: '{x: 36, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02400000, + end_addr: 32'h02500000},// MagiaTileX4Y1 +'{ idx: '{ id: '{x: 35, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02300000, + end_addr: 32'h02400000},// MagiaTileX3Y1 +'{ idx: '{ id: '{x: 34, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02200000, + end_addr: 32'h02300000},// MagiaTileX2Y1 +'{ idx: '{ id: '{x: 33, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02100000, + end_addr: 32'h02200000},// MagiaTileX1Y1 +'{ idx: '{ id: '{x: 32, y: 1, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h02000000, + end_addr: 32'h02100000},// MagiaTileX0Y1 +'{ idx: '{ id: '{x: 63, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01f00000, + end_addr: 32'h02000000},// MagiaTileX31Y0 +'{ idx: '{ id: '{x: 62, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01e00000, + end_addr: 32'h01f00000},// MagiaTileX30Y0 +'{ idx: '{ id: '{x: 61, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01d00000, + end_addr: 32'h01e00000},// MagiaTileX29Y0 +'{ idx: '{ id: '{x: 60, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01c00000, + end_addr: 32'h01d00000},// MagiaTileX28Y0 +'{ idx: '{ id: '{x: 59, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01b00000, + end_addr: 32'h01c00000},// MagiaTileX27Y0 +'{ idx: '{ id: '{x: 58, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01a00000, + end_addr: 32'h01b00000},// MagiaTileX26Y0 +'{ idx: '{ id: '{x: 57, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01900000, + end_addr: 32'h01a00000},// MagiaTileX25Y0 +'{ idx: '{ id: '{x: 56, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01800000, + end_addr: 32'h01900000},// MagiaTileX24Y0 +'{ idx: '{ id: '{x: 55, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01700000, + end_addr: 32'h01800000},// MagiaTileX23Y0 +'{ idx: '{ id: '{x: 54, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01600000, + end_addr: 32'h01700000},// MagiaTileX22Y0 +'{ idx: '{ id: '{x: 53, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01500000, + end_addr: 32'h01600000},// MagiaTileX21Y0 +'{ idx: '{ id: '{x: 52, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01400000, + end_addr: 32'h01500000},// MagiaTileX20Y0 +'{ idx: '{ id: '{x: 51, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01300000, + end_addr: 32'h01400000},// MagiaTileX19Y0 +'{ idx: '{ id: '{x: 50, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01200000, + end_addr: 32'h01300000},// MagiaTileX18Y0 +'{ idx: '{ id: '{x: 49, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01100000, + end_addr: 32'h01200000},// MagiaTileX17Y0 +'{ idx: '{ id: '{x: 48, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h01000000, + end_addr: 32'h01100000},// MagiaTileX16Y0 +'{ idx: '{ id: '{x: 47, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00f00000, + end_addr: 32'h01000000},// MagiaTileX15Y0 +'{ idx: '{ id: '{x: 46, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00e00000, + end_addr: 32'h00f00000},// MagiaTileX14Y0 +'{ idx: '{ id: '{x: 45, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00d00000, + end_addr: 32'h00e00000},// MagiaTileX13Y0 +'{ idx: '{ id: '{x: 44, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00c00000, + end_addr: 32'h00d00000},// MagiaTileX12Y0 +'{ idx: '{ id: '{x: 43, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00b00000, + end_addr: 32'h00c00000},// MagiaTileX11Y0 +'{ idx: '{ id: '{x: 42, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00a00000, + end_addr: 32'h00b00000},// MagiaTileX10Y0 +'{ idx: '{ id: '{x: 41, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00900000, + end_addr: 32'h00a00000},// MagiaTileX9Y0 +'{ idx: '{ id: '{x: 40, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00800000, + end_addr: 32'h00900000},// MagiaTileX8Y0 +'{ idx: '{ id: '{x: 39, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00700000, + end_addr: 32'h00800000},// MagiaTileX7Y0 +'{ idx: '{ id: '{x: 38, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00600000, + end_addr: 32'h00700000},// MagiaTileX6Y0 +'{ idx: '{ id: '{x: 37, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00500000, + end_addr: 32'h00600000},// MagiaTileX5Y0 +'{ idx: '{ id: '{x: 36, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00400000, + end_addr: 32'h00500000},// MagiaTileX4Y0 +'{ idx: '{ id: '{x: 35, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00300000, + end_addr: 32'h00400000},// MagiaTileX3Y0 +'{ idx: '{ id: '{x: 34, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00200000, + end_addr: 32'h00300000},// MagiaTileX2Y0 +'{ idx: '{ id: '{x: 33, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX1Y0 +'{ idx: '{ id: '{x: 32, y: 0, port_id: 0}, + mask_x: '{ offset: 25, + len: 5, + base_id: 32}, + mask_y: '{ offset: 20, + len: 5, + base_id: 0}}, + start_addr: 32'h00000000, + end_addr: 32'h00100000} // MagiaTileX0Y0 }; @@ -2165,10 +14752,39 @@ localparam sam_rule_t[SamNumRules-1:0] Sam = '{ XYAddrOffsetY: 38, IdAddrOffset: 0, NumSamRules: 1056, - NumRoutes: 0}; + NumRoutes: 0, + CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, + EnWideMulticast: 1'b1, + EnLsbAnd: 1'b1, + EnFpAdd: 1'b1, + EnFpMul: 1'b1, + EnFpMin: 1'b1, + EnFpMax: 1'b1, + EnIntAdd: 1'b0, + EnIntMul: 1'b0, + EnIntMinS: 1'b0, + EnIntMinU: 1'b0, + EnIntMaxS: 1'b0, + EnIntMaxU: 1'b0}, + NarrRedCfg: RedDefaultCfg, + WideRedCfg: '{ RdPipelineDepth: 0, + CutOffloadIntf: 1'b0}}}; + + + + typedef logic[31:0] collective_axi_narrow_data_mst_addr_t; +typedef logic[31:0] collective_axi_narrow_data_mst_data_t; +typedef logic[3:0] collective_axi_narrow_data_mst_strb_t; +typedef logic[1:0] collective_axi_narrow_data_mst_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_narrow_data_mst_user_t; +`AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_mst, collective_axi_narrow_data_mst_req_t, collective_axi_narrow_data_mst_rsp_t, collective_axi_narrow_data_mst_addr_t, collective_axi_narrow_data_mst_id_t, collective_axi_narrow_data_mst_data_t, collective_axi_narrow_data_mst_strb_t, collective_axi_narrow_data_mst_user_t) - typedef logic[31:0] axi_narrow_data_mst_addr_t; + + typedef logic[31:0] axi_narrow_data_mst_addr_t; typedef logic[31:0] axi_narrow_data_mst_data_t; typedef logic[3:0] axi_narrow_data_mst_strb_t; typedef logic[2:0] axi_narrow_data_mst_id_t; @@ -2176,7 +14792,19 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_mst, axi_narrow_data_mst_req_t, axi_narrow_data_mst_rsp_t, axi_narrow_data_mst_addr_t, axi_narrow_data_mst_id_t, axi_narrow_data_mst_data_t, axi_narrow_data_mst_strb_t, axi_narrow_data_mst_user_t) - typedef logic[31:0] axi_narrow_data_slv_addr_t; + typedef logic[31:0] collective_axi_narrow_data_slv_addr_t; +typedef logic[31:0] collective_axi_narrow_data_slv_data_t; +typedef logic[3:0] collective_axi_narrow_data_slv_strb_t; +typedef logic[3:0] collective_axi_narrow_data_slv_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_narrow_data_slv_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_narrow_data_slv, collective_axi_narrow_data_slv_req_t, collective_axi_narrow_data_slv_rsp_t, collective_axi_narrow_data_slv_addr_t, collective_axi_narrow_data_slv_id_t, collective_axi_narrow_data_slv_data_t, collective_axi_narrow_data_slv_strb_t, collective_axi_narrow_data_slv_user_t) + + + typedef logic[31:0] axi_narrow_data_slv_addr_t; typedef logic[31:0] axi_narrow_data_slv_data_t; typedef logic[3:0] axi_narrow_data_slv_strb_t; typedef logic[5:0] axi_narrow_data_slv_id_t; @@ -2184,7 +14812,19 @@ typedef logic[0:0] axi_narrow_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_slv, axi_narrow_data_slv_req_t, axi_narrow_data_slv_rsp_t, axi_narrow_data_slv_addr_t, axi_narrow_data_slv_id_t, axi_narrow_data_slv_data_t, axi_narrow_data_slv_strb_t, axi_narrow_data_slv_user_t) - typedef logic[31:0] axi_wide_data_mst_addr_t; + typedef logic[31:0] collective_axi_wide_data_mst_addr_t; +typedef logic[255:0] collective_axi_wide_data_mst_data_t; +typedef logic[31:0] collective_axi_wide_data_mst_strb_t; +typedef logic[1:0] collective_axi_wide_data_mst_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_wide_data_mst_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_mst, collective_axi_wide_data_mst_req_t, collective_axi_wide_data_mst_rsp_t, collective_axi_wide_data_mst_addr_t, collective_axi_wide_data_mst_id_t, collective_axi_wide_data_mst_data_t, collective_axi_wide_data_mst_strb_t, collective_axi_wide_data_mst_user_t) + + + typedef logic[31:0] axi_wide_data_mst_addr_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; typedef logic[2:0] axi_wide_data_mst_id_t; @@ -2192,7 +14832,19 @@ typedef logic[0:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) - typedef logic[31:0] axi_wide_data_slv_addr_t; + typedef logic[31:0] collective_axi_wide_data_slv_addr_t; +typedef logic[255:0] collective_axi_wide_data_slv_data_t; +typedef logic[31:0] collective_axi_wide_data_slv_strb_t; +typedef logic[1:0] collective_axi_wide_data_slv_id_t; +typedef struct packed { + logic [31:0] collective_mask; + logic [3:0] collective_op; +} collective_axi_wide_data_slv_user_t; + +`AXI_TYPEDEF_ALL_CT(collective_axi_wide_data_slv, collective_axi_wide_data_slv_req_t, collective_axi_wide_data_slv_rsp_t, collective_axi_wide_data_slv_addr_t, collective_axi_wide_data_slv_id_t, collective_axi_wide_data_slv_data_t, collective_axi_wide_data_slv_strb_t, collective_axi_wide_data_slv_user_t) + + + typedef logic[31:0] axi_wide_data_slv_addr_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; typedef logic[2:0] axi_wide_data_slv_id_t; @@ -2201,20 +14853,23 @@ typedef logic[0:0] axi_wide_data_slv_user_t; - `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t) + `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: 32, DataWidth: 32, - UserWidth: 1, - InIdWidth: 6, - OutIdWidth: 3}; + InIdWidth: 4, + OutIdWidth: 2, + UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - UserWidth: 1, - InIdWidth: 3, - OutIdWidth: 3}; + InIdWidth: 2, + OutIdWidth: 2, + UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) + typedef logic [AxiCfgW.DataWidth-1:0] floo_wide_red_data_t; +`FLOO_RED_TYPEDEF_REQ_RSP_LINK(wide, floo_wide_red_data_t, wide_req, wide_rsp) + endpackage diff --git a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv index b7ec7d78..4ae709c1 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv @@ -11,26 +11,35 @@ package floo_axi_nw_mesh_4x4_noc_pkg; import floo_pkg::*; + ///////////////////////////// + // Endpoint Dimensions // + ///////////////////////////// + + localparam int unsigned NumMagiaTileX = 4; +localparam int unsigned NumMagiaTileY = 4; +localparam int unsigned NumL2 = 4; + + ///////////////////// // Address Map // ///////////////////// typedef enum logic[4:0] { MagiaTileX0Y0 = 0, - MagiaTileX0Y1 = 1, - MagiaTileX0Y2 = 2, - MagiaTileX0Y3 = 3, - MagiaTileX1Y0 = 4, + MagiaTileX1Y0 = 1, + MagiaTileX2Y0 = 2, + MagiaTileX3Y0 = 3, + MagiaTileX0Y1 = 4, MagiaTileX1Y1 = 5, - MagiaTileX1Y2 = 6, - MagiaTileX1Y3 = 7, - MagiaTileX2Y0 = 8, - MagiaTileX2Y1 = 9, + MagiaTileX2Y1 = 6, + MagiaTileX3Y1 = 7, + MagiaTileX0Y2 = 8, + MagiaTileX1Y2 = 9, MagiaTileX2Y2 = 10, - MagiaTileX2Y3 = 11, - MagiaTileX3Y0 = 12, - MagiaTileX3Y1 = 13, - MagiaTileX3Y2 = 14, + MagiaTileX3Y2 = 11, + MagiaTileX0Y3 = 12, + MagiaTileX1Y3 = 13, + MagiaTileX2Y3 = 14, MagiaTileX3Y3 = 15, L20 = 16, L21 = 17, @@ -42,20 +51,20 @@ package floo_axi_nw_mesh_4x4_noc_pkg; typedef enum logic[4:0] { MagiaTileX0Y0SamIdx = 0, - MagiaTileX0Y1SamIdx = 1, - MagiaTileX0Y2SamIdx = 2, - MagiaTileX0Y3SamIdx = 3, - MagiaTileX1Y0SamIdx = 4, + MagiaTileX1Y0SamIdx = 1, + MagiaTileX2Y0SamIdx = 2, + MagiaTileX3Y0SamIdx = 3, + MagiaTileX0Y1SamIdx = 4, MagiaTileX1Y1SamIdx = 5, - MagiaTileX1Y2SamIdx = 6, - MagiaTileX1Y3SamIdx = 7, - MagiaTileX2Y0SamIdx = 8, - MagiaTileX2Y1SamIdx = 9, + MagiaTileX2Y1SamIdx = 6, + MagiaTileX3Y1SamIdx = 7, + MagiaTileX0Y2SamIdx = 8, + MagiaTileX1Y2SamIdx = 9, MagiaTileX2Y2SamIdx = 10, - MagiaTileX2Y3SamIdx = 11, - MagiaTileX3Y0SamIdx = 12, - MagiaTileX3Y1SamIdx = 13, - MagiaTileX3Y2SamIdx = 14, + MagiaTileX3Y2SamIdx = 11, + MagiaTileX0Y3SamIdx = 12, + MagiaTileX1Y3SamIdx = 13, + MagiaTileX2Y3SamIdx = 14, MagiaTileX3Y3SamIdx = 15, L20SamIdx = 16, L21SamIdx = 17, @@ -92,26 +101,68 @@ typedef struct packed { } sam_rule_t; localparam sam_rule_t[SamNumRules-1:0] Sam = '{ -'{idx: '{x: 0, y: 3, port_id: 0}, start_addr: 32'hf0000000, end_addr: 32'hffffffff},// L2_3_sam_idx -'{idx: '{x: 0, y: 2, port_id: 0}, start_addr: 32'he0000000, end_addr: 32'hf0000000},// L2_2_sam_idx -'{idx: '{x: 0, y: 1, port_id: 0}, start_addr: 32'hd0000000, end_addr: 32'he0000000},// L2_1_sam_idx -'{idx: '{x: 0, y: 0, port_id: 0}, start_addr: 32'hc0000000, end_addr: 32'hd0000000},// L2_0_sam_idx -'{idx: '{x: 4, y: 3, port_id: 0}, start_addr: 32'h00f00000, end_addr: 32'h01000000},// magia_tile_x3_y3_sam_idx -'{idx: '{x: 3, y: 3, port_id: 0}, start_addr: 32'h00e00000, end_addr: 32'h00f00000},// magia_tile_x2_y3_sam_idx -'{idx: '{x: 2, y: 3, port_id: 0}, start_addr: 32'h00d00000, end_addr: 32'h00e00000},// magia_tile_x1_y3_sam_idx -'{idx: '{x: 1, y: 3, port_id: 0}, start_addr: 32'h00c00000, end_addr: 32'h00d00000},// magia_tile_x0_y3_sam_idx -'{idx: '{x: 4, y: 2, port_id: 0}, start_addr: 32'h00b00000, end_addr: 32'h00c00000},// magia_tile_x3_y2_sam_idx -'{idx: '{x: 3, y: 2, port_id: 0}, start_addr: 32'h00a00000, end_addr: 32'h00b00000},// magia_tile_x2_y2_sam_idx -'{idx: '{x: 2, y: 2, port_id: 0}, start_addr: 32'h00900000, end_addr: 32'h00a00000},// magia_tile_x1_y2_sam_idx -'{idx: '{x: 1, y: 2, port_id: 0}, start_addr: 32'h00800000, end_addr: 32'h00900000},// magia_tile_x0_y2_sam_idx -'{idx: '{x: 4, y: 1, port_id: 0}, start_addr: 32'h00700000, end_addr: 32'h00800000},// magia_tile_x3_y1_sam_idx -'{idx: '{x: 3, y: 1, port_id: 0}, start_addr: 32'h00600000, end_addr: 32'h00700000},// magia_tile_x2_y1_sam_idx -'{idx: '{x: 2, y: 1, port_id: 0}, start_addr: 32'h00500000, end_addr: 32'h00600000},// magia_tile_x1_y1_sam_idx -'{idx: '{x: 1, y: 1, port_id: 0}, start_addr: 32'h00400000, end_addr: 32'h00500000},// magia_tile_x0_y1_sam_idx -'{idx: '{x: 4, y: 0, port_id: 0}, start_addr: 32'h00300000, end_addr: 32'h00400000},// magia_tile_x3_y0_sam_idx -'{idx: '{x: 3, y: 0, port_id: 0}, start_addr: 32'h00200000, end_addr: 32'h00300000},// magia_tile_x2_y0_sam_idx -'{idx: '{x: 2, y: 0, port_id: 0}, start_addr: 32'h00100000, end_addr: 32'h00200000},// magia_tile_x1_y0_sam_idx -'{idx: '{x: 1, y: 0, port_id: 0}, start_addr: 32'h00000000, end_addr: 32'h00100000} // magia_tile_x0_y0_sam_idx +'{ idx: '{x: 0, y: 3, port_id: 0}, + start_addr: 32'hf0000000, + end_addr: 32'h100000000},// L23 +'{ idx: '{x: 0, y: 2, port_id: 0}, + start_addr: 32'he0000000, + end_addr: 32'hf0000000},// L22 +'{ idx: '{x: 0, y: 1, port_id: 0}, + start_addr: 32'hd0000000, + end_addr: 32'he0000000},// L21 +'{ idx: '{x: 0, y: 0, port_id: 0}, + start_addr: 32'hc0000000, + end_addr: 32'hd0000000},// L20 +'{ idx: '{x: 7, y: 3, port_id: 0}, + start_addr: 32'h00f00000, + end_addr: 32'h01000000},// MagiaTileX3Y3 +'{ idx: '{x: 6, y: 3, port_id: 0}, + start_addr: 32'h00e00000, + end_addr: 32'h00f00000},// MagiaTileX2Y3 +'{ idx: '{x: 5, y: 3, port_id: 0}, + start_addr: 32'h00d00000, + end_addr: 32'h00e00000},// MagiaTileX1Y3 +'{ idx: '{x: 4, y: 3, port_id: 0}, + start_addr: 32'h00c00000, + end_addr: 32'h00d00000},// MagiaTileX0Y3 +'{ idx: '{x: 7, y: 2, port_id: 0}, + start_addr: 32'h00b00000, + end_addr: 32'h00c00000},// MagiaTileX3Y2 +'{ idx: '{x: 6, y: 2, port_id: 0}, + start_addr: 32'h00a00000, + end_addr: 32'h00b00000},// MagiaTileX2Y2 +'{ idx: '{x: 5, y: 2, port_id: 0}, + start_addr: 32'h00900000, + end_addr: 32'h00a00000},// MagiaTileX1Y2 +'{ idx: '{x: 4, y: 2, port_id: 0}, + start_addr: 32'h00800000, + end_addr: 32'h00900000},// MagiaTileX0Y2 +'{ idx: '{x: 7, y: 1, port_id: 0}, + start_addr: 32'h00700000, + end_addr: 32'h00800000},// MagiaTileX3Y1 +'{ idx: '{x: 6, y: 1, port_id: 0}, + start_addr: 32'h00600000, + end_addr: 32'h00700000},// MagiaTileX2Y1 +'{ idx: '{x: 5, y: 1, port_id: 0}, + start_addr: 32'h00500000, + end_addr: 32'h00600000},// MagiaTileX1Y1 +'{ idx: '{x: 4, y: 1, port_id: 0}, + start_addr: 32'h00400000, + end_addr: 32'h00500000},// MagiaTileX0Y1 +'{ idx: '{x: 7, y: 0, port_id: 0}, + start_addr: 32'h00300000, + end_addr: 32'h00400000},// MagiaTileX3Y0 +'{ idx: '{x: 6, y: 0, port_id: 0}, + start_addr: 32'h00200000, + end_addr: 32'h00300000},// MagiaTileX2Y0 +'{ idx: '{x: 5, y: 0, port_id: 0}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX1Y0 +'{ idx: '{x: 4, y: 0, port_id: 0}, + start_addr: 32'h00000000, + end_addr: 32'h00100000} // MagiaTileX0Y0 + +}; localparam int unsigned CollectiveSamNumRules = 20; @@ -156,142 +207,142 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ end_addr: 32'hd0000000},// L20 '{ idx: '{ id: '{x: 7, y: 3, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00f00000, end_addr: 32'h01000000},// MagiaTileX3Y3 -'{ idx: '{ id: '{x: 7, y: 2, port_id: 0}, +'{ idx: '{ id: '{x: 6, y: 3, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00e00000, - end_addr: 32'h00f00000},// MagiaTileX3Y2 -'{ idx: '{ id: '{x: 7, y: 1, port_id: 0}, + end_addr: 32'h00f00000},// MagiaTileX2Y3 +'{ idx: '{ id: '{x: 5, y: 3, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00d00000, - end_addr: 32'h00e00000},// MagiaTileX3Y1 -'{ idx: '{ id: '{x: 7, y: 0, port_id: 0}, + end_addr: 32'h00e00000},// MagiaTileX1Y3 +'{ idx: '{ id: '{x: 4, y: 3, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00c00000, - end_addr: 32'h00d00000},// MagiaTileX3Y0 -'{ idx: '{ id: '{x: 6, y: 3, port_id: 0}, + end_addr: 32'h00d00000},// MagiaTileX0Y3 +'{ idx: '{ id: '{x: 7, y: 2, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00b00000, - end_addr: 32'h00c00000},// MagiaTileX2Y3 + end_addr: 32'h00c00000},// MagiaTileX3Y2 '{ idx: '{ id: '{x: 6, y: 2, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00a00000, end_addr: 32'h00b00000},// MagiaTileX2Y2 -'{ idx: '{ id: '{x: 6, y: 1, port_id: 0}, +'{ idx: '{ id: '{x: 5, y: 2, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00900000, - end_addr: 32'h00a00000},// MagiaTileX2Y1 -'{ idx: '{ id: '{x: 6, y: 0, port_id: 0}, + end_addr: 32'h00a00000},// MagiaTileX1Y2 +'{ idx: '{ id: '{x: 4, y: 2, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00800000, - end_addr: 32'h00900000},// MagiaTileX2Y0 -'{ idx: '{ id: '{x: 5, y: 3, port_id: 0}, + end_addr: 32'h00900000},// MagiaTileX0Y2 +'{ idx: '{ id: '{x: 7, y: 1, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00700000, - end_addr: 32'h00800000},// MagiaTileX1Y3 -'{ idx: '{ id: '{x: 5, y: 2, port_id: 0}, + end_addr: 32'h00800000},// MagiaTileX3Y1 +'{ idx: '{ id: '{x: 6, y: 1, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00600000, - end_addr: 32'h00700000},// MagiaTileX1Y2 + end_addr: 32'h00700000},// MagiaTileX2Y1 '{ idx: '{ id: '{x: 5, y: 1, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00500000, end_addr: 32'h00600000},// MagiaTileX1Y1 -'{ idx: '{ id: '{x: 5, y: 0, port_id: 0}, +'{ idx: '{ id: '{x: 4, y: 1, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00400000, - end_addr: 32'h00500000},// MagiaTileX1Y0 -'{ idx: '{ id: '{x: 4, y: 3, port_id: 0}, + end_addr: 32'h00500000},// MagiaTileX0Y1 +'{ idx: '{ id: '{x: 7, y: 0, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00300000, - end_addr: 32'h00400000},// MagiaTileX0Y3 -'{ idx: '{ id: '{x: 4, y: 2, port_id: 0}, + end_addr: 32'h00400000},// MagiaTileX3Y0 +'{ idx: '{ id: '{x: 6, y: 0, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00200000, - end_addr: 32'h00300000},// MagiaTileX0Y2 -'{ idx: '{ id: '{x: 4, y: 1, port_id: 0}, + end_addr: 32'h00300000},// MagiaTileX2Y0 +'{ idx: '{ id: '{x: 5, y: 0, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, base_id: 0}}, start_addr: 32'h00100000, - end_addr: 32'h00200000},// MagiaTileX0Y1 + end_addr: 32'h00200000},// MagiaTileX1Y0 '{ idx: '{ id: '{x: 4, y: 0, port_id: 0}, mask_x: '{ offset: 22, - len: 3, + len: 2, base_id: 4}, mask_y: '{ offset: 20, len: 2, @@ -312,17 +363,17 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ NumRoutes: 0, CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, - EnLsbAnd: 1'b1, - EnFpAdd: 1'b1, - EnFpMul: 1'b1, - EnFpMin: 1'b1, - EnFpMax: 1'b1, - EnIntAdd: 1'b1, - EnIntMul: 1'b1, - EnIntMinS: 1'b1, - EnIntMinU: 1'b1, - EnIntMaxS: 1'b1, - EnIntMaxU: 1'b1}, + EnLsbAnd: 1'b0, + EnFpAdd: 1'b0, + EnFpMul: 1'b0, + EnFpMin: 1'b0, + EnFpMax: 1'b0, + EnIntAdd: 1'b0, + EnIntMul: 1'b0, + EnIntMinS: 1'b0, + EnIntMinU: 1'b0, + EnIntMaxS: 1'b0, + EnIntMaxU: 1'b0}, NarrRedCfg: RedDefaultCfg, WideRedCfg: RedDefaultCfg}}; diff --git a/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv index 248ddcb3..ed8b12ee 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv @@ -11,74 +11,83 @@ package floo_axi_nw_mesh_8x8_noc_pkg; import floo_pkg::*; + ///////////////////////////// + // Endpoint Dimensions // + ///////////////////////////// + + localparam int unsigned NumMagiaTileX = 8; +localparam int unsigned NumMagiaTileY = 8; +localparam int unsigned NumL2 = 8; + + ///////////////////// // Address Map // ///////////////////// typedef enum logic[6:0] { MagiaTileX0Y0 = 0, - MagiaTileX0Y1 = 1, - MagiaTileX0Y2 = 2, - MagiaTileX0Y3 = 3, - MagiaTileX0Y4 = 4, - MagiaTileX0Y5 = 5, - MagiaTileX0Y6 = 6, - MagiaTileX0Y7 = 7, - MagiaTileX1Y0 = 8, + MagiaTileX1Y0 = 1, + MagiaTileX2Y0 = 2, + MagiaTileX3Y0 = 3, + MagiaTileX4Y0 = 4, + MagiaTileX5Y0 = 5, + MagiaTileX6Y0 = 6, + MagiaTileX7Y0 = 7, + MagiaTileX0Y1 = 8, MagiaTileX1Y1 = 9, - MagiaTileX1Y2 = 10, - MagiaTileX1Y3 = 11, - MagiaTileX1Y4 = 12, - MagiaTileX1Y5 = 13, - MagiaTileX1Y6 = 14, - MagiaTileX1Y7 = 15, - MagiaTileX2Y0 = 16, - MagiaTileX2Y1 = 17, + MagiaTileX2Y1 = 10, + MagiaTileX3Y1 = 11, + MagiaTileX4Y1 = 12, + MagiaTileX5Y1 = 13, + MagiaTileX6Y1 = 14, + MagiaTileX7Y1 = 15, + MagiaTileX0Y2 = 16, + MagiaTileX1Y2 = 17, MagiaTileX2Y2 = 18, - MagiaTileX2Y3 = 19, - MagiaTileX2Y4 = 20, - MagiaTileX2Y5 = 21, - MagiaTileX2Y6 = 22, - MagiaTileX2Y7 = 23, - MagiaTileX3Y0 = 24, - MagiaTileX3Y1 = 25, - MagiaTileX3Y2 = 26, + MagiaTileX3Y2 = 19, + MagiaTileX4Y2 = 20, + MagiaTileX5Y2 = 21, + MagiaTileX6Y2 = 22, + MagiaTileX7Y2 = 23, + MagiaTileX0Y3 = 24, + MagiaTileX1Y3 = 25, + MagiaTileX2Y3 = 26, MagiaTileX3Y3 = 27, - MagiaTileX3Y4 = 28, - MagiaTileX3Y5 = 29, - MagiaTileX3Y6 = 30, - MagiaTileX3Y7 = 31, - MagiaTileX4Y0 = 32, - MagiaTileX4Y1 = 33, - MagiaTileX4Y2 = 34, - MagiaTileX4Y3 = 35, + MagiaTileX4Y3 = 28, + MagiaTileX5Y3 = 29, + MagiaTileX6Y3 = 30, + MagiaTileX7Y3 = 31, + MagiaTileX0Y4 = 32, + MagiaTileX1Y4 = 33, + MagiaTileX2Y4 = 34, + MagiaTileX3Y4 = 35, MagiaTileX4Y4 = 36, - MagiaTileX4Y5 = 37, - MagiaTileX4Y6 = 38, - MagiaTileX4Y7 = 39, - MagiaTileX5Y0 = 40, - MagiaTileX5Y1 = 41, - MagiaTileX5Y2 = 42, - MagiaTileX5Y3 = 43, - MagiaTileX5Y4 = 44, + MagiaTileX5Y4 = 37, + MagiaTileX6Y4 = 38, + MagiaTileX7Y4 = 39, + MagiaTileX0Y5 = 40, + MagiaTileX1Y5 = 41, + MagiaTileX2Y5 = 42, + MagiaTileX3Y5 = 43, + MagiaTileX4Y5 = 44, MagiaTileX5Y5 = 45, - MagiaTileX5Y6 = 46, - MagiaTileX5Y7 = 47, - MagiaTileX6Y0 = 48, - MagiaTileX6Y1 = 49, - MagiaTileX6Y2 = 50, - MagiaTileX6Y3 = 51, - MagiaTileX6Y4 = 52, - MagiaTileX6Y5 = 53, + MagiaTileX6Y5 = 46, + MagiaTileX7Y5 = 47, + MagiaTileX0Y6 = 48, + MagiaTileX1Y6 = 49, + MagiaTileX2Y6 = 50, + MagiaTileX3Y6 = 51, + MagiaTileX4Y6 = 52, + MagiaTileX5Y6 = 53, MagiaTileX6Y6 = 54, - MagiaTileX6Y7 = 55, - MagiaTileX7Y0 = 56, - MagiaTileX7Y1 = 57, - MagiaTileX7Y2 = 58, - MagiaTileX7Y3 = 59, - MagiaTileX7Y4 = 60, - MagiaTileX7Y5 = 61, - MagiaTileX7Y6 = 62, + MagiaTileX7Y6 = 55, + MagiaTileX0Y7 = 56, + MagiaTileX1Y7 = 57, + MagiaTileX2Y7 = 58, + MagiaTileX3Y7 = 59, + MagiaTileX4Y7 = 60, + MagiaTileX5Y7 = 61, + MagiaTileX6Y7 = 62, MagiaTileX7Y7 = 63, L20 = 64, L21 = 65, @@ -94,68 +103,68 @@ package floo_axi_nw_mesh_8x8_noc_pkg; typedef enum logic[6:0] { MagiaTileX0Y0SamIdx = 0, - MagiaTileX0Y1SamIdx = 1, - MagiaTileX0Y2SamIdx = 2, - MagiaTileX0Y3SamIdx = 3, - MagiaTileX0Y4SamIdx = 4, - MagiaTileX0Y5SamIdx = 5, - MagiaTileX0Y6SamIdx = 6, - MagiaTileX0Y7SamIdx = 7, - MagiaTileX1Y0SamIdx = 8, + MagiaTileX1Y0SamIdx = 1, + MagiaTileX2Y0SamIdx = 2, + MagiaTileX3Y0SamIdx = 3, + MagiaTileX4Y0SamIdx = 4, + MagiaTileX5Y0SamIdx = 5, + MagiaTileX6Y0SamIdx = 6, + MagiaTileX7Y0SamIdx = 7, + MagiaTileX0Y1SamIdx = 8, MagiaTileX1Y1SamIdx = 9, - MagiaTileX1Y2SamIdx = 10, - MagiaTileX1Y3SamIdx = 11, - MagiaTileX1Y4SamIdx = 12, - MagiaTileX1Y5SamIdx = 13, - MagiaTileX1Y6SamIdx = 14, - MagiaTileX1Y7SamIdx = 15, - MagiaTileX2Y0SamIdx = 16, - MagiaTileX2Y1SamIdx = 17, + MagiaTileX2Y1SamIdx = 10, + MagiaTileX3Y1SamIdx = 11, + MagiaTileX4Y1SamIdx = 12, + MagiaTileX5Y1SamIdx = 13, + MagiaTileX6Y1SamIdx = 14, + MagiaTileX7Y1SamIdx = 15, + MagiaTileX0Y2SamIdx = 16, + MagiaTileX1Y2SamIdx = 17, MagiaTileX2Y2SamIdx = 18, - MagiaTileX2Y3SamIdx = 19, - MagiaTileX2Y4SamIdx = 20, - MagiaTileX2Y5SamIdx = 21, - MagiaTileX2Y6SamIdx = 22, - MagiaTileX2Y7SamIdx = 23, - MagiaTileX3Y0SamIdx = 24, - MagiaTileX3Y1SamIdx = 25, - MagiaTileX3Y2SamIdx = 26, + MagiaTileX3Y2SamIdx = 19, + MagiaTileX4Y2SamIdx = 20, + MagiaTileX5Y2SamIdx = 21, + MagiaTileX6Y2SamIdx = 22, + MagiaTileX7Y2SamIdx = 23, + MagiaTileX0Y3SamIdx = 24, + MagiaTileX1Y3SamIdx = 25, + MagiaTileX2Y3SamIdx = 26, MagiaTileX3Y3SamIdx = 27, - MagiaTileX3Y4SamIdx = 28, - MagiaTileX3Y5SamIdx = 29, - MagiaTileX3Y6SamIdx = 30, - MagiaTileX3Y7SamIdx = 31, - MagiaTileX4Y0SamIdx = 32, - MagiaTileX4Y1SamIdx = 33, - MagiaTileX4Y2SamIdx = 34, - MagiaTileX4Y3SamIdx = 35, + MagiaTileX4Y3SamIdx = 28, + MagiaTileX5Y3SamIdx = 29, + MagiaTileX6Y3SamIdx = 30, + MagiaTileX7Y3SamIdx = 31, + MagiaTileX0Y4SamIdx = 32, + MagiaTileX1Y4SamIdx = 33, + MagiaTileX2Y4SamIdx = 34, + MagiaTileX3Y4SamIdx = 35, MagiaTileX4Y4SamIdx = 36, - MagiaTileX4Y5SamIdx = 37, - MagiaTileX4Y6SamIdx = 38, - MagiaTileX4Y7SamIdx = 39, - MagiaTileX5Y0SamIdx = 40, - MagiaTileX5Y1SamIdx = 41, - MagiaTileX5Y2SamIdx = 42, - MagiaTileX5Y3SamIdx = 43, - MagiaTileX5Y4SamIdx = 44, + MagiaTileX5Y4SamIdx = 37, + MagiaTileX6Y4SamIdx = 38, + MagiaTileX7Y4SamIdx = 39, + MagiaTileX0Y5SamIdx = 40, + MagiaTileX1Y5SamIdx = 41, + MagiaTileX2Y5SamIdx = 42, + MagiaTileX3Y5SamIdx = 43, + MagiaTileX4Y5SamIdx = 44, MagiaTileX5Y5SamIdx = 45, - MagiaTileX5Y6SamIdx = 46, - MagiaTileX5Y7SamIdx = 47, - MagiaTileX6Y0SamIdx = 48, - MagiaTileX6Y1SamIdx = 49, - MagiaTileX6Y2SamIdx = 50, - MagiaTileX6Y3SamIdx = 51, - MagiaTileX6Y4SamIdx = 52, - MagiaTileX6Y5SamIdx = 53, + MagiaTileX6Y5SamIdx = 46, + MagiaTileX7Y5SamIdx = 47, + MagiaTileX0Y6SamIdx = 48, + MagiaTileX1Y6SamIdx = 49, + MagiaTileX2Y6SamIdx = 50, + MagiaTileX3Y6SamIdx = 51, + MagiaTileX4Y6SamIdx = 52, + MagiaTileX5Y6SamIdx = 53, MagiaTileX6Y6SamIdx = 54, - MagiaTileX6Y7SamIdx = 55, - MagiaTileX7Y0SamIdx = 56, - MagiaTileX7Y1SamIdx = 57, - MagiaTileX7Y2SamIdx = 58, - MagiaTileX7Y3SamIdx = 59, - MagiaTileX7Y4SamIdx = 60, - MagiaTileX7Y5SamIdx = 61, - MagiaTileX7Y6SamIdx = 62, + MagiaTileX7Y6SamIdx = 55, + MagiaTileX0Y7SamIdx = 56, + MagiaTileX1Y7SamIdx = 57, + MagiaTileX2Y7SamIdx = 58, + MagiaTileX3Y7SamIdx = 59, + MagiaTileX4Y7SamIdx = 60, + MagiaTileX5Y7SamIdx = 61, + MagiaTileX6Y7SamIdx = 62, MagiaTileX7Y7SamIdx = 63, L20SamIdx = 64, L21SamIdx = 65, @@ -196,78 +205,224 @@ typedef struct packed { } sam_rule_t; localparam sam_rule_t[SamNumRules-1:0] Sam = '{ -'{idx: '{x: 0, y: 7, port_id: 0}, start_addr: 32'hf8000000, end_addr: 32'hffffffff},// L2_7_sam_idx -'{idx: '{x: 0, y: 6, port_id: 0}, start_addr: 32'hf0000000, end_addr: 32'hf8000000},// L2_6_sam_idx -'{idx: '{x: 0, y: 5, port_id: 0}, start_addr: 32'he8000000, end_addr: 32'hf0000000},// L2_5_sam_idx -'{idx: '{x: 0, y: 4, port_id: 0}, start_addr: 32'he0000000, end_addr: 32'he8000000},// L2_4_sam_idx -'{idx: '{x: 0, y: 3, port_id: 0}, start_addr: 32'hd8000000, end_addr: 32'he0000000},// L2_3_sam_idx -'{idx: '{x: 0, y: 2, port_id: 0}, start_addr: 32'hd0000000, end_addr: 32'hd8000000},// L2_2_sam_idx -'{idx: '{x: 0, y: 1, port_id: 0}, start_addr: 32'hc8000000, end_addr: 32'hd0000000},// L2_1_sam_idx -'{idx: '{x: 0, y: 0, port_id: 0}, start_addr: 32'hc0000000, end_addr: 32'hc8000000},// L2_0_sam_idx -'{idx: '{x: 8, y: 7, port_id: 0}, start_addr: 32'h03f00000, end_addr: 32'h04000000},// magia_tile_x7_y7_sam_idx -'{idx: '{x: 7, y: 7, port_id: 0}, start_addr: 32'h03e00000, end_addr: 32'h03f00000},// magia_tile_x6_y7_sam_idx -'{idx: '{x: 6, y: 7, port_id: 0}, start_addr: 32'h03d00000, end_addr: 32'h03e00000},// magia_tile_x5_y7_sam_idx -'{idx: '{x: 5, y: 7, port_id: 0}, start_addr: 32'h03c00000, end_addr: 32'h03d00000},// magia_tile_x4_y7_sam_idx -'{idx: '{x: 4, y: 7, port_id: 0}, start_addr: 32'h03b00000, end_addr: 32'h03c00000},// magia_tile_x3_y7_sam_idx -'{idx: '{x: 3, y: 7, port_id: 0}, start_addr: 32'h03a00000, end_addr: 32'h03b00000},// magia_tile_x2_y7_sam_idx -'{idx: '{x: 2, y: 7, port_id: 0}, start_addr: 32'h03900000, end_addr: 32'h03a00000},// magia_tile_x1_y7_sam_idx -'{idx: '{x: 1, y: 7, port_id: 0}, start_addr: 32'h03800000, end_addr: 32'h03900000},// magia_tile_x0_y7_sam_idx -'{idx: '{x: 8, y: 6, port_id: 0}, start_addr: 32'h03700000, end_addr: 32'h03800000},// magia_tile_x7_y6_sam_idx -'{idx: '{x: 7, y: 6, port_id: 0}, start_addr: 32'h03600000, end_addr: 32'h03700000},// magia_tile_x6_y6_sam_idx -'{idx: '{x: 6, y: 6, port_id: 0}, start_addr: 32'h03500000, end_addr: 32'h03600000},// magia_tile_x5_y6_sam_idx -'{idx: '{x: 5, y: 6, port_id: 0}, start_addr: 32'h03400000, end_addr: 32'h03500000},// magia_tile_x4_y6_sam_idx -'{idx: '{x: 4, y: 6, port_id: 0}, start_addr: 32'h03300000, end_addr: 32'h03400000},// magia_tile_x3_y6_sam_idx -'{idx: '{x: 3, y: 6, port_id: 0}, start_addr: 32'h03200000, end_addr: 32'h03300000},// magia_tile_x2_y6_sam_idx -'{idx: '{x: 2, y: 6, port_id: 0}, start_addr: 32'h03100000, end_addr: 32'h03200000},// magia_tile_x1_y6_sam_idx -'{idx: '{x: 1, y: 6, port_id: 0}, start_addr: 32'h03000000, end_addr: 32'h03100000},// magia_tile_x0_y6_sam_idx -'{idx: '{x: 8, y: 5, port_id: 0}, start_addr: 32'h02f00000, end_addr: 32'h03000000},// magia_tile_x7_y5_sam_idx -'{idx: '{x: 7, y: 5, port_id: 0}, start_addr: 32'h02e00000, end_addr: 32'h02f00000},// magia_tile_x6_y5_sam_idx -'{idx: '{x: 6, y: 5, port_id: 0}, start_addr: 32'h02d00000, end_addr: 32'h02e00000},// magia_tile_x5_y5_sam_idx -'{idx: '{x: 5, y: 5, port_id: 0}, start_addr: 32'h02c00000, end_addr: 32'h02d00000},// magia_tile_x4_y5_sam_idx -'{idx: '{x: 4, y: 5, port_id: 0}, start_addr: 32'h02b00000, end_addr: 32'h02c00000},// magia_tile_x3_y5_sam_idx -'{idx: '{x: 3, y: 5, port_id: 0}, start_addr: 32'h02a00000, end_addr: 32'h02b00000},// magia_tile_x2_y5_sam_idx -'{idx: '{x: 2, y: 5, port_id: 0}, start_addr: 32'h02900000, end_addr: 32'h02a00000},// magia_tile_x1_y5_sam_idx -'{idx: '{x: 1, y: 5, port_id: 0}, start_addr: 32'h02800000, end_addr: 32'h02900000},// magia_tile_x0_y5_sam_idx -'{idx: '{x: 8, y: 4, port_id: 0}, start_addr: 32'h02700000, end_addr: 32'h02800000},// magia_tile_x7_y4_sam_idx -'{idx: '{x: 7, y: 4, port_id: 0}, start_addr: 32'h02600000, end_addr: 32'h02700000},// magia_tile_x6_y4_sam_idx -'{idx: '{x: 6, y: 4, port_id: 0}, start_addr: 32'h02500000, end_addr: 32'h02600000},// magia_tile_x5_y4_sam_idx -'{idx: '{x: 5, y: 4, port_id: 0}, start_addr: 32'h02400000, end_addr: 32'h02500000},// magia_tile_x4_y4_sam_idx -'{idx: '{x: 4, y: 4, port_id: 0}, start_addr: 32'h02300000, end_addr: 32'h02400000},// magia_tile_x3_y4_sam_idx -'{idx: '{x: 3, y: 4, port_id: 0}, start_addr: 32'h02200000, end_addr: 32'h02300000},// magia_tile_x2_y4_sam_idx -'{idx: '{x: 2, y: 4, port_id: 0}, start_addr: 32'h02100000, end_addr: 32'h02200000},// magia_tile_x1_y4_sam_idx -'{idx: '{x: 1, y: 4, port_id: 0}, start_addr: 32'h02000000, end_addr: 32'h02100000},// magia_tile_x0_y4_sam_idx -'{idx: '{x: 8, y: 3, port_id: 0}, start_addr: 32'h01f00000, end_addr: 32'h02000000},// magia_tile_x7_y3_sam_idx -'{idx: '{x: 7, y: 3, port_id: 0}, start_addr: 32'h01e00000, end_addr: 32'h01f00000},// magia_tile_x6_y3_sam_idx -'{idx: '{x: 6, y: 3, port_id: 0}, start_addr: 32'h01d00000, end_addr: 32'h01e00000},// magia_tile_x5_y3_sam_idx -'{idx: '{x: 5, y: 3, port_id: 0}, start_addr: 32'h01c00000, end_addr: 32'h01d00000},// magia_tile_x4_y3_sam_idx -'{idx: '{x: 4, y: 3, port_id: 0}, start_addr: 32'h01b00000, end_addr: 32'h01c00000},// magia_tile_x3_y3_sam_idx -'{idx: '{x: 3, y: 3, port_id: 0}, start_addr: 32'h01a00000, end_addr: 32'h01b00000},// magia_tile_x2_y3_sam_idx -'{idx: '{x: 2, y: 3, port_id: 0}, start_addr: 32'h01900000, end_addr: 32'h01a00000},// magia_tile_x1_y3_sam_idx -'{idx: '{x: 1, y: 3, port_id: 0}, start_addr: 32'h01800000, end_addr: 32'h01900000},// magia_tile_x0_y3_sam_idx -'{idx: '{x: 8, y: 2, port_id: 0}, start_addr: 32'h01700000, end_addr: 32'h01800000},// magia_tile_x7_y2_sam_idx -'{idx: '{x: 7, y: 2, port_id: 0}, start_addr: 32'h01600000, end_addr: 32'h01700000},// magia_tile_x6_y2_sam_idx -'{idx: '{x: 6, y: 2, port_id: 0}, start_addr: 32'h01500000, end_addr: 32'h01600000},// magia_tile_x5_y2_sam_idx -'{idx: '{x: 5, y: 2, port_id: 0}, start_addr: 32'h01400000, end_addr: 32'h01500000},// magia_tile_x4_y2_sam_idx -'{idx: '{x: 4, y: 2, port_id: 0}, start_addr: 32'h01300000, end_addr: 32'h01400000},// magia_tile_x3_y2_sam_idx -'{idx: '{x: 3, y: 2, port_id: 0}, start_addr: 32'h01200000, end_addr: 32'h01300000},// magia_tile_x2_y2_sam_idx -'{idx: '{x: 2, y: 2, port_id: 0}, start_addr: 32'h01100000, end_addr: 32'h01200000},// magia_tile_x1_y2_sam_idx -'{idx: '{x: 1, y: 2, port_id: 0}, start_addr: 32'h01000000, end_addr: 32'h01100000},// magia_tile_x0_y2_sam_idx -'{idx: '{x: 8, y: 1, port_id: 0}, start_addr: 32'h00f00000, end_addr: 32'h01000000},// magia_tile_x7_y1_sam_idx -'{idx: '{x: 7, y: 1, port_id: 0}, start_addr: 32'h00e00000, end_addr: 32'h00f00000},// magia_tile_x6_y1_sam_idx -'{idx: '{x: 6, y: 1, port_id: 0}, start_addr: 32'h00d00000, end_addr: 32'h00e00000},// magia_tile_x5_y1_sam_idx -'{idx: '{x: 5, y: 1, port_id: 0}, start_addr: 32'h00c00000, end_addr: 32'h00d00000},// magia_tile_x4_y1_sam_idx -'{idx: '{x: 4, y: 1, port_id: 0}, start_addr: 32'h00b00000, end_addr: 32'h00c00000},// magia_tile_x3_y1_sam_idx -'{idx: '{x: 3, y: 1, port_id: 0}, start_addr: 32'h00a00000, end_addr: 32'h00b00000},// magia_tile_x2_y1_sam_idx -'{idx: '{x: 2, y: 1, port_id: 0}, start_addr: 32'h00900000, end_addr: 32'h00a00000},// magia_tile_x1_y1_sam_idx -'{idx: '{x: 1, y: 1, port_id: 0}, start_addr: 32'h00800000, end_addr: 32'h00900000},// magia_tile_x0_y1_sam_idx -'{idx: '{x: 8, y: 0, port_id: 0}, start_addr: 32'h00700000, end_addr: 32'h00800000},// magia_tile_x7_y0_sam_idx -'{idx: '{x: 7, y: 0, port_id: 0}, start_addr: 32'h00600000, end_addr: 32'h00700000},// magia_tile_x6_y0_sam_idx -'{idx: '{x: 6, y: 0, port_id: 0}, start_addr: 32'h00500000, end_addr: 32'h00600000},// magia_tile_x5_y0_sam_idx -'{idx: '{x: 5, y: 0, port_id: 0}, start_addr: 32'h00400000, end_addr: 32'h00500000},// magia_tile_x4_y0_sam_idx -'{idx: '{x: 4, y: 0, port_id: 0}, start_addr: 32'h00300000, end_addr: 32'h00400000},// magia_tile_x3_y0_sam_idx -'{idx: '{x: 3, y: 0, port_id: 0}, start_addr: 32'h00200000, end_addr: 32'h00300000},// magia_tile_x2_y0_sam_idx -'{idx: '{x: 2, y: 0, port_id: 0}, start_addr: 32'h00100000, end_addr: 32'h00200000},// magia_tile_x1_y0_sam_idx -'{idx: '{x: 1, y: 0, port_id: 0}, start_addr: 32'h00000000, end_addr: 32'h00100000} // magia_tile_x0_y0_sam_idx +'{ idx: '{x: 0, y: 7, port_id: 0}, + start_addr: 32'hf8000000, + end_addr: 32'h100000000},// L27 +'{ idx: '{x: 0, y: 6, port_id: 0}, + start_addr: 32'hf0000000, + end_addr: 32'hf8000000},// L26 +'{ idx: '{x: 0, y: 5, port_id: 0}, + start_addr: 32'he8000000, + end_addr: 32'hf0000000},// L25 +'{ idx: '{x: 0, y: 4, port_id: 0}, + start_addr: 32'he0000000, + end_addr: 32'he8000000},// L24 +'{ idx: '{x: 0, y: 3, port_id: 0}, + start_addr: 32'hd8000000, + end_addr: 32'he0000000},// L23 +'{ idx: '{x: 0, y: 2, port_id: 0}, + start_addr: 32'hd0000000, + end_addr: 32'hd8000000},// L22 +'{ idx: '{x: 0, y: 1, port_id: 0}, + start_addr: 32'hc8000000, + end_addr: 32'hd0000000},// L21 +'{ idx: '{x: 0, y: 0, port_id: 0}, + start_addr: 32'hc0000000, + end_addr: 32'hc8000000},// L20 +'{ idx: '{x: 15, y: 7, port_id: 0}, + start_addr: 32'h03f00000, + end_addr: 32'h04000000},// MagiaTileX7Y7 +'{ idx: '{x: 14, y: 7, port_id: 0}, + start_addr: 32'h03e00000, + end_addr: 32'h03f00000},// MagiaTileX6Y7 +'{ idx: '{x: 13, y: 7, port_id: 0}, + start_addr: 32'h03d00000, + end_addr: 32'h03e00000},// MagiaTileX5Y7 +'{ idx: '{x: 12, y: 7, port_id: 0}, + start_addr: 32'h03c00000, + end_addr: 32'h03d00000},// MagiaTileX4Y7 +'{ idx: '{x: 11, y: 7, port_id: 0}, + start_addr: 32'h03b00000, + end_addr: 32'h03c00000},// MagiaTileX3Y7 +'{ idx: '{x: 10, y: 7, port_id: 0}, + start_addr: 32'h03a00000, + end_addr: 32'h03b00000},// MagiaTileX2Y7 +'{ idx: '{x: 9, y: 7, port_id: 0}, + start_addr: 32'h03900000, + end_addr: 32'h03a00000},// MagiaTileX1Y7 +'{ idx: '{x: 8, y: 7, port_id: 0}, + start_addr: 32'h03800000, + end_addr: 32'h03900000},// MagiaTileX0Y7 +'{ idx: '{x: 15, y: 6, port_id: 0}, + start_addr: 32'h03700000, + end_addr: 32'h03800000},// MagiaTileX7Y6 +'{ idx: '{x: 14, y: 6, port_id: 0}, + start_addr: 32'h03600000, + end_addr: 32'h03700000},// MagiaTileX6Y6 +'{ idx: '{x: 13, y: 6, port_id: 0}, + start_addr: 32'h03500000, + end_addr: 32'h03600000},// MagiaTileX5Y6 +'{ idx: '{x: 12, y: 6, port_id: 0}, + start_addr: 32'h03400000, + end_addr: 32'h03500000},// MagiaTileX4Y6 +'{ idx: '{x: 11, y: 6, port_id: 0}, + start_addr: 32'h03300000, + end_addr: 32'h03400000},// MagiaTileX3Y6 +'{ idx: '{x: 10, y: 6, port_id: 0}, + start_addr: 32'h03200000, + end_addr: 32'h03300000},// MagiaTileX2Y6 +'{ idx: '{x: 9, y: 6, port_id: 0}, + start_addr: 32'h03100000, + end_addr: 32'h03200000},// MagiaTileX1Y6 +'{ idx: '{x: 8, y: 6, port_id: 0}, + start_addr: 32'h03000000, + end_addr: 32'h03100000},// MagiaTileX0Y6 +'{ idx: '{x: 15, y: 5, port_id: 0}, + start_addr: 32'h02f00000, + end_addr: 32'h03000000},// MagiaTileX7Y5 +'{ idx: '{x: 14, y: 5, port_id: 0}, + start_addr: 32'h02e00000, + end_addr: 32'h02f00000},// MagiaTileX6Y5 +'{ idx: '{x: 13, y: 5, port_id: 0}, + start_addr: 32'h02d00000, + end_addr: 32'h02e00000},// MagiaTileX5Y5 +'{ idx: '{x: 12, y: 5, port_id: 0}, + start_addr: 32'h02c00000, + end_addr: 32'h02d00000},// MagiaTileX4Y5 +'{ idx: '{x: 11, y: 5, port_id: 0}, + start_addr: 32'h02b00000, + end_addr: 32'h02c00000},// MagiaTileX3Y5 +'{ idx: '{x: 10, y: 5, port_id: 0}, + start_addr: 32'h02a00000, + end_addr: 32'h02b00000},// MagiaTileX2Y5 +'{ idx: '{x: 9, y: 5, port_id: 0}, + start_addr: 32'h02900000, + end_addr: 32'h02a00000},// MagiaTileX1Y5 +'{ idx: '{x: 8, y: 5, port_id: 0}, + start_addr: 32'h02800000, + end_addr: 32'h02900000},// MagiaTileX0Y5 +'{ idx: '{x: 15, y: 4, port_id: 0}, + start_addr: 32'h02700000, + end_addr: 32'h02800000},// MagiaTileX7Y4 +'{ idx: '{x: 14, y: 4, port_id: 0}, + start_addr: 32'h02600000, + end_addr: 32'h02700000},// MagiaTileX6Y4 +'{ idx: '{x: 13, y: 4, port_id: 0}, + start_addr: 32'h02500000, + end_addr: 32'h02600000},// MagiaTileX5Y4 +'{ idx: '{x: 12, y: 4, port_id: 0}, + start_addr: 32'h02400000, + end_addr: 32'h02500000},// MagiaTileX4Y4 +'{ idx: '{x: 11, y: 4, port_id: 0}, + start_addr: 32'h02300000, + end_addr: 32'h02400000},// MagiaTileX3Y4 +'{ idx: '{x: 10, y: 4, port_id: 0}, + start_addr: 32'h02200000, + end_addr: 32'h02300000},// MagiaTileX2Y4 +'{ idx: '{x: 9, y: 4, port_id: 0}, + start_addr: 32'h02100000, + end_addr: 32'h02200000},// MagiaTileX1Y4 +'{ idx: '{x: 8, y: 4, port_id: 0}, + start_addr: 32'h02000000, + end_addr: 32'h02100000},// MagiaTileX0Y4 +'{ idx: '{x: 15, y: 3, port_id: 0}, + start_addr: 32'h01f00000, + end_addr: 32'h02000000},// MagiaTileX7Y3 +'{ idx: '{x: 14, y: 3, port_id: 0}, + start_addr: 32'h01e00000, + end_addr: 32'h01f00000},// MagiaTileX6Y3 +'{ idx: '{x: 13, y: 3, port_id: 0}, + start_addr: 32'h01d00000, + end_addr: 32'h01e00000},// MagiaTileX5Y3 +'{ idx: '{x: 12, y: 3, port_id: 0}, + start_addr: 32'h01c00000, + end_addr: 32'h01d00000},// MagiaTileX4Y3 +'{ idx: '{x: 11, y: 3, port_id: 0}, + start_addr: 32'h01b00000, + end_addr: 32'h01c00000},// MagiaTileX3Y3 +'{ idx: '{x: 10, y: 3, port_id: 0}, + start_addr: 32'h01a00000, + end_addr: 32'h01b00000},// MagiaTileX2Y3 +'{ idx: '{x: 9, y: 3, port_id: 0}, + start_addr: 32'h01900000, + end_addr: 32'h01a00000},// MagiaTileX1Y3 +'{ idx: '{x: 8, y: 3, port_id: 0}, + start_addr: 32'h01800000, + end_addr: 32'h01900000},// MagiaTileX0Y3 +'{ idx: '{x: 15, y: 2, port_id: 0}, + start_addr: 32'h01700000, + end_addr: 32'h01800000},// MagiaTileX7Y2 +'{ idx: '{x: 14, y: 2, port_id: 0}, + start_addr: 32'h01600000, + end_addr: 32'h01700000},// MagiaTileX6Y2 +'{ idx: '{x: 13, y: 2, port_id: 0}, + start_addr: 32'h01500000, + end_addr: 32'h01600000},// MagiaTileX5Y2 +'{ idx: '{x: 12, y: 2, port_id: 0}, + start_addr: 32'h01400000, + end_addr: 32'h01500000},// MagiaTileX4Y2 +'{ idx: '{x: 11, y: 2, port_id: 0}, + start_addr: 32'h01300000, + end_addr: 32'h01400000},// MagiaTileX3Y2 +'{ idx: '{x: 10, y: 2, port_id: 0}, + start_addr: 32'h01200000, + end_addr: 32'h01300000},// MagiaTileX2Y2 +'{ idx: '{x: 9, y: 2, port_id: 0}, + start_addr: 32'h01100000, + end_addr: 32'h01200000},// MagiaTileX1Y2 +'{ idx: '{x: 8, y: 2, port_id: 0}, + start_addr: 32'h01000000, + end_addr: 32'h01100000},// MagiaTileX0Y2 +'{ idx: '{x: 15, y: 1, port_id: 0}, + start_addr: 32'h00f00000, + end_addr: 32'h01000000},// MagiaTileX7Y1 +'{ idx: '{x: 14, y: 1, port_id: 0}, + start_addr: 32'h00e00000, + end_addr: 32'h00f00000},// MagiaTileX6Y1 +'{ idx: '{x: 13, y: 1, port_id: 0}, + start_addr: 32'h00d00000, + end_addr: 32'h00e00000},// MagiaTileX5Y1 +'{ idx: '{x: 12, y: 1, port_id: 0}, + start_addr: 32'h00c00000, + end_addr: 32'h00d00000},// MagiaTileX4Y1 +'{ idx: '{x: 11, y: 1, port_id: 0}, + start_addr: 32'h00b00000, + end_addr: 32'h00c00000},// MagiaTileX3Y1 +'{ idx: '{x: 10, y: 1, port_id: 0}, + start_addr: 32'h00a00000, + end_addr: 32'h00b00000},// MagiaTileX2Y1 +'{ idx: '{x: 9, y: 1, port_id: 0}, + start_addr: 32'h00900000, + end_addr: 32'h00a00000},// MagiaTileX1Y1 +'{ idx: '{x: 8, y: 1, port_id: 0}, + start_addr: 32'h00800000, + end_addr: 32'h00900000},// MagiaTileX0Y1 +'{ idx: '{x: 15, y: 0, port_id: 0}, + start_addr: 32'h00700000, + end_addr: 32'h00800000},// MagiaTileX7Y0 +'{ idx: '{x: 14, y: 0, port_id: 0}, + start_addr: 32'h00600000, + end_addr: 32'h00700000},// MagiaTileX6Y0 +'{ idx: '{x: 13, y: 0, port_id: 0}, + start_addr: 32'h00500000, + end_addr: 32'h00600000},// MagiaTileX5Y0 +'{ idx: '{x: 12, y: 0, port_id: 0}, + start_addr: 32'h00400000, + end_addr: 32'h00500000},// MagiaTileX4Y0 +'{ idx: '{x: 11, y: 0, port_id: 0}, + start_addr: 32'h00300000, + end_addr: 32'h00400000},// MagiaTileX3Y0 +'{ idx: '{x: 10, y: 0, port_id: 0}, + start_addr: 32'h00200000, + end_addr: 32'h00300000},// MagiaTileX2Y0 +'{ idx: '{x: 9, y: 0, port_id: 0}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX1Y0 +'{ idx: '{x: 8, y: 0, port_id: 0}, + start_addr: 32'h00000000, + end_addr: 32'h00100000} // MagiaTileX0Y0 + +}; localparam int unsigned CollectiveSamNumRules = 72; @@ -332,574 +487,574 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ end_addr: 32'hc8000000},// L20 '{ idx: '{ id: '{x: 15, y: 7, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03f00000, end_addr: 32'h04000000},// MagiaTileX7Y7 -'{ idx: '{ id: '{x: 15, y: 6, port_id: 0}, +'{ idx: '{ id: '{x: 14, y: 7, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03e00000, - end_addr: 32'h03f00000},// MagiaTileX7Y6 -'{ idx: '{ id: '{x: 15, y: 5, port_id: 0}, + end_addr: 32'h03f00000},// MagiaTileX6Y7 +'{ idx: '{ id: '{x: 13, y: 7, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03d00000, - end_addr: 32'h03e00000},// MagiaTileX7Y5 -'{ idx: '{ id: '{x: 15, y: 4, port_id: 0}, + end_addr: 32'h03e00000},// MagiaTileX5Y7 +'{ idx: '{ id: '{x: 12, y: 7, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03c00000, - end_addr: 32'h03d00000},// MagiaTileX7Y4 -'{ idx: '{ id: '{x: 15, y: 3, port_id: 0}, + end_addr: 32'h03d00000},// MagiaTileX4Y7 +'{ idx: '{ id: '{x: 11, y: 7, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03b00000, - end_addr: 32'h03c00000},// MagiaTileX7Y3 -'{ idx: '{ id: '{x: 15, y: 2, port_id: 0}, + end_addr: 32'h03c00000},// MagiaTileX3Y7 +'{ idx: '{ id: '{x: 10, y: 7, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03a00000, - end_addr: 32'h03b00000},// MagiaTileX7Y2 -'{ idx: '{ id: '{x: 15, y: 1, port_id: 0}, + end_addr: 32'h03b00000},// MagiaTileX2Y7 +'{ idx: '{ id: '{x: 9, y: 7, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03900000, - end_addr: 32'h03a00000},// MagiaTileX7Y1 -'{ idx: '{ id: '{x: 15, y: 0, port_id: 0}, + end_addr: 32'h03a00000},// MagiaTileX1Y7 +'{ idx: '{ id: '{x: 8, y: 7, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03800000, - end_addr: 32'h03900000},// MagiaTileX7Y0 -'{ idx: '{ id: '{x: 14, y: 7, port_id: 0}, + end_addr: 32'h03900000},// MagiaTileX0Y7 +'{ idx: '{ id: '{x: 15, y: 6, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03700000, - end_addr: 32'h03800000},// MagiaTileX6Y7 + end_addr: 32'h03800000},// MagiaTileX7Y6 '{ idx: '{ id: '{x: 14, y: 6, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03600000, end_addr: 32'h03700000},// MagiaTileX6Y6 -'{ idx: '{ id: '{x: 14, y: 5, port_id: 0}, +'{ idx: '{ id: '{x: 13, y: 6, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03500000, - end_addr: 32'h03600000},// MagiaTileX6Y5 -'{ idx: '{ id: '{x: 14, y: 4, port_id: 0}, + end_addr: 32'h03600000},// MagiaTileX5Y6 +'{ idx: '{ id: '{x: 12, y: 6, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03400000, - end_addr: 32'h03500000},// MagiaTileX6Y4 -'{ idx: '{ id: '{x: 14, y: 3, port_id: 0}, + end_addr: 32'h03500000},// MagiaTileX4Y6 +'{ idx: '{ id: '{x: 11, y: 6, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03300000, - end_addr: 32'h03400000},// MagiaTileX6Y3 -'{ idx: '{ id: '{x: 14, y: 2, port_id: 0}, + end_addr: 32'h03400000},// MagiaTileX3Y6 +'{ idx: '{ id: '{x: 10, y: 6, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03200000, - end_addr: 32'h03300000},// MagiaTileX6Y2 -'{ idx: '{ id: '{x: 14, y: 1, port_id: 0}, + end_addr: 32'h03300000},// MagiaTileX2Y6 +'{ idx: '{ id: '{x: 9, y: 6, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03100000, - end_addr: 32'h03200000},// MagiaTileX6Y1 -'{ idx: '{ id: '{x: 14, y: 0, port_id: 0}, + end_addr: 32'h03200000},// MagiaTileX1Y6 +'{ idx: '{ id: '{x: 8, y: 6, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h03000000, - end_addr: 32'h03100000},// MagiaTileX6Y0 -'{ idx: '{ id: '{x: 13, y: 7, port_id: 0}, + end_addr: 32'h03100000},// MagiaTileX0Y6 +'{ idx: '{ id: '{x: 15, y: 5, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02f00000, - end_addr: 32'h03000000},// MagiaTileX5Y7 -'{ idx: '{ id: '{x: 13, y: 6, port_id: 0}, + end_addr: 32'h03000000},// MagiaTileX7Y5 +'{ idx: '{ id: '{x: 14, y: 5, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02e00000, - end_addr: 32'h02f00000},// MagiaTileX5Y6 + end_addr: 32'h02f00000},// MagiaTileX6Y5 '{ idx: '{ id: '{x: 13, y: 5, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02d00000, end_addr: 32'h02e00000},// MagiaTileX5Y5 -'{ idx: '{ id: '{x: 13, y: 4, port_id: 0}, +'{ idx: '{ id: '{x: 12, y: 5, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02c00000, - end_addr: 32'h02d00000},// MagiaTileX5Y4 -'{ idx: '{ id: '{x: 13, y: 3, port_id: 0}, + end_addr: 32'h02d00000},// MagiaTileX4Y5 +'{ idx: '{ id: '{x: 11, y: 5, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02b00000, - end_addr: 32'h02c00000},// MagiaTileX5Y3 -'{ idx: '{ id: '{x: 13, y: 2, port_id: 0}, + end_addr: 32'h02c00000},// MagiaTileX3Y5 +'{ idx: '{ id: '{x: 10, y: 5, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02a00000, - end_addr: 32'h02b00000},// MagiaTileX5Y2 -'{ idx: '{ id: '{x: 13, y: 1, port_id: 0}, + end_addr: 32'h02b00000},// MagiaTileX2Y5 +'{ idx: '{ id: '{x: 9, y: 5, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02900000, - end_addr: 32'h02a00000},// MagiaTileX5Y1 -'{ idx: '{ id: '{x: 13, y: 0, port_id: 0}, + end_addr: 32'h02a00000},// MagiaTileX1Y5 +'{ idx: '{ id: '{x: 8, y: 5, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02800000, - end_addr: 32'h02900000},// MagiaTileX5Y0 -'{ idx: '{ id: '{x: 12, y: 7, port_id: 0}, + end_addr: 32'h02900000},// MagiaTileX0Y5 +'{ idx: '{ id: '{x: 15, y: 4, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02700000, - end_addr: 32'h02800000},// MagiaTileX4Y7 -'{ idx: '{ id: '{x: 12, y: 6, port_id: 0}, + end_addr: 32'h02800000},// MagiaTileX7Y4 +'{ idx: '{ id: '{x: 14, y: 4, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02600000, - end_addr: 32'h02700000},// MagiaTileX4Y6 -'{ idx: '{ id: '{x: 12, y: 5, port_id: 0}, + end_addr: 32'h02700000},// MagiaTileX6Y4 +'{ idx: '{ id: '{x: 13, y: 4, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02500000, - end_addr: 32'h02600000},// MagiaTileX4Y5 + end_addr: 32'h02600000},// MagiaTileX5Y4 '{ idx: '{ id: '{x: 12, y: 4, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02400000, end_addr: 32'h02500000},// MagiaTileX4Y4 -'{ idx: '{ id: '{x: 12, y: 3, port_id: 0}, +'{ idx: '{ id: '{x: 11, y: 4, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02300000, - end_addr: 32'h02400000},// MagiaTileX4Y3 -'{ idx: '{ id: '{x: 12, y: 2, port_id: 0}, + end_addr: 32'h02400000},// MagiaTileX3Y4 +'{ idx: '{ id: '{x: 10, y: 4, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02200000, - end_addr: 32'h02300000},// MagiaTileX4Y2 -'{ idx: '{ id: '{x: 12, y: 1, port_id: 0}, + end_addr: 32'h02300000},// MagiaTileX2Y4 +'{ idx: '{ id: '{x: 9, y: 4, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02100000, - end_addr: 32'h02200000},// MagiaTileX4Y1 -'{ idx: '{ id: '{x: 12, y: 0, port_id: 0}, + end_addr: 32'h02200000},// MagiaTileX1Y4 +'{ idx: '{ id: '{x: 8, y: 4, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h02000000, - end_addr: 32'h02100000},// MagiaTileX4Y0 -'{ idx: '{ id: '{x: 11, y: 7, port_id: 0}, + end_addr: 32'h02100000},// MagiaTileX0Y4 +'{ idx: '{ id: '{x: 15, y: 3, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01f00000, - end_addr: 32'h02000000},// MagiaTileX3Y7 -'{ idx: '{ id: '{x: 11, y: 6, port_id: 0}, + end_addr: 32'h02000000},// MagiaTileX7Y3 +'{ idx: '{ id: '{x: 14, y: 3, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01e00000, - end_addr: 32'h01f00000},// MagiaTileX3Y6 -'{ idx: '{ id: '{x: 11, y: 5, port_id: 0}, + end_addr: 32'h01f00000},// MagiaTileX6Y3 +'{ idx: '{ id: '{x: 13, y: 3, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01d00000, - end_addr: 32'h01e00000},// MagiaTileX3Y5 -'{ idx: '{ id: '{x: 11, y: 4, port_id: 0}, + end_addr: 32'h01e00000},// MagiaTileX5Y3 +'{ idx: '{ id: '{x: 12, y: 3, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01c00000, - end_addr: 32'h01d00000},// MagiaTileX3Y4 + end_addr: 32'h01d00000},// MagiaTileX4Y3 '{ idx: '{ id: '{x: 11, y: 3, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01b00000, end_addr: 32'h01c00000},// MagiaTileX3Y3 -'{ idx: '{ id: '{x: 11, y: 2, port_id: 0}, +'{ idx: '{ id: '{x: 10, y: 3, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01a00000, - end_addr: 32'h01b00000},// MagiaTileX3Y2 -'{ idx: '{ id: '{x: 11, y: 1, port_id: 0}, + end_addr: 32'h01b00000},// MagiaTileX2Y3 +'{ idx: '{ id: '{x: 9, y: 3, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01900000, - end_addr: 32'h01a00000},// MagiaTileX3Y1 -'{ idx: '{ id: '{x: 11, y: 0, port_id: 0}, + end_addr: 32'h01a00000},// MagiaTileX1Y3 +'{ idx: '{ id: '{x: 8, y: 3, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01800000, - end_addr: 32'h01900000},// MagiaTileX3Y0 -'{ idx: '{ id: '{x: 10, y: 7, port_id: 0}, + end_addr: 32'h01900000},// MagiaTileX0Y3 +'{ idx: '{ id: '{x: 15, y: 2, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01700000, - end_addr: 32'h01800000},// MagiaTileX2Y7 -'{ idx: '{ id: '{x: 10, y: 6, port_id: 0}, + end_addr: 32'h01800000},// MagiaTileX7Y2 +'{ idx: '{ id: '{x: 14, y: 2, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01600000, - end_addr: 32'h01700000},// MagiaTileX2Y6 -'{ idx: '{ id: '{x: 10, y: 5, port_id: 0}, + end_addr: 32'h01700000},// MagiaTileX6Y2 +'{ idx: '{ id: '{x: 13, y: 2, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01500000, - end_addr: 32'h01600000},// MagiaTileX2Y5 -'{ idx: '{ id: '{x: 10, y: 4, port_id: 0}, + end_addr: 32'h01600000},// MagiaTileX5Y2 +'{ idx: '{ id: '{x: 12, y: 2, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01400000, - end_addr: 32'h01500000},// MagiaTileX2Y4 -'{ idx: '{ id: '{x: 10, y: 3, port_id: 0}, + end_addr: 32'h01500000},// MagiaTileX4Y2 +'{ idx: '{ id: '{x: 11, y: 2, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01300000, - end_addr: 32'h01400000},// MagiaTileX2Y3 + end_addr: 32'h01400000},// MagiaTileX3Y2 '{ idx: '{ id: '{x: 10, y: 2, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01200000, end_addr: 32'h01300000},// MagiaTileX2Y2 -'{ idx: '{ id: '{x: 10, y: 1, port_id: 0}, +'{ idx: '{ id: '{x: 9, y: 2, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01100000, - end_addr: 32'h01200000},// MagiaTileX2Y1 -'{ idx: '{ id: '{x: 10, y: 0, port_id: 0}, + end_addr: 32'h01200000},// MagiaTileX1Y2 +'{ idx: '{ id: '{x: 8, y: 2, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h01000000, - end_addr: 32'h01100000},// MagiaTileX2Y0 -'{ idx: '{ id: '{x: 9, y: 7, port_id: 0}, + end_addr: 32'h01100000},// MagiaTileX0Y2 +'{ idx: '{ id: '{x: 15, y: 1, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00f00000, - end_addr: 32'h01000000},// MagiaTileX1Y7 -'{ idx: '{ id: '{x: 9, y: 6, port_id: 0}, + end_addr: 32'h01000000},// MagiaTileX7Y1 +'{ idx: '{ id: '{x: 14, y: 1, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00e00000, - end_addr: 32'h00f00000},// MagiaTileX1Y6 -'{ idx: '{ id: '{x: 9, y: 5, port_id: 0}, + end_addr: 32'h00f00000},// MagiaTileX6Y1 +'{ idx: '{ id: '{x: 13, y: 1, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00d00000, - end_addr: 32'h00e00000},// MagiaTileX1Y5 -'{ idx: '{ id: '{x: 9, y: 4, port_id: 0}, + end_addr: 32'h00e00000},// MagiaTileX5Y1 +'{ idx: '{ id: '{x: 12, y: 1, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00c00000, - end_addr: 32'h00d00000},// MagiaTileX1Y4 -'{ idx: '{ id: '{x: 9, y: 3, port_id: 0}, + end_addr: 32'h00d00000},// MagiaTileX4Y1 +'{ idx: '{ id: '{x: 11, y: 1, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00b00000, - end_addr: 32'h00c00000},// MagiaTileX1Y3 -'{ idx: '{ id: '{x: 9, y: 2, port_id: 0}, + end_addr: 32'h00c00000},// MagiaTileX3Y1 +'{ idx: '{ id: '{x: 10, y: 1, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00a00000, - end_addr: 32'h00b00000},// MagiaTileX1Y2 + end_addr: 32'h00b00000},// MagiaTileX2Y1 '{ idx: '{ id: '{x: 9, y: 1, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00900000, end_addr: 32'h00a00000},// MagiaTileX1Y1 -'{ idx: '{ id: '{x: 9, y: 0, port_id: 0}, +'{ idx: '{ id: '{x: 8, y: 1, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00800000, - end_addr: 32'h00900000},// MagiaTileX1Y0 -'{ idx: '{ id: '{x: 8, y: 7, port_id: 0}, + end_addr: 32'h00900000},// MagiaTileX0Y1 +'{ idx: '{ id: '{x: 15, y: 0, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00700000, - end_addr: 32'h00800000},// MagiaTileX0Y7 -'{ idx: '{ id: '{x: 8, y: 6, port_id: 0}, + end_addr: 32'h00800000},// MagiaTileX7Y0 +'{ idx: '{ id: '{x: 14, y: 0, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00600000, - end_addr: 32'h00700000},// MagiaTileX0Y6 -'{ idx: '{ id: '{x: 8, y: 5, port_id: 0}, + end_addr: 32'h00700000},// MagiaTileX6Y0 +'{ idx: '{ id: '{x: 13, y: 0, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00500000, - end_addr: 32'h00600000},// MagiaTileX0Y5 -'{ idx: '{ id: '{x: 8, y: 4, port_id: 0}, + end_addr: 32'h00600000},// MagiaTileX5Y0 +'{ idx: '{ id: '{x: 12, y: 0, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00400000, - end_addr: 32'h00500000},// MagiaTileX0Y4 -'{ idx: '{ id: '{x: 8, y: 3, port_id: 0}, + end_addr: 32'h00500000},// MagiaTileX4Y0 +'{ idx: '{ id: '{x: 11, y: 0, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00300000, - end_addr: 32'h00400000},// MagiaTileX0Y3 -'{ idx: '{ id: '{x: 8, y: 2, port_id: 0}, + end_addr: 32'h00400000},// MagiaTileX3Y0 +'{ idx: '{ id: '{x: 10, y: 0, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00200000, - end_addr: 32'h00300000},// MagiaTileX0Y2 -'{ idx: '{ id: '{x: 8, y: 1, port_id: 0}, + end_addr: 32'h00300000},// MagiaTileX2Y0 +'{ idx: '{ id: '{x: 9, y: 0, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, base_id: 0}}, start_addr: 32'h00100000, - end_addr: 32'h00200000},// MagiaTileX0Y1 + end_addr: 32'h00200000},// MagiaTileX1Y0 '{ idx: '{ id: '{x: 8, y: 0, port_id: 0}, mask_x: '{ offset: 23, - len: 4, + len: 3, base_id: 8}, mask_y: '{ offset: 20, len: 3, @@ -921,10 +1076,10 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, EnLsbAnd: 1'b1, - EnFpAdd: 1'b0, - EnFpMul: 1'b0, - EnFpMin: 1'b0, - EnFpMax: 1'b0, + EnFpAdd: 1'b1, + EnFpMul: 1'b1, + EnFpMin: 1'b1, + EnFpMax: 1'b1, EnIntAdd: 1'b0, EnIntMul: 1'b0, EnIntMinS: 1'b0, @@ -932,7 +1087,8 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ EnIntMaxS: 1'b0, EnIntMaxU: 1'b0}, NarrRedCfg: RedDefaultCfg, - WideRedCfg: RedDefaultCfg}}; + WideRedCfg: '{ RdPipelineDepth: 0, + CutOffloadIntf: 1'b0}}}; @@ -1032,5 +1188,8 @@ localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) + typedef logic [AxiCfgW.DataWidth-1:0] floo_wide_red_data_t; +`FLOO_RED_TYPEDEF_REQ_RSP_LINK(wide, floo_wide_red_data_t, wide_req, wide_rsp) + endpackage diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_16x16_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_16x16_config.yml index c7c3d239..81c1b8bf 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_16x16_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_16x16_config.yml @@ -5,6 +5,11 @@ network_type: "narrow-wide" routing: route_algo: "XY" use_id_table: true + collective: + en_narrow_multicast: true + en_wide_multicast: true + en_barrier: true + en_wide_reduction: true protocols: - name: "narrow_data_mst" @@ -13,28 +18,36 @@ protocols: data_width: 32 addr_width: 32 id_width: 3 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "narrow_data_slv" type: "narrow" protocol: "AXI4" data_width: 32 addr_width: 32 id_width: 6 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "wide_data_mst" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "wide_data_slv" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 endpoints: - name: "magia_tile" @@ -42,6 +55,7 @@ endpoints: addr_range: base: 0x0000_0000 size: 0x0010_0000 + en_collective: true mgr_port_protocol: - "narrow_data_slv" - "wide_data_slv" @@ -58,13 +72,19 @@ endpoints: - "wide_data_mst" routers: - - name: "router" + - name: "router_center" array: [16, 16] degree: 5 + xy_id_offset: + y: 0 + x: 15 + - name: "router_left" + array: [1, 16] + degree: 5 connections: - src: "magia_tile" - dst: "router" + dst: "router_center" src_range: - [0, 15] - [0, 15] @@ -73,10 +93,20 @@ connections: - [0, 15] dst_dir: "Eject" - src: "L2" - dst: "router" + dst: "router_left" src_range: - [0, 15] dst_range: - [0, 0] - [0, 15] dst_dir: "West" + - src: "router_left" + dst: "router_center" + src_range: + - [0, 0] + - [0, 15] + dst_range: + - [0, 0] + - [0, 15] + src_dir: "East" + dst_dir: "West" \ No newline at end of file diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml index 0911ae7c..69dff7f9 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml @@ -8,7 +8,9 @@ routing: collective: en_narrow_multicast: true en_wide_multicast: true - + en_barrier: true + en_wide_reduction: true + protocols: - name: "narrow_data_mst" type: "narrow" @@ -19,7 +21,6 @@ protocols: user_width: collective_mask: 32 collective_op: 4 - user: 5 - name: "narrow_data_slv" type: "narrow" protocol: "AXI4" @@ -29,7 +30,6 @@ protocols: user_width: collective_mask: 32 collective_op: 4 - user: 5 - name: "wide_data_mst" type: "wide" protocol: "AXI4" @@ -72,13 +72,19 @@ endpoints: - "wide_data_mst" routers: - - name: "router" + - name: "router_center" array: [2, 2] degree: 5 + xy_id_offset: + y: 0 + x: 1 + - name: "router_left" + array: [1, 2] + degree: 5 connections: - src: "magia_tile" - dst: "router" + dst: "router_center" src_range: - [0, 1] - [0, 1] @@ -87,10 +93,20 @@ connections: - [0, 1] dst_dir: "Eject" - src: "L2" - dst: "router" + dst: "router_left" src_range: - [0, 1] dst_range: - [0, 0] - [0, 1] dst_dir: "West" + - src: "router_left" + dst: "router_center" + src_range: + - [0, 0] + - [0, 1] + dst_range: + - [0, 0] + - [0, 1] + src_dir: "East" + dst_dir: "West" \ No newline at end of file diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_32x32_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_32x32_config.yml index 036fdfc9..ed945bb7 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_32x32_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_32x32_config.yml @@ -5,6 +5,11 @@ network_type: "narrow-wide" routing: route_algo: "XY" use_id_table: true + collective: + en_narrow_multicast: true + en_wide_multicast: true + en_barrier: true + en_wide_reduction: true protocols: - name: "narrow_data_mst" @@ -13,28 +18,36 @@ protocols: data_width: 32 addr_width: 32 id_width: 3 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "narrow_data_slv" type: "narrow" protocol: "AXI4" data_width: 32 addr_width: 32 id_width: 6 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "wide_data_mst" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "wide_data_slv" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 endpoints: - name: "magia_tile" @@ -42,6 +55,7 @@ endpoints: addr_range: base: 0x0000_0000 size: 0x0010_0000 + en_collective: true mgr_port_protocol: - "narrow_data_slv" - "wide_data_slv" @@ -58,13 +72,19 @@ endpoints: - "wide_data_mst" routers: - - name: "router" + - name: "router_center" array: [32, 32] degree: 5 + xy_id_offset: + y: 0 + x: 31 + - name: "router_left" + array: [1, 32] + degree: 5 connections: - src: "magia_tile" - dst: "router" + dst: "router_center" src_range: - [0, 31] - [0, 31] @@ -73,10 +93,20 @@ connections: - [0, 31] dst_dir: "Eject" - src: "L2" - dst: "router" + dst: "router_left" src_range: - [0, 31] dst_range: - [0, 0] - [0, 31] dst_dir: "West" + - src: "router_left" + dst: "router_center" + src_range: + - [0, 0] + - [0, 31] + dst_range: + - [0, 0] + - [0, 31] + src_dir: "East" + dst_dir: "West" \ No newline at end of file diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_4x4_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_4x4_config.yml index b4ed9cf9..0c9163ef 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_4x4_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_4x4_config.yml @@ -5,6 +5,11 @@ network_type: "narrow-wide" routing: route_algo: "XY" use_id_table: true + collective: + en_narrow_multicast: true + en_wide_multicast: true + en_barrier: true + en_wide_reduction: true protocols: - name: "narrow_data_mst" @@ -13,28 +18,36 @@ protocols: data_width: 32 addr_width: 32 id_width: 3 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "narrow_data_slv" type: "narrow" protocol: "AXI4" data_width: 32 addr_width: 32 id_width: 6 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "wide_data_mst" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "wide_data_slv" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 endpoints: - name: "magia_tile" @@ -42,6 +55,7 @@ endpoints: addr_range: base: 0x0000_0000 size: 0x0010_0000 + en_collective: true mgr_port_protocol: - "narrow_data_slv" - "wide_data_slv" @@ -58,13 +72,19 @@ endpoints: - "wide_data_mst" routers: - - name: "router" + - name: "router_center" array: [4, 4] degree: 5 + xy_id_offset: + y: 0 + x: 3 + - name: "router_left" + array: [1, 4] + degree: 5 connections: - src: "magia_tile" - dst: "router" + dst: "router_center" src_range: - [0, 3] - [0, 3] @@ -73,10 +93,20 @@ connections: - [0, 3] dst_dir: "Eject" - src: "L2" - dst: "router" + dst: "router_left" src_range: - [0, 3] dst_range: - [0, 0] - [0, 3] dst_dir: "West" + - src: "router_left" + dst: "router_center" + src_range: + - [0, 0] + - [0, 3] + dst_range: + - [0, 0] + - [0, 3] + src_dir: "East" + dst_dir: "West" diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_8x8_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_8x8_config.yml index 1ecce761..53f1bf83 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_8x8_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_8x8_config.yml @@ -5,6 +5,11 @@ network_type: "narrow-wide" routing: route_algo: "XY" use_id_table: true + collective: + en_narrow_multicast: true + en_wide_multicast: true + en_barrier: true + en_wide_reduction: true protocols: - name: "narrow_data_mst" @@ -13,28 +18,36 @@ protocols: data_width: 32 addr_width: 32 id_width: 3 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "narrow_data_slv" type: "narrow" protocol: "AXI4" data_width: 32 addr_width: 32 id_width: 6 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "wide_data_mst" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 - name: "wide_data_slv" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: + collective_mask: 32 + collective_op: 4 endpoints: - name: "magia_tile" @@ -42,6 +55,7 @@ endpoints: addr_range: base: 0x0000_0000 size: 0x0010_0000 + en_collective: true mgr_port_protocol: - "narrow_data_slv" - "wide_data_slv" @@ -58,13 +72,19 @@ endpoints: - "wide_data_mst" routers: - - name: "router" + - name: "router_center" array: [8, 8] degree: 5 + xy_id_offset: + y: 0 + x: 7 + - name: "router_left" + array: [1, 8] + degree: 5 connections: - src: "magia_tile" - dst: "router" + dst: "router_center" src_range: - [0, 7] - [0, 7] @@ -73,10 +93,20 @@ connections: - [0, 7] dst_dir: "Eject" - src: "L2" - dst: "router" + dst: "router_left" src_range: - [0, 7] dst_range: - [0, 0] - [0, 7] dst_dir: "West" + - src: "router_left" + dst: "router_center" + src_range: + - [0, 0] + - [0, 7] + dst_range: + - [0, 0] + - [0, 7] + src_dir: "East" + dst_dir: "West" \ No newline at end of file From 2d00090de66802dbaeac18205118fc8ab96717a7 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Thu, 16 Jul 2026 15:20:38 +0200 Subject: [PATCH 13/26] [SW/HW] Minor changes to tests + Change from column-major to row-major order --- hw/mesh/magia.sv | 6 +++--- sw/tests/collectives/narrow_broadcast_mm.c | 4 ++-- sw/tests/collectives/narrow_multicast_column_mm.c | 4 ++-- sw/utils/magia_utils.h | 6 +++--- target/sim/src/mesh/magia_vip.sv | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/hw/mesh/magia.sv b/hw/mesh/magia.sv index e45bfe3c..6e54db47 100644 --- a/hw/mesh/magia.sv +++ b/hw/mesh/magia.sv @@ -220,8 +220,8 @@ module magia .noc_west_rsp_o ( tile_west_rsp_out[i*N_TILES_X+j] ), .noc_west_wide_i ( tile_west_wide_in[i*N_TILES_X+j] ), - .x_id_i ( {{(32-$clog2(N_TILES_X+1)){1'b0}}, CollectiveSam[j*N_TILES_Y+i].idx.id.x} ), - .y_id_i ( {{(32-$clog2(N_TILES_Y)){1'b0}}, CollectiveSam[j*N_TILES_Y+i].idx.id.y} ), + .x_id_i ( {{(32-$clog2(N_TILES_X+1)){1'b0}}, CollectiveSam[i*N_TILES_X+j].idx.id.x} ), + .y_id_i ( {{(32-$clog2(N_TILES_Y)){1'b0}}, CollectiveSam[i*N_TILES_X+j].idx.id.y} ), `ifdef VERILATOR .ht_fsync_req_o ( ht_tile_fsync_req[i*N_TILES_X+j][0] ), @@ -245,7 +245,7 @@ module magia .mtvec_addr_i , .dm_halt_addr_i , .dm_exception_addr_i , - .mhartid_i ( mhartid[j*N_TILES_Y+i] ), + .mhartid_i ( mhartid[i*N_TILES_X+j] ), .mimpid_patch_i , .mcycle_o ( mcycle_o[i*N_TILES_X+j] ), diff --git a/sw/tests/collectives/narrow_broadcast_mm.c b/sw/tests/collectives/narrow_broadcast_mm.c index 4e1f1ab3..d914f314 100644 --- a/sw/tests/collectives/narrow_broadcast_mm.c +++ b/sw/tests/collectives/narrow_broadcast_mm.c @@ -38,8 +38,8 @@ int main() { printf("Source of the broadcast\n"); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + L1_TILE_OFFSET + MEM_OFFSET) = (int) BROADCAST_WORD; - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + L1_TILE_OFFSET + END_OF_TEST_OFFSET) = (int) END_PATTERN; + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) = (int) BROADCAST_WORD; + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) = (int) END_PATTERN; } else { diff --git a/sw/tests/collectives/narrow_multicast_column_mm.c b/sw/tests/collectives/narrow_multicast_column_mm.c index b3ed7daa..61fed1b3 100644 --- a/sw/tests/collectives/narrow_multicast_column_mm.c +++ b/sw/tests/collectives/narrow_multicast_column_mm.c @@ -38,8 +38,8 @@ int main() { printf("Source of the broadcast\n"); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + MEM_OFFSET) = (int) BROADCAST_WORD; - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) = (int) BROADCAST_WORD; + *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) = (int) END_PATTERN; } else { if(GET_X_ID(get_hartid()) == GET_X_ID(SOURCE_HART_ID)){ diff --git a/sw/utils/magia_utils.h b/sw/utils/magia_utils.h index c182ec29..50c9d3e4 100644 --- a/sw/utils/magia_utils.h +++ b/sw/utils/magia_utils.h @@ -34,9 +34,9 @@ #define MESH_X_TILES (4) #define NUM_HARTS (MESH_Y_TILES*MESH_X_TILES) -#define GET_Y_ID(mhartid) ((mhartid)%MESH_Y_TILES) -#define GET_X_ID(mhartid) ((mhartid)/MESH_Y_TILES) -#define GET_ID(y_id, x_id) (((x_id)*MESH_X_TILES)+(y_id)) +#define GET_Y_ID(mhartid) ((mhartid)/MESH_Y_TILES) +#define GET_X_ID(mhartid) ((mhartid)%MESH_X_TILES) +#define GET_ID(y_id, x_id) (((y_id)*MESH_X_TILES)+(x_id)) #define h_pprintf(x) (h_psprint(get_hartid(), x)) #define n_pprintf(x) (n_psprint(get_hartid(), x)) diff --git a/target/sim/src/mesh/magia_vip.sv b/target/sim/src/mesh/magia_vip.sv index c79eb264..2ccdb262 100644 --- a/target/sim/src/mesh/magia_vip.sv +++ b/target/sim/src/mesh/magia_vip.sv @@ -251,7 +251,7 @@ module magia_vip end for (int k = 0; k < 2**magia_tb_pkg::L2_ID_W; k++) begin if (print_line[k] == 1'b1) begin - $write("[mhartid %0d] ", j*magia_tb_pkg::N_TILES_Y+i); + $write("[mhartid %0d] ", i*magia_tb_pkg::N_TILES_X+j); for (int j = 0; j < chars.size(); j++) begin if (chars[j].id == k) begin $write("%c", chars[j].data); From b50b8e0e51f817c03b717854fdd7463b72106729 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Wed, 19 Aug 2026 14:20:20 +0200 Subject: [PATCH 14/26] [BUMP] Update floonoc and idma ips --- Bender.lock | 8 ++++---- Bender.yml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Bender.lock b/Bender.lock index d50140aa..aebed946 100644 --- a/Bender.lock +++ b/Bender.lock @@ -94,10 +94,10 @@ packages: dependencies: - common_cells floo_noc: - revision: 6ac187326b222a491180cc3f77e0e4e5a69f5167 + revision: 2db2e6470d14921a0c32455f3b2647d600b6c681 version: 0.6.1 source: - Git: https://github.com/pulp-platform/FlooNoC.git + Git: https://github.com/FondazioneChipsIT/FlooNoC.git dependencies: - axi - axi_riscv_atomics @@ -166,10 +166,10 @@ packages: dependencies: - tech_cells_generic idma: - revision: ff5d56fffb3767814db88d6bf8f381974ea33aa5 + revision: 2d70db556da8aefa0af9d87a04e5d03b144a8c81 version: 0.6.4 source: - Git: https://github.com/pulp-platform/iDMA.git + Git: https://github.com/FondazioneChipsIT/iDMA.git dependencies: - axi - axi_stream diff --git a/Bender.yml b/Bender.yml index 3056d035..7f348edb 100644 --- a/Bender.yml +++ b/Bender.yml @@ -42,7 +42,7 @@ dependencies: common_cells : { git: "https://github.com/pulp-platform/common_cells.git" , version: 1.21.0 } tech_cells_generic: { git: "https://github.com/pulp-platform/tech_cells_generic.git", version: 0.2.11 } fractal_sync : { git: "https://github.com/VictorIsachi/fractal_sync" , rev: df8e21b7e2b0e2d3198bf44a60b4ca67c334bcc2 } # branch: main - floo_noc : { git: "https://github.com/pulp-platform/FlooNoC.git" , version: 0.8.0 } + floo_noc : { git: "https://github.com/FondazioneChipsIT/FlooNoC.git" , rev: 2db2e6470d14921a0c32455f3b2647d600b6c681 } # branch: cc/row-major event_unit_flex : { git: "https://github.com/pulp-platform/event_unit_flex.git" , rev: 763c3b9977970f656326c70a96debfb2ac0f85b2 } export_include_dirs: From 9b5801c2b78e2ee34616ac85addcfac9856e4740 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Wed, 19 Aug 2026 14:35:42 +0200 Subject: [PATCH 15/26] [NOC] Update noc configuration files: enable narrow reduction and disable wide reduction --- hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv | 28 +++++++++---------- hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv | 28 +++++++++---------- hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv | 28 +++++++++---------- hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv | 14 +++++----- hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv | 28 +++++++++---------- .../floonoc_axi_nw_mesh_16x16_config.yml | 2 +- .../floonoc_axi_nw_mesh_2x2_config.yml | 2 +- .../floonoc_axi_nw_mesh_32x32_config.yml | 2 +- .../floonoc_axi_nw_mesh_4x4_config.yml | 2 +- .../floonoc_axi_nw_mesh_8x8_config.yml | 2 +- 10 files changed, 68 insertions(+), 68 deletions(-) diff --git a/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv index c2139a47..e5baa473 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv @@ -3844,16 +3844,16 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, EnLsbAnd: 1'b1, - EnFpAdd: 1'b1, - EnFpMul: 1'b1, - EnFpMin: 1'b1, - EnFpMax: 1'b1, - EnIntAdd: 1'b0, - EnIntMul: 1'b0, - EnIntMinS: 1'b0, - EnIntMinU: 1'b0, - EnIntMaxS: 1'b0, - EnIntMaxU: 1'b0}, + EnFpAdd: 1'b0, + EnFpMul: 1'b0, + EnFpMin: 1'b0, + EnFpMax: 1'b0, + EnIntAdd: 1'b1, + EnIntMul: 1'b1, + EnIntMinS: 1'b1, + EnIntMinU: 1'b1, + EnIntMaxS: 1'b1, + EnIntMaxU: 1'b1}, NarrRedCfg: RedDefaultCfg, WideRedCfg: '{ RdPipelineDepth: 0, CutOffloadIntf: 1'b0}}}; @@ -3944,13 +3944,13 @@ typedef logic[0:0] axi_wide_data_slv_user_t; `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: 32, DataWidth: 32, - InIdWidth: 4, - OutIdWidth: 2, + InIdWidth: 6, + OutIdWidth: 3, UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - InIdWidth: 2, - OutIdWidth: 2, + InIdWidth: 3, + OutIdWidth: 3, UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) diff --git a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv index 361a1ca6..f2fea898 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv @@ -176,16 +176,16 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, EnLsbAnd: 1'b1, - EnFpAdd: 1'b1, - EnFpMul: 1'b1, - EnFpMin: 1'b1, - EnFpMax: 1'b1, - EnIntAdd: 1'b0, - EnIntMul: 1'b0, - EnIntMinS: 1'b0, - EnIntMinU: 1'b0, - EnIntMaxS: 1'b0, - EnIntMaxU: 1'b0}, + EnFpAdd: 1'b0, + EnFpMul: 1'b0, + EnFpMin: 1'b0, + EnFpMax: 1'b0, + EnIntAdd: 1'b1, + EnIntMul: 1'b1, + EnIntMinS: 1'b1, + EnIntMinU: 1'b1, + EnIntMaxS: 1'b1, + EnIntMaxU: 1'b1}, NarrRedCfg: RedDefaultCfg, WideRedCfg: '{ RdPipelineDepth: 0, CutOffloadIntf: 1'b0}}}; @@ -276,13 +276,13 @@ typedef logic[0:0] axi_wide_data_slv_user_t; `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: 32, DataWidth: 32, - InIdWidth: 4, - OutIdWidth: 2, + InIdWidth: 6, + OutIdWidth: 3, UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - InIdWidth: 2, - OutIdWidth: 2, + InIdWidth: 3, + OutIdWidth: 3, UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) diff --git a/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv index 63cee3ee..bb39ab8f 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv @@ -14756,16 +14756,16 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, EnLsbAnd: 1'b1, - EnFpAdd: 1'b1, - EnFpMul: 1'b1, - EnFpMin: 1'b1, - EnFpMax: 1'b1, - EnIntAdd: 1'b0, - EnIntMul: 1'b0, - EnIntMinS: 1'b0, - EnIntMinU: 1'b0, - EnIntMaxS: 1'b0, - EnIntMaxU: 1'b0}, + EnFpAdd: 1'b0, + EnFpMul: 1'b0, + EnFpMin: 1'b0, + EnFpMax: 1'b0, + EnIntAdd: 1'b1, + EnIntMul: 1'b1, + EnIntMinS: 1'b1, + EnIntMinU: 1'b1, + EnIntMaxS: 1'b1, + EnIntMaxU: 1'b1}, NarrRedCfg: RedDefaultCfg, WideRedCfg: '{ RdPipelineDepth: 0, CutOffloadIntf: 1'b0}}}; @@ -14856,13 +14856,13 @@ typedef logic[0:0] axi_wide_data_slv_user_t; `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: 32, DataWidth: 32, - InIdWidth: 4, - OutIdWidth: 2, + InIdWidth: 6, + OutIdWidth: 3, UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - InIdWidth: 2, - OutIdWidth: 2, + InIdWidth: 3, + OutIdWidth: 3, UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) diff --git a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv index 4ae709c1..cb58800b 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv @@ -363,17 +363,17 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ NumRoutes: 0, CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, - EnLsbAnd: 1'b0, + EnLsbAnd: 1'b1, EnFpAdd: 1'b0, EnFpMul: 1'b0, EnFpMin: 1'b0, EnFpMax: 1'b0, - EnIntAdd: 1'b0, - EnIntMul: 1'b0, - EnIntMinS: 1'b0, - EnIntMinU: 1'b0, - EnIntMaxS: 1'b0, - EnIntMaxU: 1'b0}, + EnIntAdd: 1'b1, + EnIntMul: 1'b1, + EnIntMinS: 1'b1, + EnIntMinU: 1'b1, + EnIntMaxS: 1'b1, + EnIntMaxU: 1'b1}, NarrRedCfg: RedDefaultCfg, WideRedCfg: RedDefaultCfg}}; diff --git a/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv index ed8b12ee..351b0027 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv @@ -1076,16 +1076,16 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ CollectiveCfg: '{ OpCfg: '{ EnNarrowMulticast: 1'b1, EnWideMulticast: 1'b1, EnLsbAnd: 1'b1, - EnFpAdd: 1'b1, - EnFpMul: 1'b1, - EnFpMin: 1'b1, - EnFpMax: 1'b1, - EnIntAdd: 1'b0, - EnIntMul: 1'b0, - EnIntMinS: 1'b0, - EnIntMinU: 1'b0, - EnIntMaxS: 1'b0, - EnIntMaxU: 1'b0}, + EnFpAdd: 1'b0, + EnFpMul: 1'b0, + EnFpMin: 1'b0, + EnFpMax: 1'b0, + EnIntAdd: 1'b1, + EnIntMul: 1'b1, + EnIntMinS: 1'b1, + EnIntMinU: 1'b1, + EnIntMaxS: 1'b1, + EnIntMaxU: 1'b1}, NarrRedCfg: RedDefaultCfg, WideRedCfg: '{ RdPipelineDepth: 0, CutOffloadIntf: 1'b0}}}; @@ -1176,13 +1176,13 @@ typedef logic[0:0] axi_wide_data_slv_user_t; `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: 32, DataWidth: 32, - InIdWidth: 4, - OutIdWidth: 2, + InIdWidth: 6, + OutIdWidth: 3, UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - InIdWidth: 2, - OutIdWidth: 2, + InIdWidth: 3, + OutIdWidth: 3, UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_16x16_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_16x16_config.yml index 81c1b8bf..6879743d 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_16x16_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_16x16_config.yml @@ -9,7 +9,7 @@ routing: en_narrow_multicast: true en_wide_multicast: true en_barrier: true - en_wide_reduction: true + en_narrow_reduction: true protocols: - name: "narrow_data_mst" diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml index 69dff7f9..37095682 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_2x2_config.yml @@ -9,7 +9,7 @@ routing: en_narrow_multicast: true en_wide_multicast: true en_barrier: true - en_wide_reduction: true + en_narrow_reduction: true protocols: - name: "narrow_data_mst" diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_32x32_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_32x32_config.yml index ed945bb7..12faa8a6 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_32x32_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_32x32_config.yml @@ -9,7 +9,7 @@ routing: en_narrow_multicast: true en_wide_multicast: true en_barrier: true - en_wide_reduction: true + en_narrow_reduction: true protocols: - name: "narrow_data_mst" diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_4x4_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_4x4_config.yml index 0c9163ef..bbe3d354 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_4x4_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_4x4_config.yml @@ -9,7 +9,7 @@ routing: en_narrow_multicast: true en_wide_multicast: true en_barrier: true - en_wide_reduction: true + en_narrow_reduction: true protocols: - name: "narrow_data_mst" diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_8x8_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_8x8_config.yml index 53f1bf83..9d8ca9d6 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_8x8_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_8x8_config.yml @@ -9,7 +9,7 @@ routing: en_narrow_multicast: true en_wide_multicast: true en_barrier: true - en_wide_reduction: true + en_narrow_reduction: true protocols: - name: "narrow_data_mst" From ce5047d5a3185479c86b14b16350acd97be23926 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Wed, 19 Aug 2026 15:02:01 +0200 Subject: [PATCH 16/26] [HW] Collective configuration is now managed by the tile csr --- hw/tile/collective_gen.sv | 7 +++---- hw/tile/magia_tile.sv | 18 +----------------- hw/tile/magia_tile_pkg.sv | 2 +- 3 files changed, 5 insertions(+), 22 deletions(-) diff --git a/hw/tile/collective_gen.sv b/hw/tile/collective_gen.sv index c5b8fc0d..8a88af31 100644 --- a/hw/tile/collective_gen.sv +++ b/hw/tile/collective_gen.sv @@ -15,11 +15,10 @@ * SPDX-License-Identifier: SHL-0.51 * Authors: Carlotta Chiarini - * Mcast Generator + * Collective Generator * This module sets up the user field for a collective operation. * If the MSB is B, the transaction is recognized as a collective operation. - * Currently the only the Broadcast (coll_op = 0x0) and LsbAnd (coll_op = 0x1) reduce are supported. * The collective_mask is used to identify the tiles that take part to the collective operation. */ @@ -28,8 +27,8 @@ module collective_gen ( input clk_i, input rst_ni, - input logic[31:0] collective_mask_i; - output logic[3:0] collective_op_i; + input logic[31:0] collective_mask_i, + input logic[3:0] collective_op_i, input magia_pkg::axi_xbar_mst_req_t data_req_i, output magia_pkg::axi_xbar_mst_req_t data_req_o ); diff --git a/hw/tile/magia_tile.sv b/hw/tile/magia_tile.sv index 81e82452..5aa94fe8 100644 --- a/hw/tile/magia_tile.sv +++ b/hw/tile/magia_tile.sv @@ -1667,22 +1667,7 @@ module magia_tile red_narrow_req_t offload_narrow_req; red_narrow_rsp_t offload_narrow_rsp; - logic[63:0] wide_alu_result, narrow_alu_result; - - floo_reduction_alu i_wide_floo_alu ( - .clk_i(sys_clk), - .rst_ni(rst_ni), - .flush_i(1'b0), - .alu_req_op1_i(offload_wide_req.req.operand1[63:0]), - .alu_req_op2_i(offload_wide_req.req.operand2[63:0]), - .alu_req_type_i(offload_wide_req.req.op), - .alu_req_valid_i(offload_wide_req.valid), - .alu_req_ready_o(offload_wide_rsp.ready), - .alu_resp_data_o(wide_alu_result), - .alu_resp_valid_o(offload_wide_rsp.valid), - .alu_resp_ready_i(offload_wide_req.ready) -); - + logic[63:0] narrow_alu_result; floo_reduction_alu i_narrow_floo_alu ( .clk_i(sys_clk), @@ -1698,7 +1683,6 @@ floo_reduction_alu i_narrow_floo_alu ( .alu_resp_ready_i(offload_narrow_req.ready) ); -assign offload_wide_rsp.rsp.result = {{192{1'b0}}, wide_alu_result}; assign offload_narrow_rsp.rsp.result = narrow_alu_result[31:0]; floo_nw_router #( diff --git a/hw/tile/magia_tile_pkg.sv b/hw/tile/magia_tile_pkg.sv index 2a2485d2..c56af67a 100644 --- a/hw/tile/magia_tile_pkg.sv +++ b/hw/tile/magia_tile_pkg.sv @@ -65,7 +65,7 @@ package magia_tile_pkg; localparam logic [magia_pkg::ADDR_W-1:0] EVENT_UNIT_SIZE = 32'h0000_1000; localparam logic [magia_pkg::ADDR_W-1:0] EVENT_UNIT_ADDR_END = EVENT_UNIT_ADDR_START + EVENT_UNIT_SIZE; localparam logic [magia_pkg::ADDR_W-1:0] TILE_CSR_START = EVENT_UNIT_ADDR_END; - localparam logic [magia_pkg::ADDR_W-1:0] TILE_CSR_SIZE = 32'h0000_0100; + localparam logic [magia_pkg::ADDR_W-1:0] TILE_CSR_SIZE = 32'h0000_0200; localparam logic [magia_pkg::ADDR_W-1:0] TILE_CSR_END = TILE_CSR_START + TILE_CSR_SIZE; localparam logic [magia_pkg::ADDR_W-1:0] RESERVED_ADDR_START = TILE_CSR_END; localparam logic [magia_pkg::ADDR_W-1:0] RESERVED_SIZE = 32'h0000_E800; From a45ce720d97c36e17de7f890f2404477fe3f01fc Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Wed, 19 Aug 2026 15:04:26 +0200 Subject: [PATCH 17/26] [HW] Update idma_reg32_3d module parameters after idma bump --- hw/tile/idma_axi_obi_transfer_ch.sv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/tile/idma_axi_obi_transfer_ch.sv b/hw/tile/idma_axi_obi_transfer_ch.sv index a51474e5..ba9115be 100644 --- a/hw/tile/idma_axi_obi_transfer_ch.sv +++ b/hw/tile/idma_axi_obi_transfer_ch.sv @@ -112,7 +112,8 @@ module idma_axi_obi_transfer_ch .reg_rsp_t ( idma_fe_reg_rsp_t ), .dma_req_t ( magia_tile_pkg::idma_nd_req_t ), .cnt_width_t ( /*DO NOT OVERRIDE*/ ), - .stream_t ( /*DO NOT OVERRIDE*/ ) + .stream_t ( /*DO NOT OVERRIDE*/ ), + .UserWidth ( magia_tile_pkg::iDMA_UserWidth ) ) i_idma_frontend ( .clk_i , .rst_ni , From fc0c428fae4b58316587a097d36b0c1d6dd000c3 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Wed, 19 Aug 2026 18:48:30 +0200 Subject: [PATCH 18/26] [SW] Update collective operations tests --- sw/tests/collectives/narrow_broadcast_mm.c | 25 +-- .../collectives/narrow_multicast_column_mm.c | 35 ++-- .../collectives/narrow_multicast_row_mm.c | 31 ++-- .../collectives/narrow_reduce_column_mm.c | 62 ++++++- sw/tests/collectives/narrow_reduce_mesh_mm.c | 169 ++++++++++++++++++ sw/tests/collectives/narrow_reduce_row_mm.c | 100 +++++++++++ sw/tests/collectives/narrow_sync_column_mm.c | 21 ++- sw/tests/collectives/narrow_sync_mesh_mm.c | 18 +- sw/tests/collectives/narrow_sync_row_mm.c | 18 +- sw/tests/collectives/wide_reduce_column_mm.c | 111 ------------ sw/utils/magia_coll_utils.h | 40 +---- 11 files changed, 426 insertions(+), 204 deletions(-) create mode 100644 sw/tests/collectives/narrow_reduce_mesh_mm.c create mode 100644 sw/tests/collectives/narrow_reduce_row_mm.c delete mode 100644 sw/tests/collectives/wide_reduce_column_mm.c diff --git a/sw/tests/collectives/narrow_broadcast_mm.c b/sw/tests/collectives/narrow_broadcast_mm.c index d914f314..508d0957 100644 --- a/sw/tests/collectives/narrow_broadcast_mm.c +++ b/sw/tests/collectives/narrow_broadcast_mm.c @@ -14,23 +14,24 @@ * limitations under the License. * SPDX-License-Identifier: Apache-2.0 * - * Authors: Carlotta Chiarini + * Authors: Carlotta Chiarini, Fondazione Chips-IT * - * MAGIA Broadcast test over the narrow channel + * MAGIA Broadcast test over the FlooNoC narrow channel + * 1) The source tile (SOURCE_HART_ID) broadcast a single 32-bit word over the narrow channel. + * 2) The test passes if all the destination tiles successfully receive the 32-bit word. */ #include "magia_utils.h" #include "magia_coll_utils.h" #define MEM_OFFSET (0x1000) -#define END_OF_TEST_OFFSET (0x0) -#define END_PATTERN (0xCCAA) #define BROADCAST_WORD (0x12345678) #define SOURCE_HART_ID 3 int main() { + // Before the hardware can correctly process a collective operation, two registers (collective_mask, collective_op) must be configured set_collective_mask(gen_collective_mask(ALL)); set_collective_op(MULTICAST); @@ -38,20 +39,20 @@ int main() { printf("Source of the broadcast\n"); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) = (int) BROADCAST_WORD; - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) = (int) END_PATTERN; + // The source tile broadcast a single 32-bit word + // COLLECTIVE_ADDR_OFFSET tells the hardware that this 32-bit word should be treated as part of a collective operation + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) = BROADCAST_WORD; } else { printf("Destination of the broadcast\n"); - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + // The destination tile waits the reception of the broadcast word + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != BROADCAST_WORD) {}; - if(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) == BROADCAST_WORD) - printf("TEST PASSED\n"); - else - printf("ERROR: Expected 0x%x; Actual: 0x%x\n", BROADCAST_WORD, *(volatile int *)(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET)); - } + // The broadcast word is successfully received + printf("TEST PASSED\n"); + } return 0; } diff --git a/sw/tests/collectives/narrow_multicast_column_mm.c b/sw/tests/collectives/narrow_multicast_column_mm.c index 61fed1b3..68afa657 100644 --- a/sw/tests/collectives/narrow_multicast_column_mm.c +++ b/sw/tests/collectives/narrow_multicast_column_mm.c @@ -14,45 +14,48 @@ * limitations under the License. * SPDX-License-Identifier: Apache-2.0 * - * Authors: Carlotta Chiarini + * Authors: Carlotta Chiarini, Fondazione Chips-IT * * MAGIA Column multicast test over the narrow channel. + * 1) The source tile (SOURCE_HART_ID) multicast a single 32-bit word over the narrow channel. + * 2) The test passes if all the destination tiles successfully receive the 32-bit word. */ #include "magia_utils.h" #include "magia_coll_utils.h" #define MEM_OFFSET (0x1000) -#define END_OF_TEST_OFFSET (0x0) -#define END_PATTERN (0xCCAA) #define BROADCAST_WORD (0x12345678) #define SOURCE_HART_ID 3 int main() { + // Before the hardware can correctly process a collective operation, two registers (collective_mask, collective_op) must be configured set_collective_mask(gen_collective_mask(COLUMN)); set_collective_op(MULTICAST); if(get_hartid() == SOURCE_HART_ID) { - + printf("Source of the broadcast\n"); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) = (int) BROADCAST_WORD; - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) = (int) END_PATTERN; + // The source tile multicast a single 32-bit word + // COLLECTIVE_ADDR_OFFSET tells the hardware that this 32-bit word should be treated as part of a collective operation + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) = BROADCAST_WORD; } else { - if(GET_X_ID(get_hartid()) == GET_X_ID(SOURCE_HART_ID)){ - printf("Destination of the multicast\n"); - - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; - if(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) == BROADCAST_WORD) - printf("TEST PASSED\n"); - else - printf("ERROR: Expected 0x%x; Actual: 0x%x\n", BROADCAST_WORD, *(volatile int *)(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET)); - } - } + // Only the tiles that have the same X coordinate as the source tile participate in the collective operation + if(GET_X_ID(get_hartid()) == GET_X_ID(SOURCE_HART_ID)){ + printf("Destination of the multicast\n"); + + // The destination tile waits the reception of the broadcast word + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != BROADCAST_WORD) {}; + + // The broadcast word is successfully received + printf("TEST PASSED\n"); + } + } return 0; } diff --git a/sw/tests/collectives/narrow_multicast_row_mm.c b/sw/tests/collectives/narrow_multicast_row_mm.c index 4683ae80..1532cf89 100644 --- a/sw/tests/collectives/narrow_multicast_row_mm.c +++ b/sw/tests/collectives/narrow_multicast_row_mm.c @@ -14,23 +14,24 @@ * limitations under the License. * SPDX-License-Identifier: Apache-2.0 * - * Authors: Carlotta Chiarini + * Authors: Carlotta Chiarini, Fondazione Chips-IT * * MAGIA Column multicast test over the narrow channel. + * 1) The source tile (SOURCE_HART_ID) multicast a single 32-bit word over the narrow channel. + * 2) The test passes if all the destination tiles successfully receive the 32-bit word. */ #include "magia_utils.h" #include "magia_coll_utils.h" #define MEM_OFFSET (0x1000) -#define END_OF_TEST_OFFSET (0x0) -#define END_PATTERN (0xCCAA) #define BROADCAST_WORD (0x12345678) #define SOURCE_HART_ID 3 int main() { + // Before the hardware can correctly process a collective operation, two registers (collective_mask, collective_op) must be configured set_collective_mask(gen_collective_mask(ROW)); set_collective_op(MULTICAST); @@ -38,21 +39,23 @@ int main() { printf("Source of the broadcast\n"); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + MEM_OFFSET) = (int) BROADCAST_WORD; - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; + // The source tile multicast a single 32-bit word + // COLLECTIVE_ADDR_OFFSET tells the hardware that this 32-bit word should be treated as part of a collective operation + mmio32(COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + MEM_OFFSET) = BROADCAST_WORD; } else { - if(GET_Y_ID(get_hartid()) == GET_Y_ID(SOURCE_HART_ID)){ - printf("Destination of the multicast\n"); - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + // Only the tiles that have the same Y coordinate as the source tile participate in the collective operation + if(GET_Y_ID(get_hartid()) == GET_Y_ID(SOURCE_HART_ID)){ + printf("Destination of the multicast\n"); - if(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) == BROADCAST_WORD) - printf("TEST PASSED\n"); - else - printf("ERROR: Expected 0x%x; Actual: 0x%x\n", BROADCAST_WORD, *(volatile int *)(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET)); - } - } + // The destination tile waits the reception of the broadcast word + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != BROADCAST_WORD) {}; + + // The broadcast word is successfully received + printf("TEST PASSED\n"); + } + } return 0; } diff --git a/sw/tests/collectives/narrow_reduce_column_mm.c b/sw/tests/collectives/narrow_reduce_column_mm.c index dd078ef4..2a505a54 100644 --- a/sw/tests/collectives/narrow_reduce_column_mm.c +++ b/sw/tests/collectives/narrow_reduce_column_mm.c @@ -14,10 +14,10 @@ * limitations under the License. * SPDX-License-Identifier: Apache-2.0 * - * Authors: Carlotta Chiarini + * Author: Carlotta Chiarini, Fondazione Chips-IT * - * MAGIA Column Reduce test over the narrow channel - * using the built-in FlooNoC collectives + * MAGIA Column Reduce test over the narrow channel using the built-in FlooNoC collectives + * */ #include "magia_utils.h" @@ -29,21 +29,67 @@ int main() { - uint32_t unreduced_data = 100; + uint32_t unreduced_data; uint32_t reduced_data; - set_collective_mask(gen_collective_mask(COLUMN)); + + // ********************** INT SUM TEST *************************** // + unreduced_data = 100; + /* + * Hardware configuration: + * 1) Collective Operation opcode -> INT_ADD + * 2) Nodes taking part to the transactions -> COLUMN + */ set_collective_op(INT_ADD); + set_collective_mask(gen_collective_mask(COLUMN)); + /* + * Only the nodes on the same column of the DESTINATION_HART_ID node are taking part to the transaction. + */ if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)){ printf("Summing...\n"); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; } + /* + * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. + */ if(get_hartid() == DESTINATION_HART_ID){ + /* + * Compute the expected reduction result and check it against the final result. + */ reduced_data = unreduced_data * MESH_X_TILES; - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; - printf("SUM TEST PASSED\n"); + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; + printf("SUM TEST PASSED | RESULT 0x%x\n", reduced_data); + } + + // ************************* INT MUL TEST ********************** // + unreduced_data = 2; + /* + * Hardware configuration: + * 1) Collective Operation opcode -> INT_ADD + * 2) Nodes taking part to the transactions -> COLUMN + */ + set_collective_op(INT_MUL); + set_collective_mask(gen_collective_mask(COLUMN)); + + /* + * Only the nodes on the same column of the DESTINATION_HART_ID node are taking part to the transaction. + */ + if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)){ + printf("Multiplying...\n"); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; + } + + if(get_hartid() == DESTINATION_HART_ID){ + /* + * Compute the expected reduction result and check it against the final result. + */ + reduced_data = unreduced_data; + for(int i = 0; i < (MESH_X_TILES-1); i++) + reduced_data = reduced_data*unreduced_data; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; + printf("MUL TEST PASSED | RESULT 0x%x\n", reduced_data); } return 0; diff --git a/sw/tests/collectives/narrow_reduce_mesh_mm.c b/sw/tests/collectives/narrow_reduce_mesh_mm.c new file mode 100644 index 00000000..aca71225 --- /dev/null +++ b/sw/tests/collectives/narrow_reduce_mesh_mm.c @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Carlotta Chiarini, Fondazione Chips-IT + * + * MAGIA Mesh Reduce test over the narrow channel using the built-in FlooNoC collectives + * + * At the current development stage of the FlooNoC built-in collectives, a single reduce over the mesh is not possible. + * Therefore, the reduce is split in a reduce over all the columns of the mesh, followed by a reduce over a single row. + * + * Steps of the test: + * 1) Integer Add Test + * 2) Barrier + * 3) Integer Mul Test + */ + +#include "magia_utils.h" +#include "magia_coll_utils.h" + +#define REDUCE_OFFSET (0x1000) +#define SYNC_OFFSET (0x2000) + +#define DESTINATION_HART_ID 0 +#define CACHE_HEAT_CYCLES (5) +#define SYNC_PATTERN 3 + + +int main() { + + uint32_t unreduced_data; + uint32_t reduced_data; + + + // ********************** INT SUM TEST *************************** // + unreduced_data = 100; + /* + * Hardware configuration: + * 1) Collective Operation opcode -> INT_ADD + * 2) Nodes taking part to the transactions -> COLUMN + */ + set_collective_op(INT_ADD); + set_collective_mask(gen_collective_mask(COLUMN)); + printf("Summing over column...\n"); + /* + * Nodes in each column perform a reduction targeting the topmost node of that column. + * The target hart ID is computed using GET_X_ID(get_hartid()). + */ + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + GET_X_ID(get_hartid())*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; + + /* + * If the current node is a topmost node, it is expected to be the destination of a reduction operation. + * All topmost nodes also initiate a reduction across their row, targeting DESTINATION_HART_ID. + */ + if(get_hartid() < MESH_X_TILES){ + /* + * Receive the final reduced data over the column + */ + reduced_data = unreduced_data * MESH_X_TILES; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; + printf("Summing over column complete\n"); + + /* + * Taking part to the final reduction transaction over the row + */ + set_collective_mask(gen_collective_mask(ROW)); + + printf("Summing over row...\n"); + unreduced_data = mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; + } + + /* + * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. + */ + if(get_hartid() == DESTINATION_HART_ID){ + /* + * Compute the expected reduction result and check it against the final result. + */ + reduced_data = unreduced_data * MESH_Y_TILES; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; + printf("Summing over row complete\n"); + printf("SUM TEST PASSED | RESULT 0x%x\n", reduced_data); + } + + + // ************************** BARRIER ***************************** // + /* + * To avoid overlapping the SUM and MUL test, we use a barrier. + */ + printf("Barrier...\n"); + set_collective_mask(gen_collective_mask(ALL)); + set_collective_op(LSBAND); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; + + + + // ************************* INT MUL TEST ********************** // + unreduced_data = 2; + /* + * Hardware configuration: + * 1) Collective Operation opcode -> INT_MUL + * 2) Nodes taking part to the transactions -> COLUMN + */ + set_collective_op(INT_MUL); + set_collective_mask(gen_collective_mask(COLUMN)); + printf("Multiplying over column...\n"); + + /* + * Nodes in each column perform a reduction targeting the topmost node of that column. + * The target hart ID is computed using GET_X_ID(get_hartid()). + */ + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + GET_X_ID(get_hartid())*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; + + /* + * If the current node is a topmost node, it is expected to be the destination of a reduction operation. + * All topmost nodes also initiate a reduction across their row, targeting DESTINATION_HART_ID. + */ + if(get_hartid() < MESH_X_TILES){ + /* + * Receive the final reduced data over the column + */ + reduced_data = unreduced_data; + for(int i = 0; i < (MESH_X_TILES-1); i++) + reduced_data = reduced_data*unreduced_data; + + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; + printf("Multiplying over column complete\n"); + + /* + * Taking part to the final reduction transaction over the row + */ + set_collective_mask(gen_collective_mask(ROW)); + + printf("Multiplying over row...\n"); + unreduced_data = mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; + } + + /* + * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. + */ + if(get_hartid() == DESTINATION_HART_ID){ + /* + * Compute the expected reduction result and check it against the final result. + */ + reduced_data = unreduced_data; + for(int i = 0; i < (MESH_Y_TILES-1); i++) + reduced_data = reduced_data*unreduced_data; + + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; + printf("Multiplying over row complete\n"); + printf("MUL TEST PASSED | RESULT 0x%x\n", reduced_data); + } + + return 0; +} diff --git a/sw/tests/collectives/narrow_reduce_row_mm.c b/sw/tests/collectives/narrow_reduce_row_mm.c new file mode 100644 index 00000000..bab0ec6f --- /dev/null +++ b/sw/tests/collectives/narrow_reduce_row_mm.c @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2026 ETH Zurich, University of Bologna and Fondazione Chips-IT + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * SPDX-License-Identifier: Apache-2.0 + * + * Author: Carlotta Chiarini, Fondazione Chips-IT + * + * MAGIA Row Reduce test over the narrow channel using the built-in FlooNoC collectives + * + */ + +#include "magia_utils.h" +#include "magia_coll_utils.h" + +#define REDUCE_OFFSET (0x1000) +#define DESTINATION_HART_ID 0 +#define CACHE_HEAT_CYCLES (5) + +int main() { + + uint32_t unreduced_data; + uint32_t reduced_data; + + + // ********************** INT SUM TEST *************************** // + unreduced_data = 100; + /* + * Hardware configuration: + * 1) Collective Operation opcode -> INT_ADD + * 2) Nodes taking part to the transactions -> ROW + */ + set_collective_op(INT_ADD); + set_collective_mask(gen_collective_mask(ROW)); + + /* + * Only the nodes on the same row of the DESTINATION_HART_ID node are taking part to the transaction. + */ + if(GET_Y_ID(get_hartid()) == GET_Y_ID(DESTINATION_HART_ID)){ + printf("Summing...\n"); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; + } + + /* + * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. + */ + if(get_hartid() == DESTINATION_HART_ID){ + /* + * Compute the expected reduction result and check it against the final result. + */ + reduced_data = unreduced_data * MESH_X_TILES; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; + printf("SUM TEST PASSED\n"); + } + + + // ************************* INT MUL TEST ********************** // + unreduced_data = 2; + /* + * Hardware configuration: + * 1) Collective Operation opcode -> INT_MUL + * 2) Nodes taking part to the transactions -> ROW + */ + set_collective_op(INT_MUL); + set_collective_mask(gen_collective_mask(ROW)); + + /* + * Only the nodes on the same row of the DESTINATION_HART_ID node are taking part to the transaction. + */ + if(GET_Y_ID(get_hartid()) == GET_Y_ID(DESTINATION_HART_ID)){ + printf("Multiplying...\n"); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; + } + + /* + * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. + */ + if(get_hartid() == DESTINATION_HART_ID){ + /* + * Compute the expected reduction result and check it against the final result. + */ + reduced_data = unreduced_data; + for(int i = 0; i < (MESH_X_TILES-1); i++) + reduced_data = reduced_data*unreduced_data; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; + printf("MUL TEST PASSED\n"); + } + + return 0; +} diff --git a/sw/tests/collectives/narrow_sync_column_mm.c b/sw/tests/collectives/narrow_sync_column_mm.c index 04ec7510..5e5dfe62 100644 --- a/sw/tests/collectives/narrow_sync_column_mm.c +++ b/sw/tests/collectives/narrow_sync_column_mm.c @@ -26,26 +26,39 @@ #define MEM_OFFSET (0x1000) #define DESTINATION_HART_ID 0 #define CACHE_HEAT_CYCLES (5) +#define SYNC_PATTERN 3 int main() { + /* + * Hardware configuration: + * 1) Collective Operation opcode -> LSBAND + * 2) Nodes taking part to the transactions -> COLUMN + */ set_collective_mask(gen_collective_mask(COLUMN)); set_collective_op(LSBAND); + /* + * Only the nodes on the same column of the DESTINATION_HART_ID node are taking part to the sync. + */ if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)){ printf("Synchronizing...\n"); - // Execute synchronization multiple times to pre-heat the cache + /* + * Execute synchronization multiple times to pre-heat the cache + */ for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { // Data to be reduced (LsbAND) sentinel_start(); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = SYNC_PATTERN; magia_fence(); sentinel_end(); } } - + /* + * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. + */ if(get_hartid() == DESTINATION_HART_ID){ - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != 3) {}; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != SYNC_PATTERN) {}; printf("TEST PASSED\n"); } diff --git a/sw/tests/collectives/narrow_sync_mesh_mm.c b/sw/tests/collectives/narrow_sync_mesh_mm.c index 28ccbd9c..9cee278d 100644 --- a/sw/tests/collectives/narrow_sync_mesh_mm.c +++ b/sw/tests/collectives/narrow_sync_mesh_mm.c @@ -25,23 +25,33 @@ #define MEM_OFFSET (0x1000) #define DESTINATION_HART_ID 0 #define CACHE_HEAT_CYCLES (5) +#define SYNC_PATTERN 3 int main() { + /* + * Hardware configuration: + * 1) Collective Operation opcode -> LSBAND + * 2) Nodes taking part to the transactions -> ALL + */ set_collective_mask(gen_collective_mask(ALL)); set_collective_op(LSBAND); - // Execute synchronization multiple times to pre-heat the cache + /* + * Execute synchronization multiple times to pre-heat the cache + */ for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { // Data to be reduced (LsbAND) sentinel_start(); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = SYNC_PATTERN; magia_fence(); sentinel_end(); } - + /* + * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. + */ if(get_hartid() == DESTINATION_HART_ID){ - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != 3) {}; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != SYNC_PATTERN) {}; printf("TEST PASSED\n"); } diff --git a/sw/tests/collectives/narrow_sync_row_mm.c b/sw/tests/collectives/narrow_sync_row_mm.c index 1cfa9a9f..38a630f3 100644 --- a/sw/tests/collectives/narrow_sync_row_mm.c +++ b/sw/tests/collectives/narrow_sync_row_mm.c @@ -25,26 +25,36 @@ #define MEM_OFFSET (0x1000) #define DESTINATION_HART_ID 0 #define CACHE_HEAT_CYCLES (5) +#define SYNC_PATTERN 3 int main() { + /* + * Hardware configuration: + * 1) Collective Operation opcode -> LSBAND + * 2) Nodes taking part to the transactions -> ROW + */ set_collective_mask(gen_collective_mask(ROW)); set_collective_op(LSBAND); if(GET_Y_ID(get_hartid()) == GET_Y_ID(DESTINATION_HART_ID)){ printf("Synchronizing...\n"); - // Execute synchronization multiple times to pre-heat the cache + /* + * Execute synchronization multiple times to pre-heat the cache + */ for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { // Data to be reduced (LsbAND) sentinel_start(); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = 3; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = SYNC_PATTERN; magia_fence(); sentinel_end(); } } - + /* + * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. + */ if(get_hartid() == DESTINATION_HART_ID){ - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != 3) {}; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != SYNC_PATTERN) {}; printf("TEST PASSED\n"); } diff --git a/sw/tests/collectives/wide_reduce_column_mm.c b/sw/tests/collectives/wide_reduce_column_mm.c deleted file mode 100644 index 30061058..00000000 --- a/sw/tests/collectives/wide_reduce_column_mm.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2023-2024 ETH Zurich and University of Bologna - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * SPDX-License-Identifier: Apache-2.0 - * - * Authors: Luca Balboni - * Based on idma_test.c by Victor Isachi - * - * MAGIA Broadcast test over iDMA using Memory-Mapped Control - */ -#include "magia_utils.h" -#include "magia_tile_utils.h" -#include "idma_mm_utils.h" -#include "magia_coll_utils.h" - -#include "x_input.h" - -#define X_BASE (L1_BASE + 0x00012000) -#define Y_BASE (L1_BASE + 0x00016048) -#define Z_BASE (L2_BASE + 0x00001000) - -#define REDUCE_OFFSET 0x1000 - -#define TRANSFER_SIZE (16) - -#define VERBOSE (11) - -#define END_OF_TEST_OFFSET (0x0) -#define END_PATTERN (0xCCAA) - -#define DESTINATION_HART_ID 0 - -#define MHARTID_OFFSET (0x0001000) - -int main(void) { - - uint32_t dst_addr; - uint32_t src_addr; - uint32_t reduce_addr; - uint32_t len; - uint32_t mask; - uint32_t collective_op; - uint32_t unreduced_data = 100; - uint32_t reduced_data; - - - if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)) { - - printf("Writing data in L2 memory...\n"); - - mmio32(Z_BASE + get_hartid()*MHARTID_OFFSET) = unreduced_data; - - dst_addr = (uint32_t)(X_BASE + get_hartid()*L1_TILE_OFFSET); - src_addr = (uint32_t)(Z_BASE + get_hartid()*MHARTID_OFFSET); - len = (uint32_t)(TRANSFER_SIZE); - reduce_addr = (uint32_t)(X_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET); - - #if VERBOSE > 10 - printf("dst_addr: 0x%8x (X_BASE)\n", dst_addr); - printf("src_addr: 0x%8x (Z_BASE)\n", src_addr); - printf("len: %0d\n", len); - #endif - - printf("iDMA moving data from L2 to L1...\n"); - uint32_t transfer_id_0 = idma_L2ToL1(src_addr, dst_addr, len); - dma_wait(transfer_id_0); - } - - - // ******** INT SUM TEST ******** // - if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)) { - printf("Summing...\n"); - uint32_t transfer_id_1 = collective(dst_addr, reduce_addr, len, gen_collective_mask(COLUMN), INT_ADD); - dma_wait(transfer_id_1); - } - if(get_hartid() == DESTINATION_HART_ID){ - reduced_data = unreduced_data * MESH_X_TILES; - while(*(volatile int*) (X_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; - printf("SUM TEST PASSED\n"); - } - - - // ******** MUL SUM TEST ******** // - if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)) { - printf("Multiplying...\n"); - uint32_t transfer_id_1 = collective(dst_addr, reduce_addr, len, gen_collective_mask(COLUMN), INT_MUL); - dma_wait(transfer_id_1); - } - if(get_hartid() == DESTINATION_HART_ID){ - reduced_data = unreduced_data; - - for(int i = 0; i < (MESH_X_TILES-1); i++) - reduced_data = reduced_data*unreduced_data; - - while(*(volatile int*) (X_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) != (int)reduced_data) {}; - printf("MUL TEST PASSED\n"); - } - - return 0; -} \ No newline at end of file diff --git a/sw/utils/magia_coll_utils.h b/sw/utils/magia_coll_utils.h index cc554ab2..4283ae7e 100644 --- a/sw/utils/magia_coll_utils.h +++ b/sw/utils/magia_coll_utils.h @@ -22,6 +22,7 @@ #define MAGIA_COLL_UTILS_H #include +#include #include "magia_utils.h" #define COLLECTIVE_MASK_OFFSET (COLL_CTRL_BASE + 0x00) @@ -44,7 +45,6 @@ #define INT_MAXS 11 #define INT_MAXU 12 - #define ALL 1 #define COLUMN 2 #define ROW 3 @@ -61,36 +61,14 @@ static inline void set_collective_op(uint32_t collective_op) { // The collective mask is composed of an Y_FIELD starting from MASK_OFFSET, followed by an X_FIELD static inline uint32_t gen_collective_mask(uint32_t geometry) { - if(NUM_HARTS == 4){ - if (geometry == ALL) - return (1 << (MASK_OFFSET)) | (1 << (MASK_OFFSET + 1)); - else if (geometry == COLUMN) - return (1 << (MASK_OFFSET)); - else if (geometry == ROW) - return (1 << (MASK_OFFSET + 1)); - } else if (NUM_HARTS == 16){ - if (geometry == ALL) - return (3 << (MASK_OFFSET)) | (3 << (MASK_OFFSET + 2)); - else if (geometry == COLUMN) - return (3 << (MASK_OFFSET)); - else if (geometry == ROW) - return (3 << (MASK_OFFSET + 2)); - } else if (NUM_HARTS == 64){ - if (geometry == ALL) - return (7 << (MASK_OFFSET)) | (7 << (MASK_OFFSET + 3)); - else if (geometry == COLUMN) - return (7 << (MASK_OFFSET)); - else if (geometry == ROW) - return (7 << (MASK_OFFSET + 3)); - } else if (NUM_HARTS == 256){ - if (geometry == ALL) - return (15 << (MASK_OFFSET)) | (15 << (MASK_OFFSET + 4)); - else if (geometry == COLUMN) - return (15 << (MASK_OFFSET)); - else if (geometry == ROW) - return (15 << (MASK_OFFSET + 4)); - } - + uint8_t shift = log2(NUM_HARTS)/2; + uint8_t mask = sqrt(NUM_HARTS)-1; + if (geometry == ALL) + return (mask << (MASK_OFFSET)) | (mask << (MASK_OFFSET + shift)); + else if (geometry == COLUMN) + return (mask << (MASK_OFFSET)); + else if (geometry == ROW) + return (mask << (MASK_OFFSET + shift)); } static inline void magia_fence() { From 8c4babb41f875a153c5834bf23fbab6af70dabec Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Wed, 19 Aug 2026 18:50:25 +0200 Subject: [PATCH 19/26] Minor Makefile change to simplify idma modules generation --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 3a93f799..42bc705a 100644 --- a/Makefile +++ b/Makefile @@ -417,6 +417,8 @@ update-ips: > ${compile_script} vsim-scripts: + $(BENDER) checkout + $(MAKE) -C $(IDMA_ROOT) idma_hw_all IDMA_ADD_IDS=$(IDMA_ADD_IDS) $(BENDER) script vsim \ --vlog-arg="$(compile_flag)" \ --vcom-arg="-pedanticerrors" \ From 7b3d2d761db7f131be67e066a6bf0d2cb7dc4982 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Fri, 21 Aug 2026 17:19:20 +0200 Subject: [PATCH 20/26] [HW/SIM] Fix to single tile simulation after collectives integration --- .../floonoc_axi_nw_mesh_1x2_config.yml | 8 +-- hw/tile/collective_gen.sv | 1 - hw/tile/magia_tile.sv | 49 ++++++++++--------- target/sim/src/mesh/magia_l2_mem_wrapper.sv | 13 +++-- .../sim/src/tile/floo_axi_nw_mesh_1x2_pkg.sv | 12 ++--- target/sim/src/tile/magia_tile_fixture.sv | 2 +- 6 files changed, 47 insertions(+), 38 deletions(-) diff --git a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_1x2_config.yml b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_1x2_config.yml index 191740d1..5698f7c4 100644 --- a/hw/mesh/noc_configs/floonoc_axi_nw_mesh_1x2_config.yml +++ b/hw/mesh/noc_configs/floonoc_axi_nw_mesh_1x2_config.yml @@ -13,28 +13,28 @@ protocols: data_width: 32 addr_width: 32 id_width: 2 - user_width: 1 + user_width: 36 - name: "narrow_data_slv" type: "narrow" protocol: "AXI4" data_width: 32 addr_width: 32 id_width: 4 - user_width: 1 + user_width: 36 - name: "wide_data_mst" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: 36 - name: "wide_data_slv" type: "wide" protocol: "AXI4" data_width: 256 addr_width: 32 id_width: 2 - user_width: 1 + user_width: 36 endpoints: - name: "magia_tile" diff --git a/hw/tile/collective_gen.sv b/hw/tile/collective_gen.sv index 8a88af31..2e777d34 100644 --- a/hw/tile/collective_gen.sv +++ b/hw/tile/collective_gen.sv @@ -23,7 +23,6 @@ */ module collective_gen - import magia_noc_pkg::*; ( input clk_i, input rst_ni, diff --git a/hw/tile/magia_tile.sv b/hw/tile/magia_tile.sv index 5aa94fe8..b2103258 100644 --- a/hw/tile/magia_tile.sv +++ b/hw/tile/magia_tile.sv @@ -1661,13 +1661,13 @@ module magia_tile /** FlooNoC Modules Beginning **/ /*******************************************************/ - red_wide_req_t offload_wide_req; - red_wide_rsp_t offload_wide_rsp; +red_wide_req_t offload_wide_req; +red_wide_rsp_t offload_wide_rsp; - red_narrow_req_t offload_narrow_req; - red_narrow_rsp_t offload_narrow_rsp; +red_narrow_req_t offload_narrow_req; +red_narrow_rsp_t offload_narrow_rsp; - logic[63:0] narrow_alu_result; +logic[63:0] narrow_alu_result; floo_reduction_alu i_narrow_floo_alu ( .clk_i(sys_clk), @@ -1686,23 +1686,23 @@ floo_reduction_alu i_narrow_floo_alu ( assign offload_narrow_rsp.rsp.result = narrow_alu_result[31:0]; floo_nw_router #( - .AxiCfgN ( AxiCfgN ), - .AxiCfgW ( AxiCfgW ), - .RouteAlgo ( XYRouting ), - .NumRoutes ( 5 ), - .NumInputs ( 5 ), - .NumOutputs ( 5 ), - .InFifoDepth ( 2 ), - .OutFifoDepth ( 2 ), - .NoLoopback ( 1'b0 ), - .CollectiveCfg ( RouteCfg.CollectiveCfg ), - .id_t ( id_t ), - .hdr_t ( hdr_t ), - .floo_req_t ( floo_req_t ), - .floo_rsp_t ( floo_rsp_t ), - .floo_wide_t ( floo_wide_t ), - .red_wide_req_t ( red_wide_req_t ), - .red_wide_rsp_t ( red_wide_rsp_t ), + .AxiCfgN ( AxiCfgN ), + .AxiCfgW ( AxiCfgW ), + .RouteAlgo ( XYRouting ), + .NumRoutes ( 5 ), + .NumInputs ( 5 ), + .NumOutputs ( 5 ), + .InFifoDepth ( 2 ), + .OutFifoDepth ( 2 ), + .NoLoopback ( 1'b0 ), + .CollectiveCfg ( RouteCfg.CollectiveCfg ), + .id_t ( id_t ), + .hdr_t ( hdr_t ), + .floo_req_t ( floo_req_t ), + .floo_rsp_t ( floo_rsp_t ), + .floo_wide_t ( floo_wide_t ), + .red_wide_req_t ( red_wide_req_t ), + .red_wide_rsp_t ( red_wide_rsp_t ), .red_narrow_req_t ( red_narrow_req_t ), .red_narrow_rsp_t ( red_narrow_rsp_t ) ) i_magia_tile_router ( @@ -1775,10 +1775,15 @@ assign offload_narrow_rsp.rsp.result = narrow_alu_result[31:0]; .id_t ( id_t ), .rob_idx_t ( rob_idx_t ), .hdr_t ( hdr_t ), +`ifndef TARGET_STANDALONE_TILE .sam_rule_t ( collective_sam_rule_t ), .sam_idx_t ( collective_idx_t ), .mask_sel_t ( collective_mask_sel_t ), .Sam ( CollectiveSam ), +`else + .sam_rule_t ( sam_rule_t ), + .Sam ( Sam ), +`endif .user_wide_struct_t ( axi_wide_data_slv_user_t ), .user_narrow_struct_t ( axi_narrow_data_slv_user_t ), .axi_narrow_in_req_t ( axi_narrow_data_slv_req_t ), diff --git a/target/sim/src/mesh/magia_l2_mem_wrapper.sv b/target/sim/src/mesh/magia_l2_mem_wrapper.sv index bb3e546a..04df08f4 100644 --- a/target/sim/src/mesh/magia_l2_mem_wrapper.sv +++ b/target/sim/src/mesh/magia_l2_mem_wrapper.sv @@ -104,10 +104,15 @@ module magia_l2_mem_wrapper .id_t ( id_t ), .rob_idx_t ( rob_idx_t ), .hdr_t ( hdr_t ), - .sam_rule_t ( collective_sam_rule_t ), - .sam_idx_t ( collective_idx_t ), - .mask_sel_t ( collective_mask_sel_t ), - .Sam ( CollectiveSam ), +`ifndef TARGET_STANDALONE_TILE + .sam_rule_t ( collective_sam_rule_t ), + .sam_idx_t ( collective_idx_t ), + .mask_sel_t ( collective_mask_sel_t ), + .Sam ( CollectiveSam ), +`else + .sam_rule_t ( sam_rule_t ), + .Sam ( Sam ), +`endif .axi_narrow_in_req_t ( axi_narrow_data_slv_req_t ), .axi_narrow_in_rsp_t ( axi_narrow_data_slv_rsp_t ), .axi_narrow_out_req_t ( axi_narrow_data_mst_req_t ), diff --git a/target/sim/src/tile/floo_axi_nw_mesh_1x2_pkg.sv b/target/sim/src/tile/floo_axi_nw_mesh_1x2_pkg.sv index 3e8c9ee1..87401281 100644 --- a/target/sim/src/tile/floo_axi_nw_mesh_1x2_pkg.sv +++ b/target/sim/src/tile/floo_axi_nw_mesh_1x2_pkg.sv @@ -74,7 +74,7 @@ localparam sam_rule_t[SamNumRules-1:0] Sam = '{ typedef logic[31:0] axi_narrow_data_mst_data_t; typedef logic[3:0] axi_narrow_data_mst_strb_t; typedef logic[2:0] axi_narrow_data_mst_id_t; -typedef logic[0:0] axi_narrow_data_mst_user_t; +typedef logic[35:0] axi_narrow_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_mst, axi_narrow_data_mst_req_t, axi_narrow_data_mst_rsp_t, axi_narrow_data_mst_addr_t, axi_narrow_data_mst_id_t, axi_narrow_data_mst_data_t, axi_narrow_data_mst_strb_t, axi_narrow_data_mst_user_t) @@ -82,7 +82,7 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; typedef logic[31:0] axi_narrow_data_slv_data_t; typedef logic[3:0] axi_narrow_data_slv_strb_t; typedef logic[5:0] axi_narrow_data_slv_id_t; -typedef logic[0:0] axi_narrow_data_slv_user_t; +typedef logic[35:0] axi_narrow_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_narrow_data_slv, axi_narrow_data_slv_req_t, axi_narrow_data_slv_rsp_t, axi_narrow_data_slv_addr_t, axi_narrow_data_slv_id_t, axi_narrow_data_slv_data_t, axi_narrow_data_slv_strb_t, axi_narrow_data_slv_user_t) @@ -90,7 +90,7 @@ typedef logic[0:0] axi_narrow_data_slv_user_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; typedef logic[2:0] axi_wide_data_mst_id_t; -typedef logic[0:0] axi_wide_data_mst_user_t; +typedef logic[35:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) @@ -98,7 +98,7 @@ typedef logic[0:0] axi_wide_data_mst_user_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; typedef logic[2:0] axi_wide_data_slv_id_t; -typedef logic[0:0] axi_wide_data_slv_user_t; +typedef logic[35:0] axi_wide_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_slv, axi_wide_data_slv_req_t, axi_wide_data_slv_rsp_t, axi_wide_data_slv_addr_t, axi_wide_data_slv_id_t, axi_wide_data_slv_data_t, axi_wide_data_slv_strb_t, axi_wide_data_slv_user_t) @@ -108,12 +108,12 @@ typedef logic[0:0] axi_wide_data_slv_user_t; DataWidth: 32, InIdWidth: 6, OutIdWidth: 3, - UserWidth: 1}; + UserWidth: 36}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, InIdWidth: 3, OutIdWidth: 3, - UserWidth: 1}; + UserWidth: 36}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) diff --git a/target/sim/src/tile/magia_tile_fixture.sv b/target/sim/src/tile/magia_tile_fixture.sv index 5c0ec91b..2520ea30 100644 --- a/target/sim/src/tile/magia_tile_fixture.sv +++ b/target/sim/src/tile/magia_tile_fixture.sv @@ -142,7 +142,7 @@ module magia_tile_fixture; .noc_west_rsp_i ( noc_west_rsp_i ), .noc_west_wide_o ( noc_west_wide_o ), - .x_id_i ( 0 ), + .x_id_i ( 1 ), .y_id_i ( 0 ), .ht_fsync_if_o ( ht_fsync_if_o[0] ), From e14d6de15acdc93531bc48cc662dad903c5961ec Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Fri, 21 Aug 2026 17:28:30 +0200 Subject: [PATCH 21/26] [SW] Minor changes to collective tests --- ...rrow_broadcast_mm.c => narrow_broadcast.c} | 17 +++++++--- ..._column_mm.c => narrow_multicast_column.c} | 24 ++++++++----- ...ticast_row_mm.c => narrow_multicast_row.c} | 25 +++++++++----- ...uce_column_mm.c => narrow_reduce_column.c} | 18 ++++++++-- ..._reduce_mesh_mm.c => narrow_reduce_mesh.c} | 1 - ...ow_reduce_row_mm.c => narrow_reduce_row.c} | 16 ++++++++- ..._sync_column_mm.c => narrow_sync_column.c} | 0 ...rrow_sync_mesh_mm.c => narrow_sync_mesh.c} | 0 ...narrow_sync_row_mm.c => narrow_sync_row.c} | 0 .../{wide_broadcast_mm.c => wide_broadcast.c} | 28 +++++++-------- ...st_column_mm.c => wide_multicast_column.c} | 30 +++++++--------- ...ulticast_row_mm.c => wide_multicast_row.c} | 34 ++++++++----------- sw/utils/magia_coll_utils.h | 2 +- 13 files changed, 117 insertions(+), 78 deletions(-) rename sw/tests/collectives/{narrow_broadcast_mm.c => narrow_broadcast.c} (78%) rename sw/tests/collectives/{narrow_multicast_column_mm.c => narrow_multicast_column.c} (72%) rename sw/tests/collectives/{narrow_multicast_row_mm.c => narrow_multicast_row.c} (72%) rename sw/tests/collectives/{narrow_reduce_column_mm.c => narrow_reduce_column.c} (82%) rename sw/tests/collectives/{narrow_reduce_mesh_mm.c => narrow_reduce_mesh.c} (99%) rename sw/tests/collectives/{narrow_reduce_row_mm.c => narrow_reduce_row.c} (86%) rename sw/tests/collectives/{narrow_sync_column_mm.c => narrow_sync_column.c} (100%) rename sw/tests/collectives/{narrow_sync_mesh_mm.c => narrow_sync_mesh.c} (100%) rename sw/tests/collectives/{narrow_sync_row_mm.c => narrow_sync_row.c} (100%) rename sw/tests/collectives/{wide_broadcast_mm.c => wide_broadcast.c} (81%) rename sw/tests/collectives/{wide_multicast_column_mm.c => wide_multicast_column.c} (77%) rename sw/tests/collectives/{wide_multicast_row_mm.c => wide_multicast_row.c} (77%) diff --git a/sw/tests/collectives/narrow_broadcast_mm.c b/sw/tests/collectives/narrow_broadcast.c similarity index 78% rename from sw/tests/collectives/narrow_broadcast_mm.c rename to sw/tests/collectives/narrow_broadcast.c index 508d0957..76087c2c 100644 --- a/sw/tests/collectives/narrow_broadcast_mm.c +++ b/sw/tests/collectives/narrow_broadcast.c @@ -31,7 +31,11 @@ int main() { - // Before the hardware can correctly process a collective operation, two registers (collective_mask, collective_op) must be configured + /* + * Hardware configuration: + * 1) Collective Operation opcode -> MULTICAST + * 2) Nodes taking part to the transactions -> ALL + */ set_collective_mask(gen_collective_mask(ALL)); set_collective_op(MULTICAST); @@ -39,18 +43,21 @@ int main() { printf("Source of the broadcast\n"); - // The source tile broadcast a single 32-bit word - // COLLECTIVE_ADDR_OFFSET tells the hardware that this 32-bit word should be treated as part of a collective operation + /* + * The source tile broadcast a single 32-bit word. + * COLLECTIVE_ADDR_OFFSET tells the hardware that this 32-bit word should be treated as part of a collective operation. + */ mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) = BROADCAST_WORD; } else { printf("Destination of the broadcast\n"); - // The destination tile waits the reception of the broadcast word + /* + * The destination tile waits the reception of the broadcast word. + */ while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != BROADCAST_WORD) {}; - // The broadcast word is successfully received printf("TEST PASSED\n"); } diff --git a/sw/tests/collectives/narrow_multicast_column_mm.c b/sw/tests/collectives/narrow_multicast_column.c similarity index 72% rename from sw/tests/collectives/narrow_multicast_column_mm.c rename to sw/tests/collectives/narrow_multicast_column.c index 68afa657..5446c841 100644 --- a/sw/tests/collectives/narrow_multicast_column_mm.c +++ b/sw/tests/collectives/narrow_multicast_column.c @@ -31,7 +31,11 @@ int main() { - // Before the hardware can correctly process a collective operation, two registers (collective_mask, collective_op) must be configured + /* + * Hardware configuration: + * 1) Collective Operation opcode -> MULTICAST + * 2) Nodes taking part to the transactions -> COLUMN + */ set_collective_mask(gen_collective_mask(COLUMN)); set_collective_op(MULTICAST); @@ -39,20 +43,24 @@ int main() { printf("Source of the broadcast\n"); - // The source tile multicast a single 32-bit word - // COLLECTIVE_ADDR_OFFSET tells the hardware that this 32-bit word should be treated as part of a collective operation + /* + * The source tile broadcast a single 32-bit word. + * COLLECTIVE_ADDR_OFFSET tells the hardware that this 32-bit word should be treated as part of a collective operation. + */ mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) = BROADCAST_WORD; - } else { + /* + * Only the tiles that have the same X coordinate as the source tile participate in the collective operation + */ + } else if(GET_X_ID(get_hartid()) == GET_X_ID(SOURCE_HART_ID)){ - // Only the tiles that have the same X coordinate as the source tile participate in the collective operation - if(GET_X_ID(get_hartid()) == GET_X_ID(SOURCE_HART_ID)){ printf("Destination of the multicast\n"); - // The destination tile waits the reception of the broadcast word + /* + * The destination tile waits the reception of the broadcast word + */ while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != BROADCAST_WORD) {}; - // The broadcast word is successfully received printf("TEST PASSED\n"); } } diff --git a/sw/tests/collectives/narrow_multicast_row_mm.c b/sw/tests/collectives/narrow_multicast_row.c similarity index 72% rename from sw/tests/collectives/narrow_multicast_row_mm.c rename to sw/tests/collectives/narrow_multicast_row.c index 1532cf89..3aa43a4d 100644 --- a/sw/tests/collectives/narrow_multicast_row_mm.c +++ b/sw/tests/collectives/narrow_multicast_row.c @@ -31,7 +31,11 @@ int main() { - // Before the hardware can correctly process a collective operation, two registers (collective_mask, collective_op) must be configured + /* + * Hardware configuration: + * 1) Collective Operation opcode -> MULTICAST + * 2) Nodes taking part to the transactions -> ALL + */ set_collective_mask(gen_collective_mask(ROW)); set_collective_op(MULTICAST); @@ -39,20 +43,23 @@ int main() { printf("Source of the broadcast\n"); - // The source tile multicast a single 32-bit word - // COLLECTIVE_ADDR_OFFSET tells the hardware that this 32-bit word should be treated as part of a collective operation + /* + * The source tile broadcast a single 32-bit word. + * COLLECTIVE_ADDR_OFFSET tells the hardware that this 32-bit word should be treated as part of a collective operation. + */ mmio32(COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + MEM_OFFSET) = BROADCAST_WORD; - } else { - - // Only the tiles that have the same Y coordinate as the source tile participate in the collective operation - if(GET_Y_ID(get_hartid()) == GET_Y_ID(SOURCE_HART_ID)){ + /* + * Only the tiles that have the same Y coordinate as the source tile participate in the collective operation + */ + } else if(GET_Y_ID(get_hartid()) == GET_Y_ID(SOURCE_HART_ID)){ printf("Destination of the multicast\n"); - // The destination tile waits the reception of the broadcast word + /* + * The destination tile waits the reception of the broadcast word + */ while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != BROADCAST_WORD) {}; - // The broadcast word is successfully received printf("TEST PASSED\n"); } } diff --git a/sw/tests/collectives/narrow_reduce_column_mm.c b/sw/tests/collectives/narrow_reduce_column.c similarity index 82% rename from sw/tests/collectives/narrow_reduce_column_mm.c rename to sw/tests/collectives/narrow_reduce_column.c index 2a505a54..9693d092 100644 --- a/sw/tests/collectives/narrow_reduce_column_mm.c +++ b/sw/tests/collectives/narrow_reduce_column.c @@ -24,8 +24,10 @@ #include "magia_coll_utils.h" #define REDUCE_OFFSET (0x1000) +#define SYNC_OFFSET (0x2000) + #define DESTINATION_HART_ID 0 -#define CACHE_HEAT_CYCLES (5) +#define SYNC_PATTERN 3 int main() { @@ -48,7 +50,7 @@ int main() { */ if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)){ printf("Summing...\n"); - mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + REDUCE_OFFSET) = unreduced_data; } /* @@ -58,11 +60,23 @@ int main() { /* * Compute the expected reduction result and check it against the final result. */ + printf("Waiting data...\n"); reduced_data = unreduced_data * MESH_X_TILES; while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + REDUCE_OFFSET) != reduced_data) {}; printf("SUM TEST PASSED | RESULT 0x%x\n", reduced_data); } + // ************************** BARRIER ***************************** // + /* + * To avoid overlapping the SUM and MUL test, we use a barrier. + */ + if(GET_X_ID(get_hartid()) == GET_X_ID(DESTINATION_HART_ID)){ + printf("Barrier...\n"); + set_collective_mask(gen_collective_mask(COLUMN)); + set_collective_op(LSBAND); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; + } + // ************************* INT MUL TEST ********************** // unreduced_data = 2; /* diff --git a/sw/tests/collectives/narrow_reduce_mesh_mm.c b/sw/tests/collectives/narrow_reduce_mesh.c similarity index 99% rename from sw/tests/collectives/narrow_reduce_mesh_mm.c rename to sw/tests/collectives/narrow_reduce_mesh.c index aca71225..6a2ddec4 100644 --- a/sw/tests/collectives/narrow_reduce_mesh_mm.c +++ b/sw/tests/collectives/narrow_reduce_mesh.c @@ -34,7 +34,6 @@ #define SYNC_OFFSET (0x2000) #define DESTINATION_HART_ID 0 -#define CACHE_HEAT_CYCLES (5) #define SYNC_PATTERN 3 diff --git a/sw/tests/collectives/narrow_reduce_row_mm.c b/sw/tests/collectives/narrow_reduce_row.c similarity index 86% rename from sw/tests/collectives/narrow_reduce_row_mm.c rename to sw/tests/collectives/narrow_reduce_row.c index bab0ec6f..18a925ab 100644 --- a/sw/tests/collectives/narrow_reduce_row_mm.c +++ b/sw/tests/collectives/narrow_reduce_row.c @@ -24,8 +24,10 @@ #include "magia_coll_utils.h" #define REDUCE_OFFSET (0x1000) +#define SYNC_OFFSET (0x2000) + #define DESTINATION_HART_ID 0 -#define CACHE_HEAT_CYCLES (5) +#define SYNC_PATTERN 3 int main() { @@ -64,6 +66,18 @@ int main() { } + // ************************** BARRIER ***************************** // + /* + * To avoid overlapping the SUM and MUL test, we use a barrier. + */ + if(GET_Y_ID(get_hartid()) == GET_Y_ID(DESTINATION_HART_ID)){ + printf("Barrier...\n"); + set_collective_mask(gen_collective_mask(ROW)); + set_collective_op(LSBAND); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; + } + + // ************************* INT MUL TEST ********************** // unreduced_data = 2; /* diff --git a/sw/tests/collectives/narrow_sync_column_mm.c b/sw/tests/collectives/narrow_sync_column.c similarity index 100% rename from sw/tests/collectives/narrow_sync_column_mm.c rename to sw/tests/collectives/narrow_sync_column.c diff --git a/sw/tests/collectives/narrow_sync_mesh_mm.c b/sw/tests/collectives/narrow_sync_mesh.c similarity index 100% rename from sw/tests/collectives/narrow_sync_mesh_mm.c rename to sw/tests/collectives/narrow_sync_mesh.c diff --git a/sw/tests/collectives/narrow_sync_row_mm.c b/sw/tests/collectives/narrow_sync_row.c similarity index 100% rename from sw/tests/collectives/narrow_sync_row_mm.c rename to sw/tests/collectives/narrow_sync_row.c diff --git a/sw/tests/collectives/wide_broadcast_mm.c b/sw/tests/collectives/wide_broadcast.c similarity index 81% rename from sw/tests/collectives/wide_broadcast_mm.c rename to sw/tests/collectives/wide_broadcast.c index 58abb7d1..dcd58b7e 100644 --- a/sw/tests/collectives/wide_broadcast_mm.c +++ b/sw/tests/collectives/wide_broadcast.c @@ -30,13 +30,13 @@ #define Y_BASE (L1_BASE + 0x00016048) #define Z_BASE (L2_BASE + 0x00001000) -#define M_SIZE (16) -#define N_SIZE (16) +#define M_SIZE (32) +#define N_SIZE (32) #define VERBOSE (0) -#define END_OF_TEST_OFFSET (0x0) -#define END_PATTERN (0xCCAA) +#define SYNC_OFFSET (0x2000) +#define SYNC_PATTERN 3 #define SOURCE_HART_ID 3 @@ -81,19 +81,17 @@ int main(void) { // Use polling to wait for completion dma_wait(transfer_id_1); + } + + printf("Barrier...\n"); + set_collective_mask(gen_collective_mask(ALL)); + set_collective_op(LSBAND); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + SOURCE_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; - // Inform all the cores about the newly arrived data - printf("Sending end of test signal...\n"); - set_collective_mask(gen_collective_mask(ALL)); - set_collective_op(MULTICAST); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; - - } else { - - printf("Destination of the broadcast...\n"); - // Polling on the end_of_test address offset - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + if(get_hartid() != SOURCE_HART_ID) { + printf("Checking data...\n"); + uint16_t detected_l1, detected_l2, expected; unsigned int num_errors = 0; for(int i = 0; i < M_SIZE*N_SIZE; i++){ diff --git a/sw/tests/collectives/wide_multicast_column_mm.c b/sw/tests/collectives/wide_multicast_column.c similarity index 77% rename from sw/tests/collectives/wide_multicast_column_mm.c rename to sw/tests/collectives/wide_multicast_column.c index 473167b5..6c7f404a 100644 --- a/sw/tests/collectives/wide_multicast_column_mm.c +++ b/sw/tests/collectives/wide_multicast_column.c @@ -14,10 +14,8 @@ * limitations under the License. * SPDX-License-Identifier: Apache-2.0 * - * Authors: Luca Balboni - * Based on idma_test.c by Victor Isachi * - * MAGIA Columns multicast test over iDMA using Memory-Mapped Control + * MAGIA Column multicast test over iDMA using Memory-Mapped Control */ #include "magia_utils.h" #include "magia_tile_utils.h" @@ -30,13 +28,13 @@ #define Y_BASE (L1_BASE + 0x00016048) #define Z_BASE (L2_BASE + 0x00001000) -#define M_SIZE (16) -#define N_SIZE (16) +#define M_SIZE (32) +#define N_SIZE (32) #define VERBOSE (0) -#define END_OF_TEST_OFFSET (0x0) -#define END_PATTERN (0xCCAA) +#define SYNC_OFFSET (0x2000) +#define SYNC_PATTERN 3 #define SOURCE_HART_ID 3 @@ -81,20 +79,18 @@ int main(void) { // Use polling to wait for completion dma_wait(transfer_id_1); + } - // Inform all the cores about the newly arrived data - printf("Sending end of test signal...\n"); + if(GET_X_ID(get_hartid()) == GET_X_ID(SOURCE_HART_ID)){ + + printf("Barrier...\n"); set_collective_mask(gen_collective_mask(COLUMN)); - set_collective_op(MULTICAST); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; + set_collective_op(LSBAND); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + SOURCE_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; + if(get_hartid() != SOURCE_HART_ID) { - } else { - if(GET_X_ID(get_hartid()) == GET_X_ID(SOURCE_HART_ID)){ - - printf("Destination of the multicast...\n"); - // Polling on the end_of_test address offset - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + printf("Checking data...\n"); uint16_t detected_l1, detected_l2, expected; unsigned int num_errors = 0; diff --git a/sw/tests/collectives/wide_multicast_row_mm.c b/sw/tests/collectives/wide_multicast_row.c similarity index 77% rename from sw/tests/collectives/wide_multicast_row_mm.c rename to sw/tests/collectives/wide_multicast_row.c index ce1ec29a..c0534496 100644 --- a/sw/tests/collectives/wide_multicast_row_mm.c +++ b/sw/tests/collectives/wide_multicast_row.c @@ -14,10 +14,8 @@ * limitations under the License. * SPDX-License-Identifier: Apache-2.0 * - * Authors: Luca Balboni - * Based on idma_test.c by Victor Isachi - * - * MAGIA Broscast test over iDMA using Memory-Mapped Control + * + * MAGIA Column multicast test over iDMA using Memory-Mapped Control */ #include "magia_utils.h" #include "magia_tile_utils.h" @@ -30,13 +28,13 @@ #define Y_BASE (L1_BASE + 0x00016048) #define Z_BASE (L2_BASE + 0x00001000) -#define M_SIZE (16) -#define N_SIZE (16) +#define M_SIZE (32) +#define N_SIZE (32) #define VERBOSE (0) -#define END_OF_TEST_OFFSET (0x0) -#define END_PATTERN (0xCCAA) +#define SYNC_OFFSET (0x2000) +#define SYNC_PATTERN 3 #define SOURCE_HART_ID 3 @@ -81,20 +79,18 @@ int main(void) { // Use polling to wait for completion dma_wait(transfer_id_1); + } - // Inform all the cores about the newly arrived data - printf("Sending end of test signal...\n"); - set_collective_mask(gen_collective_mask(ROW)); - set_collective_op(MULTICAST); - *(volatile int*) (COLLECTIVE_ADDR_OFFSET + get_hartid()*L1_TILE_OFFSET + L1_BASE + END_OF_TEST_OFFSET) = (int) END_PATTERN; + if(GET_Y_ID(get_hartid()) == GET_Y_ID(SOURCE_HART_ID)){ + printf("Barrier...\n"); + set_collective_mask(gen_collective_mask(ROW)); + set_collective_op(LSBAND); + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + SOURCE_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; - } else { - if(GET_Y_ID(get_hartid()) == GET_Y_ID(SOURCE_HART_ID)){ - - printf("Destination of the multicast...\n"); - // Polling on the end_of_test address offset - while(*(volatile int*) (L1_BASE + get_hartid()*L1_TILE_OFFSET + END_OF_TEST_OFFSET) != (int) END_PATTERN) {}; + if(get_hartid() != SOURCE_HART_ID) { + + printf("Checking data...\n"); uint16_t detected_l1, detected_l2, expected; unsigned int num_errors = 0; diff --git a/sw/utils/magia_coll_utils.h b/sw/utils/magia_coll_utils.h index 4283ae7e..4b796359 100644 --- a/sw/utils/magia_coll_utils.h +++ b/sw/utils/magia_coll_utils.h @@ -37,7 +37,7 @@ #define FP_ADD 3 #define FP_MUL 4 #define FP_MIN 5 -#define FP_MIN 6 +#define FP_MAX 6 #define INT_ADD 7 #define INT_MUL 8 #define INT_MINS 9 From 20a640490d1086d15028fe14ddb110c04f0a9438 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Tue, 1 Sep 2026 11:41:55 +0200 Subject: [PATCH 22/26] Update idma in Bender.yml and Bender.lock --- Bender.lock | 2 +- Bender.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Bender.lock b/Bender.lock index aebed946..f52518bc 100644 --- a/Bender.lock +++ b/Bender.lock @@ -166,7 +166,7 @@ packages: dependencies: - tech_cells_generic idma: - revision: 2d70db556da8aefa0af9d87a04e5d03b144a8c81 + revision: 26ac2cd1c535851b14c9c508762203a180961cad version: 0.6.4 source: Git: https://github.com/FondazioneChipsIT/iDMA.git diff --git a/Bender.yml b/Bender.yml index 7f348edb..22d312d1 100644 --- a/Bender.yml +++ b/Bender.yml @@ -28,7 +28,7 @@ dependencies: cv32e40x : { git: "https://github.com/pulp-platform/cv32e40x.git" , rev: a90101211048ba1a16cedbe4db963ab6e12569d7 } # branch: vi/redmule_scaleup cv32e40p : { git: "https://github.com/FondazioneChipsIT/cv32e40p.git" , rev: 65c6961d8acf9698e09c976228c43692d700e697 } # branch: ng/pulp_cluster spatz : { git: "https://github.com/pulp-platform/spatz.git" , rev: 9380883fd36a4794d7f31e2c22e3fed3202aeb81 } # branch: lb/magia-spatz_cc - idma : { git: "https://github.com/FondazioneChipsIT/iDMA.git" , rev: 9c5775af4b71140d83028da5f5c5c0a1a6d42eb0 } # branch: cc/mcast_magia + idma : { git: "https://github.com/FondazioneChipsIT/iDMA.git" , rev: 26ac2cd1c535851b14c9c508762203a180961cad } # branch: cc/mcast_magia hwpe-stream : { git: "https://github.com/pulp-platform/hwpe-stream.git" , version: 1.6 } hwpe-ctrl : { git: "https://github.com/pulp-platform/hwpe-ctrl.git" , version: 3.1.1 } hci : { git: "https://github.com/pulp-platform/hci.git" , version: 2.3.0 } From 6354b2cc6730d514235e9b6325ca4286837e55c4 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Tue, 1 Sep 2026 11:42:27 +0200 Subject: [PATCH 23/26] Minor changes: renamed test folder, small fixes, restored noc address ranges for verilator --- Bender.yml | 5 ++- hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv | 4 +-- hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv | 12 +++---- hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv | 4 +-- hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv | 4 +-- hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv | 4 +-- hw/mesh/noc/magia_noc_pkg.sv | 33 ------------------- hw/tile/magia_tile.sv | 2 +- .../narrow_broadcast.c | 1 - .../narrow_multicast_column.c | 4 +-- .../narrow_multicast_row.c | 4 +-- .../narrow_reduce_column.c | 9 ++--- .../narrow_reduce_mesh.c | 8 ++--- .../narrow_reduce_row.c | 9 ++--- .../narrow_sync_column.c | 10 +++--- .../narrow_sync_mesh.c | 11 ++++--- .../narrow_sync_row.c | 11 ++++--- .../wide_broadcast.c | 8 ++--- .../wide_multicast_column.c | 8 ++--- .../wide_multicast_row.c | 8 ++--- 20 files changed, 64 insertions(+), 95 deletions(-) rename sw/tests/{collectives => collective_tests}/narrow_broadcast.c (98%) rename sw/tests/{collectives => collective_tests}/narrow_multicast_column.c (98%) rename sw/tests/{collectives => collective_tests}/narrow_multicast_row.c (96%) rename sw/tests/{collectives => collective_tests}/narrow_reduce_column.c (96%) rename sw/tests/{collectives => collective_tests}/narrow_reduce_mesh.c (97%) rename sw/tests/{collectives => collective_tests}/narrow_reduce_row.c (96%) rename sw/tests/{collectives => collective_tests}/narrow_sync_column.c (89%) rename sw/tests/{collectives => collective_tests}/narrow_sync_mesh.c (87%) rename sw/tests/{collectives => collective_tests}/narrow_sync_row.c (88%) rename sw/tests/{collectives => collective_tests}/wide_broadcast.c (96%) rename sw/tests/{collectives => collective_tests}/wide_multicast_column.c (96%) rename sw/tests/{collectives => collective_tests}/wide_multicast_row.c (96%) diff --git a/Bender.yml b/Bender.yml index 22d312d1..c501df89 100644 --- a/Bender.yml +++ b/Bender.yml @@ -165,7 +165,8 @@ sources: - hw/tile/eu_direct_cut.sv - hw/tile/magia_tile_icache_wrap.sv - hw/tile/magia_redmule_wrap.sv - - hw/tile/mcast_gen.sv + - hw/tile/collective_gen.sv + - hw/tile/obi_slave_ctrl_coll.sv - hw/tile/magia_tile.sv - target: all(magia_dv, not(standalone_tile), verilator) @@ -245,6 +246,8 @@ sources: - hw/tile/eu_direct_cut.sv - hw/tile/magia_tile_icache_wrap.sv - hw/tile/magia_redmule_wrap.sv + - hw/tile/collective_gen.sv + - hw/tile/obi_slave_ctrl_coll.sv - hw/tile/magia_tile.sv # MAGIA - hw/mesh/magia.sv diff --git a/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv index e5baa473..30a90c38 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv @@ -607,7 +607,7 @@ typedef struct packed { localparam sam_rule_t[SamNumRules-1:0] Sam = '{ '{ idx: '{x: 0, y: 15, port_id: 0}, start_addr: 32'hfc000000, - end_addr: 32'h100000000},// L215 + end_addr: 32'hffffffff},// L215 '{ idx: '{x: 0, y: 14, port_id: 0}, start_addr: 32'hf8000000, end_addr: 32'hfc000000},// L214 @@ -1449,7 +1449,7 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ mask_x: '{ default: '0}, mask_y: '{ default: '0}}, start_addr: 32'hfc000000, - end_addr: 32'h100000000},// L215 + end_addr: 32'hffffffff},// L215 '{ idx: '{ id: '{x: 0, y: 14, port_id: 0}, mask_x: '{ default: '0}, mask_y: '{ default: '0}}, diff --git a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv index f2fea898..f1de19cf 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv @@ -75,7 +75,7 @@ typedef struct packed { localparam sam_rule_t[SamNumRules-1:0] Sam = '{ '{ idx: '{x: 0, y: 1, port_id: 0}, start_addr: 32'he0000000, - end_addr: 32'h100000000},// L21 + end_addr: 32'hffffffff},// L21 '{ idx: '{x: 0, y: 0, port_id: 0}, start_addr: 32'hc0000000, end_addr: 32'he0000000},// L20 @@ -83,11 +83,11 @@ localparam sam_rule_t[SamNumRules-1:0] Sam = '{ start_addr: 32'h00300000, end_addr: 32'h00400000},// MagiaTileX1Y1 '{ idx: '{x: 2, y: 1, port_id: 0}, - start_addr: 32'h00100000, - end_addr: 32'h00200000},// MagiaTileX0Y1 -'{ idx: '{x: 3, y: 0, port_id: 0}, start_addr: 32'h00200000, - end_addr: 32'h00300000},// MagiaTileX1Y0 + end_addr: 32'h00300000},// MagiaTileX0Y1 +'{ idx: '{x: 3, y: 0, port_id: 0}, + start_addr: 32'h00100000, + end_addr: 32'h00200000},// MagiaTileX1Y0 '{ idx: '{x: 2, y: 0, port_id: 0}, start_addr: 32'h00000000, end_addr: 32'h00100000} // MagiaTileX0Y0 @@ -119,7 +119,7 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ mask_x: '{ default: '0}, mask_y: '{ default: '0}}, start_addr: 32'he0000000, - end_addr: 32'h100000000},// L21 + end_addr: 32'hffffffff},// L21 '{ idx: '{ id: '{x: 0, y: 0, port_id: 0}, mask_x: '{ default: '0}, mask_y: '{ default: '0}}, diff --git a/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv index bb39ab8f..e2428f90 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv @@ -2175,7 +2175,7 @@ typedef struct packed { localparam sam_rule_t[SamNumRules-1:0] Sam = '{ '{ idx: '{x: 0, y: 31, port_id: 0}, start_addr: 32'hfe000000, - end_addr: 32'h100000000},// L231 + end_addr: 32'hffffffff},// L231 '{ idx: '{x: 0, y: 30, port_id: 0}, start_addr: 32'hfc000000, end_addr: 32'hfe000000},// L230 @@ -5369,7 +5369,7 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ mask_x: '{ default: '0}, mask_y: '{ default: '0}}, start_addr: 32'hfe000000, - end_addr: 32'h100000000},// L231 + end_addr: 32'hffffffff},// L231 '{ idx: '{ id: '{x: 0, y: 30, port_id: 0}, mask_x: '{ default: '0}, mask_y: '{ default: '0}}, diff --git a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv index cb58800b..7178f41d 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv @@ -103,7 +103,7 @@ typedef struct packed { localparam sam_rule_t[SamNumRules-1:0] Sam = '{ '{ idx: '{x: 0, y: 3, port_id: 0}, start_addr: 32'hf0000000, - end_addr: 32'h100000000},// L23 + end_addr: 32'hffffffff},// L23 '{ idx: '{x: 0, y: 2, port_id: 0}, start_addr: 32'he0000000, end_addr: 32'hf0000000},// L22 @@ -189,7 +189,7 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ mask_x: '{ default: '0}, mask_y: '{ default: '0}}, start_addr: 32'hf0000000, - end_addr: 32'h100000000},// L23 + end_addr: 32'hffffffff},// L23 '{ idx: '{ id: '{x: 0, y: 2, port_id: 0}, mask_x: '{ default: '0}, mask_y: '{ default: '0}}, diff --git a/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv index 351b0027..8fa7b5b8 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv @@ -207,7 +207,7 @@ typedef struct packed { localparam sam_rule_t[SamNumRules-1:0] Sam = '{ '{ idx: '{x: 0, y: 7, port_id: 0}, start_addr: 32'hf8000000, - end_addr: 32'h100000000},// L27 + end_addr: 32'hffffffff},// L27 '{ idx: '{x: 0, y: 6, port_id: 0}, start_addr: 32'hf0000000, end_addr: 32'hf8000000},// L26 @@ -449,7 +449,7 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ mask_x: '{ default: '0}, mask_y: '{ default: '0}}, start_addr: 32'hf8000000, - end_addr: 32'h100000000},// L27 + end_addr: 32'hffffffff},// L27 '{ idx: '{ id: '{x: 0, y: 6, port_id: 0}, mask_x: '{ default: '0}, mask_y: '{ default: '0}}, diff --git a/hw/mesh/noc/magia_noc_pkg.sv b/hw/mesh/noc/magia_noc_pkg.sv index 9969020b..a28349a9 100644 --- a/hw/mesh/noc/magia_noc_pkg.sv +++ b/hw/mesh/noc/magia_noc_pkg.sv @@ -152,39 +152,6 @@ package magia_noc_pkg; // Actual declaration of RouteCfg localparam route_cfg_t RouteCfg = gen_route_config(N_TILES); -/* - - typedef logic[ADDR_W-1:0] axi_narrow_data_mst_addr_t; - typedef logic[DATA_W-1:0] axi_narrow_data_mst_data_t; - typedef logic[STRB_W-1:0] axi_narrow_data_mst_strb_t; - typedef logic[L2_ID_W-1:0] axi_narrow_data_mst_id_t; - typedef logic[iDMA_UserWidth-1:0] axi_narrow_data_mst_user_t; - - `AXI_TYPEDEF_ALL_CT(axi_narrow_data_mst, axi_narrow_data_mst_req_t, axi_narrow_data_mst_rsp_t, axi_narrow_data_mst_addr_t, axi_narrow_data_mst_id_t, axi_narrow_data_mst_data_t, axi_narrow_data_mst_strb_t, axi_narrow_data_mst_user_t) - - typedef logic[ADDR_W-1:0] axi_narrow_data_slv_addr_t; - typedef logic[DATA_W-1:0] axi_narrow_data_slv_data_t; - typedef logic[STRB_W-1:0] axi_narrow_data_slv_strb_t; - typedef logic[AXI_NOC_ID_W-1:0] axi_narrow_data_slv_id_t; - typedef logic[iDMA_UserWidth-1:0] axi_narrow_data_slv_user_t; - - `AXI_TYPEDEF_ALL_CT(axi_narrow_data_slv, axi_narrow_data_slv_req_t, axi_narrow_data_slv_rsp_t, axi_narrow_data_slv_addr_t, axi_narrow_data_slv_id_t, axi_narrow_data_slv_data_t, axi_narrow_data_slv_strb_t, axi_narrow_data_slv_user_t) - - typedef logic[ADDR_W-1:0] axi_wide_data_mst_addr_t; - typedef logic[WIDE_DATA_W-1:0] axi_wide_data_mst_data_t; - typedef logic[WIDE_STRB_W-1:0] axi_wide_data_mst_strb_t; - typedef logic[iDMA_AxiIdWidth-1:0] axi_wide_data_mst_id_t; - typedef logic[iDMA_UserWidth-1:0] axi_wide_data_mst_user_t; - `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) - - typedef logic[ADDR_W-1:0] axi_wide_data_slv_addr_t; - typedef logic[WIDE_DATA_W-1:0] axi_wide_data_slv_data_t; - typedef logic[WIDE_STRB_W-1:0] axi_wide_data_slv_strb_t; - typedef logic[iDMA_AxiIdWidth-1:0] axi_wide_data_slv_id_t; - typedef logic[iDMA_UserWidth-1:0] axi_wide_data_slv_user_t; - `AXI_TYPEDEF_ALL_CT(axi_wide_data_slv, axi_wide_data_slv_req_t, axi_wide_data_slv_rsp_t, axi_wide_data_slv_addr_t, axi_wide_data_slv_id_t, axi_wide_data_slv_data_t, axi_wide_data_slv_strb_t, axi_wide_data_slv_user_t) -*/ - typedef logic[ADDR_W-1:0] axi_narrow_data_mst_addr_t; typedef logic[DATA_W-1:0] axi_narrow_data_mst_data_t; typedef logic[STRB_W-1:0] axi_narrow_data_mst_strb_t; diff --git a/hw/tile/magia_tile.sv b/hw/tile/magia_tile.sv index b2103258..58f9f29e 100644 --- a/hw/tile/magia_tile.sv +++ b/hw/tile/magia_tile.sv @@ -306,7 +306,7 @@ module magia_tile logic[magia_tile_pkg::AUSER_WIDTH-1:0] axi2obi_req_read_auser; logic[magia_pkg::AXI_NOC_U_W-1:0] axi2obi_rsp_b_user; - logic[magia_pkg::AXI_NOC_U_W] axi2obi_rsp_r_user; + logic[magia_pkg::AXI_NOC_U_W-1:0] axi2obi_rsp_r_user; logic idma_clear; // Can be used to manage iDMA clear at top-level logic idma_axi2obi_start; diff --git a/sw/tests/collectives/narrow_broadcast.c b/sw/tests/collective_tests/narrow_broadcast.c similarity index 98% rename from sw/tests/collectives/narrow_broadcast.c rename to sw/tests/collective_tests/narrow_broadcast.c index 76087c2c..8c878534 100644 --- a/sw/tests/collectives/narrow_broadcast.c +++ b/sw/tests/collective_tests/narrow_broadcast.c @@ -21,7 +21,6 @@ * 2) The test passes if all the destination tiles successfully receive the 32-bit word. */ -#include "magia_utils.h" #include "magia_coll_utils.h" #define MEM_OFFSET (0x1000) diff --git a/sw/tests/collectives/narrow_multicast_column.c b/sw/tests/collective_tests/narrow_multicast_column.c similarity index 98% rename from sw/tests/collectives/narrow_multicast_column.c rename to sw/tests/collective_tests/narrow_multicast_column.c index 5446c841..22b39645 100644 --- a/sw/tests/collectives/narrow_multicast_column.c +++ b/sw/tests/collective_tests/narrow_multicast_column.c @@ -21,7 +21,6 @@ * 2) The test passes if all the destination tiles successfully receive the 32-bit word. */ -#include "magia_utils.h" #include "magia_coll_utils.h" #define MEM_OFFSET (0x1000) @@ -62,8 +61,7 @@ int main() { while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != BROADCAST_WORD) {}; printf("TEST PASSED\n"); - } - } + } return 0; } diff --git a/sw/tests/collectives/narrow_multicast_row.c b/sw/tests/collective_tests/narrow_multicast_row.c similarity index 96% rename from sw/tests/collectives/narrow_multicast_row.c rename to sw/tests/collective_tests/narrow_multicast_row.c index 3aa43a4d..0de2f46a 100644 --- a/sw/tests/collectives/narrow_multicast_row.c +++ b/sw/tests/collective_tests/narrow_multicast_row.c @@ -21,7 +21,6 @@ * 2) The test passes if all the destination tiles successfully receive the 32-bit word. */ -#include "magia_utils.h" #include "magia_coll_utils.h" #define MEM_OFFSET (0x1000) @@ -34,7 +33,7 @@ int main() { /* * Hardware configuration: * 1) Collective Operation opcode -> MULTICAST - * 2) Nodes taking part to the transactions -> ALL + * 2) Nodes taking part to the transactions -> ROW */ set_collective_mask(gen_collective_mask(ROW)); set_collective_op(MULTICAST); @@ -61,7 +60,6 @@ int main() { while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != BROADCAST_WORD) {}; printf("TEST PASSED\n"); - } } return 0; diff --git a/sw/tests/collectives/narrow_reduce_column.c b/sw/tests/collective_tests/narrow_reduce_column.c similarity index 96% rename from sw/tests/collectives/narrow_reduce_column.c rename to sw/tests/collective_tests/narrow_reduce_column.c index 9693d092..e37c9546 100644 --- a/sw/tests/collectives/narrow_reduce_column.c +++ b/sw/tests/collective_tests/narrow_reduce_column.c @@ -20,14 +20,15 @@ * */ -#include "magia_utils.h" #include "magia_coll_utils.h" #define REDUCE_OFFSET (0x1000) -#define SYNC_OFFSET (0x2000) + +#define FLOO_SYNC_OFFSET (0x2000) +#define FLOO_SYNC_PATTERN 3 #define DESTINATION_HART_ID 0 -#define SYNC_PATTERN 3 + int main() { @@ -74,7 +75,7 @@ int main() { printf("Barrier...\n"); set_collective_mask(gen_collective_mask(COLUMN)); set_collective_op(LSBAND); - mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) = FLOO_SYNC_PATTERN; } // ************************* INT MUL TEST ********************** // diff --git a/sw/tests/collectives/narrow_reduce_mesh.c b/sw/tests/collective_tests/narrow_reduce_mesh.c similarity index 97% rename from sw/tests/collectives/narrow_reduce_mesh.c rename to sw/tests/collective_tests/narrow_reduce_mesh.c index 6a2ddec4..9f5fd348 100644 --- a/sw/tests/collectives/narrow_reduce_mesh.c +++ b/sw/tests/collective_tests/narrow_reduce_mesh.c @@ -27,14 +27,14 @@ * 3) Integer Mul Test */ -#include "magia_utils.h" #include "magia_coll_utils.h" #define REDUCE_OFFSET (0x1000) -#define SYNC_OFFSET (0x2000) + +#define FLOO_SYNC_OFFSET (0x2000) +#define FLOO_SYNC_PATTERN 3 #define DESTINATION_HART_ID 0 -#define SYNC_PATTERN 3 int main() { @@ -102,7 +102,7 @@ int main() { printf("Barrier...\n"); set_collective_mask(gen_collective_mask(ALL)); set_collective_op(LSBAND); - mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) = FLOO_SYNC_PATTERN; diff --git a/sw/tests/collectives/narrow_reduce_row.c b/sw/tests/collective_tests/narrow_reduce_row.c similarity index 96% rename from sw/tests/collectives/narrow_reduce_row.c rename to sw/tests/collective_tests/narrow_reduce_row.c index 18a925ab..772fdc39 100644 --- a/sw/tests/collectives/narrow_reduce_row.c +++ b/sw/tests/collective_tests/narrow_reduce_row.c @@ -20,14 +20,15 @@ * */ -#include "magia_utils.h" #include "magia_coll_utils.h" #define REDUCE_OFFSET (0x1000) -#define SYNC_OFFSET (0x2000) + +#define FLOO_SYNC_OFFSET (0x2000) +#define FLOO_SYNC_PATTERN 3 #define DESTINATION_HART_ID 0 -#define SYNC_PATTERN 3 + int main() { @@ -74,7 +75,7 @@ int main() { printf("Barrier...\n"); set_collective_mask(gen_collective_mask(ROW)); set_collective_op(LSBAND); - mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) = FLOO_SYNC_PATTERN; } diff --git a/sw/tests/collectives/narrow_sync_column.c b/sw/tests/collective_tests/narrow_sync_column.c similarity index 89% rename from sw/tests/collectives/narrow_sync_column.c rename to sw/tests/collective_tests/narrow_sync_column.c index 5e5dfe62..f3951160 100644 --- a/sw/tests/collectives/narrow_sync_column.c +++ b/sw/tests/collective_tests/narrow_sync_column.c @@ -20,13 +20,13 @@ * using the built-in FlooNoC collectives */ -#include "magia_utils.h" #include "magia_coll_utils.h" -#define MEM_OFFSET (0x1000) +#define FLOO_SYNC_OFFSET (0x1000) +#define FLOO_SYNC_PATTERN 3 + #define DESTINATION_HART_ID 0 #define CACHE_HEAT_CYCLES (5) -#define SYNC_PATTERN 3 int main() { @@ -49,7 +49,7 @@ int main() { for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { // Data to be reduced (LsbAND) sentinel_start(); - mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = SYNC_PATTERN; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) = FLOO_SYNC_PATTERN; magia_fence(); sentinel_end(); } @@ -58,7 +58,7 @@ int main() { * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. */ if(get_hartid() == DESTINATION_HART_ID){ - while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != SYNC_PATTERN) {}; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) != FLOO_SYNC_PATTERN) {}; printf("TEST PASSED\n"); } diff --git a/sw/tests/collectives/narrow_sync_mesh.c b/sw/tests/collective_tests/narrow_sync_mesh.c similarity index 87% rename from sw/tests/collectives/narrow_sync_mesh.c rename to sw/tests/collective_tests/narrow_sync_mesh.c index 9cee278d..9cffaedb 100644 --- a/sw/tests/collectives/narrow_sync_mesh.c +++ b/sw/tests/collective_tests/narrow_sync_mesh.c @@ -19,13 +19,14 @@ * MAGIA Reduction test over the narrow channel */ -#include "magia_utils.h" #include "magia_coll_utils.h" -#define MEM_OFFSET (0x1000) +#define FLOO_SYNC_OFFSET (0x1000) +#define FLOO_SYNC_PATTERN 3 + #define DESTINATION_HART_ID 0 #define CACHE_HEAT_CYCLES (5) -#define SYNC_PATTERN 3 + int main() { @@ -43,7 +44,7 @@ int main() { for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { // Data to be reduced (LsbAND) sentinel_start(); - mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = SYNC_PATTERN; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) = FLOO_SYNC_PATTERN; magia_fence(); sentinel_end(); } @@ -51,7 +52,7 @@ int main() { * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. */ if(get_hartid() == DESTINATION_HART_ID){ - while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != SYNC_PATTERN) {}; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) != FLOO_SYNC_PATTERN) {}; printf("TEST PASSED\n"); } diff --git a/sw/tests/collectives/narrow_sync_row.c b/sw/tests/collective_tests/narrow_sync_row.c similarity index 88% rename from sw/tests/collectives/narrow_sync_row.c rename to sw/tests/collective_tests/narrow_sync_row.c index 38a630f3..b0892ae4 100644 --- a/sw/tests/collectives/narrow_sync_row.c +++ b/sw/tests/collective_tests/narrow_sync_row.c @@ -19,13 +19,14 @@ * MAGIA Reduction test over the narrow channel */ -#include "magia_utils.h" #include "magia_coll_utils.h" -#define MEM_OFFSET (0x1000) +#define FLOO_SYNC_OFFSET (0x1000) +#define FLOO_SYNC_PATTERN 3 + #define DESTINATION_HART_ID 0 #define CACHE_HEAT_CYCLES (5) -#define SYNC_PATTERN 3 + int main() { @@ -45,7 +46,7 @@ int main() { for (int i = 0; i < CACHE_HEAT_CYCLES; i++) { // Data to be reduced (LsbAND) sentinel_start(); - mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + MEM_OFFSET) = SYNC_PATTERN; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + DESTINATION_HART_ID*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) = FLOO_SYNC_PATTERN; magia_fence(); sentinel_end(); } @@ -54,7 +55,7 @@ int main() { * If the current node is the DESTINATION_HART_ID node, it waits for the final reduced data. */ if(get_hartid() == DESTINATION_HART_ID){ - while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + MEM_OFFSET) != SYNC_PATTERN) {}; + while(mmio32(L1_BASE + get_hartid()*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) != FLOO_SYNC_PATTERN) {}; printf("TEST PASSED\n"); } diff --git a/sw/tests/collectives/wide_broadcast.c b/sw/tests/collective_tests/wide_broadcast.c similarity index 96% rename from sw/tests/collectives/wide_broadcast.c rename to sw/tests/collective_tests/wide_broadcast.c index dcd58b7e..2a72d7fb 100644 --- a/sw/tests/collectives/wide_broadcast.c +++ b/sw/tests/collective_tests/wide_broadcast.c @@ -19,7 +19,7 @@ * * MAGIA Broadcast test over iDMA using Memory-Mapped Control */ -#include "magia_utils.h" + #include "magia_tile_utils.h" #include "idma_mm_utils.h" #include "magia_coll_utils.h" @@ -35,8 +35,8 @@ #define VERBOSE (0) -#define SYNC_OFFSET (0x2000) -#define SYNC_PATTERN 3 +#define FLOO_SYNC_OFFSET (0x2000) +#define FLOO_SYNC_PATTERN 3 #define SOURCE_HART_ID 3 @@ -86,7 +86,7 @@ int main(void) { printf("Barrier...\n"); set_collective_mask(gen_collective_mask(ALL)); set_collective_op(LSBAND); - mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + SOURCE_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + SOURCE_HART_ID*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) = FLOO_SYNC_PATTERN; if(get_hartid() != SOURCE_HART_ID) { diff --git a/sw/tests/collectives/wide_multicast_column.c b/sw/tests/collective_tests/wide_multicast_column.c similarity index 96% rename from sw/tests/collectives/wide_multicast_column.c rename to sw/tests/collective_tests/wide_multicast_column.c index 6c7f404a..e97bde50 100644 --- a/sw/tests/collectives/wide_multicast_column.c +++ b/sw/tests/collective_tests/wide_multicast_column.c @@ -17,7 +17,7 @@ * * MAGIA Column multicast test over iDMA using Memory-Mapped Control */ -#include "magia_utils.h" + #include "magia_tile_utils.h" #include "idma_mm_utils.h" #include "magia_coll_utils.h" @@ -33,8 +33,8 @@ #define VERBOSE (0) -#define SYNC_OFFSET (0x2000) -#define SYNC_PATTERN 3 +#define FLOO_SYNC_OFFSET (0x2000) +#define FLOO_SYNC_PATTERN 3 #define SOURCE_HART_ID 3 @@ -86,7 +86,7 @@ int main(void) { printf("Barrier...\n"); set_collective_mask(gen_collective_mask(COLUMN)); set_collective_op(LSBAND); - mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + SOURCE_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + SOURCE_HART_ID*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) = FLOO_SYNC_PATTERN; if(get_hartid() != SOURCE_HART_ID) { diff --git a/sw/tests/collectives/wide_multicast_row.c b/sw/tests/collective_tests/wide_multicast_row.c similarity index 96% rename from sw/tests/collectives/wide_multicast_row.c rename to sw/tests/collective_tests/wide_multicast_row.c index c0534496..377241f2 100644 --- a/sw/tests/collectives/wide_multicast_row.c +++ b/sw/tests/collective_tests/wide_multicast_row.c @@ -17,7 +17,7 @@ * * MAGIA Column multicast test over iDMA using Memory-Mapped Control */ -#include "magia_utils.h" + #include "magia_tile_utils.h" #include "idma_mm_utils.h" #include "magia_coll_utils.h" @@ -33,8 +33,8 @@ #define VERBOSE (0) -#define SYNC_OFFSET (0x2000) -#define SYNC_PATTERN 3 +#define FLOO_SYNC_OFFSET (0x2000) +#define FLOO_SYNC_PATTERN 3 #define SOURCE_HART_ID 3 @@ -86,7 +86,7 @@ int main(void) { printf("Barrier...\n"); set_collective_mask(gen_collective_mask(ROW)); set_collective_op(LSBAND); - mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + SOURCE_HART_ID*L1_TILE_OFFSET + SYNC_OFFSET) = SYNC_PATTERN; + mmio32(COLLECTIVE_ADDR_OFFSET + L1_BASE + SOURCE_HART_ID*L1_TILE_OFFSET + FLOO_SYNC_OFFSET) = FLOO_SYNC_PATTERN; if(get_hartid() != SOURCE_HART_ID) { From 9c233c053354548dcb3c6aae1d92cb49a7334c73 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Mon, 7 Sep 2026 16:09:21 +0200 Subject: [PATCH 24/26] [NOC] The mask fields for collective operations are now reversed for a smoother integration of the row-major ordering --- Bender.lock | 2 +- hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv | 1047 +++--- hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv | 47 +- hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv | 4119 +++++++++++---------- hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv | 89 +- hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv | 279 +- sw/utils/magia_coll_utils.h | 4 +- 7 files changed, 2798 insertions(+), 2789 deletions(-) diff --git a/Bender.lock b/Bender.lock index f52518bc..d31d0f2a 100644 --- a/Bender.lock +++ b/Bender.lock @@ -94,7 +94,7 @@ packages: dependencies: - common_cells floo_noc: - revision: 2db2e6470d14921a0c32455f3b2647d600b6c681 + revision: f3db5e76a5461f590e743e2583f1607ecbabc24e version: 0.6.1 source: Git: https://github.com/FondazioneChipsIT/FlooNoC.git diff --git a/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv index 30a90c38..33240ae9 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_16x16_noc.sv @@ -1526,2305 +1526,2305 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ start_addr: 32'hc0000000, end_addr: 32'hc4000000},// L20 '{ idx: '{ id: '{x: 31, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ff00000, end_addr: 32'h10000000},// MagiaTileX15Y15 '{ idx: '{ id: '{x: 30, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0fe00000, end_addr: 32'h0ff00000},// MagiaTileX14Y15 '{ idx: '{ id: '{x: 29, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0fd00000, end_addr: 32'h0fe00000},// MagiaTileX13Y15 '{ idx: '{ id: '{x: 28, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0fc00000, end_addr: 32'h0fd00000},// MagiaTileX12Y15 '{ idx: '{ id: '{x: 27, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0fb00000, end_addr: 32'h0fc00000},// MagiaTileX11Y15 '{ idx: '{ id: '{x: 26, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0fa00000, end_addr: 32'h0fb00000},// MagiaTileX10Y15 '{ idx: '{ id: '{x: 25, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0f900000, end_addr: 32'h0fa00000},// MagiaTileX9Y15 '{ idx: '{ id: '{x: 24, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0f800000, end_addr: 32'h0f900000},// MagiaTileX8Y15 '{ idx: '{ id: '{x: 23, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0f700000, end_addr: 32'h0f800000},// MagiaTileX7Y15 '{ idx: '{ id: '{x: 22, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0f600000, end_addr: 32'h0f700000},// MagiaTileX6Y15 '{ idx: '{ id: '{x: 21, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0f500000, end_addr: 32'h0f600000},// MagiaTileX5Y15 '{ idx: '{ id: '{x: 20, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0f400000, end_addr: 32'h0f500000},// MagiaTileX4Y15 '{ idx: '{ id: '{x: 19, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0f300000, end_addr: 32'h0f400000},// MagiaTileX3Y15 '{ idx: '{ id: '{x: 18, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0f200000, end_addr: 32'h0f300000},// MagiaTileX2Y15 '{ idx: '{ id: '{x: 17, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0f100000, end_addr: 32'h0f200000},// MagiaTileX1Y15 '{ idx: '{ id: '{x: 16, y: 15, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0f000000, end_addr: 32'h0f100000},// MagiaTileX0Y15 '{ idx: '{ id: '{x: 31, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ef00000, end_addr: 32'h0f000000},// MagiaTileX15Y14 '{ idx: '{ id: '{x: 30, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ee00000, end_addr: 32'h0ef00000},// MagiaTileX14Y14 '{ idx: '{ id: '{x: 29, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ed00000, end_addr: 32'h0ee00000},// MagiaTileX13Y14 '{ idx: '{ id: '{x: 28, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ec00000, end_addr: 32'h0ed00000},// MagiaTileX12Y14 '{ idx: '{ id: '{x: 27, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0eb00000, end_addr: 32'h0ec00000},// MagiaTileX11Y14 '{ idx: '{ id: '{x: 26, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ea00000, end_addr: 32'h0eb00000},// MagiaTileX10Y14 '{ idx: '{ id: '{x: 25, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0e900000, end_addr: 32'h0ea00000},// MagiaTileX9Y14 '{ idx: '{ id: '{x: 24, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0e800000, end_addr: 32'h0e900000},// MagiaTileX8Y14 '{ idx: '{ id: '{x: 23, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0e700000, end_addr: 32'h0e800000},// MagiaTileX7Y14 '{ idx: '{ id: '{x: 22, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0e600000, end_addr: 32'h0e700000},// MagiaTileX6Y14 '{ idx: '{ id: '{x: 21, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0e500000, end_addr: 32'h0e600000},// MagiaTileX5Y14 '{ idx: '{ id: '{x: 20, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0e400000, end_addr: 32'h0e500000},// MagiaTileX4Y14 '{ idx: '{ id: '{x: 19, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0e300000, end_addr: 32'h0e400000},// MagiaTileX3Y14 '{ idx: '{ id: '{x: 18, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0e200000, end_addr: 32'h0e300000},// MagiaTileX2Y14 '{ idx: '{ id: '{x: 17, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0e100000, end_addr: 32'h0e200000},// MagiaTileX1Y14 '{ idx: '{ id: '{x: 16, y: 14, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0e000000, end_addr: 32'h0e100000},// MagiaTileX0Y14 '{ idx: '{ id: '{x: 31, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0df00000, end_addr: 32'h0e000000},// MagiaTileX15Y13 '{ idx: '{ id: '{x: 30, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0de00000, end_addr: 32'h0df00000},// MagiaTileX14Y13 '{ idx: '{ id: '{x: 29, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0dd00000, end_addr: 32'h0de00000},// MagiaTileX13Y13 '{ idx: '{ id: '{x: 28, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0dc00000, end_addr: 32'h0dd00000},// MagiaTileX12Y13 '{ idx: '{ id: '{x: 27, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0db00000, end_addr: 32'h0dc00000},// MagiaTileX11Y13 '{ idx: '{ id: '{x: 26, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0da00000, end_addr: 32'h0db00000},// MagiaTileX10Y13 '{ idx: '{ id: '{x: 25, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0d900000, end_addr: 32'h0da00000},// MagiaTileX9Y13 '{ idx: '{ id: '{x: 24, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0d800000, end_addr: 32'h0d900000},// MagiaTileX8Y13 '{ idx: '{ id: '{x: 23, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0d700000, end_addr: 32'h0d800000},// MagiaTileX7Y13 '{ idx: '{ id: '{x: 22, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0d600000, end_addr: 32'h0d700000},// MagiaTileX6Y13 '{ idx: '{ id: '{x: 21, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0d500000, end_addr: 32'h0d600000},// MagiaTileX5Y13 '{ idx: '{ id: '{x: 20, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0d400000, end_addr: 32'h0d500000},// MagiaTileX4Y13 '{ idx: '{ id: '{x: 19, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0d300000, end_addr: 32'h0d400000},// MagiaTileX3Y13 '{ idx: '{ id: '{x: 18, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0d200000, end_addr: 32'h0d300000},// MagiaTileX2Y13 '{ idx: '{ id: '{x: 17, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0d100000, end_addr: 32'h0d200000},// MagiaTileX1Y13 '{ idx: '{ id: '{x: 16, y: 13, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0d000000, end_addr: 32'h0d100000},// MagiaTileX0Y13 '{ idx: '{ id: '{x: 31, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0cf00000, end_addr: 32'h0d000000},// MagiaTileX15Y12 '{ idx: '{ id: '{x: 30, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ce00000, end_addr: 32'h0cf00000},// MagiaTileX14Y12 '{ idx: '{ id: '{x: 29, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0cd00000, end_addr: 32'h0ce00000},// MagiaTileX13Y12 '{ idx: '{ id: '{x: 28, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0cc00000, end_addr: 32'h0cd00000},// MagiaTileX12Y12 '{ idx: '{ id: '{x: 27, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0cb00000, end_addr: 32'h0cc00000},// MagiaTileX11Y12 '{ idx: '{ id: '{x: 26, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ca00000, end_addr: 32'h0cb00000},// MagiaTileX10Y12 '{ idx: '{ id: '{x: 25, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0c900000, end_addr: 32'h0ca00000},// MagiaTileX9Y12 '{ idx: '{ id: '{x: 24, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0c800000, end_addr: 32'h0c900000},// MagiaTileX8Y12 '{ idx: '{ id: '{x: 23, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0c700000, end_addr: 32'h0c800000},// MagiaTileX7Y12 '{ idx: '{ id: '{x: 22, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0c600000, end_addr: 32'h0c700000},// MagiaTileX6Y12 '{ idx: '{ id: '{x: 21, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0c500000, end_addr: 32'h0c600000},// MagiaTileX5Y12 '{ idx: '{ id: '{x: 20, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0c400000, end_addr: 32'h0c500000},// MagiaTileX4Y12 '{ idx: '{ id: '{x: 19, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0c300000, end_addr: 32'h0c400000},// MagiaTileX3Y12 '{ idx: '{ id: '{x: 18, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0c200000, end_addr: 32'h0c300000},// MagiaTileX2Y12 '{ idx: '{ id: '{x: 17, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0c100000, end_addr: 32'h0c200000},// MagiaTileX1Y12 '{ idx: '{ id: '{x: 16, y: 12, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0c000000, end_addr: 32'h0c100000},// MagiaTileX0Y12 '{ idx: '{ id: '{x: 31, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0bf00000, end_addr: 32'h0c000000},// MagiaTileX15Y11 '{ idx: '{ id: '{x: 30, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0be00000, end_addr: 32'h0bf00000},// MagiaTileX14Y11 '{ idx: '{ id: '{x: 29, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0bd00000, end_addr: 32'h0be00000},// MagiaTileX13Y11 '{ idx: '{ id: '{x: 28, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0bc00000, end_addr: 32'h0bd00000},// MagiaTileX12Y11 '{ idx: '{ id: '{x: 27, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0bb00000, end_addr: 32'h0bc00000},// MagiaTileX11Y11 '{ idx: '{ id: '{x: 26, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ba00000, end_addr: 32'h0bb00000},// MagiaTileX10Y11 '{ idx: '{ id: '{x: 25, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0b900000, end_addr: 32'h0ba00000},// MagiaTileX9Y11 '{ idx: '{ id: '{x: 24, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0b800000, end_addr: 32'h0b900000},// MagiaTileX8Y11 '{ idx: '{ id: '{x: 23, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0b700000, end_addr: 32'h0b800000},// MagiaTileX7Y11 '{ idx: '{ id: '{x: 22, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0b600000, end_addr: 32'h0b700000},// MagiaTileX6Y11 '{ idx: '{ id: '{x: 21, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0b500000, end_addr: 32'h0b600000},// MagiaTileX5Y11 '{ idx: '{ id: '{x: 20, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0b400000, end_addr: 32'h0b500000},// MagiaTileX4Y11 '{ idx: '{ id: '{x: 19, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0b300000, end_addr: 32'h0b400000},// MagiaTileX3Y11 '{ idx: '{ id: '{x: 18, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0b200000, end_addr: 32'h0b300000},// MagiaTileX2Y11 '{ idx: '{ id: '{x: 17, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0b100000, end_addr: 32'h0b200000},// MagiaTileX1Y11 '{ idx: '{ id: '{x: 16, y: 11, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0b000000, end_addr: 32'h0b100000},// MagiaTileX0Y11 '{ idx: '{ id: '{x: 31, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0af00000, end_addr: 32'h0b000000},// MagiaTileX15Y10 '{ idx: '{ id: '{x: 30, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ae00000, end_addr: 32'h0af00000},// MagiaTileX14Y10 '{ idx: '{ id: '{x: 29, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ad00000, end_addr: 32'h0ae00000},// MagiaTileX13Y10 '{ idx: '{ id: '{x: 28, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ac00000, end_addr: 32'h0ad00000},// MagiaTileX12Y10 '{ idx: '{ id: '{x: 27, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0ab00000, end_addr: 32'h0ac00000},// MagiaTileX11Y10 '{ idx: '{ id: '{x: 26, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0aa00000, end_addr: 32'h0ab00000},// MagiaTileX10Y10 '{ idx: '{ id: '{x: 25, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0a900000, end_addr: 32'h0aa00000},// MagiaTileX9Y10 '{ idx: '{ id: '{x: 24, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0a800000, end_addr: 32'h0a900000},// MagiaTileX8Y10 '{ idx: '{ id: '{x: 23, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0a700000, end_addr: 32'h0a800000},// MagiaTileX7Y10 '{ idx: '{ id: '{x: 22, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0a600000, end_addr: 32'h0a700000},// MagiaTileX6Y10 '{ idx: '{ id: '{x: 21, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0a500000, end_addr: 32'h0a600000},// MagiaTileX5Y10 '{ idx: '{ id: '{x: 20, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0a400000, end_addr: 32'h0a500000},// MagiaTileX4Y10 '{ idx: '{ id: '{x: 19, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0a300000, end_addr: 32'h0a400000},// MagiaTileX3Y10 '{ idx: '{ id: '{x: 18, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0a200000, end_addr: 32'h0a300000},// MagiaTileX2Y10 '{ idx: '{ id: '{x: 17, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0a100000, end_addr: 32'h0a200000},// MagiaTileX1Y10 '{ idx: '{ id: '{x: 16, y: 10, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h0a000000, end_addr: 32'h0a100000},// MagiaTileX0Y10 '{ idx: '{ id: '{x: 31, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09f00000, end_addr: 32'h0a000000},// MagiaTileX15Y9 '{ idx: '{ id: '{x: 30, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09e00000, end_addr: 32'h09f00000},// MagiaTileX14Y9 '{ idx: '{ id: '{x: 29, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09d00000, end_addr: 32'h09e00000},// MagiaTileX13Y9 '{ idx: '{ id: '{x: 28, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09c00000, end_addr: 32'h09d00000},// MagiaTileX12Y9 '{ idx: '{ id: '{x: 27, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09b00000, end_addr: 32'h09c00000},// MagiaTileX11Y9 '{ idx: '{ id: '{x: 26, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09a00000, end_addr: 32'h09b00000},// MagiaTileX10Y9 '{ idx: '{ id: '{x: 25, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09900000, end_addr: 32'h09a00000},// MagiaTileX9Y9 '{ idx: '{ id: '{x: 24, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09800000, end_addr: 32'h09900000},// MagiaTileX8Y9 '{ idx: '{ id: '{x: 23, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09700000, end_addr: 32'h09800000},// MagiaTileX7Y9 '{ idx: '{ id: '{x: 22, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09600000, end_addr: 32'h09700000},// MagiaTileX6Y9 '{ idx: '{ id: '{x: 21, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09500000, end_addr: 32'h09600000},// MagiaTileX5Y9 '{ idx: '{ id: '{x: 20, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09400000, end_addr: 32'h09500000},// MagiaTileX4Y9 '{ idx: '{ id: '{x: 19, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09300000, end_addr: 32'h09400000},// MagiaTileX3Y9 '{ idx: '{ id: '{x: 18, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09200000, end_addr: 32'h09300000},// MagiaTileX2Y9 '{ idx: '{ id: '{x: 17, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09100000, end_addr: 32'h09200000},// MagiaTileX1Y9 '{ idx: '{ id: '{x: 16, y: 9, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h09000000, end_addr: 32'h09100000},// MagiaTileX0Y9 '{ idx: '{ id: '{x: 31, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08f00000, end_addr: 32'h09000000},// MagiaTileX15Y8 '{ idx: '{ id: '{x: 30, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08e00000, end_addr: 32'h08f00000},// MagiaTileX14Y8 '{ idx: '{ id: '{x: 29, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08d00000, end_addr: 32'h08e00000},// MagiaTileX13Y8 '{ idx: '{ id: '{x: 28, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08c00000, end_addr: 32'h08d00000},// MagiaTileX12Y8 '{ idx: '{ id: '{x: 27, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08b00000, end_addr: 32'h08c00000},// MagiaTileX11Y8 '{ idx: '{ id: '{x: 26, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08a00000, end_addr: 32'h08b00000},// MagiaTileX10Y8 '{ idx: '{ id: '{x: 25, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08900000, end_addr: 32'h08a00000},// MagiaTileX9Y8 '{ idx: '{ id: '{x: 24, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08800000, end_addr: 32'h08900000},// MagiaTileX8Y8 '{ idx: '{ id: '{x: 23, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08700000, end_addr: 32'h08800000},// MagiaTileX7Y8 '{ idx: '{ id: '{x: 22, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08600000, end_addr: 32'h08700000},// MagiaTileX6Y8 '{ idx: '{ id: '{x: 21, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08500000, end_addr: 32'h08600000},// MagiaTileX5Y8 '{ idx: '{ id: '{x: 20, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08400000, end_addr: 32'h08500000},// MagiaTileX4Y8 '{ idx: '{ id: '{x: 19, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08300000, end_addr: 32'h08400000},// MagiaTileX3Y8 '{ idx: '{ id: '{x: 18, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08200000, end_addr: 32'h08300000},// MagiaTileX2Y8 '{ idx: '{ id: '{x: 17, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08100000, end_addr: 32'h08200000},// MagiaTileX1Y8 '{ idx: '{ id: '{x: 16, y: 8, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h08000000, end_addr: 32'h08100000},// MagiaTileX0Y8 '{ idx: '{ id: '{x: 31, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07f00000, end_addr: 32'h08000000},// MagiaTileX15Y7 '{ idx: '{ id: '{x: 30, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07e00000, end_addr: 32'h07f00000},// MagiaTileX14Y7 '{ idx: '{ id: '{x: 29, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07d00000, end_addr: 32'h07e00000},// MagiaTileX13Y7 '{ idx: '{ id: '{x: 28, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07c00000, end_addr: 32'h07d00000},// MagiaTileX12Y7 '{ idx: '{ id: '{x: 27, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07b00000, end_addr: 32'h07c00000},// MagiaTileX11Y7 '{ idx: '{ id: '{x: 26, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07a00000, end_addr: 32'h07b00000},// MagiaTileX10Y7 '{ idx: '{ id: '{x: 25, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07900000, end_addr: 32'h07a00000},// MagiaTileX9Y7 '{ idx: '{ id: '{x: 24, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07800000, end_addr: 32'h07900000},// MagiaTileX8Y7 '{ idx: '{ id: '{x: 23, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07700000, end_addr: 32'h07800000},// MagiaTileX7Y7 '{ idx: '{ id: '{x: 22, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07600000, end_addr: 32'h07700000},// MagiaTileX6Y7 '{ idx: '{ id: '{x: 21, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07500000, end_addr: 32'h07600000},// MagiaTileX5Y7 '{ idx: '{ id: '{x: 20, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07400000, end_addr: 32'h07500000},// MagiaTileX4Y7 '{ idx: '{ id: '{x: 19, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07300000, end_addr: 32'h07400000},// MagiaTileX3Y7 '{ idx: '{ id: '{x: 18, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07200000, end_addr: 32'h07300000},// MagiaTileX2Y7 '{ idx: '{ id: '{x: 17, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07100000, end_addr: 32'h07200000},// MagiaTileX1Y7 '{ idx: '{ id: '{x: 16, y: 7, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h07000000, end_addr: 32'h07100000},// MagiaTileX0Y7 '{ idx: '{ id: '{x: 31, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06f00000, end_addr: 32'h07000000},// MagiaTileX15Y6 '{ idx: '{ id: '{x: 30, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06e00000, end_addr: 32'h06f00000},// MagiaTileX14Y6 '{ idx: '{ id: '{x: 29, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06d00000, end_addr: 32'h06e00000},// MagiaTileX13Y6 '{ idx: '{ id: '{x: 28, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06c00000, end_addr: 32'h06d00000},// MagiaTileX12Y6 '{ idx: '{ id: '{x: 27, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06b00000, end_addr: 32'h06c00000},// MagiaTileX11Y6 '{ idx: '{ id: '{x: 26, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06a00000, end_addr: 32'h06b00000},// MagiaTileX10Y6 '{ idx: '{ id: '{x: 25, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06900000, end_addr: 32'h06a00000},// MagiaTileX9Y6 '{ idx: '{ id: '{x: 24, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06800000, end_addr: 32'h06900000},// MagiaTileX8Y6 '{ idx: '{ id: '{x: 23, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06700000, end_addr: 32'h06800000},// MagiaTileX7Y6 '{ idx: '{ id: '{x: 22, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06600000, end_addr: 32'h06700000},// MagiaTileX6Y6 '{ idx: '{ id: '{x: 21, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06500000, end_addr: 32'h06600000},// MagiaTileX5Y6 '{ idx: '{ id: '{x: 20, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06400000, end_addr: 32'h06500000},// MagiaTileX4Y6 '{ idx: '{ id: '{x: 19, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06300000, end_addr: 32'h06400000},// MagiaTileX3Y6 '{ idx: '{ id: '{x: 18, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06200000, end_addr: 32'h06300000},// MagiaTileX2Y6 '{ idx: '{ id: '{x: 17, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06100000, end_addr: 32'h06200000},// MagiaTileX1Y6 '{ idx: '{ id: '{x: 16, y: 6, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h06000000, end_addr: 32'h06100000},// MagiaTileX0Y6 '{ idx: '{ id: '{x: 31, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05f00000, end_addr: 32'h06000000},// MagiaTileX15Y5 '{ idx: '{ id: '{x: 30, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05e00000, end_addr: 32'h05f00000},// MagiaTileX14Y5 '{ idx: '{ id: '{x: 29, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05d00000, end_addr: 32'h05e00000},// MagiaTileX13Y5 '{ idx: '{ id: '{x: 28, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05c00000, end_addr: 32'h05d00000},// MagiaTileX12Y5 '{ idx: '{ id: '{x: 27, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05b00000, end_addr: 32'h05c00000},// MagiaTileX11Y5 '{ idx: '{ id: '{x: 26, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05a00000, end_addr: 32'h05b00000},// MagiaTileX10Y5 '{ idx: '{ id: '{x: 25, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05900000, end_addr: 32'h05a00000},// MagiaTileX9Y5 '{ idx: '{ id: '{x: 24, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05800000, end_addr: 32'h05900000},// MagiaTileX8Y5 '{ idx: '{ id: '{x: 23, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05700000, end_addr: 32'h05800000},// MagiaTileX7Y5 '{ idx: '{ id: '{x: 22, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05600000, end_addr: 32'h05700000},// MagiaTileX6Y5 '{ idx: '{ id: '{x: 21, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05500000, end_addr: 32'h05600000},// MagiaTileX5Y5 '{ idx: '{ id: '{x: 20, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05400000, end_addr: 32'h05500000},// MagiaTileX4Y5 '{ idx: '{ id: '{x: 19, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05300000, end_addr: 32'h05400000},// MagiaTileX3Y5 '{ idx: '{ id: '{x: 18, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05200000, end_addr: 32'h05300000},// MagiaTileX2Y5 '{ idx: '{ id: '{x: 17, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05100000, end_addr: 32'h05200000},// MagiaTileX1Y5 '{ idx: '{ id: '{x: 16, y: 5, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h05000000, end_addr: 32'h05100000},// MagiaTileX0Y5 '{ idx: '{ id: '{x: 31, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04f00000, end_addr: 32'h05000000},// MagiaTileX15Y4 '{ idx: '{ id: '{x: 30, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04e00000, end_addr: 32'h04f00000},// MagiaTileX14Y4 '{ idx: '{ id: '{x: 29, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04d00000, end_addr: 32'h04e00000},// MagiaTileX13Y4 '{ idx: '{ id: '{x: 28, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04c00000, end_addr: 32'h04d00000},// MagiaTileX12Y4 '{ idx: '{ id: '{x: 27, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04b00000, end_addr: 32'h04c00000},// MagiaTileX11Y4 '{ idx: '{ id: '{x: 26, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04a00000, end_addr: 32'h04b00000},// MagiaTileX10Y4 '{ idx: '{ id: '{x: 25, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04900000, end_addr: 32'h04a00000},// MagiaTileX9Y4 '{ idx: '{ id: '{x: 24, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04800000, end_addr: 32'h04900000},// MagiaTileX8Y4 '{ idx: '{ id: '{x: 23, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04700000, end_addr: 32'h04800000},// MagiaTileX7Y4 '{ idx: '{ id: '{x: 22, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04600000, end_addr: 32'h04700000},// MagiaTileX6Y4 '{ idx: '{ id: '{x: 21, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04500000, end_addr: 32'h04600000},// MagiaTileX5Y4 '{ idx: '{ id: '{x: 20, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04400000, end_addr: 32'h04500000},// MagiaTileX4Y4 '{ idx: '{ id: '{x: 19, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04300000, end_addr: 32'h04400000},// MagiaTileX3Y4 '{ idx: '{ id: '{x: 18, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04200000, end_addr: 32'h04300000},// MagiaTileX2Y4 '{ idx: '{ id: '{x: 17, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04100000, end_addr: 32'h04200000},// MagiaTileX1Y4 '{ idx: '{ id: '{x: 16, y: 4, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h04000000, end_addr: 32'h04100000},// MagiaTileX0Y4 '{ idx: '{ id: '{x: 31, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03f00000, end_addr: 32'h04000000},// MagiaTileX15Y3 '{ idx: '{ id: '{x: 30, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03e00000, end_addr: 32'h03f00000},// MagiaTileX14Y3 '{ idx: '{ id: '{x: 29, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03d00000, end_addr: 32'h03e00000},// MagiaTileX13Y3 '{ idx: '{ id: '{x: 28, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03c00000, end_addr: 32'h03d00000},// MagiaTileX12Y3 '{ idx: '{ id: '{x: 27, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03b00000, end_addr: 32'h03c00000},// MagiaTileX11Y3 '{ idx: '{ id: '{x: 26, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03a00000, end_addr: 32'h03b00000},// MagiaTileX10Y3 '{ idx: '{ id: '{x: 25, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03900000, end_addr: 32'h03a00000},// MagiaTileX9Y3 '{ idx: '{ id: '{x: 24, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03800000, end_addr: 32'h03900000},// MagiaTileX8Y3 '{ idx: '{ id: '{x: 23, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03700000, end_addr: 32'h03800000},// MagiaTileX7Y3 '{ idx: '{ id: '{x: 22, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03600000, end_addr: 32'h03700000},// MagiaTileX6Y3 '{ idx: '{ id: '{x: 21, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03500000, end_addr: 32'h03600000},// MagiaTileX5Y3 '{ idx: '{ id: '{x: 20, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03400000, end_addr: 32'h03500000},// MagiaTileX4Y3 '{ idx: '{ id: '{x: 19, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03300000, end_addr: 32'h03400000},// MagiaTileX3Y3 '{ idx: '{ id: '{x: 18, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03200000, end_addr: 32'h03300000},// MagiaTileX2Y3 '{ idx: '{ id: '{x: 17, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03100000, end_addr: 32'h03200000},// MagiaTileX1Y3 '{ idx: '{ id: '{x: 16, y: 3, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h03000000, end_addr: 32'h03100000},// MagiaTileX0Y3 '{ idx: '{ id: '{x: 31, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02f00000, end_addr: 32'h03000000},// MagiaTileX15Y2 '{ idx: '{ id: '{x: 30, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02e00000, end_addr: 32'h02f00000},// MagiaTileX14Y2 '{ idx: '{ id: '{x: 29, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02d00000, end_addr: 32'h02e00000},// MagiaTileX13Y2 '{ idx: '{ id: '{x: 28, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02c00000, end_addr: 32'h02d00000},// MagiaTileX12Y2 '{ idx: '{ id: '{x: 27, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02b00000, end_addr: 32'h02c00000},// MagiaTileX11Y2 '{ idx: '{ id: '{x: 26, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02a00000, end_addr: 32'h02b00000},// MagiaTileX10Y2 '{ idx: '{ id: '{x: 25, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02900000, end_addr: 32'h02a00000},// MagiaTileX9Y2 '{ idx: '{ id: '{x: 24, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02800000, end_addr: 32'h02900000},// MagiaTileX8Y2 '{ idx: '{ id: '{x: 23, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02700000, end_addr: 32'h02800000},// MagiaTileX7Y2 '{ idx: '{ id: '{x: 22, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02600000, end_addr: 32'h02700000},// MagiaTileX6Y2 '{ idx: '{ id: '{x: 21, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02500000, end_addr: 32'h02600000},// MagiaTileX5Y2 '{ idx: '{ id: '{x: 20, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02400000, end_addr: 32'h02500000},// MagiaTileX4Y2 '{ idx: '{ id: '{x: 19, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02300000, end_addr: 32'h02400000},// MagiaTileX3Y2 '{ idx: '{ id: '{x: 18, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02200000, end_addr: 32'h02300000},// MagiaTileX2Y2 '{ idx: '{ id: '{x: 17, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02100000, end_addr: 32'h02200000},// MagiaTileX1Y2 '{ idx: '{ id: '{x: 16, y: 2, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h02000000, end_addr: 32'h02100000},// MagiaTileX0Y2 '{ idx: '{ id: '{x: 31, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01f00000, end_addr: 32'h02000000},// MagiaTileX15Y1 '{ idx: '{ id: '{x: 30, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01e00000, end_addr: 32'h01f00000},// MagiaTileX14Y1 '{ idx: '{ id: '{x: 29, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01d00000, end_addr: 32'h01e00000},// MagiaTileX13Y1 '{ idx: '{ id: '{x: 28, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01c00000, end_addr: 32'h01d00000},// MagiaTileX12Y1 '{ idx: '{ id: '{x: 27, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01b00000, end_addr: 32'h01c00000},// MagiaTileX11Y1 '{ idx: '{ id: '{x: 26, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01a00000, end_addr: 32'h01b00000},// MagiaTileX10Y1 '{ idx: '{ id: '{x: 25, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01900000, end_addr: 32'h01a00000},// MagiaTileX9Y1 '{ idx: '{ id: '{x: 24, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01800000, end_addr: 32'h01900000},// MagiaTileX8Y1 '{ idx: '{ id: '{x: 23, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01700000, end_addr: 32'h01800000},// MagiaTileX7Y1 '{ idx: '{ id: '{x: 22, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01600000, end_addr: 32'h01700000},// MagiaTileX6Y1 '{ idx: '{ id: '{x: 21, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01500000, end_addr: 32'h01600000},// MagiaTileX5Y1 '{ idx: '{ id: '{x: 20, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01400000, end_addr: 32'h01500000},// MagiaTileX4Y1 '{ idx: '{ id: '{x: 19, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01300000, end_addr: 32'h01400000},// MagiaTileX3Y1 '{ idx: '{ id: '{x: 18, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01200000, end_addr: 32'h01300000},// MagiaTileX2Y1 '{ idx: '{ id: '{x: 17, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01100000, end_addr: 32'h01200000},// MagiaTileX1Y1 '{ idx: '{ id: '{x: 16, y: 1, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h01000000, end_addr: 32'h01100000},// MagiaTileX0Y1 '{ idx: '{ id: '{x: 31, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00f00000, end_addr: 32'h01000000},// MagiaTileX15Y0 '{ idx: '{ id: '{x: 30, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00e00000, end_addr: 32'h00f00000},// MagiaTileX14Y0 '{ idx: '{ id: '{x: 29, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00d00000, end_addr: 32'h00e00000},// MagiaTileX13Y0 '{ idx: '{ id: '{x: 28, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00c00000, end_addr: 32'h00d00000},// MagiaTileX12Y0 '{ idx: '{ id: '{x: 27, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00b00000, end_addr: 32'h00c00000},// MagiaTileX11Y0 '{ idx: '{ id: '{x: 26, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00a00000, end_addr: 32'h00b00000},// MagiaTileX10Y0 '{ idx: '{ id: '{x: 25, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00900000, end_addr: 32'h00a00000},// MagiaTileX9Y0 '{ idx: '{ id: '{x: 24, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00800000, end_addr: 32'h00900000},// MagiaTileX8Y0 '{ idx: '{ id: '{x: 23, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00700000, end_addr: 32'h00800000},// MagiaTileX7Y0 '{ idx: '{ id: '{x: 22, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00600000, end_addr: 32'h00700000},// MagiaTileX6Y0 '{ idx: '{ id: '{x: 21, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00500000, end_addr: 32'h00600000},// MagiaTileX5Y0 '{ idx: '{ id: '{x: 20, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00400000, end_addr: 32'h00500000},// MagiaTileX4Y0 '{ idx: '{ id: '{x: 19, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00300000, end_addr: 32'h00400000},// MagiaTileX3Y0 '{ idx: '{ id: '{x: 18, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00200000, end_addr: 32'h00300000},// MagiaTileX2Y0 '{ idx: '{ id: '{x: 17, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00100000, end_addr: 32'h00200000},// MagiaTileX1Y0 '{ idx: '{ id: '{x: 16, y: 0, port_id: 0}, - mask_x: '{ offset: 24, + mask_x: '{ offset: 20, len: 4, base_id: 16}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 24, len: 4, base_id: 0}}, start_addr: 32'h00000000, @@ -3854,16 +3854,16 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ EnIntMinU: 1'b1, EnIntMaxS: 1'b1, EnIntMaxU: 1'b1}, - NarrRedCfg: RedDefaultCfg, - WideRedCfg: '{ RdPipelineDepth: 0, - CutOffloadIntf: 1'b0}}}; + NarrRedCfg: '{ RdPipelineDepth: 0, + CutOffloadIntf: 1'b0}, + WideRedCfg: RedDefaultCfg}}; typedef logic[31:0] collective_axi_narrow_data_mst_addr_t; typedef logic[31:0] collective_axi_narrow_data_mst_data_t; typedef logic[3:0] collective_axi_narrow_data_mst_strb_t; -typedef logic[1:0] collective_axi_narrow_data_mst_id_t; +typedef logic[2:0] collective_axi_narrow_data_mst_id_t; typedef struct packed { logic [31:0] collective_mask; logic [3:0] collective_op; @@ -3883,7 +3883,7 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; typedef logic[31:0] collective_axi_narrow_data_slv_addr_t; typedef logic[31:0] collective_axi_narrow_data_slv_data_t; typedef logic[3:0] collective_axi_narrow_data_slv_strb_t; -typedef logic[3:0] collective_axi_narrow_data_slv_id_t; +typedef logic[5:0] collective_axi_narrow_data_slv_id_t; typedef struct packed { logic [31:0] collective_mask; logic [3:0] collective_op; @@ -3915,7 +3915,7 @@ typedef struct packed { typedef logic[31:0] axi_wide_data_mst_addr_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; -typedef logic[2:0] axi_wide_data_mst_id_t; +typedef logic[1:0] axi_wide_data_mst_id_t; typedef logic[0:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) @@ -3935,7 +3935,7 @@ typedef struct packed { typedef logic[31:0] axi_wide_data_slv_addr_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; -typedef logic[2:0] axi_wide_data_slv_id_t; +typedef logic[1:0] axi_wide_data_slv_id_t; typedef logic[0:0] axi_wide_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_slv, axi_wide_data_slv_req_t, axi_wide_data_slv_rsp_t, axi_wide_data_slv_addr_t, axi_wide_data_slv_id_t, axi_wide_data_slv_data_t, axi_wide_data_slv_strb_t, axi_wide_data_slv_user_t) @@ -3949,15 +3949,16 @@ typedef logic[0:0] axi_wide_data_slv_user_t; UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - InIdWidth: 3, - OutIdWidth: 3, + InIdWidth: 2, + OutIdWidth: 2, UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) - typedef logic [AxiCfgW.DataWidth-1:0] floo_wide_red_data_t; -`FLOO_RED_TYPEDEF_REQ_RSP_LINK(wide, floo_wide_red_data_t, wide_req, wide_rsp) + typedef logic [AxiCfgN.DataWidth-1:0] floo_narrow_red_data_t; +`FLOO_RED_TYPEDEF_REQ_RSP_LINK(narrow, floo_narrow_red_data_t, narrow_req, narrow_rsp) + endpackage diff --git a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv index f1de19cf..cdb0fc29 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_2x2_noc.sv @@ -126,37 +126,37 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ start_addr: 32'hc0000000, end_addr: 32'he0000000},// L20 '{ idx: '{ id: '{x: 3, y: 1, port_id: 0}, - mask_x: '{ offset: 21, - len: 2, + mask_x: '{ offset: 20, + len: 1, base_id: 2}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 21, len: 1, base_id: 0}}, start_addr: 32'h00300000, end_addr: 32'h00400000},// MagiaTileX1Y1 '{ idx: '{ id: '{x: 2, y: 1, port_id: 0}, - mask_x: '{ offset: 21, - len: 2, + mask_x: '{ offset: 20, + len: 1, base_id: 2}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 21, len: 1, base_id: 0}}, start_addr: 32'h00200000, end_addr: 32'h00300000},// MagiaTileX0Y1 '{ idx: '{ id: '{x: 3, y: 0, port_id: 0}, - mask_x: '{ offset: 21, - len: 2, + mask_x: '{ offset: 20, + len: 1, base_id: 2}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 21, len: 1, base_id: 0}}, start_addr: 32'h00100000, end_addr: 32'h00200000},// MagiaTileX1Y0 '{ idx: '{ id: '{x: 2, y: 0, port_id: 0}, - mask_x: '{ offset: 21, - len: 2, + mask_x: '{ offset: 20, + len: 1, base_id: 2}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 21, len: 1, base_id: 0}}, start_addr: 32'h00000000, @@ -186,16 +186,16 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ EnIntMinU: 1'b1, EnIntMaxS: 1'b1, EnIntMaxU: 1'b1}, - NarrRedCfg: RedDefaultCfg, - WideRedCfg: '{ RdPipelineDepth: 0, - CutOffloadIntf: 1'b0}}}; + NarrRedCfg: '{ RdPipelineDepth: 0, + CutOffloadIntf: 1'b0}, + WideRedCfg: RedDefaultCfg}}; typedef logic[31:0] collective_axi_narrow_data_mst_addr_t; typedef logic[31:0] collective_axi_narrow_data_mst_data_t; typedef logic[3:0] collective_axi_narrow_data_mst_strb_t; -typedef logic[1:0] collective_axi_narrow_data_mst_id_t; +typedef logic[2:0] collective_axi_narrow_data_mst_id_t; typedef struct packed { logic [31:0] collective_mask; logic [3:0] collective_op; @@ -215,7 +215,7 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; typedef logic[31:0] collective_axi_narrow_data_slv_addr_t; typedef logic[31:0] collective_axi_narrow_data_slv_data_t; typedef logic[3:0] collective_axi_narrow_data_slv_strb_t; -typedef logic[3:0] collective_axi_narrow_data_slv_id_t; +typedef logic[5:0] collective_axi_narrow_data_slv_id_t; typedef struct packed { logic [31:0] collective_mask; logic [3:0] collective_op; @@ -247,7 +247,7 @@ typedef struct packed { typedef logic[31:0] axi_wide_data_mst_addr_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; -typedef logic[2:0] axi_wide_data_mst_id_t; +typedef logic[1:0] axi_wide_data_mst_id_t; typedef logic[0:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) @@ -267,7 +267,7 @@ typedef struct packed { typedef logic[31:0] axi_wide_data_slv_addr_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; -typedef logic[2:0] axi_wide_data_slv_id_t; +typedef logic[1:0] axi_wide_data_slv_id_t; typedef logic[0:0] axi_wide_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_slv, axi_wide_data_slv_req_t, axi_wide_data_slv_rsp_t, axi_wide_data_slv_addr_t, axi_wide_data_slv_id_t, axi_wide_data_slv_data_t, axi_wide_data_slv_strb_t, axi_wide_data_slv_user_t) @@ -281,15 +281,16 @@ typedef logic[0:0] axi_wide_data_slv_user_t; UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - InIdWidth: 3, - OutIdWidth: 3, + InIdWidth: 2, + OutIdWidth: 2, UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) - typedef logic [AxiCfgW.DataWidth-1:0] floo_wide_red_data_t; -`FLOO_RED_TYPEDEF_REQ_RSP_LINK(wide, floo_wide_red_data_t, wide_req, wide_rsp) + typedef logic [AxiCfgN.DataWidth-1:0] floo_narrow_red_data_t; +`FLOO_RED_TYPEDEF_REQ_RSP_LINK(narrow, floo_narrow_red_data_t, narrow_req, narrow_rsp) + endpackage diff --git a/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv index e2428f90..62d51056 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_32x32_noc.sv @@ -5526,9217 +5526,9217 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ start_addr: 32'hc0000000, end_addr: 32'hc2000000},// L20 '{ idx: '{ id: '{x: 63, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ff00000, end_addr: 32'h40000000},// MagiaTileX31Y31 '{ idx: '{ id: '{x: 62, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3fe00000, end_addr: 32'h3ff00000},// MagiaTileX30Y31 '{ idx: '{ id: '{x: 61, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3fd00000, end_addr: 32'h3fe00000},// MagiaTileX29Y31 '{ idx: '{ id: '{x: 60, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3fc00000, end_addr: 32'h3fd00000},// MagiaTileX28Y31 '{ idx: '{ id: '{x: 59, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3fb00000, end_addr: 32'h3fc00000},// MagiaTileX27Y31 '{ idx: '{ id: '{x: 58, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3fa00000, end_addr: 32'h3fb00000},// MagiaTileX26Y31 '{ idx: '{ id: '{x: 57, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3f900000, end_addr: 32'h3fa00000},// MagiaTileX25Y31 '{ idx: '{ id: '{x: 56, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3f800000, end_addr: 32'h3f900000},// MagiaTileX24Y31 '{ idx: '{ id: '{x: 55, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3f700000, end_addr: 32'h3f800000},// MagiaTileX23Y31 '{ idx: '{ id: '{x: 54, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3f600000, end_addr: 32'h3f700000},// MagiaTileX22Y31 '{ idx: '{ id: '{x: 53, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3f500000, end_addr: 32'h3f600000},// MagiaTileX21Y31 '{ idx: '{ id: '{x: 52, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3f400000, end_addr: 32'h3f500000},// MagiaTileX20Y31 '{ idx: '{ id: '{x: 51, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3f300000, end_addr: 32'h3f400000},// MagiaTileX19Y31 '{ idx: '{ id: '{x: 50, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3f200000, end_addr: 32'h3f300000},// MagiaTileX18Y31 '{ idx: '{ id: '{x: 49, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3f100000, end_addr: 32'h3f200000},// MagiaTileX17Y31 '{ idx: '{ id: '{x: 48, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3f000000, end_addr: 32'h3f100000},// MagiaTileX16Y31 '{ idx: '{ id: '{x: 47, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ef00000, end_addr: 32'h3f000000},// MagiaTileX15Y31 '{ idx: '{ id: '{x: 46, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ee00000, end_addr: 32'h3ef00000},// MagiaTileX14Y31 '{ idx: '{ id: '{x: 45, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ed00000, end_addr: 32'h3ee00000},// MagiaTileX13Y31 '{ idx: '{ id: '{x: 44, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ec00000, end_addr: 32'h3ed00000},// MagiaTileX12Y31 '{ idx: '{ id: '{x: 43, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3eb00000, end_addr: 32'h3ec00000},// MagiaTileX11Y31 '{ idx: '{ id: '{x: 42, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ea00000, end_addr: 32'h3eb00000},// MagiaTileX10Y31 '{ idx: '{ id: '{x: 41, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3e900000, end_addr: 32'h3ea00000},// MagiaTileX9Y31 '{ idx: '{ id: '{x: 40, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3e800000, end_addr: 32'h3e900000},// MagiaTileX8Y31 '{ idx: '{ id: '{x: 39, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3e700000, end_addr: 32'h3e800000},// MagiaTileX7Y31 '{ idx: '{ id: '{x: 38, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3e600000, end_addr: 32'h3e700000},// MagiaTileX6Y31 '{ idx: '{ id: '{x: 37, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3e500000, end_addr: 32'h3e600000},// MagiaTileX5Y31 '{ idx: '{ id: '{x: 36, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3e400000, end_addr: 32'h3e500000},// MagiaTileX4Y31 '{ idx: '{ id: '{x: 35, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3e300000, end_addr: 32'h3e400000},// MagiaTileX3Y31 '{ idx: '{ id: '{x: 34, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3e200000, end_addr: 32'h3e300000},// MagiaTileX2Y31 '{ idx: '{ id: '{x: 33, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3e100000, end_addr: 32'h3e200000},// MagiaTileX1Y31 '{ idx: '{ id: '{x: 32, y: 31, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3e000000, end_addr: 32'h3e100000},// MagiaTileX0Y31 '{ idx: '{ id: '{x: 63, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3df00000, end_addr: 32'h3e000000},// MagiaTileX31Y30 '{ idx: '{ id: '{x: 62, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3de00000, end_addr: 32'h3df00000},// MagiaTileX30Y30 '{ idx: '{ id: '{x: 61, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3dd00000, end_addr: 32'h3de00000},// MagiaTileX29Y30 '{ idx: '{ id: '{x: 60, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3dc00000, end_addr: 32'h3dd00000},// MagiaTileX28Y30 '{ idx: '{ id: '{x: 59, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3db00000, end_addr: 32'h3dc00000},// MagiaTileX27Y30 '{ idx: '{ id: '{x: 58, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3da00000, end_addr: 32'h3db00000},// MagiaTileX26Y30 '{ idx: '{ id: '{x: 57, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3d900000, end_addr: 32'h3da00000},// MagiaTileX25Y30 '{ idx: '{ id: '{x: 56, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3d800000, end_addr: 32'h3d900000},// MagiaTileX24Y30 '{ idx: '{ id: '{x: 55, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3d700000, end_addr: 32'h3d800000},// MagiaTileX23Y30 '{ idx: '{ id: '{x: 54, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3d600000, end_addr: 32'h3d700000},// MagiaTileX22Y30 '{ idx: '{ id: '{x: 53, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3d500000, end_addr: 32'h3d600000},// MagiaTileX21Y30 '{ idx: '{ id: '{x: 52, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3d400000, end_addr: 32'h3d500000},// MagiaTileX20Y30 '{ idx: '{ id: '{x: 51, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3d300000, end_addr: 32'h3d400000},// MagiaTileX19Y30 '{ idx: '{ id: '{x: 50, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3d200000, end_addr: 32'h3d300000},// MagiaTileX18Y30 '{ idx: '{ id: '{x: 49, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3d100000, end_addr: 32'h3d200000},// MagiaTileX17Y30 '{ idx: '{ id: '{x: 48, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3d000000, end_addr: 32'h3d100000},// MagiaTileX16Y30 '{ idx: '{ id: '{x: 47, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3cf00000, end_addr: 32'h3d000000},// MagiaTileX15Y30 '{ idx: '{ id: '{x: 46, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ce00000, end_addr: 32'h3cf00000},// MagiaTileX14Y30 '{ idx: '{ id: '{x: 45, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3cd00000, end_addr: 32'h3ce00000},// MagiaTileX13Y30 '{ idx: '{ id: '{x: 44, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3cc00000, end_addr: 32'h3cd00000},// MagiaTileX12Y30 '{ idx: '{ id: '{x: 43, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3cb00000, end_addr: 32'h3cc00000},// MagiaTileX11Y30 '{ idx: '{ id: '{x: 42, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ca00000, end_addr: 32'h3cb00000},// MagiaTileX10Y30 '{ idx: '{ id: '{x: 41, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3c900000, end_addr: 32'h3ca00000},// MagiaTileX9Y30 '{ idx: '{ id: '{x: 40, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3c800000, end_addr: 32'h3c900000},// MagiaTileX8Y30 '{ idx: '{ id: '{x: 39, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3c700000, end_addr: 32'h3c800000},// MagiaTileX7Y30 '{ idx: '{ id: '{x: 38, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3c600000, end_addr: 32'h3c700000},// MagiaTileX6Y30 '{ idx: '{ id: '{x: 37, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3c500000, end_addr: 32'h3c600000},// MagiaTileX5Y30 '{ idx: '{ id: '{x: 36, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3c400000, end_addr: 32'h3c500000},// MagiaTileX4Y30 '{ idx: '{ id: '{x: 35, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3c300000, end_addr: 32'h3c400000},// MagiaTileX3Y30 '{ idx: '{ id: '{x: 34, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3c200000, end_addr: 32'h3c300000},// MagiaTileX2Y30 '{ idx: '{ id: '{x: 33, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3c100000, end_addr: 32'h3c200000},// MagiaTileX1Y30 '{ idx: '{ id: '{x: 32, y: 30, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3c000000, end_addr: 32'h3c100000},// MagiaTileX0Y30 '{ idx: '{ id: '{x: 63, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3bf00000, end_addr: 32'h3c000000},// MagiaTileX31Y29 '{ idx: '{ id: '{x: 62, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3be00000, end_addr: 32'h3bf00000},// MagiaTileX30Y29 '{ idx: '{ id: '{x: 61, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3bd00000, end_addr: 32'h3be00000},// MagiaTileX29Y29 '{ idx: '{ id: '{x: 60, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3bc00000, end_addr: 32'h3bd00000},// MagiaTileX28Y29 '{ idx: '{ id: '{x: 59, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3bb00000, end_addr: 32'h3bc00000},// MagiaTileX27Y29 '{ idx: '{ id: '{x: 58, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ba00000, end_addr: 32'h3bb00000},// MagiaTileX26Y29 '{ idx: '{ id: '{x: 57, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3b900000, end_addr: 32'h3ba00000},// MagiaTileX25Y29 '{ idx: '{ id: '{x: 56, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3b800000, end_addr: 32'h3b900000},// MagiaTileX24Y29 '{ idx: '{ id: '{x: 55, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3b700000, end_addr: 32'h3b800000},// MagiaTileX23Y29 '{ idx: '{ id: '{x: 54, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3b600000, end_addr: 32'h3b700000},// MagiaTileX22Y29 '{ idx: '{ id: '{x: 53, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3b500000, end_addr: 32'h3b600000},// MagiaTileX21Y29 '{ idx: '{ id: '{x: 52, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3b400000, end_addr: 32'h3b500000},// MagiaTileX20Y29 '{ idx: '{ id: '{x: 51, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3b300000, end_addr: 32'h3b400000},// MagiaTileX19Y29 '{ idx: '{ id: '{x: 50, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3b200000, end_addr: 32'h3b300000},// MagiaTileX18Y29 '{ idx: '{ id: '{x: 49, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3b100000, end_addr: 32'h3b200000},// MagiaTileX17Y29 '{ idx: '{ id: '{x: 48, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3b000000, end_addr: 32'h3b100000},// MagiaTileX16Y29 '{ idx: '{ id: '{x: 47, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3af00000, end_addr: 32'h3b000000},// MagiaTileX15Y29 '{ idx: '{ id: '{x: 46, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ae00000, end_addr: 32'h3af00000},// MagiaTileX14Y29 '{ idx: '{ id: '{x: 45, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ad00000, end_addr: 32'h3ae00000},// MagiaTileX13Y29 '{ idx: '{ id: '{x: 44, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ac00000, end_addr: 32'h3ad00000},// MagiaTileX12Y29 '{ idx: '{ id: '{x: 43, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3ab00000, end_addr: 32'h3ac00000},// MagiaTileX11Y29 '{ idx: '{ id: '{x: 42, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3aa00000, end_addr: 32'h3ab00000},// MagiaTileX10Y29 '{ idx: '{ id: '{x: 41, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3a900000, end_addr: 32'h3aa00000},// MagiaTileX9Y29 '{ idx: '{ id: '{x: 40, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3a800000, end_addr: 32'h3a900000},// MagiaTileX8Y29 '{ idx: '{ id: '{x: 39, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3a700000, end_addr: 32'h3a800000},// MagiaTileX7Y29 '{ idx: '{ id: '{x: 38, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3a600000, end_addr: 32'h3a700000},// MagiaTileX6Y29 '{ idx: '{ id: '{x: 37, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3a500000, end_addr: 32'h3a600000},// MagiaTileX5Y29 '{ idx: '{ id: '{x: 36, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3a400000, end_addr: 32'h3a500000},// MagiaTileX4Y29 '{ idx: '{ id: '{x: 35, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3a300000, end_addr: 32'h3a400000},// MagiaTileX3Y29 '{ idx: '{ id: '{x: 34, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3a200000, end_addr: 32'h3a300000},// MagiaTileX2Y29 '{ idx: '{ id: '{x: 33, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3a100000, end_addr: 32'h3a200000},// MagiaTileX1Y29 '{ idx: '{ id: '{x: 32, y: 29, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h3a000000, end_addr: 32'h3a100000},// MagiaTileX0Y29 '{ idx: '{ id: '{x: 63, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39f00000, end_addr: 32'h3a000000},// MagiaTileX31Y28 '{ idx: '{ id: '{x: 62, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39e00000, end_addr: 32'h39f00000},// MagiaTileX30Y28 '{ idx: '{ id: '{x: 61, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39d00000, end_addr: 32'h39e00000},// MagiaTileX29Y28 '{ idx: '{ id: '{x: 60, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39c00000, end_addr: 32'h39d00000},// MagiaTileX28Y28 '{ idx: '{ id: '{x: 59, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39b00000, end_addr: 32'h39c00000},// MagiaTileX27Y28 '{ idx: '{ id: '{x: 58, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39a00000, end_addr: 32'h39b00000},// MagiaTileX26Y28 '{ idx: '{ id: '{x: 57, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39900000, end_addr: 32'h39a00000},// MagiaTileX25Y28 '{ idx: '{ id: '{x: 56, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39800000, end_addr: 32'h39900000},// MagiaTileX24Y28 '{ idx: '{ id: '{x: 55, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39700000, end_addr: 32'h39800000},// MagiaTileX23Y28 '{ idx: '{ id: '{x: 54, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39600000, end_addr: 32'h39700000},// MagiaTileX22Y28 '{ idx: '{ id: '{x: 53, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39500000, end_addr: 32'h39600000},// MagiaTileX21Y28 '{ idx: '{ id: '{x: 52, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39400000, end_addr: 32'h39500000},// MagiaTileX20Y28 '{ idx: '{ id: '{x: 51, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39300000, end_addr: 32'h39400000},// MagiaTileX19Y28 '{ idx: '{ id: '{x: 50, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39200000, end_addr: 32'h39300000},// MagiaTileX18Y28 '{ idx: '{ id: '{x: 49, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39100000, end_addr: 32'h39200000},// MagiaTileX17Y28 '{ idx: '{ id: '{x: 48, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h39000000, end_addr: 32'h39100000},// MagiaTileX16Y28 '{ idx: '{ id: '{x: 47, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38f00000, end_addr: 32'h39000000},// MagiaTileX15Y28 '{ idx: '{ id: '{x: 46, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38e00000, end_addr: 32'h38f00000},// MagiaTileX14Y28 '{ idx: '{ id: '{x: 45, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38d00000, end_addr: 32'h38e00000},// MagiaTileX13Y28 '{ idx: '{ id: '{x: 44, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38c00000, end_addr: 32'h38d00000},// MagiaTileX12Y28 '{ idx: '{ id: '{x: 43, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38b00000, end_addr: 32'h38c00000},// MagiaTileX11Y28 '{ idx: '{ id: '{x: 42, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38a00000, end_addr: 32'h38b00000},// MagiaTileX10Y28 '{ idx: '{ id: '{x: 41, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38900000, end_addr: 32'h38a00000},// MagiaTileX9Y28 '{ idx: '{ id: '{x: 40, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38800000, end_addr: 32'h38900000},// MagiaTileX8Y28 '{ idx: '{ id: '{x: 39, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38700000, end_addr: 32'h38800000},// MagiaTileX7Y28 '{ idx: '{ id: '{x: 38, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38600000, end_addr: 32'h38700000},// MagiaTileX6Y28 '{ idx: '{ id: '{x: 37, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38500000, end_addr: 32'h38600000},// MagiaTileX5Y28 '{ idx: '{ id: '{x: 36, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38400000, end_addr: 32'h38500000},// MagiaTileX4Y28 '{ idx: '{ id: '{x: 35, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38300000, end_addr: 32'h38400000},// MagiaTileX3Y28 '{ idx: '{ id: '{x: 34, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38200000, end_addr: 32'h38300000},// MagiaTileX2Y28 '{ idx: '{ id: '{x: 33, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38100000, end_addr: 32'h38200000},// MagiaTileX1Y28 '{ idx: '{ id: '{x: 32, y: 28, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h38000000, end_addr: 32'h38100000},// MagiaTileX0Y28 '{ idx: '{ id: '{x: 63, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37f00000, end_addr: 32'h38000000},// MagiaTileX31Y27 '{ idx: '{ id: '{x: 62, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37e00000, end_addr: 32'h37f00000},// MagiaTileX30Y27 '{ idx: '{ id: '{x: 61, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37d00000, end_addr: 32'h37e00000},// MagiaTileX29Y27 '{ idx: '{ id: '{x: 60, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37c00000, end_addr: 32'h37d00000},// MagiaTileX28Y27 '{ idx: '{ id: '{x: 59, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37b00000, end_addr: 32'h37c00000},// MagiaTileX27Y27 '{ idx: '{ id: '{x: 58, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37a00000, end_addr: 32'h37b00000},// MagiaTileX26Y27 '{ idx: '{ id: '{x: 57, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37900000, end_addr: 32'h37a00000},// MagiaTileX25Y27 '{ idx: '{ id: '{x: 56, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37800000, end_addr: 32'h37900000},// MagiaTileX24Y27 '{ idx: '{ id: '{x: 55, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37700000, end_addr: 32'h37800000},// MagiaTileX23Y27 '{ idx: '{ id: '{x: 54, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37600000, end_addr: 32'h37700000},// MagiaTileX22Y27 '{ idx: '{ id: '{x: 53, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37500000, end_addr: 32'h37600000},// MagiaTileX21Y27 '{ idx: '{ id: '{x: 52, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37400000, end_addr: 32'h37500000},// MagiaTileX20Y27 '{ idx: '{ id: '{x: 51, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37300000, end_addr: 32'h37400000},// MagiaTileX19Y27 '{ idx: '{ id: '{x: 50, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37200000, end_addr: 32'h37300000},// MagiaTileX18Y27 '{ idx: '{ id: '{x: 49, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37100000, end_addr: 32'h37200000},// MagiaTileX17Y27 '{ idx: '{ id: '{x: 48, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h37000000, end_addr: 32'h37100000},// MagiaTileX16Y27 '{ idx: '{ id: '{x: 47, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36f00000, end_addr: 32'h37000000},// MagiaTileX15Y27 '{ idx: '{ id: '{x: 46, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36e00000, end_addr: 32'h36f00000},// MagiaTileX14Y27 '{ idx: '{ id: '{x: 45, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36d00000, end_addr: 32'h36e00000},// MagiaTileX13Y27 '{ idx: '{ id: '{x: 44, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36c00000, end_addr: 32'h36d00000},// MagiaTileX12Y27 '{ idx: '{ id: '{x: 43, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36b00000, end_addr: 32'h36c00000},// MagiaTileX11Y27 '{ idx: '{ id: '{x: 42, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36a00000, end_addr: 32'h36b00000},// MagiaTileX10Y27 '{ idx: '{ id: '{x: 41, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36900000, end_addr: 32'h36a00000},// MagiaTileX9Y27 '{ idx: '{ id: '{x: 40, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36800000, end_addr: 32'h36900000},// MagiaTileX8Y27 '{ idx: '{ id: '{x: 39, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36700000, end_addr: 32'h36800000},// MagiaTileX7Y27 '{ idx: '{ id: '{x: 38, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36600000, end_addr: 32'h36700000},// MagiaTileX6Y27 '{ idx: '{ id: '{x: 37, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36500000, end_addr: 32'h36600000},// MagiaTileX5Y27 '{ idx: '{ id: '{x: 36, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36400000, end_addr: 32'h36500000},// MagiaTileX4Y27 '{ idx: '{ id: '{x: 35, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36300000, end_addr: 32'h36400000},// MagiaTileX3Y27 '{ idx: '{ id: '{x: 34, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36200000, end_addr: 32'h36300000},// MagiaTileX2Y27 '{ idx: '{ id: '{x: 33, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36100000, end_addr: 32'h36200000},// MagiaTileX1Y27 '{ idx: '{ id: '{x: 32, y: 27, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h36000000, end_addr: 32'h36100000},// MagiaTileX0Y27 '{ idx: '{ id: '{x: 63, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35f00000, end_addr: 32'h36000000},// MagiaTileX31Y26 '{ idx: '{ id: '{x: 62, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35e00000, end_addr: 32'h35f00000},// MagiaTileX30Y26 '{ idx: '{ id: '{x: 61, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35d00000, end_addr: 32'h35e00000},// MagiaTileX29Y26 '{ idx: '{ id: '{x: 60, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35c00000, end_addr: 32'h35d00000},// MagiaTileX28Y26 '{ idx: '{ id: '{x: 59, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35b00000, end_addr: 32'h35c00000},// MagiaTileX27Y26 '{ idx: '{ id: '{x: 58, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35a00000, end_addr: 32'h35b00000},// MagiaTileX26Y26 '{ idx: '{ id: '{x: 57, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35900000, end_addr: 32'h35a00000},// MagiaTileX25Y26 '{ idx: '{ id: '{x: 56, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35800000, end_addr: 32'h35900000},// MagiaTileX24Y26 '{ idx: '{ id: '{x: 55, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35700000, end_addr: 32'h35800000},// MagiaTileX23Y26 '{ idx: '{ id: '{x: 54, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35600000, end_addr: 32'h35700000},// MagiaTileX22Y26 '{ idx: '{ id: '{x: 53, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35500000, end_addr: 32'h35600000},// MagiaTileX21Y26 '{ idx: '{ id: '{x: 52, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35400000, end_addr: 32'h35500000},// MagiaTileX20Y26 '{ idx: '{ id: '{x: 51, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35300000, end_addr: 32'h35400000},// MagiaTileX19Y26 '{ idx: '{ id: '{x: 50, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35200000, end_addr: 32'h35300000},// MagiaTileX18Y26 '{ idx: '{ id: '{x: 49, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35100000, end_addr: 32'h35200000},// MagiaTileX17Y26 '{ idx: '{ id: '{x: 48, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h35000000, end_addr: 32'h35100000},// MagiaTileX16Y26 '{ idx: '{ id: '{x: 47, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34f00000, end_addr: 32'h35000000},// MagiaTileX15Y26 '{ idx: '{ id: '{x: 46, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34e00000, end_addr: 32'h34f00000},// MagiaTileX14Y26 '{ idx: '{ id: '{x: 45, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34d00000, end_addr: 32'h34e00000},// MagiaTileX13Y26 '{ idx: '{ id: '{x: 44, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34c00000, end_addr: 32'h34d00000},// MagiaTileX12Y26 '{ idx: '{ id: '{x: 43, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34b00000, end_addr: 32'h34c00000},// MagiaTileX11Y26 '{ idx: '{ id: '{x: 42, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34a00000, end_addr: 32'h34b00000},// MagiaTileX10Y26 '{ idx: '{ id: '{x: 41, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34900000, end_addr: 32'h34a00000},// MagiaTileX9Y26 '{ idx: '{ id: '{x: 40, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34800000, end_addr: 32'h34900000},// MagiaTileX8Y26 '{ idx: '{ id: '{x: 39, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34700000, end_addr: 32'h34800000},// MagiaTileX7Y26 '{ idx: '{ id: '{x: 38, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34600000, end_addr: 32'h34700000},// MagiaTileX6Y26 '{ idx: '{ id: '{x: 37, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34500000, end_addr: 32'h34600000},// MagiaTileX5Y26 '{ idx: '{ id: '{x: 36, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34400000, end_addr: 32'h34500000},// MagiaTileX4Y26 '{ idx: '{ id: '{x: 35, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34300000, end_addr: 32'h34400000},// MagiaTileX3Y26 '{ idx: '{ id: '{x: 34, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34200000, end_addr: 32'h34300000},// MagiaTileX2Y26 '{ idx: '{ id: '{x: 33, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34100000, end_addr: 32'h34200000},// MagiaTileX1Y26 '{ idx: '{ id: '{x: 32, y: 26, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h34000000, end_addr: 32'h34100000},// MagiaTileX0Y26 '{ idx: '{ id: '{x: 63, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33f00000, end_addr: 32'h34000000},// MagiaTileX31Y25 '{ idx: '{ id: '{x: 62, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33e00000, end_addr: 32'h33f00000},// MagiaTileX30Y25 '{ idx: '{ id: '{x: 61, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33d00000, end_addr: 32'h33e00000},// MagiaTileX29Y25 '{ idx: '{ id: '{x: 60, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33c00000, end_addr: 32'h33d00000},// MagiaTileX28Y25 '{ idx: '{ id: '{x: 59, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33b00000, end_addr: 32'h33c00000},// MagiaTileX27Y25 '{ idx: '{ id: '{x: 58, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33a00000, end_addr: 32'h33b00000},// MagiaTileX26Y25 '{ idx: '{ id: '{x: 57, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33900000, end_addr: 32'h33a00000},// MagiaTileX25Y25 '{ idx: '{ id: '{x: 56, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33800000, end_addr: 32'h33900000},// MagiaTileX24Y25 '{ idx: '{ id: '{x: 55, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33700000, end_addr: 32'h33800000},// MagiaTileX23Y25 '{ idx: '{ id: '{x: 54, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33600000, end_addr: 32'h33700000},// MagiaTileX22Y25 '{ idx: '{ id: '{x: 53, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33500000, end_addr: 32'h33600000},// MagiaTileX21Y25 '{ idx: '{ id: '{x: 52, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33400000, end_addr: 32'h33500000},// MagiaTileX20Y25 '{ idx: '{ id: '{x: 51, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33300000, end_addr: 32'h33400000},// MagiaTileX19Y25 '{ idx: '{ id: '{x: 50, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33200000, end_addr: 32'h33300000},// MagiaTileX18Y25 '{ idx: '{ id: '{x: 49, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33100000, end_addr: 32'h33200000},// MagiaTileX17Y25 '{ idx: '{ id: '{x: 48, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h33000000, end_addr: 32'h33100000},// MagiaTileX16Y25 '{ idx: '{ id: '{x: 47, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32f00000, end_addr: 32'h33000000},// MagiaTileX15Y25 '{ idx: '{ id: '{x: 46, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32e00000, end_addr: 32'h32f00000},// MagiaTileX14Y25 '{ idx: '{ id: '{x: 45, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32d00000, end_addr: 32'h32e00000},// MagiaTileX13Y25 '{ idx: '{ id: '{x: 44, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32c00000, end_addr: 32'h32d00000},// MagiaTileX12Y25 '{ idx: '{ id: '{x: 43, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32b00000, end_addr: 32'h32c00000},// MagiaTileX11Y25 '{ idx: '{ id: '{x: 42, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32a00000, end_addr: 32'h32b00000},// MagiaTileX10Y25 '{ idx: '{ id: '{x: 41, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32900000, end_addr: 32'h32a00000},// MagiaTileX9Y25 '{ idx: '{ id: '{x: 40, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32800000, end_addr: 32'h32900000},// MagiaTileX8Y25 '{ idx: '{ id: '{x: 39, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32700000, end_addr: 32'h32800000},// MagiaTileX7Y25 '{ idx: '{ id: '{x: 38, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32600000, end_addr: 32'h32700000},// MagiaTileX6Y25 '{ idx: '{ id: '{x: 37, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32500000, end_addr: 32'h32600000},// MagiaTileX5Y25 '{ idx: '{ id: '{x: 36, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32400000, end_addr: 32'h32500000},// MagiaTileX4Y25 '{ idx: '{ id: '{x: 35, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32300000, end_addr: 32'h32400000},// MagiaTileX3Y25 '{ idx: '{ id: '{x: 34, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32200000, end_addr: 32'h32300000},// MagiaTileX2Y25 '{ idx: '{ id: '{x: 33, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32100000, end_addr: 32'h32200000},// MagiaTileX1Y25 '{ idx: '{ id: '{x: 32, y: 25, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h32000000, end_addr: 32'h32100000},// MagiaTileX0Y25 '{ idx: '{ id: '{x: 63, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31f00000, end_addr: 32'h32000000},// MagiaTileX31Y24 '{ idx: '{ id: '{x: 62, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31e00000, end_addr: 32'h31f00000},// MagiaTileX30Y24 '{ idx: '{ id: '{x: 61, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31d00000, end_addr: 32'h31e00000},// MagiaTileX29Y24 '{ idx: '{ id: '{x: 60, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31c00000, end_addr: 32'h31d00000},// MagiaTileX28Y24 '{ idx: '{ id: '{x: 59, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31b00000, end_addr: 32'h31c00000},// MagiaTileX27Y24 '{ idx: '{ id: '{x: 58, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31a00000, end_addr: 32'h31b00000},// MagiaTileX26Y24 '{ idx: '{ id: '{x: 57, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31900000, end_addr: 32'h31a00000},// MagiaTileX25Y24 '{ idx: '{ id: '{x: 56, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31800000, end_addr: 32'h31900000},// MagiaTileX24Y24 '{ idx: '{ id: '{x: 55, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31700000, end_addr: 32'h31800000},// MagiaTileX23Y24 '{ idx: '{ id: '{x: 54, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31600000, end_addr: 32'h31700000},// MagiaTileX22Y24 '{ idx: '{ id: '{x: 53, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31500000, end_addr: 32'h31600000},// MagiaTileX21Y24 '{ idx: '{ id: '{x: 52, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31400000, end_addr: 32'h31500000},// MagiaTileX20Y24 '{ idx: '{ id: '{x: 51, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31300000, end_addr: 32'h31400000},// MagiaTileX19Y24 '{ idx: '{ id: '{x: 50, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31200000, end_addr: 32'h31300000},// MagiaTileX18Y24 '{ idx: '{ id: '{x: 49, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31100000, end_addr: 32'h31200000},// MagiaTileX17Y24 '{ idx: '{ id: '{x: 48, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h31000000, end_addr: 32'h31100000},// MagiaTileX16Y24 '{ idx: '{ id: '{x: 47, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30f00000, end_addr: 32'h31000000},// MagiaTileX15Y24 '{ idx: '{ id: '{x: 46, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30e00000, end_addr: 32'h30f00000},// MagiaTileX14Y24 '{ idx: '{ id: '{x: 45, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30d00000, end_addr: 32'h30e00000},// MagiaTileX13Y24 '{ idx: '{ id: '{x: 44, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30c00000, end_addr: 32'h30d00000},// MagiaTileX12Y24 '{ idx: '{ id: '{x: 43, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30b00000, end_addr: 32'h30c00000},// MagiaTileX11Y24 '{ idx: '{ id: '{x: 42, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30a00000, end_addr: 32'h30b00000},// MagiaTileX10Y24 '{ idx: '{ id: '{x: 41, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30900000, end_addr: 32'h30a00000},// MagiaTileX9Y24 '{ idx: '{ id: '{x: 40, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30800000, end_addr: 32'h30900000},// MagiaTileX8Y24 '{ idx: '{ id: '{x: 39, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30700000, end_addr: 32'h30800000},// MagiaTileX7Y24 '{ idx: '{ id: '{x: 38, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30600000, end_addr: 32'h30700000},// MagiaTileX6Y24 '{ idx: '{ id: '{x: 37, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30500000, end_addr: 32'h30600000},// MagiaTileX5Y24 '{ idx: '{ id: '{x: 36, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30400000, end_addr: 32'h30500000},// MagiaTileX4Y24 '{ idx: '{ id: '{x: 35, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30300000, end_addr: 32'h30400000},// MagiaTileX3Y24 '{ idx: '{ id: '{x: 34, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30200000, end_addr: 32'h30300000},// MagiaTileX2Y24 '{ idx: '{ id: '{x: 33, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30100000, end_addr: 32'h30200000},// MagiaTileX1Y24 '{ idx: '{ id: '{x: 32, y: 24, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h30000000, end_addr: 32'h30100000},// MagiaTileX0Y24 '{ idx: '{ id: '{x: 63, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ff00000, end_addr: 32'h30000000},// MagiaTileX31Y23 '{ idx: '{ id: '{x: 62, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2fe00000, end_addr: 32'h2ff00000},// MagiaTileX30Y23 '{ idx: '{ id: '{x: 61, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2fd00000, end_addr: 32'h2fe00000},// MagiaTileX29Y23 '{ idx: '{ id: '{x: 60, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2fc00000, end_addr: 32'h2fd00000},// MagiaTileX28Y23 '{ idx: '{ id: '{x: 59, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2fb00000, end_addr: 32'h2fc00000},// MagiaTileX27Y23 '{ idx: '{ id: '{x: 58, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2fa00000, end_addr: 32'h2fb00000},// MagiaTileX26Y23 '{ idx: '{ id: '{x: 57, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2f900000, end_addr: 32'h2fa00000},// MagiaTileX25Y23 '{ idx: '{ id: '{x: 56, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2f800000, end_addr: 32'h2f900000},// MagiaTileX24Y23 '{ idx: '{ id: '{x: 55, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2f700000, end_addr: 32'h2f800000},// MagiaTileX23Y23 '{ idx: '{ id: '{x: 54, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2f600000, end_addr: 32'h2f700000},// MagiaTileX22Y23 '{ idx: '{ id: '{x: 53, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2f500000, end_addr: 32'h2f600000},// MagiaTileX21Y23 '{ idx: '{ id: '{x: 52, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2f400000, end_addr: 32'h2f500000},// MagiaTileX20Y23 '{ idx: '{ id: '{x: 51, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2f300000, end_addr: 32'h2f400000},// MagiaTileX19Y23 '{ idx: '{ id: '{x: 50, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2f200000, end_addr: 32'h2f300000},// MagiaTileX18Y23 '{ idx: '{ id: '{x: 49, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2f100000, end_addr: 32'h2f200000},// MagiaTileX17Y23 '{ idx: '{ id: '{x: 48, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2f000000, end_addr: 32'h2f100000},// MagiaTileX16Y23 '{ idx: '{ id: '{x: 47, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ef00000, end_addr: 32'h2f000000},// MagiaTileX15Y23 '{ idx: '{ id: '{x: 46, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ee00000, end_addr: 32'h2ef00000},// MagiaTileX14Y23 '{ idx: '{ id: '{x: 45, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ed00000, end_addr: 32'h2ee00000},// MagiaTileX13Y23 '{ idx: '{ id: '{x: 44, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ec00000, end_addr: 32'h2ed00000},// MagiaTileX12Y23 '{ idx: '{ id: '{x: 43, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2eb00000, end_addr: 32'h2ec00000},// MagiaTileX11Y23 '{ idx: '{ id: '{x: 42, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ea00000, end_addr: 32'h2eb00000},// MagiaTileX10Y23 '{ idx: '{ id: '{x: 41, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2e900000, end_addr: 32'h2ea00000},// MagiaTileX9Y23 '{ idx: '{ id: '{x: 40, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2e800000, end_addr: 32'h2e900000},// MagiaTileX8Y23 '{ idx: '{ id: '{x: 39, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2e700000, end_addr: 32'h2e800000},// MagiaTileX7Y23 '{ idx: '{ id: '{x: 38, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2e600000, end_addr: 32'h2e700000},// MagiaTileX6Y23 '{ idx: '{ id: '{x: 37, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2e500000, end_addr: 32'h2e600000},// MagiaTileX5Y23 '{ idx: '{ id: '{x: 36, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2e400000, end_addr: 32'h2e500000},// MagiaTileX4Y23 '{ idx: '{ id: '{x: 35, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2e300000, end_addr: 32'h2e400000},// MagiaTileX3Y23 '{ idx: '{ id: '{x: 34, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2e200000, end_addr: 32'h2e300000},// MagiaTileX2Y23 '{ idx: '{ id: '{x: 33, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2e100000, end_addr: 32'h2e200000},// MagiaTileX1Y23 '{ idx: '{ id: '{x: 32, y: 23, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2e000000, end_addr: 32'h2e100000},// MagiaTileX0Y23 '{ idx: '{ id: '{x: 63, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2df00000, end_addr: 32'h2e000000},// MagiaTileX31Y22 '{ idx: '{ id: '{x: 62, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2de00000, end_addr: 32'h2df00000},// MagiaTileX30Y22 '{ idx: '{ id: '{x: 61, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2dd00000, end_addr: 32'h2de00000},// MagiaTileX29Y22 '{ idx: '{ id: '{x: 60, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2dc00000, end_addr: 32'h2dd00000},// MagiaTileX28Y22 '{ idx: '{ id: '{x: 59, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2db00000, end_addr: 32'h2dc00000},// MagiaTileX27Y22 '{ idx: '{ id: '{x: 58, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2da00000, end_addr: 32'h2db00000},// MagiaTileX26Y22 '{ idx: '{ id: '{x: 57, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2d900000, end_addr: 32'h2da00000},// MagiaTileX25Y22 '{ idx: '{ id: '{x: 56, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2d800000, end_addr: 32'h2d900000},// MagiaTileX24Y22 '{ idx: '{ id: '{x: 55, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2d700000, end_addr: 32'h2d800000},// MagiaTileX23Y22 '{ idx: '{ id: '{x: 54, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2d600000, end_addr: 32'h2d700000},// MagiaTileX22Y22 '{ idx: '{ id: '{x: 53, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2d500000, end_addr: 32'h2d600000},// MagiaTileX21Y22 '{ idx: '{ id: '{x: 52, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2d400000, end_addr: 32'h2d500000},// MagiaTileX20Y22 '{ idx: '{ id: '{x: 51, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2d300000, end_addr: 32'h2d400000},// MagiaTileX19Y22 '{ idx: '{ id: '{x: 50, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2d200000, end_addr: 32'h2d300000},// MagiaTileX18Y22 '{ idx: '{ id: '{x: 49, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2d100000, end_addr: 32'h2d200000},// MagiaTileX17Y22 '{ idx: '{ id: '{x: 48, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2d000000, end_addr: 32'h2d100000},// MagiaTileX16Y22 '{ idx: '{ id: '{x: 47, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2cf00000, end_addr: 32'h2d000000},// MagiaTileX15Y22 '{ idx: '{ id: '{x: 46, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ce00000, end_addr: 32'h2cf00000},// MagiaTileX14Y22 '{ idx: '{ id: '{x: 45, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2cd00000, end_addr: 32'h2ce00000},// MagiaTileX13Y22 '{ idx: '{ id: '{x: 44, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2cc00000, end_addr: 32'h2cd00000},// MagiaTileX12Y22 '{ idx: '{ id: '{x: 43, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2cb00000, end_addr: 32'h2cc00000},// MagiaTileX11Y22 '{ idx: '{ id: '{x: 42, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ca00000, end_addr: 32'h2cb00000},// MagiaTileX10Y22 '{ idx: '{ id: '{x: 41, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2c900000, end_addr: 32'h2ca00000},// MagiaTileX9Y22 '{ idx: '{ id: '{x: 40, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2c800000, end_addr: 32'h2c900000},// MagiaTileX8Y22 '{ idx: '{ id: '{x: 39, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2c700000, end_addr: 32'h2c800000},// MagiaTileX7Y22 '{ idx: '{ id: '{x: 38, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2c600000, end_addr: 32'h2c700000},// MagiaTileX6Y22 '{ idx: '{ id: '{x: 37, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2c500000, end_addr: 32'h2c600000},// MagiaTileX5Y22 '{ idx: '{ id: '{x: 36, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2c400000, end_addr: 32'h2c500000},// MagiaTileX4Y22 '{ idx: '{ id: '{x: 35, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2c300000, end_addr: 32'h2c400000},// MagiaTileX3Y22 '{ idx: '{ id: '{x: 34, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2c200000, end_addr: 32'h2c300000},// MagiaTileX2Y22 '{ idx: '{ id: '{x: 33, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2c100000, end_addr: 32'h2c200000},// MagiaTileX1Y22 '{ idx: '{ id: '{x: 32, y: 22, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2c000000, end_addr: 32'h2c100000},// MagiaTileX0Y22 '{ idx: '{ id: '{x: 63, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2bf00000, end_addr: 32'h2c000000},// MagiaTileX31Y21 '{ idx: '{ id: '{x: 62, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2be00000, end_addr: 32'h2bf00000},// MagiaTileX30Y21 '{ idx: '{ id: '{x: 61, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2bd00000, end_addr: 32'h2be00000},// MagiaTileX29Y21 '{ idx: '{ id: '{x: 60, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2bc00000, end_addr: 32'h2bd00000},// MagiaTileX28Y21 '{ idx: '{ id: '{x: 59, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2bb00000, end_addr: 32'h2bc00000},// MagiaTileX27Y21 '{ idx: '{ id: '{x: 58, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ba00000, end_addr: 32'h2bb00000},// MagiaTileX26Y21 '{ idx: '{ id: '{x: 57, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2b900000, end_addr: 32'h2ba00000},// MagiaTileX25Y21 '{ idx: '{ id: '{x: 56, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2b800000, end_addr: 32'h2b900000},// MagiaTileX24Y21 '{ idx: '{ id: '{x: 55, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2b700000, end_addr: 32'h2b800000},// MagiaTileX23Y21 '{ idx: '{ id: '{x: 54, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2b600000, end_addr: 32'h2b700000},// MagiaTileX22Y21 '{ idx: '{ id: '{x: 53, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2b500000, end_addr: 32'h2b600000},// MagiaTileX21Y21 '{ idx: '{ id: '{x: 52, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2b400000, end_addr: 32'h2b500000},// MagiaTileX20Y21 '{ idx: '{ id: '{x: 51, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2b300000, end_addr: 32'h2b400000},// MagiaTileX19Y21 '{ idx: '{ id: '{x: 50, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2b200000, end_addr: 32'h2b300000},// MagiaTileX18Y21 '{ idx: '{ id: '{x: 49, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2b100000, end_addr: 32'h2b200000},// MagiaTileX17Y21 '{ idx: '{ id: '{x: 48, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2b000000, end_addr: 32'h2b100000},// MagiaTileX16Y21 '{ idx: '{ id: '{x: 47, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2af00000, end_addr: 32'h2b000000},// MagiaTileX15Y21 '{ idx: '{ id: '{x: 46, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ae00000, end_addr: 32'h2af00000},// MagiaTileX14Y21 '{ idx: '{ id: '{x: 45, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ad00000, end_addr: 32'h2ae00000},// MagiaTileX13Y21 '{ idx: '{ id: '{x: 44, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ac00000, end_addr: 32'h2ad00000},// MagiaTileX12Y21 '{ idx: '{ id: '{x: 43, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2ab00000, end_addr: 32'h2ac00000},// MagiaTileX11Y21 '{ idx: '{ id: '{x: 42, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2aa00000, end_addr: 32'h2ab00000},// MagiaTileX10Y21 '{ idx: '{ id: '{x: 41, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2a900000, end_addr: 32'h2aa00000},// MagiaTileX9Y21 '{ idx: '{ id: '{x: 40, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2a800000, end_addr: 32'h2a900000},// MagiaTileX8Y21 '{ idx: '{ id: '{x: 39, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2a700000, end_addr: 32'h2a800000},// MagiaTileX7Y21 '{ idx: '{ id: '{x: 38, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2a600000, end_addr: 32'h2a700000},// MagiaTileX6Y21 '{ idx: '{ id: '{x: 37, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2a500000, end_addr: 32'h2a600000},// MagiaTileX5Y21 '{ idx: '{ id: '{x: 36, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2a400000, end_addr: 32'h2a500000},// MagiaTileX4Y21 '{ idx: '{ id: '{x: 35, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2a300000, end_addr: 32'h2a400000},// MagiaTileX3Y21 '{ idx: '{ id: '{x: 34, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2a200000, end_addr: 32'h2a300000},// MagiaTileX2Y21 '{ idx: '{ id: '{x: 33, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2a100000, end_addr: 32'h2a200000},// MagiaTileX1Y21 '{ idx: '{ id: '{x: 32, y: 21, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h2a000000, end_addr: 32'h2a100000},// MagiaTileX0Y21 '{ idx: '{ id: '{x: 63, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29f00000, end_addr: 32'h2a000000},// MagiaTileX31Y20 '{ idx: '{ id: '{x: 62, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29e00000, end_addr: 32'h29f00000},// MagiaTileX30Y20 '{ idx: '{ id: '{x: 61, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29d00000, end_addr: 32'h29e00000},// MagiaTileX29Y20 '{ idx: '{ id: '{x: 60, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29c00000, end_addr: 32'h29d00000},// MagiaTileX28Y20 '{ idx: '{ id: '{x: 59, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29b00000, end_addr: 32'h29c00000},// MagiaTileX27Y20 '{ idx: '{ id: '{x: 58, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29a00000, end_addr: 32'h29b00000},// MagiaTileX26Y20 '{ idx: '{ id: '{x: 57, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29900000, end_addr: 32'h29a00000},// MagiaTileX25Y20 '{ idx: '{ id: '{x: 56, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29800000, end_addr: 32'h29900000},// MagiaTileX24Y20 '{ idx: '{ id: '{x: 55, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29700000, end_addr: 32'h29800000},// MagiaTileX23Y20 '{ idx: '{ id: '{x: 54, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29600000, end_addr: 32'h29700000},// MagiaTileX22Y20 '{ idx: '{ id: '{x: 53, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29500000, end_addr: 32'h29600000},// MagiaTileX21Y20 '{ idx: '{ id: '{x: 52, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29400000, end_addr: 32'h29500000},// MagiaTileX20Y20 '{ idx: '{ id: '{x: 51, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29300000, end_addr: 32'h29400000},// MagiaTileX19Y20 '{ idx: '{ id: '{x: 50, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29200000, end_addr: 32'h29300000},// MagiaTileX18Y20 '{ idx: '{ id: '{x: 49, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29100000, end_addr: 32'h29200000},// MagiaTileX17Y20 '{ idx: '{ id: '{x: 48, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h29000000, end_addr: 32'h29100000},// MagiaTileX16Y20 '{ idx: '{ id: '{x: 47, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28f00000, end_addr: 32'h29000000},// MagiaTileX15Y20 '{ idx: '{ id: '{x: 46, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28e00000, end_addr: 32'h28f00000},// MagiaTileX14Y20 '{ idx: '{ id: '{x: 45, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28d00000, end_addr: 32'h28e00000},// MagiaTileX13Y20 '{ idx: '{ id: '{x: 44, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28c00000, end_addr: 32'h28d00000},// MagiaTileX12Y20 '{ idx: '{ id: '{x: 43, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28b00000, end_addr: 32'h28c00000},// MagiaTileX11Y20 '{ idx: '{ id: '{x: 42, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28a00000, end_addr: 32'h28b00000},// MagiaTileX10Y20 '{ idx: '{ id: '{x: 41, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28900000, end_addr: 32'h28a00000},// MagiaTileX9Y20 '{ idx: '{ id: '{x: 40, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28800000, end_addr: 32'h28900000},// MagiaTileX8Y20 '{ idx: '{ id: '{x: 39, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28700000, end_addr: 32'h28800000},// MagiaTileX7Y20 '{ idx: '{ id: '{x: 38, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28600000, end_addr: 32'h28700000},// MagiaTileX6Y20 '{ idx: '{ id: '{x: 37, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28500000, end_addr: 32'h28600000},// MagiaTileX5Y20 '{ idx: '{ id: '{x: 36, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28400000, end_addr: 32'h28500000},// MagiaTileX4Y20 '{ idx: '{ id: '{x: 35, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28300000, end_addr: 32'h28400000},// MagiaTileX3Y20 '{ idx: '{ id: '{x: 34, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28200000, end_addr: 32'h28300000},// MagiaTileX2Y20 '{ idx: '{ id: '{x: 33, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28100000, end_addr: 32'h28200000},// MagiaTileX1Y20 '{ idx: '{ id: '{x: 32, y: 20, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h28000000, end_addr: 32'h28100000},// MagiaTileX0Y20 '{ idx: '{ id: '{x: 63, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27f00000, end_addr: 32'h28000000},// MagiaTileX31Y19 '{ idx: '{ id: '{x: 62, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27e00000, end_addr: 32'h27f00000},// MagiaTileX30Y19 '{ idx: '{ id: '{x: 61, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27d00000, end_addr: 32'h27e00000},// MagiaTileX29Y19 '{ idx: '{ id: '{x: 60, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27c00000, end_addr: 32'h27d00000},// MagiaTileX28Y19 '{ idx: '{ id: '{x: 59, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27b00000, end_addr: 32'h27c00000},// MagiaTileX27Y19 '{ idx: '{ id: '{x: 58, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27a00000, end_addr: 32'h27b00000},// MagiaTileX26Y19 '{ idx: '{ id: '{x: 57, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27900000, end_addr: 32'h27a00000},// MagiaTileX25Y19 '{ idx: '{ id: '{x: 56, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27800000, end_addr: 32'h27900000},// MagiaTileX24Y19 '{ idx: '{ id: '{x: 55, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27700000, end_addr: 32'h27800000},// MagiaTileX23Y19 '{ idx: '{ id: '{x: 54, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27600000, end_addr: 32'h27700000},// MagiaTileX22Y19 '{ idx: '{ id: '{x: 53, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27500000, end_addr: 32'h27600000},// MagiaTileX21Y19 '{ idx: '{ id: '{x: 52, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27400000, end_addr: 32'h27500000},// MagiaTileX20Y19 '{ idx: '{ id: '{x: 51, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27300000, end_addr: 32'h27400000},// MagiaTileX19Y19 '{ idx: '{ id: '{x: 50, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27200000, end_addr: 32'h27300000},// MagiaTileX18Y19 '{ idx: '{ id: '{x: 49, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27100000, end_addr: 32'h27200000},// MagiaTileX17Y19 '{ idx: '{ id: '{x: 48, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h27000000, end_addr: 32'h27100000},// MagiaTileX16Y19 '{ idx: '{ id: '{x: 47, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26f00000, end_addr: 32'h27000000},// MagiaTileX15Y19 '{ idx: '{ id: '{x: 46, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26e00000, end_addr: 32'h26f00000},// MagiaTileX14Y19 '{ idx: '{ id: '{x: 45, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26d00000, end_addr: 32'h26e00000},// MagiaTileX13Y19 '{ idx: '{ id: '{x: 44, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26c00000, end_addr: 32'h26d00000},// MagiaTileX12Y19 '{ idx: '{ id: '{x: 43, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26b00000, end_addr: 32'h26c00000},// MagiaTileX11Y19 '{ idx: '{ id: '{x: 42, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26a00000, end_addr: 32'h26b00000},// MagiaTileX10Y19 '{ idx: '{ id: '{x: 41, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26900000, end_addr: 32'h26a00000},// MagiaTileX9Y19 '{ idx: '{ id: '{x: 40, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26800000, end_addr: 32'h26900000},// MagiaTileX8Y19 '{ idx: '{ id: '{x: 39, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26700000, end_addr: 32'h26800000},// MagiaTileX7Y19 '{ idx: '{ id: '{x: 38, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26600000, end_addr: 32'h26700000},// MagiaTileX6Y19 '{ idx: '{ id: '{x: 37, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26500000, end_addr: 32'h26600000},// MagiaTileX5Y19 '{ idx: '{ id: '{x: 36, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26400000, end_addr: 32'h26500000},// MagiaTileX4Y19 '{ idx: '{ id: '{x: 35, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26300000, end_addr: 32'h26400000},// MagiaTileX3Y19 '{ idx: '{ id: '{x: 34, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26200000, end_addr: 32'h26300000},// MagiaTileX2Y19 '{ idx: '{ id: '{x: 33, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26100000, end_addr: 32'h26200000},// MagiaTileX1Y19 '{ idx: '{ id: '{x: 32, y: 19, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h26000000, end_addr: 32'h26100000},// MagiaTileX0Y19 '{ idx: '{ id: '{x: 63, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25f00000, end_addr: 32'h26000000},// MagiaTileX31Y18 '{ idx: '{ id: '{x: 62, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25e00000, end_addr: 32'h25f00000},// MagiaTileX30Y18 '{ idx: '{ id: '{x: 61, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25d00000, end_addr: 32'h25e00000},// MagiaTileX29Y18 '{ idx: '{ id: '{x: 60, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25c00000, end_addr: 32'h25d00000},// MagiaTileX28Y18 '{ idx: '{ id: '{x: 59, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25b00000, end_addr: 32'h25c00000},// MagiaTileX27Y18 '{ idx: '{ id: '{x: 58, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25a00000, end_addr: 32'h25b00000},// MagiaTileX26Y18 '{ idx: '{ id: '{x: 57, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25900000, end_addr: 32'h25a00000},// MagiaTileX25Y18 '{ idx: '{ id: '{x: 56, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25800000, end_addr: 32'h25900000},// MagiaTileX24Y18 '{ idx: '{ id: '{x: 55, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25700000, end_addr: 32'h25800000},// MagiaTileX23Y18 '{ idx: '{ id: '{x: 54, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25600000, end_addr: 32'h25700000},// MagiaTileX22Y18 '{ idx: '{ id: '{x: 53, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25500000, end_addr: 32'h25600000},// MagiaTileX21Y18 '{ idx: '{ id: '{x: 52, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25400000, end_addr: 32'h25500000},// MagiaTileX20Y18 '{ idx: '{ id: '{x: 51, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25300000, end_addr: 32'h25400000},// MagiaTileX19Y18 '{ idx: '{ id: '{x: 50, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25200000, end_addr: 32'h25300000},// MagiaTileX18Y18 '{ idx: '{ id: '{x: 49, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25100000, end_addr: 32'h25200000},// MagiaTileX17Y18 '{ idx: '{ id: '{x: 48, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h25000000, end_addr: 32'h25100000},// MagiaTileX16Y18 '{ idx: '{ id: '{x: 47, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24f00000, end_addr: 32'h25000000},// MagiaTileX15Y18 '{ idx: '{ id: '{x: 46, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24e00000, end_addr: 32'h24f00000},// MagiaTileX14Y18 '{ idx: '{ id: '{x: 45, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24d00000, end_addr: 32'h24e00000},// MagiaTileX13Y18 '{ idx: '{ id: '{x: 44, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24c00000, end_addr: 32'h24d00000},// MagiaTileX12Y18 '{ idx: '{ id: '{x: 43, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24b00000, end_addr: 32'h24c00000},// MagiaTileX11Y18 '{ idx: '{ id: '{x: 42, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24a00000, end_addr: 32'h24b00000},// MagiaTileX10Y18 '{ idx: '{ id: '{x: 41, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24900000, end_addr: 32'h24a00000},// MagiaTileX9Y18 '{ idx: '{ id: '{x: 40, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24800000, end_addr: 32'h24900000},// MagiaTileX8Y18 '{ idx: '{ id: '{x: 39, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24700000, end_addr: 32'h24800000},// MagiaTileX7Y18 '{ idx: '{ id: '{x: 38, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24600000, end_addr: 32'h24700000},// MagiaTileX6Y18 '{ idx: '{ id: '{x: 37, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24500000, end_addr: 32'h24600000},// MagiaTileX5Y18 '{ idx: '{ id: '{x: 36, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24400000, end_addr: 32'h24500000},// MagiaTileX4Y18 '{ idx: '{ id: '{x: 35, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24300000, end_addr: 32'h24400000},// MagiaTileX3Y18 '{ idx: '{ id: '{x: 34, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24200000, end_addr: 32'h24300000},// MagiaTileX2Y18 '{ idx: '{ id: '{x: 33, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24100000, end_addr: 32'h24200000},// MagiaTileX1Y18 '{ idx: '{ id: '{x: 32, y: 18, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h24000000, end_addr: 32'h24100000},// MagiaTileX0Y18 '{ idx: '{ id: '{x: 63, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23f00000, end_addr: 32'h24000000},// MagiaTileX31Y17 '{ idx: '{ id: '{x: 62, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23e00000, end_addr: 32'h23f00000},// MagiaTileX30Y17 '{ idx: '{ id: '{x: 61, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23d00000, end_addr: 32'h23e00000},// MagiaTileX29Y17 '{ idx: '{ id: '{x: 60, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23c00000, end_addr: 32'h23d00000},// MagiaTileX28Y17 '{ idx: '{ id: '{x: 59, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23b00000, end_addr: 32'h23c00000},// MagiaTileX27Y17 '{ idx: '{ id: '{x: 58, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23a00000, end_addr: 32'h23b00000},// MagiaTileX26Y17 '{ idx: '{ id: '{x: 57, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23900000, end_addr: 32'h23a00000},// MagiaTileX25Y17 '{ idx: '{ id: '{x: 56, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23800000, end_addr: 32'h23900000},// MagiaTileX24Y17 '{ idx: '{ id: '{x: 55, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23700000, end_addr: 32'h23800000},// MagiaTileX23Y17 '{ idx: '{ id: '{x: 54, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23600000, end_addr: 32'h23700000},// MagiaTileX22Y17 '{ idx: '{ id: '{x: 53, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23500000, end_addr: 32'h23600000},// MagiaTileX21Y17 '{ idx: '{ id: '{x: 52, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23400000, end_addr: 32'h23500000},// MagiaTileX20Y17 '{ idx: '{ id: '{x: 51, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23300000, end_addr: 32'h23400000},// MagiaTileX19Y17 '{ idx: '{ id: '{x: 50, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23200000, end_addr: 32'h23300000},// MagiaTileX18Y17 '{ idx: '{ id: '{x: 49, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23100000, end_addr: 32'h23200000},// MagiaTileX17Y17 '{ idx: '{ id: '{x: 48, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h23000000, end_addr: 32'h23100000},// MagiaTileX16Y17 '{ idx: '{ id: '{x: 47, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22f00000, end_addr: 32'h23000000},// MagiaTileX15Y17 '{ idx: '{ id: '{x: 46, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22e00000, end_addr: 32'h22f00000},// MagiaTileX14Y17 '{ idx: '{ id: '{x: 45, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22d00000, end_addr: 32'h22e00000},// MagiaTileX13Y17 '{ idx: '{ id: '{x: 44, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22c00000, end_addr: 32'h22d00000},// MagiaTileX12Y17 '{ idx: '{ id: '{x: 43, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22b00000, end_addr: 32'h22c00000},// MagiaTileX11Y17 '{ idx: '{ id: '{x: 42, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22a00000, end_addr: 32'h22b00000},// MagiaTileX10Y17 '{ idx: '{ id: '{x: 41, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22900000, end_addr: 32'h22a00000},// MagiaTileX9Y17 '{ idx: '{ id: '{x: 40, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22800000, end_addr: 32'h22900000},// MagiaTileX8Y17 '{ idx: '{ id: '{x: 39, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22700000, end_addr: 32'h22800000},// MagiaTileX7Y17 '{ idx: '{ id: '{x: 38, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22600000, end_addr: 32'h22700000},// MagiaTileX6Y17 '{ idx: '{ id: '{x: 37, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22500000, end_addr: 32'h22600000},// MagiaTileX5Y17 '{ idx: '{ id: '{x: 36, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22400000, end_addr: 32'h22500000},// MagiaTileX4Y17 '{ idx: '{ id: '{x: 35, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22300000, end_addr: 32'h22400000},// MagiaTileX3Y17 '{ idx: '{ id: '{x: 34, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22200000, end_addr: 32'h22300000},// MagiaTileX2Y17 '{ idx: '{ id: '{x: 33, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22100000, end_addr: 32'h22200000},// MagiaTileX1Y17 '{ idx: '{ id: '{x: 32, y: 17, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h22000000, end_addr: 32'h22100000},// MagiaTileX0Y17 '{ idx: '{ id: '{x: 63, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21f00000, end_addr: 32'h22000000},// MagiaTileX31Y16 '{ idx: '{ id: '{x: 62, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21e00000, end_addr: 32'h21f00000},// MagiaTileX30Y16 '{ idx: '{ id: '{x: 61, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21d00000, end_addr: 32'h21e00000},// MagiaTileX29Y16 '{ idx: '{ id: '{x: 60, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21c00000, end_addr: 32'h21d00000},// MagiaTileX28Y16 '{ idx: '{ id: '{x: 59, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21b00000, end_addr: 32'h21c00000},// MagiaTileX27Y16 '{ idx: '{ id: '{x: 58, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21a00000, end_addr: 32'h21b00000},// MagiaTileX26Y16 '{ idx: '{ id: '{x: 57, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21900000, end_addr: 32'h21a00000},// MagiaTileX25Y16 '{ idx: '{ id: '{x: 56, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21800000, end_addr: 32'h21900000},// MagiaTileX24Y16 '{ idx: '{ id: '{x: 55, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21700000, end_addr: 32'h21800000},// MagiaTileX23Y16 '{ idx: '{ id: '{x: 54, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21600000, end_addr: 32'h21700000},// MagiaTileX22Y16 '{ idx: '{ id: '{x: 53, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21500000, end_addr: 32'h21600000},// MagiaTileX21Y16 '{ idx: '{ id: '{x: 52, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21400000, end_addr: 32'h21500000},// MagiaTileX20Y16 '{ idx: '{ id: '{x: 51, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21300000, end_addr: 32'h21400000},// MagiaTileX19Y16 '{ idx: '{ id: '{x: 50, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21200000, end_addr: 32'h21300000},// MagiaTileX18Y16 '{ idx: '{ id: '{x: 49, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21100000, end_addr: 32'h21200000},// MagiaTileX17Y16 '{ idx: '{ id: '{x: 48, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h21000000, end_addr: 32'h21100000},// MagiaTileX16Y16 '{ idx: '{ id: '{x: 47, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20f00000, end_addr: 32'h21000000},// MagiaTileX15Y16 '{ idx: '{ id: '{x: 46, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20e00000, end_addr: 32'h20f00000},// MagiaTileX14Y16 '{ idx: '{ id: '{x: 45, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20d00000, end_addr: 32'h20e00000},// MagiaTileX13Y16 '{ idx: '{ id: '{x: 44, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20c00000, end_addr: 32'h20d00000},// MagiaTileX12Y16 '{ idx: '{ id: '{x: 43, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20b00000, end_addr: 32'h20c00000},// MagiaTileX11Y16 '{ idx: '{ id: '{x: 42, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20a00000, end_addr: 32'h20b00000},// MagiaTileX10Y16 '{ idx: '{ id: '{x: 41, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20900000, end_addr: 32'h20a00000},// MagiaTileX9Y16 '{ idx: '{ id: '{x: 40, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20800000, end_addr: 32'h20900000},// MagiaTileX8Y16 '{ idx: '{ id: '{x: 39, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20700000, end_addr: 32'h20800000},// MagiaTileX7Y16 '{ idx: '{ id: '{x: 38, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20600000, end_addr: 32'h20700000},// MagiaTileX6Y16 '{ idx: '{ id: '{x: 37, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20500000, end_addr: 32'h20600000},// MagiaTileX5Y16 '{ idx: '{ id: '{x: 36, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20400000, end_addr: 32'h20500000},// MagiaTileX4Y16 '{ idx: '{ id: '{x: 35, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20300000, end_addr: 32'h20400000},// MagiaTileX3Y16 '{ idx: '{ id: '{x: 34, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20200000, end_addr: 32'h20300000},// MagiaTileX2Y16 '{ idx: '{ id: '{x: 33, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20100000, end_addr: 32'h20200000},// MagiaTileX1Y16 '{ idx: '{ id: '{x: 32, y: 16, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h20000000, end_addr: 32'h20100000},// MagiaTileX0Y16 '{ idx: '{ id: '{x: 63, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ff00000, end_addr: 32'h20000000},// MagiaTileX31Y15 '{ idx: '{ id: '{x: 62, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1fe00000, end_addr: 32'h1ff00000},// MagiaTileX30Y15 '{ idx: '{ id: '{x: 61, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1fd00000, end_addr: 32'h1fe00000},// MagiaTileX29Y15 '{ idx: '{ id: '{x: 60, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1fc00000, end_addr: 32'h1fd00000},// MagiaTileX28Y15 '{ idx: '{ id: '{x: 59, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1fb00000, end_addr: 32'h1fc00000},// MagiaTileX27Y15 '{ idx: '{ id: '{x: 58, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1fa00000, end_addr: 32'h1fb00000},// MagiaTileX26Y15 '{ idx: '{ id: '{x: 57, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1f900000, end_addr: 32'h1fa00000},// MagiaTileX25Y15 '{ idx: '{ id: '{x: 56, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1f800000, end_addr: 32'h1f900000},// MagiaTileX24Y15 '{ idx: '{ id: '{x: 55, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1f700000, end_addr: 32'h1f800000},// MagiaTileX23Y15 '{ idx: '{ id: '{x: 54, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1f600000, end_addr: 32'h1f700000},// MagiaTileX22Y15 '{ idx: '{ id: '{x: 53, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1f500000, end_addr: 32'h1f600000},// MagiaTileX21Y15 '{ idx: '{ id: '{x: 52, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1f400000, end_addr: 32'h1f500000},// MagiaTileX20Y15 '{ idx: '{ id: '{x: 51, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1f300000, end_addr: 32'h1f400000},// MagiaTileX19Y15 '{ idx: '{ id: '{x: 50, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1f200000, end_addr: 32'h1f300000},// MagiaTileX18Y15 '{ idx: '{ id: '{x: 49, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1f100000, end_addr: 32'h1f200000},// MagiaTileX17Y15 '{ idx: '{ id: '{x: 48, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1f000000, end_addr: 32'h1f100000},// MagiaTileX16Y15 '{ idx: '{ id: '{x: 47, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ef00000, end_addr: 32'h1f000000},// MagiaTileX15Y15 '{ idx: '{ id: '{x: 46, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ee00000, end_addr: 32'h1ef00000},// MagiaTileX14Y15 '{ idx: '{ id: '{x: 45, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ed00000, end_addr: 32'h1ee00000},// MagiaTileX13Y15 '{ idx: '{ id: '{x: 44, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ec00000, end_addr: 32'h1ed00000},// MagiaTileX12Y15 '{ idx: '{ id: '{x: 43, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1eb00000, end_addr: 32'h1ec00000},// MagiaTileX11Y15 '{ idx: '{ id: '{x: 42, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ea00000, end_addr: 32'h1eb00000},// MagiaTileX10Y15 '{ idx: '{ id: '{x: 41, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1e900000, end_addr: 32'h1ea00000},// MagiaTileX9Y15 '{ idx: '{ id: '{x: 40, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1e800000, end_addr: 32'h1e900000},// MagiaTileX8Y15 '{ idx: '{ id: '{x: 39, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1e700000, end_addr: 32'h1e800000},// MagiaTileX7Y15 '{ idx: '{ id: '{x: 38, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1e600000, end_addr: 32'h1e700000},// MagiaTileX6Y15 '{ idx: '{ id: '{x: 37, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1e500000, end_addr: 32'h1e600000},// MagiaTileX5Y15 '{ idx: '{ id: '{x: 36, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1e400000, end_addr: 32'h1e500000},// MagiaTileX4Y15 '{ idx: '{ id: '{x: 35, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1e300000, end_addr: 32'h1e400000},// MagiaTileX3Y15 '{ idx: '{ id: '{x: 34, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1e200000, end_addr: 32'h1e300000},// MagiaTileX2Y15 '{ idx: '{ id: '{x: 33, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1e100000, end_addr: 32'h1e200000},// MagiaTileX1Y15 '{ idx: '{ id: '{x: 32, y: 15, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1e000000, end_addr: 32'h1e100000},// MagiaTileX0Y15 '{ idx: '{ id: '{x: 63, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1df00000, end_addr: 32'h1e000000},// MagiaTileX31Y14 '{ idx: '{ id: '{x: 62, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1de00000, end_addr: 32'h1df00000},// MagiaTileX30Y14 '{ idx: '{ id: '{x: 61, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1dd00000, end_addr: 32'h1de00000},// MagiaTileX29Y14 '{ idx: '{ id: '{x: 60, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1dc00000, end_addr: 32'h1dd00000},// MagiaTileX28Y14 '{ idx: '{ id: '{x: 59, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1db00000, end_addr: 32'h1dc00000},// MagiaTileX27Y14 '{ idx: '{ id: '{x: 58, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1da00000, end_addr: 32'h1db00000},// MagiaTileX26Y14 '{ idx: '{ id: '{x: 57, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1d900000, end_addr: 32'h1da00000},// MagiaTileX25Y14 '{ idx: '{ id: '{x: 56, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1d800000, end_addr: 32'h1d900000},// MagiaTileX24Y14 '{ idx: '{ id: '{x: 55, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1d700000, end_addr: 32'h1d800000},// MagiaTileX23Y14 '{ idx: '{ id: '{x: 54, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1d600000, end_addr: 32'h1d700000},// MagiaTileX22Y14 '{ idx: '{ id: '{x: 53, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1d500000, end_addr: 32'h1d600000},// MagiaTileX21Y14 '{ idx: '{ id: '{x: 52, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1d400000, end_addr: 32'h1d500000},// MagiaTileX20Y14 '{ idx: '{ id: '{x: 51, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1d300000, end_addr: 32'h1d400000},// MagiaTileX19Y14 '{ idx: '{ id: '{x: 50, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1d200000, end_addr: 32'h1d300000},// MagiaTileX18Y14 '{ idx: '{ id: '{x: 49, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1d100000, end_addr: 32'h1d200000},// MagiaTileX17Y14 '{ idx: '{ id: '{x: 48, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1d000000, end_addr: 32'h1d100000},// MagiaTileX16Y14 '{ idx: '{ id: '{x: 47, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1cf00000, end_addr: 32'h1d000000},// MagiaTileX15Y14 '{ idx: '{ id: '{x: 46, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ce00000, end_addr: 32'h1cf00000},// MagiaTileX14Y14 '{ idx: '{ id: '{x: 45, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1cd00000, end_addr: 32'h1ce00000},// MagiaTileX13Y14 '{ idx: '{ id: '{x: 44, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1cc00000, end_addr: 32'h1cd00000},// MagiaTileX12Y14 '{ idx: '{ id: '{x: 43, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1cb00000, end_addr: 32'h1cc00000},// MagiaTileX11Y14 '{ idx: '{ id: '{x: 42, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ca00000, end_addr: 32'h1cb00000},// MagiaTileX10Y14 '{ idx: '{ id: '{x: 41, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1c900000, end_addr: 32'h1ca00000},// MagiaTileX9Y14 '{ idx: '{ id: '{x: 40, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1c800000, end_addr: 32'h1c900000},// MagiaTileX8Y14 '{ idx: '{ id: '{x: 39, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1c700000, end_addr: 32'h1c800000},// MagiaTileX7Y14 '{ idx: '{ id: '{x: 38, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1c600000, end_addr: 32'h1c700000},// MagiaTileX6Y14 '{ idx: '{ id: '{x: 37, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1c500000, end_addr: 32'h1c600000},// MagiaTileX5Y14 '{ idx: '{ id: '{x: 36, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1c400000, end_addr: 32'h1c500000},// MagiaTileX4Y14 '{ idx: '{ id: '{x: 35, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1c300000, end_addr: 32'h1c400000},// MagiaTileX3Y14 '{ idx: '{ id: '{x: 34, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1c200000, end_addr: 32'h1c300000},// MagiaTileX2Y14 '{ idx: '{ id: '{x: 33, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1c100000, end_addr: 32'h1c200000},// MagiaTileX1Y14 '{ idx: '{ id: '{x: 32, y: 14, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1c000000, end_addr: 32'h1c100000},// MagiaTileX0Y14 '{ idx: '{ id: '{x: 63, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1bf00000, end_addr: 32'h1c000000},// MagiaTileX31Y13 '{ idx: '{ id: '{x: 62, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1be00000, end_addr: 32'h1bf00000},// MagiaTileX30Y13 '{ idx: '{ id: '{x: 61, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1bd00000, end_addr: 32'h1be00000},// MagiaTileX29Y13 '{ idx: '{ id: '{x: 60, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1bc00000, end_addr: 32'h1bd00000},// MagiaTileX28Y13 '{ idx: '{ id: '{x: 59, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1bb00000, end_addr: 32'h1bc00000},// MagiaTileX27Y13 '{ idx: '{ id: '{x: 58, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ba00000, end_addr: 32'h1bb00000},// MagiaTileX26Y13 '{ idx: '{ id: '{x: 57, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1b900000, end_addr: 32'h1ba00000},// MagiaTileX25Y13 '{ idx: '{ id: '{x: 56, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1b800000, end_addr: 32'h1b900000},// MagiaTileX24Y13 '{ idx: '{ id: '{x: 55, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1b700000, end_addr: 32'h1b800000},// MagiaTileX23Y13 '{ idx: '{ id: '{x: 54, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1b600000, end_addr: 32'h1b700000},// MagiaTileX22Y13 '{ idx: '{ id: '{x: 53, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1b500000, end_addr: 32'h1b600000},// MagiaTileX21Y13 '{ idx: '{ id: '{x: 52, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1b400000, end_addr: 32'h1b500000},// MagiaTileX20Y13 '{ idx: '{ id: '{x: 51, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1b300000, end_addr: 32'h1b400000},// MagiaTileX19Y13 '{ idx: '{ id: '{x: 50, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1b200000, end_addr: 32'h1b300000},// MagiaTileX18Y13 '{ idx: '{ id: '{x: 49, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1b100000, end_addr: 32'h1b200000},// MagiaTileX17Y13 '{ idx: '{ id: '{x: 48, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1b000000, end_addr: 32'h1b100000},// MagiaTileX16Y13 '{ idx: '{ id: '{x: 47, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1af00000, end_addr: 32'h1b000000},// MagiaTileX15Y13 '{ idx: '{ id: '{x: 46, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ae00000, end_addr: 32'h1af00000},// MagiaTileX14Y13 '{ idx: '{ id: '{x: 45, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ad00000, end_addr: 32'h1ae00000},// MagiaTileX13Y13 '{ idx: '{ id: '{x: 44, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ac00000, end_addr: 32'h1ad00000},// MagiaTileX12Y13 '{ idx: '{ id: '{x: 43, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1ab00000, end_addr: 32'h1ac00000},// MagiaTileX11Y13 '{ idx: '{ id: '{x: 42, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1aa00000, end_addr: 32'h1ab00000},// MagiaTileX10Y13 '{ idx: '{ id: '{x: 41, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1a900000, end_addr: 32'h1aa00000},// MagiaTileX9Y13 '{ idx: '{ id: '{x: 40, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1a800000, end_addr: 32'h1a900000},// MagiaTileX8Y13 '{ idx: '{ id: '{x: 39, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1a700000, end_addr: 32'h1a800000},// MagiaTileX7Y13 '{ idx: '{ id: '{x: 38, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1a600000, end_addr: 32'h1a700000},// MagiaTileX6Y13 '{ idx: '{ id: '{x: 37, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1a500000, end_addr: 32'h1a600000},// MagiaTileX5Y13 '{ idx: '{ id: '{x: 36, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1a400000, end_addr: 32'h1a500000},// MagiaTileX4Y13 '{ idx: '{ id: '{x: 35, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1a300000, end_addr: 32'h1a400000},// MagiaTileX3Y13 '{ idx: '{ id: '{x: 34, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1a200000, end_addr: 32'h1a300000},// MagiaTileX2Y13 '{ idx: '{ id: '{x: 33, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1a100000, end_addr: 32'h1a200000},// MagiaTileX1Y13 '{ idx: '{ id: '{x: 32, y: 13, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h1a000000, end_addr: 32'h1a100000},// MagiaTileX0Y13 '{ idx: '{ id: '{x: 63, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19f00000, end_addr: 32'h1a000000},// MagiaTileX31Y12 '{ idx: '{ id: '{x: 62, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19e00000, end_addr: 32'h19f00000},// MagiaTileX30Y12 '{ idx: '{ id: '{x: 61, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19d00000, end_addr: 32'h19e00000},// MagiaTileX29Y12 '{ idx: '{ id: '{x: 60, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19c00000, end_addr: 32'h19d00000},// MagiaTileX28Y12 '{ idx: '{ id: '{x: 59, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19b00000, end_addr: 32'h19c00000},// MagiaTileX27Y12 '{ idx: '{ id: '{x: 58, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19a00000, end_addr: 32'h19b00000},// MagiaTileX26Y12 '{ idx: '{ id: '{x: 57, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19900000, end_addr: 32'h19a00000},// MagiaTileX25Y12 '{ idx: '{ id: '{x: 56, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19800000, end_addr: 32'h19900000},// MagiaTileX24Y12 '{ idx: '{ id: '{x: 55, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19700000, end_addr: 32'h19800000},// MagiaTileX23Y12 '{ idx: '{ id: '{x: 54, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19600000, end_addr: 32'h19700000},// MagiaTileX22Y12 '{ idx: '{ id: '{x: 53, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19500000, end_addr: 32'h19600000},// MagiaTileX21Y12 '{ idx: '{ id: '{x: 52, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19400000, end_addr: 32'h19500000},// MagiaTileX20Y12 '{ idx: '{ id: '{x: 51, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19300000, end_addr: 32'h19400000},// MagiaTileX19Y12 '{ idx: '{ id: '{x: 50, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19200000, end_addr: 32'h19300000},// MagiaTileX18Y12 '{ idx: '{ id: '{x: 49, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19100000, end_addr: 32'h19200000},// MagiaTileX17Y12 '{ idx: '{ id: '{x: 48, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h19000000, end_addr: 32'h19100000},// MagiaTileX16Y12 '{ idx: '{ id: '{x: 47, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18f00000, end_addr: 32'h19000000},// MagiaTileX15Y12 '{ idx: '{ id: '{x: 46, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18e00000, end_addr: 32'h18f00000},// MagiaTileX14Y12 '{ idx: '{ id: '{x: 45, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18d00000, end_addr: 32'h18e00000},// MagiaTileX13Y12 '{ idx: '{ id: '{x: 44, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18c00000, end_addr: 32'h18d00000},// MagiaTileX12Y12 '{ idx: '{ id: '{x: 43, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18b00000, end_addr: 32'h18c00000},// MagiaTileX11Y12 '{ idx: '{ id: '{x: 42, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18a00000, end_addr: 32'h18b00000},// MagiaTileX10Y12 '{ idx: '{ id: '{x: 41, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18900000, end_addr: 32'h18a00000},// MagiaTileX9Y12 '{ idx: '{ id: '{x: 40, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18800000, end_addr: 32'h18900000},// MagiaTileX8Y12 '{ idx: '{ id: '{x: 39, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18700000, end_addr: 32'h18800000},// MagiaTileX7Y12 '{ idx: '{ id: '{x: 38, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18600000, end_addr: 32'h18700000},// MagiaTileX6Y12 '{ idx: '{ id: '{x: 37, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18500000, end_addr: 32'h18600000},// MagiaTileX5Y12 '{ idx: '{ id: '{x: 36, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18400000, end_addr: 32'h18500000},// MagiaTileX4Y12 '{ idx: '{ id: '{x: 35, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18300000, end_addr: 32'h18400000},// MagiaTileX3Y12 '{ idx: '{ id: '{x: 34, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18200000, end_addr: 32'h18300000},// MagiaTileX2Y12 '{ idx: '{ id: '{x: 33, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18100000, end_addr: 32'h18200000},// MagiaTileX1Y12 '{ idx: '{ id: '{x: 32, y: 12, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h18000000, end_addr: 32'h18100000},// MagiaTileX0Y12 '{ idx: '{ id: '{x: 63, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17f00000, end_addr: 32'h18000000},// MagiaTileX31Y11 '{ idx: '{ id: '{x: 62, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17e00000, end_addr: 32'h17f00000},// MagiaTileX30Y11 '{ idx: '{ id: '{x: 61, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17d00000, end_addr: 32'h17e00000},// MagiaTileX29Y11 '{ idx: '{ id: '{x: 60, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17c00000, end_addr: 32'h17d00000},// MagiaTileX28Y11 '{ idx: '{ id: '{x: 59, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17b00000, end_addr: 32'h17c00000},// MagiaTileX27Y11 '{ idx: '{ id: '{x: 58, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17a00000, end_addr: 32'h17b00000},// MagiaTileX26Y11 '{ idx: '{ id: '{x: 57, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17900000, end_addr: 32'h17a00000},// MagiaTileX25Y11 '{ idx: '{ id: '{x: 56, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17800000, end_addr: 32'h17900000},// MagiaTileX24Y11 '{ idx: '{ id: '{x: 55, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17700000, end_addr: 32'h17800000},// MagiaTileX23Y11 '{ idx: '{ id: '{x: 54, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17600000, end_addr: 32'h17700000},// MagiaTileX22Y11 '{ idx: '{ id: '{x: 53, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17500000, end_addr: 32'h17600000},// MagiaTileX21Y11 '{ idx: '{ id: '{x: 52, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17400000, end_addr: 32'h17500000},// MagiaTileX20Y11 '{ idx: '{ id: '{x: 51, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17300000, end_addr: 32'h17400000},// MagiaTileX19Y11 '{ idx: '{ id: '{x: 50, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17200000, end_addr: 32'h17300000},// MagiaTileX18Y11 '{ idx: '{ id: '{x: 49, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17100000, end_addr: 32'h17200000},// MagiaTileX17Y11 '{ idx: '{ id: '{x: 48, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h17000000, end_addr: 32'h17100000},// MagiaTileX16Y11 '{ idx: '{ id: '{x: 47, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16f00000, end_addr: 32'h17000000},// MagiaTileX15Y11 '{ idx: '{ id: '{x: 46, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16e00000, end_addr: 32'h16f00000},// MagiaTileX14Y11 '{ idx: '{ id: '{x: 45, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16d00000, end_addr: 32'h16e00000},// MagiaTileX13Y11 '{ idx: '{ id: '{x: 44, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16c00000, end_addr: 32'h16d00000},// MagiaTileX12Y11 '{ idx: '{ id: '{x: 43, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16b00000, end_addr: 32'h16c00000},// MagiaTileX11Y11 '{ idx: '{ id: '{x: 42, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16a00000, end_addr: 32'h16b00000},// MagiaTileX10Y11 '{ idx: '{ id: '{x: 41, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16900000, end_addr: 32'h16a00000},// MagiaTileX9Y11 '{ idx: '{ id: '{x: 40, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16800000, end_addr: 32'h16900000},// MagiaTileX8Y11 '{ idx: '{ id: '{x: 39, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16700000, end_addr: 32'h16800000},// MagiaTileX7Y11 '{ idx: '{ id: '{x: 38, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16600000, end_addr: 32'h16700000},// MagiaTileX6Y11 '{ idx: '{ id: '{x: 37, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16500000, end_addr: 32'h16600000},// MagiaTileX5Y11 '{ idx: '{ id: '{x: 36, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16400000, end_addr: 32'h16500000},// MagiaTileX4Y11 '{ idx: '{ id: '{x: 35, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16300000, end_addr: 32'h16400000},// MagiaTileX3Y11 '{ idx: '{ id: '{x: 34, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16200000, end_addr: 32'h16300000},// MagiaTileX2Y11 '{ idx: '{ id: '{x: 33, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16100000, end_addr: 32'h16200000},// MagiaTileX1Y11 '{ idx: '{ id: '{x: 32, y: 11, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h16000000, end_addr: 32'h16100000},// MagiaTileX0Y11 '{ idx: '{ id: '{x: 63, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15f00000, end_addr: 32'h16000000},// MagiaTileX31Y10 '{ idx: '{ id: '{x: 62, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15e00000, end_addr: 32'h15f00000},// MagiaTileX30Y10 '{ idx: '{ id: '{x: 61, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15d00000, end_addr: 32'h15e00000},// MagiaTileX29Y10 '{ idx: '{ id: '{x: 60, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15c00000, end_addr: 32'h15d00000},// MagiaTileX28Y10 '{ idx: '{ id: '{x: 59, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15b00000, end_addr: 32'h15c00000},// MagiaTileX27Y10 '{ idx: '{ id: '{x: 58, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15a00000, end_addr: 32'h15b00000},// MagiaTileX26Y10 '{ idx: '{ id: '{x: 57, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15900000, end_addr: 32'h15a00000},// MagiaTileX25Y10 '{ idx: '{ id: '{x: 56, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15800000, end_addr: 32'h15900000},// MagiaTileX24Y10 '{ idx: '{ id: '{x: 55, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15700000, end_addr: 32'h15800000},// MagiaTileX23Y10 '{ idx: '{ id: '{x: 54, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15600000, end_addr: 32'h15700000},// MagiaTileX22Y10 '{ idx: '{ id: '{x: 53, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15500000, end_addr: 32'h15600000},// MagiaTileX21Y10 '{ idx: '{ id: '{x: 52, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15400000, end_addr: 32'h15500000},// MagiaTileX20Y10 '{ idx: '{ id: '{x: 51, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15300000, end_addr: 32'h15400000},// MagiaTileX19Y10 '{ idx: '{ id: '{x: 50, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15200000, end_addr: 32'h15300000},// MagiaTileX18Y10 '{ idx: '{ id: '{x: 49, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15100000, end_addr: 32'h15200000},// MagiaTileX17Y10 '{ idx: '{ id: '{x: 48, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h15000000, end_addr: 32'h15100000},// MagiaTileX16Y10 '{ idx: '{ id: '{x: 47, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14f00000, end_addr: 32'h15000000},// MagiaTileX15Y10 '{ idx: '{ id: '{x: 46, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14e00000, end_addr: 32'h14f00000},// MagiaTileX14Y10 '{ idx: '{ id: '{x: 45, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14d00000, end_addr: 32'h14e00000},// MagiaTileX13Y10 '{ idx: '{ id: '{x: 44, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14c00000, end_addr: 32'h14d00000},// MagiaTileX12Y10 '{ idx: '{ id: '{x: 43, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14b00000, end_addr: 32'h14c00000},// MagiaTileX11Y10 '{ idx: '{ id: '{x: 42, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14a00000, end_addr: 32'h14b00000},// MagiaTileX10Y10 '{ idx: '{ id: '{x: 41, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14900000, end_addr: 32'h14a00000},// MagiaTileX9Y10 '{ idx: '{ id: '{x: 40, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14800000, end_addr: 32'h14900000},// MagiaTileX8Y10 '{ idx: '{ id: '{x: 39, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14700000, end_addr: 32'h14800000},// MagiaTileX7Y10 '{ idx: '{ id: '{x: 38, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14600000, end_addr: 32'h14700000},// MagiaTileX6Y10 '{ idx: '{ id: '{x: 37, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14500000, end_addr: 32'h14600000},// MagiaTileX5Y10 '{ idx: '{ id: '{x: 36, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14400000, end_addr: 32'h14500000},// MagiaTileX4Y10 '{ idx: '{ id: '{x: 35, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14300000, end_addr: 32'h14400000},// MagiaTileX3Y10 '{ idx: '{ id: '{x: 34, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14200000, end_addr: 32'h14300000},// MagiaTileX2Y10 '{ idx: '{ id: '{x: 33, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14100000, end_addr: 32'h14200000},// MagiaTileX1Y10 '{ idx: '{ id: '{x: 32, y: 10, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h14000000, end_addr: 32'h14100000},// MagiaTileX0Y10 '{ idx: '{ id: '{x: 63, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13f00000, end_addr: 32'h14000000},// MagiaTileX31Y9 '{ idx: '{ id: '{x: 62, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13e00000, end_addr: 32'h13f00000},// MagiaTileX30Y9 '{ idx: '{ id: '{x: 61, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13d00000, end_addr: 32'h13e00000},// MagiaTileX29Y9 '{ idx: '{ id: '{x: 60, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13c00000, end_addr: 32'h13d00000},// MagiaTileX28Y9 '{ idx: '{ id: '{x: 59, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13b00000, end_addr: 32'h13c00000},// MagiaTileX27Y9 '{ idx: '{ id: '{x: 58, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13a00000, end_addr: 32'h13b00000},// MagiaTileX26Y9 '{ idx: '{ id: '{x: 57, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13900000, end_addr: 32'h13a00000},// MagiaTileX25Y9 '{ idx: '{ id: '{x: 56, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13800000, end_addr: 32'h13900000},// MagiaTileX24Y9 '{ idx: '{ id: '{x: 55, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13700000, end_addr: 32'h13800000},// MagiaTileX23Y9 '{ idx: '{ id: '{x: 54, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13600000, end_addr: 32'h13700000},// MagiaTileX22Y9 '{ idx: '{ id: '{x: 53, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13500000, end_addr: 32'h13600000},// MagiaTileX21Y9 '{ idx: '{ id: '{x: 52, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13400000, end_addr: 32'h13500000},// MagiaTileX20Y9 '{ idx: '{ id: '{x: 51, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13300000, end_addr: 32'h13400000},// MagiaTileX19Y9 '{ idx: '{ id: '{x: 50, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13200000, end_addr: 32'h13300000},// MagiaTileX18Y9 '{ idx: '{ id: '{x: 49, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13100000, end_addr: 32'h13200000},// MagiaTileX17Y9 '{ idx: '{ id: '{x: 48, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h13000000, end_addr: 32'h13100000},// MagiaTileX16Y9 '{ idx: '{ id: '{x: 47, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12f00000, end_addr: 32'h13000000},// MagiaTileX15Y9 '{ idx: '{ id: '{x: 46, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12e00000, end_addr: 32'h12f00000},// MagiaTileX14Y9 '{ idx: '{ id: '{x: 45, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12d00000, end_addr: 32'h12e00000},// MagiaTileX13Y9 '{ idx: '{ id: '{x: 44, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12c00000, end_addr: 32'h12d00000},// MagiaTileX12Y9 '{ idx: '{ id: '{x: 43, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12b00000, end_addr: 32'h12c00000},// MagiaTileX11Y9 '{ idx: '{ id: '{x: 42, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12a00000, end_addr: 32'h12b00000},// MagiaTileX10Y9 '{ idx: '{ id: '{x: 41, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12900000, end_addr: 32'h12a00000},// MagiaTileX9Y9 '{ idx: '{ id: '{x: 40, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12800000, end_addr: 32'h12900000},// MagiaTileX8Y9 '{ idx: '{ id: '{x: 39, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12700000, end_addr: 32'h12800000},// MagiaTileX7Y9 '{ idx: '{ id: '{x: 38, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12600000, end_addr: 32'h12700000},// MagiaTileX6Y9 '{ idx: '{ id: '{x: 37, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12500000, end_addr: 32'h12600000},// MagiaTileX5Y9 '{ idx: '{ id: '{x: 36, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12400000, end_addr: 32'h12500000},// MagiaTileX4Y9 '{ idx: '{ id: '{x: 35, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12300000, end_addr: 32'h12400000},// MagiaTileX3Y9 '{ idx: '{ id: '{x: 34, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12200000, end_addr: 32'h12300000},// MagiaTileX2Y9 '{ idx: '{ id: '{x: 33, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12100000, end_addr: 32'h12200000},// MagiaTileX1Y9 '{ idx: '{ id: '{x: 32, y: 9, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h12000000, end_addr: 32'h12100000},// MagiaTileX0Y9 '{ idx: '{ id: '{x: 63, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11f00000, end_addr: 32'h12000000},// MagiaTileX31Y8 '{ idx: '{ id: '{x: 62, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11e00000, end_addr: 32'h11f00000},// MagiaTileX30Y8 '{ idx: '{ id: '{x: 61, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11d00000, end_addr: 32'h11e00000},// MagiaTileX29Y8 '{ idx: '{ id: '{x: 60, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11c00000, end_addr: 32'h11d00000},// MagiaTileX28Y8 '{ idx: '{ id: '{x: 59, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11b00000, end_addr: 32'h11c00000},// MagiaTileX27Y8 '{ idx: '{ id: '{x: 58, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11a00000, end_addr: 32'h11b00000},// MagiaTileX26Y8 '{ idx: '{ id: '{x: 57, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11900000, end_addr: 32'h11a00000},// MagiaTileX25Y8 '{ idx: '{ id: '{x: 56, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11800000, end_addr: 32'h11900000},// MagiaTileX24Y8 '{ idx: '{ id: '{x: 55, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11700000, end_addr: 32'h11800000},// MagiaTileX23Y8 '{ idx: '{ id: '{x: 54, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11600000, end_addr: 32'h11700000},// MagiaTileX22Y8 '{ idx: '{ id: '{x: 53, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11500000, end_addr: 32'h11600000},// MagiaTileX21Y8 '{ idx: '{ id: '{x: 52, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11400000, end_addr: 32'h11500000},// MagiaTileX20Y8 '{ idx: '{ id: '{x: 51, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11300000, end_addr: 32'h11400000},// MagiaTileX19Y8 '{ idx: '{ id: '{x: 50, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11200000, end_addr: 32'h11300000},// MagiaTileX18Y8 '{ idx: '{ id: '{x: 49, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11100000, end_addr: 32'h11200000},// MagiaTileX17Y8 '{ idx: '{ id: '{x: 48, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h11000000, end_addr: 32'h11100000},// MagiaTileX16Y8 '{ idx: '{ id: '{x: 47, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10f00000, end_addr: 32'h11000000},// MagiaTileX15Y8 '{ idx: '{ id: '{x: 46, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10e00000, end_addr: 32'h10f00000},// MagiaTileX14Y8 '{ idx: '{ id: '{x: 45, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10d00000, end_addr: 32'h10e00000},// MagiaTileX13Y8 '{ idx: '{ id: '{x: 44, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10c00000, end_addr: 32'h10d00000},// MagiaTileX12Y8 '{ idx: '{ id: '{x: 43, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10b00000, end_addr: 32'h10c00000},// MagiaTileX11Y8 '{ idx: '{ id: '{x: 42, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10a00000, end_addr: 32'h10b00000},// MagiaTileX10Y8 '{ idx: '{ id: '{x: 41, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10900000, end_addr: 32'h10a00000},// MagiaTileX9Y8 '{ idx: '{ id: '{x: 40, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10800000, end_addr: 32'h10900000},// MagiaTileX8Y8 '{ idx: '{ id: '{x: 39, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10700000, end_addr: 32'h10800000},// MagiaTileX7Y8 '{ idx: '{ id: '{x: 38, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10600000, end_addr: 32'h10700000},// MagiaTileX6Y8 '{ idx: '{ id: '{x: 37, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10500000, end_addr: 32'h10600000},// MagiaTileX5Y8 '{ idx: '{ id: '{x: 36, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10400000, end_addr: 32'h10500000},// MagiaTileX4Y8 '{ idx: '{ id: '{x: 35, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10300000, end_addr: 32'h10400000},// MagiaTileX3Y8 '{ idx: '{ id: '{x: 34, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10200000, end_addr: 32'h10300000},// MagiaTileX2Y8 '{ idx: '{ id: '{x: 33, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10100000, end_addr: 32'h10200000},// MagiaTileX1Y8 '{ idx: '{ id: '{x: 32, y: 8, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h10000000, end_addr: 32'h10100000},// MagiaTileX0Y8 '{ idx: '{ id: '{x: 63, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ff00000, end_addr: 32'h10000000},// MagiaTileX31Y7 '{ idx: '{ id: '{x: 62, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0fe00000, end_addr: 32'h0ff00000},// MagiaTileX30Y7 '{ idx: '{ id: '{x: 61, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0fd00000, end_addr: 32'h0fe00000},// MagiaTileX29Y7 '{ idx: '{ id: '{x: 60, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0fc00000, end_addr: 32'h0fd00000},// MagiaTileX28Y7 '{ idx: '{ id: '{x: 59, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0fb00000, end_addr: 32'h0fc00000},// MagiaTileX27Y7 '{ idx: '{ id: '{x: 58, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0fa00000, end_addr: 32'h0fb00000},// MagiaTileX26Y7 '{ idx: '{ id: '{x: 57, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0f900000, end_addr: 32'h0fa00000},// MagiaTileX25Y7 '{ idx: '{ id: '{x: 56, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0f800000, end_addr: 32'h0f900000},// MagiaTileX24Y7 '{ idx: '{ id: '{x: 55, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0f700000, end_addr: 32'h0f800000},// MagiaTileX23Y7 '{ idx: '{ id: '{x: 54, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0f600000, end_addr: 32'h0f700000},// MagiaTileX22Y7 '{ idx: '{ id: '{x: 53, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0f500000, end_addr: 32'h0f600000},// MagiaTileX21Y7 '{ idx: '{ id: '{x: 52, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0f400000, end_addr: 32'h0f500000},// MagiaTileX20Y7 '{ idx: '{ id: '{x: 51, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0f300000, end_addr: 32'h0f400000},// MagiaTileX19Y7 '{ idx: '{ id: '{x: 50, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0f200000, end_addr: 32'h0f300000},// MagiaTileX18Y7 '{ idx: '{ id: '{x: 49, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0f100000, end_addr: 32'h0f200000},// MagiaTileX17Y7 '{ idx: '{ id: '{x: 48, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0f000000, end_addr: 32'h0f100000},// MagiaTileX16Y7 '{ idx: '{ id: '{x: 47, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ef00000, end_addr: 32'h0f000000},// MagiaTileX15Y7 '{ idx: '{ id: '{x: 46, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ee00000, end_addr: 32'h0ef00000},// MagiaTileX14Y7 '{ idx: '{ id: '{x: 45, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ed00000, end_addr: 32'h0ee00000},// MagiaTileX13Y7 '{ idx: '{ id: '{x: 44, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ec00000, end_addr: 32'h0ed00000},// MagiaTileX12Y7 '{ idx: '{ id: '{x: 43, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0eb00000, end_addr: 32'h0ec00000},// MagiaTileX11Y7 '{ idx: '{ id: '{x: 42, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ea00000, end_addr: 32'h0eb00000},// MagiaTileX10Y7 '{ idx: '{ id: '{x: 41, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0e900000, end_addr: 32'h0ea00000},// MagiaTileX9Y7 '{ idx: '{ id: '{x: 40, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0e800000, end_addr: 32'h0e900000},// MagiaTileX8Y7 '{ idx: '{ id: '{x: 39, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0e700000, end_addr: 32'h0e800000},// MagiaTileX7Y7 '{ idx: '{ id: '{x: 38, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0e600000, end_addr: 32'h0e700000},// MagiaTileX6Y7 '{ idx: '{ id: '{x: 37, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0e500000, end_addr: 32'h0e600000},// MagiaTileX5Y7 '{ idx: '{ id: '{x: 36, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0e400000, end_addr: 32'h0e500000},// MagiaTileX4Y7 '{ idx: '{ id: '{x: 35, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0e300000, end_addr: 32'h0e400000},// MagiaTileX3Y7 '{ idx: '{ id: '{x: 34, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0e200000, end_addr: 32'h0e300000},// MagiaTileX2Y7 '{ idx: '{ id: '{x: 33, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0e100000, end_addr: 32'h0e200000},// MagiaTileX1Y7 '{ idx: '{ id: '{x: 32, y: 7, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0e000000, end_addr: 32'h0e100000},// MagiaTileX0Y7 '{ idx: '{ id: '{x: 63, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0df00000, end_addr: 32'h0e000000},// MagiaTileX31Y6 '{ idx: '{ id: '{x: 62, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0de00000, end_addr: 32'h0df00000},// MagiaTileX30Y6 '{ idx: '{ id: '{x: 61, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0dd00000, end_addr: 32'h0de00000},// MagiaTileX29Y6 '{ idx: '{ id: '{x: 60, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0dc00000, end_addr: 32'h0dd00000},// MagiaTileX28Y6 '{ idx: '{ id: '{x: 59, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0db00000, end_addr: 32'h0dc00000},// MagiaTileX27Y6 '{ idx: '{ id: '{x: 58, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0da00000, end_addr: 32'h0db00000},// MagiaTileX26Y6 '{ idx: '{ id: '{x: 57, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0d900000, end_addr: 32'h0da00000},// MagiaTileX25Y6 '{ idx: '{ id: '{x: 56, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0d800000, end_addr: 32'h0d900000},// MagiaTileX24Y6 '{ idx: '{ id: '{x: 55, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0d700000, end_addr: 32'h0d800000},// MagiaTileX23Y6 '{ idx: '{ id: '{x: 54, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0d600000, end_addr: 32'h0d700000},// MagiaTileX22Y6 '{ idx: '{ id: '{x: 53, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0d500000, end_addr: 32'h0d600000},// MagiaTileX21Y6 '{ idx: '{ id: '{x: 52, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0d400000, end_addr: 32'h0d500000},// MagiaTileX20Y6 '{ idx: '{ id: '{x: 51, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0d300000, end_addr: 32'h0d400000},// MagiaTileX19Y6 '{ idx: '{ id: '{x: 50, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0d200000, end_addr: 32'h0d300000},// MagiaTileX18Y6 '{ idx: '{ id: '{x: 49, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0d100000, end_addr: 32'h0d200000},// MagiaTileX17Y6 '{ idx: '{ id: '{x: 48, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0d000000, end_addr: 32'h0d100000},// MagiaTileX16Y6 '{ idx: '{ id: '{x: 47, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0cf00000, end_addr: 32'h0d000000},// MagiaTileX15Y6 '{ idx: '{ id: '{x: 46, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ce00000, end_addr: 32'h0cf00000},// MagiaTileX14Y6 '{ idx: '{ id: '{x: 45, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0cd00000, end_addr: 32'h0ce00000},// MagiaTileX13Y6 '{ idx: '{ id: '{x: 44, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0cc00000, end_addr: 32'h0cd00000},// MagiaTileX12Y6 '{ idx: '{ id: '{x: 43, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0cb00000, end_addr: 32'h0cc00000},// MagiaTileX11Y6 '{ idx: '{ id: '{x: 42, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ca00000, end_addr: 32'h0cb00000},// MagiaTileX10Y6 '{ idx: '{ id: '{x: 41, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0c900000, end_addr: 32'h0ca00000},// MagiaTileX9Y6 '{ idx: '{ id: '{x: 40, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0c800000, end_addr: 32'h0c900000},// MagiaTileX8Y6 '{ idx: '{ id: '{x: 39, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0c700000, end_addr: 32'h0c800000},// MagiaTileX7Y6 '{ idx: '{ id: '{x: 38, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0c600000, end_addr: 32'h0c700000},// MagiaTileX6Y6 '{ idx: '{ id: '{x: 37, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0c500000, end_addr: 32'h0c600000},// MagiaTileX5Y6 '{ idx: '{ id: '{x: 36, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0c400000, end_addr: 32'h0c500000},// MagiaTileX4Y6 '{ idx: '{ id: '{x: 35, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0c300000, end_addr: 32'h0c400000},// MagiaTileX3Y6 '{ idx: '{ id: '{x: 34, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0c200000, end_addr: 32'h0c300000},// MagiaTileX2Y6 '{ idx: '{ id: '{x: 33, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0c100000, end_addr: 32'h0c200000},// MagiaTileX1Y6 '{ idx: '{ id: '{x: 32, y: 6, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0c000000, end_addr: 32'h0c100000},// MagiaTileX0Y6 '{ idx: '{ id: '{x: 63, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0bf00000, end_addr: 32'h0c000000},// MagiaTileX31Y5 '{ idx: '{ id: '{x: 62, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0be00000, end_addr: 32'h0bf00000},// MagiaTileX30Y5 '{ idx: '{ id: '{x: 61, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0bd00000, end_addr: 32'h0be00000},// MagiaTileX29Y5 '{ idx: '{ id: '{x: 60, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0bc00000, end_addr: 32'h0bd00000},// MagiaTileX28Y5 '{ idx: '{ id: '{x: 59, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0bb00000, end_addr: 32'h0bc00000},// MagiaTileX27Y5 '{ idx: '{ id: '{x: 58, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ba00000, end_addr: 32'h0bb00000},// MagiaTileX26Y5 '{ idx: '{ id: '{x: 57, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0b900000, end_addr: 32'h0ba00000},// MagiaTileX25Y5 '{ idx: '{ id: '{x: 56, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0b800000, end_addr: 32'h0b900000},// MagiaTileX24Y5 '{ idx: '{ id: '{x: 55, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0b700000, end_addr: 32'h0b800000},// MagiaTileX23Y5 '{ idx: '{ id: '{x: 54, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0b600000, end_addr: 32'h0b700000},// MagiaTileX22Y5 '{ idx: '{ id: '{x: 53, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0b500000, end_addr: 32'h0b600000},// MagiaTileX21Y5 '{ idx: '{ id: '{x: 52, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0b400000, end_addr: 32'h0b500000},// MagiaTileX20Y5 '{ idx: '{ id: '{x: 51, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0b300000, end_addr: 32'h0b400000},// MagiaTileX19Y5 '{ idx: '{ id: '{x: 50, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0b200000, end_addr: 32'h0b300000},// MagiaTileX18Y5 '{ idx: '{ id: '{x: 49, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0b100000, end_addr: 32'h0b200000},// MagiaTileX17Y5 '{ idx: '{ id: '{x: 48, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0b000000, end_addr: 32'h0b100000},// MagiaTileX16Y5 '{ idx: '{ id: '{x: 47, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0af00000, end_addr: 32'h0b000000},// MagiaTileX15Y5 '{ idx: '{ id: '{x: 46, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ae00000, end_addr: 32'h0af00000},// MagiaTileX14Y5 '{ idx: '{ id: '{x: 45, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ad00000, end_addr: 32'h0ae00000},// MagiaTileX13Y5 '{ idx: '{ id: '{x: 44, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ac00000, end_addr: 32'h0ad00000},// MagiaTileX12Y5 '{ idx: '{ id: '{x: 43, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0ab00000, end_addr: 32'h0ac00000},// MagiaTileX11Y5 '{ idx: '{ id: '{x: 42, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0aa00000, end_addr: 32'h0ab00000},// MagiaTileX10Y5 '{ idx: '{ id: '{x: 41, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0a900000, end_addr: 32'h0aa00000},// MagiaTileX9Y5 '{ idx: '{ id: '{x: 40, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0a800000, end_addr: 32'h0a900000},// MagiaTileX8Y5 '{ idx: '{ id: '{x: 39, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0a700000, end_addr: 32'h0a800000},// MagiaTileX7Y5 '{ idx: '{ id: '{x: 38, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0a600000, end_addr: 32'h0a700000},// MagiaTileX6Y5 '{ idx: '{ id: '{x: 37, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0a500000, end_addr: 32'h0a600000},// MagiaTileX5Y5 '{ idx: '{ id: '{x: 36, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0a400000, end_addr: 32'h0a500000},// MagiaTileX4Y5 '{ idx: '{ id: '{x: 35, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0a300000, end_addr: 32'h0a400000},// MagiaTileX3Y5 '{ idx: '{ id: '{x: 34, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0a200000, end_addr: 32'h0a300000},// MagiaTileX2Y5 '{ idx: '{ id: '{x: 33, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0a100000, end_addr: 32'h0a200000},// MagiaTileX1Y5 '{ idx: '{ id: '{x: 32, y: 5, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h0a000000, end_addr: 32'h0a100000},// MagiaTileX0Y5 '{ idx: '{ id: '{x: 63, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09f00000, end_addr: 32'h0a000000},// MagiaTileX31Y4 '{ idx: '{ id: '{x: 62, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09e00000, end_addr: 32'h09f00000},// MagiaTileX30Y4 '{ idx: '{ id: '{x: 61, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09d00000, end_addr: 32'h09e00000},// MagiaTileX29Y4 '{ idx: '{ id: '{x: 60, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09c00000, end_addr: 32'h09d00000},// MagiaTileX28Y4 '{ idx: '{ id: '{x: 59, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09b00000, end_addr: 32'h09c00000},// MagiaTileX27Y4 '{ idx: '{ id: '{x: 58, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09a00000, end_addr: 32'h09b00000},// MagiaTileX26Y4 '{ idx: '{ id: '{x: 57, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09900000, end_addr: 32'h09a00000},// MagiaTileX25Y4 '{ idx: '{ id: '{x: 56, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09800000, end_addr: 32'h09900000},// MagiaTileX24Y4 '{ idx: '{ id: '{x: 55, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09700000, end_addr: 32'h09800000},// MagiaTileX23Y4 '{ idx: '{ id: '{x: 54, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09600000, end_addr: 32'h09700000},// MagiaTileX22Y4 '{ idx: '{ id: '{x: 53, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09500000, end_addr: 32'h09600000},// MagiaTileX21Y4 '{ idx: '{ id: '{x: 52, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09400000, end_addr: 32'h09500000},// MagiaTileX20Y4 '{ idx: '{ id: '{x: 51, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09300000, end_addr: 32'h09400000},// MagiaTileX19Y4 '{ idx: '{ id: '{x: 50, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09200000, end_addr: 32'h09300000},// MagiaTileX18Y4 '{ idx: '{ id: '{x: 49, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09100000, end_addr: 32'h09200000},// MagiaTileX17Y4 '{ idx: '{ id: '{x: 48, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h09000000, end_addr: 32'h09100000},// MagiaTileX16Y4 '{ idx: '{ id: '{x: 47, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08f00000, end_addr: 32'h09000000},// MagiaTileX15Y4 '{ idx: '{ id: '{x: 46, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08e00000, end_addr: 32'h08f00000},// MagiaTileX14Y4 '{ idx: '{ id: '{x: 45, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08d00000, end_addr: 32'h08e00000},// MagiaTileX13Y4 '{ idx: '{ id: '{x: 44, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08c00000, end_addr: 32'h08d00000},// MagiaTileX12Y4 '{ idx: '{ id: '{x: 43, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08b00000, end_addr: 32'h08c00000},// MagiaTileX11Y4 '{ idx: '{ id: '{x: 42, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08a00000, end_addr: 32'h08b00000},// MagiaTileX10Y4 '{ idx: '{ id: '{x: 41, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08900000, end_addr: 32'h08a00000},// MagiaTileX9Y4 '{ idx: '{ id: '{x: 40, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08800000, end_addr: 32'h08900000},// MagiaTileX8Y4 '{ idx: '{ id: '{x: 39, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08700000, end_addr: 32'h08800000},// MagiaTileX7Y4 '{ idx: '{ id: '{x: 38, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08600000, end_addr: 32'h08700000},// MagiaTileX6Y4 '{ idx: '{ id: '{x: 37, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08500000, end_addr: 32'h08600000},// MagiaTileX5Y4 '{ idx: '{ id: '{x: 36, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08400000, end_addr: 32'h08500000},// MagiaTileX4Y4 '{ idx: '{ id: '{x: 35, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08300000, end_addr: 32'h08400000},// MagiaTileX3Y4 '{ idx: '{ id: '{x: 34, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08200000, end_addr: 32'h08300000},// MagiaTileX2Y4 '{ idx: '{ id: '{x: 33, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08100000, end_addr: 32'h08200000},// MagiaTileX1Y4 '{ idx: '{ id: '{x: 32, y: 4, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h08000000, end_addr: 32'h08100000},// MagiaTileX0Y4 '{ idx: '{ id: '{x: 63, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07f00000, end_addr: 32'h08000000},// MagiaTileX31Y3 '{ idx: '{ id: '{x: 62, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07e00000, end_addr: 32'h07f00000},// MagiaTileX30Y3 '{ idx: '{ id: '{x: 61, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07d00000, end_addr: 32'h07e00000},// MagiaTileX29Y3 '{ idx: '{ id: '{x: 60, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07c00000, end_addr: 32'h07d00000},// MagiaTileX28Y3 '{ idx: '{ id: '{x: 59, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07b00000, end_addr: 32'h07c00000},// MagiaTileX27Y3 '{ idx: '{ id: '{x: 58, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07a00000, end_addr: 32'h07b00000},// MagiaTileX26Y3 '{ idx: '{ id: '{x: 57, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07900000, end_addr: 32'h07a00000},// MagiaTileX25Y3 '{ idx: '{ id: '{x: 56, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07800000, end_addr: 32'h07900000},// MagiaTileX24Y3 '{ idx: '{ id: '{x: 55, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07700000, end_addr: 32'h07800000},// MagiaTileX23Y3 '{ idx: '{ id: '{x: 54, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07600000, end_addr: 32'h07700000},// MagiaTileX22Y3 '{ idx: '{ id: '{x: 53, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07500000, end_addr: 32'h07600000},// MagiaTileX21Y3 '{ idx: '{ id: '{x: 52, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07400000, end_addr: 32'h07500000},// MagiaTileX20Y3 '{ idx: '{ id: '{x: 51, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07300000, end_addr: 32'h07400000},// MagiaTileX19Y3 '{ idx: '{ id: '{x: 50, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07200000, end_addr: 32'h07300000},// MagiaTileX18Y3 '{ idx: '{ id: '{x: 49, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07100000, end_addr: 32'h07200000},// MagiaTileX17Y3 '{ idx: '{ id: '{x: 48, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h07000000, end_addr: 32'h07100000},// MagiaTileX16Y3 '{ idx: '{ id: '{x: 47, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06f00000, end_addr: 32'h07000000},// MagiaTileX15Y3 '{ idx: '{ id: '{x: 46, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06e00000, end_addr: 32'h06f00000},// MagiaTileX14Y3 '{ idx: '{ id: '{x: 45, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06d00000, end_addr: 32'h06e00000},// MagiaTileX13Y3 '{ idx: '{ id: '{x: 44, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06c00000, end_addr: 32'h06d00000},// MagiaTileX12Y3 '{ idx: '{ id: '{x: 43, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06b00000, end_addr: 32'h06c00000},// MagiaTileX11Y3 '{ idx: '{ id: '{x: 42, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06a00000, end_addr: 32'h06b00000},// MagiaTileX10Y3 '{ idx: '{ id: '{x: 41, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06900000, end_addr: 32'h06a00000},// MagiaTileX9Y3 '{ idx: '{ id: '{x: 40, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06800000, end_addr: 32'h06900000},// MagiaTileX8Y3 '{ idx: '{ id: '{x: 39, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06700000, end_addr: 32'h06800000},// MagiaTileX7Y3 '{ idx: '{ id: '{x: 38, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06600000, end_addr: 32'h06700000},// MagiaTileX6Y3 '{ idx: '{ id: '{x: 37, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06500000, end_addr: 32'h06600000},// MagiaTileX5Y3 '{ idx: '{ id: '{x: 36, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06400000, end_addr: 32'h06500000},// MagiaTileX4Y3 '{ idx: '{ id: '{x: 35, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06300000, end_addr: 32'h06400000},// MagiaTileX3Y3 '{ idx: '{ id: '{x: 34, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06200000, end_addr: 32'h06300000},// MagiaTileX2Y3 '{ idx: '{ id: '{x: 33, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06100000, end_addr: 32'h06200000},// MagiaTileX1Y3 '{ idx: '{ id: '{x: 32, y: 3, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h06000000, end_addr: 32'h06100000},// MagiaTileX0Y3 '{ idx: '{ id: '{x: 63, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05f00000, end_addr: 32'h06000000},// MagiaTileX31Y2 '{ idx: '{ id: '{x: 62, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05e00000, end_addr: 32'h05f00000},// MagiaTileX30Y2 '{ idx: '{ id: '{x: 61, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05d00000, end_addr: 32'h05e00000},// MagiaTileX29Y2 '{ idx: '{ id: '{x: 60, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05c00000, end_addr: 32'h05d00000},// MagiaTileX28Y2 '{ idx: '{ id: '{x: 59, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05b00000, end_addr: 32'h05c00000},// MagiaTileX27Y2 '{ idx: '{ id: '{x: 58, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05a00000, end_addr: 32'h05b00000},// MagiaTileX26Y2 '{ idx: '{ id: '{x: 57, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05900000, end_addr: 32'h05a00000},// MagiaTileX25Y2 '{ idx: '{ id: '{x: 56, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05800000, end_addr: 32'h05900000},// MagiaTileX24Y2 '{ idx: '{ id: '{x: 55, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05700000, end_addr: 32'h05800000},// MagiaTileX23Y2 '{ idx: '{ id: '{x: 54, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05600000, end_addr: 32'h05700000},// MagiaTileX22Y2 '{ idx: '{ id: '{x: 53, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05500000, end_addr: 32'h05600000},// MagiaTileX21Y2 '{ idx: '{ id: '{x: 52, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05400000, end_addr: 32'h05500000},// MagiaTileX20Y2 '{ idx: '{ id: '{x: 51, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05300000, end_addr: 32'h05400000},// MagiaTileX19Y2 '{ idx: '{ id: '{x: 50, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05200000, end_addr: 32'h05300000},// MagiaTileX18Y2 '{ idx: '{ id: '{x: 49, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05100000, end_addr: 32'h05200000},// MagiaTileX17Y2 '{ idx: '{ id: '{x: 48, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h05000000, end_addr: 32'h05100000},// MagiaTileX16Y2 '{ idx: '{ id: '{x: 47, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04f00000, end_addr: 32'h05000000},// MagiaTileX15Y2 '{ idx: '{ id: '{x: 46, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04e00000, end_addr: 32'h04f00000},// MagiaTileX14Y2 '{ idx: '{ id: '{x: 45, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04d00000, end_addr: 32'h04e00000},// MagiaTileX13Y2 '{ idx: '{ id: '{x: 44, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04c00000, end_addr: 32'h04d00000},// MagiaTileX12Y2 '{ idx: '{ id: '{x: 43, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04b00000, end_addr: 32'h04c00000},// MagiaTileX11Y2 '{ idx: '{ id: '{x: 42, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04a00000, end_addr: 32'h04b00000},// MagiaTileX10Y2 '{ idx: '{ id: '{x: 41, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04900000, end_addr: 32'h04a00000},// MagiaTileX9Y2 '{ idx: '{ id: '{x: 40, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04800000, end_addr: 32'h04900000},// MagiaTileX8Y2 '{ idx: '{ id: '{x: 39, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04700000, end_addr: 32'h04800000},// MagiaTileX7Y2 '{ idx: '{ id: '{x: 38, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04600000, end_addr: 32'h04700000},// MagiaTileX6Y2 '{ idx: '{ id: '{x: 37, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04500000, end_addr: 32'h04600000},// MagiaTileX5Y2 '{ idx: '{ id: '{x: 36, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04400000, end_addr: 32'h04500000},// MagiaTileX4Y2 '{ idx: '{ id: '{x: 35, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04300000, end_addr: 32'h04400000},// MagiaTileX3Y2 '{ idx: '{ id: '{x: 34, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04200000, end_addr: 32'h04300000},// MagiaTileX2Y2 '{ idx: '{ id: '{x: 33, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04100000, end_addr: 32'h04200000},// MagiaTileX1Y2 '{ idx: '{ id: '{x: 32, y: 2, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h04000000, end_addr: 32'h04100000},// MagiaTileX0Y2 '{ idx: '{ id: '{x: 63, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03f00000, end_addr: 32'h04000000},// MagiaTileX31Y1 '{ idx: '{ id: '{x: 62, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03e00000, end_addr: 32'h03f00000},// MagiaTileX30Y1 '{ idx: '{ id: '{x: 61, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03d00000, end_addr: 32'h03e00000},// MagiaTileX29Y1 '{ idx: '{ id: '{x: 60, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03c00000, end_addr: 32'h03d00000},// MagiaTileX28Y1 '{ idx: '{ id: '{x: 59, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03b00000, end_addr: 32'h03c00000},// MagiaTileX27Y1 '{ idx: '{ id: '{x: 58, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03a00000, end_addr: 32'h03b00000},// MagiaTileX26Y1 '{ idx: '{ id: '{x: 57, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03900000, end_addr: 32'h03a00000},// MagiaTileX25Y1 '{ idx: '{ id: '{x: 56, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03800000, end_addr: 32'h03900000},// MagiaTileX24Y1 '{ idx: '{ id: '{x: 55, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03700000, end_addr: 32'h03800000},// MagiaTileX23Y1 '{ idx: '{ id: '{x: 54, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03600000, end_addr: 32'h03700000},// MagiaTileX22Y1 '{ idx: '{ id: '{x: 53, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03500000, end_addr: 32'h03600000},// MagiaTileX21Y1 '{ idx: '{ id: '{x: 52, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03400000, end_addr: 32'h03500000},// MagiaTileX20Y1 '{ idx: '{ id: '{x: 51, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03300000, end_addr: 32'h03400000},// MagiaTileX19Y1 '{ idx: '{ id: '{x: 50, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03200000, end_addr: 32'h03300000},// MagiaTileX18Y1 '{ idx: '{ id: '{x: 49, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03100000, end_addr: 32'h03200000},// MagiaTileX17Y1 '{ idx: '{ id: '{x: 48, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h03000000, end_addr: 32'h03100000},// MagiaTileX16Y1 '{ idx: '{ id: '{x: 47, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02f00000, end_addr: 32'h03000000},// MagiaTileX15Y1 '{ idx: '{ id: '{x: 46, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02e00000, end_addr: 32'h02f00000},// MagiaTileX14Y1 '{ idx: '{ id: '{x: 45, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02d00000, end_addr: 32'h02e00000},// MagiaTileX13Y1 '{ idx: '{ id: '{x: 44, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02c00000, end_addr: 32'h02d00000},// MagiaTileX12Y1 '{ idx: '{ id: '{x: 43, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02b00000, end_addr: 32'h02c00000},// MagiaTileX11Y1 '{ idx: '{ id: '{x: 42, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02a00000, end_addr: 32'h02b00000},// MagiaTileX10Y1 '{ idx: '{ id: '{x: 41, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02900000, end_addr: 32'h02a00000},// MagiaTileX9Y1 '{ idx: '{ id: '{x: 40, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02800000, end_addr: 32'h02900000},// MagiaTileX8Y1 '{ idx: '{ id: '{x: 39, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02700000, end_addr: 32'h02800000},// MagiaTileX7Y1 '{ idx: '{ id: '{x: 38, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02600000, end_addr: 32'h02700000},// MagiaTileX6Y1 '{ idx: '{ id: '{x: 37, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02500000, end_addr: 32'h02600000},// MagiaTileX5Y1 '{ idx: '{ id: '{x: 36, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02400000, end_addr: 32'h02500000},// MagiaTileX4Y1 '{ idx: '{ id: '{x: 35, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02300000, end_addr: 32'h02400000},// MagiaTileX3Y1 '{ idx: '{ id: '{x: 34, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02200000, end_addr: 32'h02300000},// MagiaTileX2Y1 '{ idx: '{ id: '{x: 33, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02100000, end_addr: 32'h02200000},// MagiaTileX1Y1 '{ idx: '{ id: '{x: 32, y: 1, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h02000000, end_addr: 32'h02100000},// MagiaTileX0Y1 '{ idx: '{ id: '{x: 63, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01f00000, end_addr: 32'h02000000},// MagiaTileX31Y0 '{ idx: '{ id: '{x: 62, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01e00000, end_addr: 32'h01f00000},// MagiaTileX30Y0 '{ idx: '{ id: '{x: 61, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01d00000, end_addr: 32'h01e00000},// MagiaTileX29Y0 '{ idx: '{ id: '{x: 60, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01c00000, end_addr: 32'h01d00000},// MagiaTileX28Y0 '{ idx: '{ id: '{x: 59, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01b00000, end_addr: 32'h01c00000},// MagiaTileX27Y0 '{ idx: '{ id: '{x: 58, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01a00000, end_addr: 32'h01b00000},// MagiaTileX26Y0 '{ idx: '{ id: '{x: 57, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01900000, end_addr: 32'h01a00000},// MagiaTileX25Y0 '{ idx: '{ id: '{x: 56, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01800000, end_addr: 32'h01900000},// MagiaTileX24Y0 '{ idx: '{ id: '{x: 55, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01700000, end_addr: 32'h01800000},// MagiaTileX23Y0 '{ idx: '{ id: '{x: 54, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01600000, end_addr: 32'h01700000},// MagiaTileX22Y0 '{ idx: '{ id: '{x: 53, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01500000, end_addr: 32'h01600000},// MagiaTileX21Y0 '{ idx: '{ id: '{x: 52, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01400000, end_addr: 32'h01500000},// MagiaTileX20Y0 '{ idx: '{ id: '{x: 51, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01300000, end_addr: 32'h01400000},// MagiaTileX19Y0 '{ idx: '{ id: '{x: 50, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01200000, end_addr: 32'h01300000},// MagiaTileX18Y0 '{ idx: '{ id: '{x: 49, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01100000, end_addr: 32'h01200000},// MagiaTileX17Y0 '{ idx: '{ id: '{x: 48, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h01000000, end_addr: 32'h01100000},// MagiaTileX16Y0 '{ idx: '{ id: '{x: 47, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00f00000, end_addr: 32'h01000000},// MagiaTileX15Y0 '{ idx: '{ id: '{x: 46, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00e00000, end_addr: 32'h00f00000},// MagiaTileX14Y0 '{ idx: '{ id: '{x: 45, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00d00000, end_addr: 32'h00e00000},// MagiaTileX13Y0 '{ idx: '{ id: '{x: 44, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00c00000, end_addr: 32'h00d00000},// MagiaTileX12Y0 '{ idx: '{ id: '{x: 43, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00b00000, end_addr: 32'h00c00000},// MagiaTileX11Y0 '{ idx: '{ id: '{x: 42, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00a00000, end_addr: 32'h00b00000},// MagiaTileX10Y0 '{ idx: '{ id: '{x: 41, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00900000, end_addr: 32'h00a00000},// MagiaTileX9Y0 '{ idx: '{ id: '{x: 40, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00800000, end_addr: 32'h00900000},// MagiaTileX8Y0 '{ idx: '{ id: '{x: 39, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00700000, end_addr: 32'h00800000},// MagiaTileX7Y0 '{ idx: '{ id: '{x: 38, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00600000, end_addr: 32'h00700000},// MagiaTileX6Y0 '{ idx: '{ id: '{x: 37, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00500000, end_addr: 32'h00600000},// MagiaTileX5Y0 '{ idx: '{ id: '{x: 36, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00400000, end_addr: 32'h00500000},// MagiaTileX4Y0 '{ idx: '{ id: '{x: 35, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00300000, end_addr: 32'h00400000},// MagiaTileX3Y0 '{ idx: '{ id: '{x: 34, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00200000, end_addr: 32'h00300000},// MagiaTileX2Y0 '{ idx: '{ id: '{x: 33, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00100000, end_addr: 32'h00200000},// MagiaTileX1Y0 '{ idx: '{ id: '{x: 32, y: 0, port_id: 0}, - mask_x: '{ offset: 25, + mask_x: '{ offset: 20, len: 5, base_id: 32}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 25, len: 5, base_id: 0}}, start_addr: 32'h00000000, @@ -14766,16 +14766,16 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ EnIntMinU: 1'b1, EnIntMaxS: 1'b1, EnIntMaxU: 1'b1}, - NarrRedCfg: RedDefaultCfg, - WideRedCfg: '{ RdPipelineDepth: 0, - CutOffloadIntf: 1'b0}}}; + NarrRedCfg: '{ RdPipelineDepth: 0, + CutOffloadIntf: 1'b0}, + WideRedCfg: RedDefaultCfg}}; typedef logic[31:0] collective_axi_narrow_data_mst_addr_t; typedef logic[31:0] collective_axi_narrow_data_mst_data_t; typedef logic[3:0] collective_axi_narrow_data_mst_strb_t; -typedef logic[1:0] collective_axi_narrow_data_mst_id_t; +typedef logic[2:0] collective_axi_narrow_data_mst_id_t; typedef struct packed { logic [31:0] collective_mask; logic [3:0] collective_op; @@ -14795,7 +14795,7 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; typedef logic[31:0] collective_axi_narrow_data_slv_addr_t; typedef logic[31:0] collective_axi_narrow_data_slv_data_t; typedef logic[3:0] collective_axi_narrow_data_slv_strb_t; -typedef logic[3:0] collective_axi_narrow_data_slv_id_t; +typedef logic[5:0] collective_axi_narrow_data_slv_id_t; typedef struct packed { logic [31:0] collective_mask; logic [3:0] collective_op; @@ -14827,7 +14827,7 @@ typedef struct packed { typedef logic[31:0] axi_wide_data_mst_addr_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; -typedef logic[2:0] axi_wide_data_mst_id_t; +typedef logic[1:0] axi_wide_data_mst_id_t; typedef logic[0:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) @@ -14847,7 +14847,7 @@ typedef struct packed { typedef logic[31:0] axi_wide_data_slv_addr_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; -typedef logic[2:0] axi_wide_data_slv_id_t; +typedef logic[1:0] axi_wide_data_slv_id_t; typedef logic[0:0] axi_wide_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_slv, axi_wide_data_slv_req_t, axi_wide_data_slv_rsp_t, axi_wide_data_slv_addr_t, axi_wide_data_slv_id_t, axi_wide_data_slv_data_t, axi_wide_data_slv_strb_t, axi_wide_data_slv_user_t) @@ -14861,15 +14861,16 @@ typedef logic[0:0] axi_wide_data_slv_user_t; UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - InIdWidth: 3, - OutIdWidth: 3, + InIdWidth: 2, + OutIdWidth: 2, UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) - typedef logic [AxiCfgW.DataWidth-1:0] floo_wide_red_data_t; -`FLOO_RED_TYPEDEF_REQ_RSP_LINK(wide, floo_wide_red_data_t, wide_req, wide_rsp) + typedef logic [AxiCfgN.DataWidth-1:0] floo_narrow_red_data_t; +`FLOO_RED_TYPEDEF_REQ_RSP_LINK(narrow, floo_narrow_red_data_t, narrow_req, narrow_rsp) + endpackage diff --git a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv index 7178f41d..1da3afd5 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_4x4_noc.sv @@ -206,145 +206,145 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ start_addr: 32'hc0000000, end_addr: 32'hd0000000},// L20 '{ idx: '{ id: '{x: 7, y: 3, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00f00000, end_addr: 32'h01000000},// MagiaTileX3Y3 '{ idx: '{ id: '{x: 6, y: 3, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00e00000, end_addr: 32'h00f00000},// MagiaTileX2Y3 '{ idx: '{ id: '{x: 5, y: 3, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00d00000, end_addr: 32'h00e00000},// MagiaTileX1Y3 '{ idx: '{ id: '{x: 4, y: 3, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00c00000, end_addr: 32'h00d00000},// MagiaTileX0Y3 '{ idx: '{ id: '{x: 7, y: 2, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00b00000, end_addr: 32'h00c00000},// MagiaTileX3Y2 '{ idx: '{ id: '{x: 6, y: 2, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00a00000, end_addr: 32'h00b00000},// MagiaTileX2Y2 '{ idx: '{ id: '{x: 5, y: 2, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00900000, end_addr: 32'h00a00000},// MagiaTileX1Y2 '{ idx: '{ id: '{x: 4, y: 2, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00800000, end_addr: 32'h00900000},// MagiaTileX0Y2 '{ idx: '{ id: '{x: 7, y: 1, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00700000, end_addr: 32'h00800000},// MagiaTileX3Y1 '{ idx: '{ id: '{x: 6, y: 1, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00600000, end_addr: 32'h00700000},// MagiaTileX2Y1 '{ idx: '{ id: '{x: 5, y: 1, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00500000, end_addr: 32'h00600000},// MagiaTileX1Y1 '{ idx: '{ id: '{x: 4, y: 1, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00400000, end_addr: 32'h00500000},// MagiaTileX0Y1 '{ idx: '{ id: '{x: 7, y: 0, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00300000, end_addr: 32'h00400000},// MagiaTileX3Y0 '{ idx: '{ id: '{x: 6, y: 0, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00200000, end_addr: 32'h00300000},// MagiaTileX2Y0 '{ idx: '{ id: '{x: 5, y: 0, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00100000, end_addr: 32'h00200000},// MagiaTileX1Y0 '{ idx: '{ id: '{x: 4, y: 0, port_id: 0}, - mask_x: '{ offset: 22, + mask_x: '{ offset: 20, len: 2, base_id: 4}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 22, len: 2, base_id: 0}}, start_addr: 32'h00000000, @@ -374,7 +374,8 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ EnIntMinU: 1'b1, EnIntMaxS: 1'b1, EnIntMaxU: 1'b1}, - NarrRedCfg: RedDefaultCfg, + NarrRedCfg: '{ RdPipelineDepth: 0, + CutOffloadIntf: 1'b0}, WideRedCfg: RedDefaultCfg}}; @@ -382,7 +383,7 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ typedef logic[31:0] collective_axi_narrow_data_mst_addr_t; typedef logic[31:0] collective_axi_narrow_data_mst_data_t; typedef logic[3:0] collective_axi_narrow_data_mst_strb_t; -typedef logic[1:0] collective_axi_narrow_data_mst_id_t; +typedef logic[2:0] collective_axi_narrow_data_mst_id_t; typedef struct packed { logic [31:0] collective_mask; logic [3:0] collective_op; @@ -402,7 +403,7 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; typedef logic[31:0] collective_axi_narrow_data_slv_addr_t; typedef logic[31:0] collective_axi_narrow_data_slv_data_t; typedef logic[3:0] collective_axi_narrow_data_slv_strb_t; -typedef logic[3:0] collective_axi_narrow_data_slv_id_t; +typedef logic[5:0] collective_axi_narrow_data_slv_id_t; typedef struct packed { logic [31:0] collective_mask; logic [3:0] collective_op; @@ -434,7 +435,7 @@ typedef struct packed { typedef logic[31:0] axi_wide_data_mst_addr_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; -typedef logic[2:0] axi_wide_data_mst_id_t; +typedef logic[1:0] axi_wide_data_mst_id_t; typedef logic[0:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) @@ -454,7 +455,7 @@ typedef struct packed { typedef logic[31:0] axi_wide_data_slv_addr_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; -typedef logic[2:0] axi_wide_data_slv_id_t; +typedef logic[1:0] axi_wide_data_slv_id_t; typedef logic[0:0] axi_wide_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_slv, axi_wide_data_slv_req_t, axi_wide_data_slv_rsp_t, axi_wide_data_slv_addr_t, axi_wide_data_slv_id_t, axi_wide_data_slv_data_t, axi_wide_data_slv_strb_t, axi_wide_data_slv_user_t) @@ -463,17 +464,21 @@ typedef logic[0:0] axi_wide_data_slv_user_t; `FLOO_TYPEDEF_HDR_T(hdr_t, id_t, id_t, nw_ch_e, rob_idx_t, id_t, collect_op_t) localparam axi_cfg_t AxiCfgN = '{ AddrWidth: 32, DataWidth: 32, - UserWidth: 1, InIdWidth: 6, - OutIdWidth: 3}; + OutIdWidth: 3, + UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - UserWidth: 1, - InIdWidth: 3, - OutIdWidth: 3}; + InIdWidth: 2, + OutIdWidth: 2, + UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) + typedef logic [AxiCfgN.DataWidth-1:0] floo_narrow_red_data_t; +`FLOO_RED_TYPEDEF_REQ_RSP_LINK(narrow, floo_narrow_red_data_t, narrow_req, narrow_rsp) + + endpackage diff --git a/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv b/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv index 8fa7b5b8..6d6552b3 100644 --- a/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv +++ b/hw/mesh/noc/floo_axi_nw_mesh_8x8_noc.sv @@ -486,577 +486,577 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ start_addr: 32'hc0000000, end_addr: 32'hc8000000},// L20 '{ idx: '{ id: '{x: 15, y: 7, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03f00000, end_addr: 32'h04000000},// MagiaTileX7Y7 '{ idx: '{ id: '{x: 14, y: 7, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03e00000, end_addr: 32'h03f00000},// MagiaTileX6Y7 '{ idx: '{ id: '{x: 13, y: 7, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03d00000, end_addr: 32'h03e00000},// MagiaTileX5Y7 '{ idx: '{ id: '{x: 12, y: 7, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03c00000, end_addr: 32'h03d00000},// MagiaTileX4Y7 '{ idx: '{ id: '{x: 11, y: 7, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03b00000, end_addr: 32'h03c00000},// MagiaTileX3Y7 '{ idx: '{ id: '{x: 10, y: 7, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03a00000, end_addr: 32'h03b00000},// MagiaTileX2Y7 '{ idx: '{ id: '{x: 9, y: 7, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03900000, end_addr: 32'h03a00000},// MagiaTileX1Y7 '{ idx: '{ id: '{x: 8, y: 7, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03800000, end_addr: 32'h03900000},// MagiaTileX0Y7 '{ idx: '{ id: '{x: 15, y: 6, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03700000, end_addr: 32'h03800000},// MagiaTileX7Y6 '{ idx: '{ id: '{x: 14, y: 6, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03600000, end_addr: 32'h03700000},// MagiaTileX6Y6 '{ idx: '{ id: '{x: 13, y: 6, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03500000, end_addr: 32'h03600000},// MagiaTileX5Y6 '{ idx: '{ id: '{x: 12, y: 6, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03400000, end_addr: 32'h03500000},// MagiaTileX4Y6 '{ idx: '{ id: '{x: 11, y: 6, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03300000, end_addr: 32'h03400000},// MagiaTileX3Y6 '{ idx: '{ id: '{x: 10, y: 6, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03200000, end_addr: 32'h03300000},// MagiaTileX2Y6 '{ idx: '{ id: '{x: 9, y: 6, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03100000, end_addr: 32'h03200000},// MagiaTileX1Y6 '{ idx: '{ id: '{x: 8, y: 6, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h03000000, end_addr: 32'h03100000},// MagiaTileX0Y6 '{ idx: '{ id: '{x: 15, y: 5, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02f00000, end_addr: 32'h03000000},// MagiaTileX7Y5 '{ idx: '{ id: '{x: 14, y: 5, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02e00000, end_addr: 32'h02f00000},// MagiaTileX6Y5 '{ idx: '{ id: '{x: 13, y: 5, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02d00000, end_addr: 32'h02e00000},// MagiaTileX5Y5 '{ idx: '{ id: '{x: 12, y: 5, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02c00000, end_addr: 32'h02d00000},// MagiaTileX4Y5 '{ idx: '{ id: '{x: 11, y: 5, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02b00000, end_addr: 32'h02c00000},// MagiaTileX3Y5 '{ idx: '{ id: '{x: 10, y: 5, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02a00000, end_addr: 32'h02b00000},// MagiaTileX2Y5 '{ idx: '{ id: '{x: 9, y: 5, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02900000, end_addr: 32'h02a00000},// MagiaTileX1Y5 '{ idx: '{ id: '{x: 8, y: 5, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02800000, end_addr: 32'h02900000},// MagiaTileX0Y5 '{ idx: '{ id: '{x: 15, y: 4, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02700000, end_addr: 32'h02800000},// MagiaTileX7Y4 '{ idx: '{ id: '{x: 14, y: 4, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02600000, end_addr: 32'h02700000},// MagiaTileX6Y4 '{ idx: '{ id: '{x: 13, y: 4, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02500000, end_addr: 32'h02600000},// MagiaTileX5Y4 '{ idx: '{ id: '{x: 12, y: 4, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02400000, end_addr: 32'h02500000},// MagiaTileX4Y4 '{ idx: '{ id: '{x: 11, y: 4, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02300000, end_addr: 32'h02400000},// MagiaTileX3Y4 '{ idx: '{ id: '{x: 10, y: 4, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02200000, end_addr: 32'h02300000},// MagiaTileX2Y4 '{ idx: '{ id: '{x: 9, y: 4, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02100000, end_addr: 32'h02200000},// MagiaTileX1Y4 '{ idx: '{ id: '{x: 8, y: 4, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h02000000, end_addr: 32'h02100000},// MagiaTileX0Y4 '{ idx: '{ id: '{x: 15, y: 3, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01f00000, end_addr: 32'h02000000},// MagiaTileX7Y3 '{ idx: '{ id: '{x: 14, y: 3, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01e00000, end_addr: 32'h01f00000},// MagiaTileX6Y3 '{ idx: '{ id: '{x: 13, y: 3, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01d00000, end_addr: 32'h01e00000},// MagiaTileX5Y3 '{ idx: '{ id: '{x: 12, y: 3, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01c00000, end_addr: 32'h01d00000},// MagiaTileX4Y3 '{ idx: '{ id: '{x: 11, y: 3, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01b00000, end_addr: 32'h01c00000},// MagiaTileX3Y3 '{ idx: '{ id: '{x: 10, y: 3, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01a00000, end_addr: 32'h01b00000},// MagiaTileX2Y3 '{ idx: '{ id: '{x: 9, y: 3, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01900000, end_addr: 32'h01a00000},// MagiaTileX1Y3 '{ idx: '{ id: '{x: 8, y: 3, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01800000, end_addr: 32'h01900000},// MagiaTileX0Y3 '{ idx: '{ id: '{x: 15, y: 2, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01700000, end_addr: 32'h01800000},// MagiaTileX7Y2 '{ idx: '{ id: '{x: 14, y: 2, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01600000, end_addr: 32'h01700000},// MagiaTileX6Y2 '{ idx: '{ id: '{x: 13, y: 2, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01500000, end_addr: 32'h01600000},// MagiaTileX5Y2 '{ idx: '{ id: '{x: 12, y: 2, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01400000, end_addr: 32'h01500000},// MagiaTileX4Y2 '{ idx: '{ id: '{x: 11, y: 2, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01300000, end_addr: 32'h01400000},// MagiaTileX3Y2 '{ idx: '{ id: '{x: 10, y: 2, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01200000, end_addr: 32'h01300000},// MagiaTileX2Y2 '{ idx: '{ id: '{x: 9, y: 2, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01100000, end_addr: 32'h01200000},// MagiaTileX1Y2 '{ idx: '{ id: '{x: 8, y: 2, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h01000000, end_addr: 32'h01100000},// MagiaTileX0Y2 '{ idx: '{ id: '{x: 15, y: 1, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00f00000, end_addr: 32'h01000000},// MagiaTileX7Y1 '{ idx: '{ id: '{x: 14, y: 1, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00e00000, end_addr: 32'h00f00000},// MagiaTileX6Y1 '{ idx: '{ id: '{x: 13, y: 1, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00d00000, end_addr: 32'h00e00000},// MagiaTileX5Y1 '{ idx: '{ id: '{x: 12, y: 1, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00c00000, end_addr: 32'h00d00000},// MagiaTileX4Y1 '{ idx: '{ id: '{x: 11, y: 1, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00b00000, end_addr: 32'h00c00000},// MagiaTileX3Y1 '{ idx: '{ id: '{x: 10, y: 1, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00a00000, end_addr: 32'h00b00000},// MagiaTileX2Y1 '{ idx: '{ id: '{x: 9, y: 1, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00900000, end_addr: 32'h00a00000},// MagiaTileX1Y1 '{ idx: '{ id: '{x: 8, y: 1, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00800000, end_addr: 32'h00900000},// MagiaTileX0Y1 '{ idx: '{ id: '{x: 15, y: 0, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00700000, end_addr: 32'h00800000},// MagiaTileX7Y0 '{ idx: '{ id: '{x: 14, y: 0, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00600000, end_addr: 32'h00700000},// MagiaTileX6Y0 '{ idx: '{ id: '{x: 13, y: 0, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00500000, end_addr: 32'h00600000},// MagiaTileX5Y0 '{ idx: '{ id: '{x: 12, y: 0, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00400000, end_addr: 32'h00500000},// MagiaTileX4Y0 '{ idx: '{ id: '{x: 11, y: 0, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00300000, end_addr: 32'h00400000},// MagiaTileX3Y0 '{ idx: '{ id: '{x: 10, y: 0, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00200000, end_addr: 32'h00300000},// MagiaTileX2Y0 '{ idx: '{ id: '{x: 9, y: 0, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00100000, end_addr: 32'h00200000},// MagiaTileX1Y0 '{ idx: '{ id: '{x: 8, y: 0, port_id: 0}, - mask_x: '{ offset: 23, + mask_x: '{ offset: 20, len: 3, base_id: 8}, - mask_y: '{ offset: 20, + mask_y: '{ offset: 23, len: 3, base_id: 0}}, start_addr: 32'h00000000, @@ -1086,16 +1086,16 @@ localparam collective_sam_rule_t[CollectiveSamNumRules-1:0] CollectiveSam = '{ EnIntMinU: 1'b1, EnIntMaxS: 1'b1, EnIntMaxU: 1'b1}, - NarrRedCfg: RedDefaultCfg, - WideRedCfg: '{ RdPipelineDepth: 0, - CutOffloadIntf: 1'b0}}}; + NarrRedCfg: '{ RdPipelineDepth: 0, + CutOffloadIntf: 1'b0}, + WideRedCfg: RedDefaultCfg}}; typedef logic[31:0] collective_axi_narrow_data_mst_addr_t; typedef logic[31:0] collective_axi_narrow_data_mst_data_t; typedef logic[3:0] collective_axi_narrow_data_mst_strb_t; -typedef logic[1:0] collective_axi_narrow_data_mst_id_t; +typedef logic[2:0] collective_axi_narrow_data_mst_id_t; typedef struct packed { logic [31:0] collective_mask; logic [3:0] collective_op; @@ -1115,7 +1115,7 @@ typedef logic[0:0] axi_narrow_data_mst_user_t; typedef logic[31:0] collective_axi_narrow_data_slv_addr_t; typedef logic[31:0] collective_axi_narrow_data_slv_data_t; typedef logic[3:0] collective_axi_narrow_data_slv_strb_t; -typedef logic[3:0] collective_axi_narrow_data_slv_id_t; +typedef logic[5:0] collective_axi_narrow_data_slv_id_t; typedef struct packed { logic [31:0] collective_mask; logic [3:0] collective_op; @@ -1147,7 +1147,7 @@ typedef struct packed { typedef logic[31:0] axi_wide_data_mst_addr_t; typedef logic[255:0] axi_wide_data_mst_data_t; typedef logic[31:0] axi_wide_data_mst_strb_t; -typedef logic[2:0] axi_wide_data_mst_id_t; +typedef logic[1:0] axi_wide_data_mst_id_t; typedef logic[0:0] axi_wide_data_mst_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_mst, axi_wide_data_mst_req_t, axi_wide_data_mst_rsp_t, axi_wide_data_mst_addr_t, axi_wide_data_mst_id_t, axi_wide_data_mst_data_t, axi_wide_data_mst_strb_t, axi_wide_data_mst_user_t) @@ -1167,7 +1167,7 @@ typedef struct packed { typedef logic[31:0] axi_wide_data_slv_addr_t; typedef logic[255:0] axi_wide_data_slv_data_t; typedef logic[31:0] axi_wide_data_slv_strb_t; -typedef logic[2:0] axi_wide_data_slv_id_t; +typedef logic[1:0] axi_wide_data_slv_id_t; typedef logic[0:0] axi_wide_data_slv_user_t; `AXI_TYPEDEF_ALL_CT(axi_wide_data_slv, axi_wide_data_slv_req_t, axi_wide_data_slv_rsp_t, axi_wide_data_slv_addr_t, axi_wide_data_slv_id_t, axi_wide_data_slv_data_t, axi_wide_data_slv_strb_t, axi_wide_data_slv_user_t) @@ -1181,15 +1181,16 @@ typedef logic[0:0] axi_wide_data_slv_user_t; UserWidth: 1}; localparam axi_cfg_t AxiCfgW = '{ AddrWidth: 32, DataWidth: 256, - InIdWidth: 3, - OutIdWidth: 3, + InIdWidth: 2, + OutIdWidth: 2, UserWidth: 1}; `FLOO_TYPEDEF_NW_CHAN_ALL(axi, req, rsp, wide, axi_narrow_data_slv, axi_wide_data_slv, AxiCfgN, AxiCfgW, hdr_t) `FLOO_TYPEDEF_NW_LINK_ALL(req, rsp, wide, req, rsp, wide) - typedef logic [AxiCfgW.DataWidth-1:0] floo_wide_red_data_t; -`FLOO_RED_TYPEDEF_REQ_RSP_LINK(wide, floo_wide_red_data_t, wide_req, wide_rsp) + typedef logic [AxiCfgN.DataWidth-1:0] floo_narrow_red_data_t; +`FLOO_RED_TYPEDEF_REQ_RSP_LINK(narrow, floo_narrow_red_data_t, narrow_req, narrow_rsp) + endpackage diff --git a/sw/utils/magia_coll_utils.h b/sw/utils/magia_coll_utils.h index 4b796359..f62cec1c 100644 --- a/sw/utils/magia_coll_utils.h +++ b/sw/utils/magia_coll_utils.h @@ -66,9 +66,9 @@ static inline uint32_t gen_collective_mask(uint32_t geometry) { if (geometry == ALL) return (mask << (MASK_OFFSET)) | (mask << (MASK_OFFSET + shift)); else if (geometry == COLUMN) - return (mask << (MASK_OFFSET)); - else if (geometry == ROW) return (mask << (MASK_OFFSET + shift)); + else if (geometry == ROW) + return (mask << (MASK_OFFSET)); } static inline void magia_fence() { From 893a2bfb99625947be9a38c9ea3b2484fa008dc6 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Mon, 7 Sep 2026 16:16:11 +0200 Subject: [PATCH 25/26] Exclude ibex to avoid ASSERT definition conflict during verilator build --- verilator/verilator.mk | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/verilator/verilator.mk b/verilator/verilator.mk index 3d51eef3..d22f91fd 100644 --- a/verilator/verilator.mk +++ b/verilator/verilator.mk @@ -106,6 +106,10 @@ VERILATOR_DPI := \ VERILATOR_BENDER_TARGS := $(bender_targs) \ -t tech_cells_generic_include_deprecated -t verilator -t rtl_sim \ -t verilator_dpi -t magia_dv -t simulation -t cv32e40p_include_tracer +# Ibex is only a redmule dependency (nothing in MAGIA instantiates it), +# and its prim_assert.sv redefines `ASSERT with 4 arguments; that definition +# overrides the 5-argument common_cells one that FlooNoC uses. +VERILATOR_BENDER_EXCL := -e ibex VERILATOR_RAW_FLIST := $(VERILATOR_BUILD_DIR)/magia.raw.f VERILATOR_FLIST := $(VERILATOR_BUILD_DIR)/magia.f @@ -153,7 +157,7 @@ $(VERILATOR_RAW_FLIST): Bender.yml Bender.lock Makefile bender_common.mk \ $(VERILATOR_BENDER_STAMP) | $(VERILATOR_BUILD_DIR) echo +incdir+$(VERILATOR_SRC) > $@.tmp echo +incdir+$(VERILATOR_INC) >> $@.tmp - $(BENDER) script verilator $(VERILATOR_BENDER_TARGS) $(bender_defs) -DSYNTHESIS -DVERILATOR >> $@.tmp + $(BENDER) script verilator $(VERILATOR_BENDER_TARGS) $(VERILATOR_BENDER_EXCL) $(bender_defs) -DSYNTHESIS -DVERILATOR >> $@.tmp echo +incdir+$(FRACTAL_SYNC_ROOT)/hw >> $@.tmp for f in $(VERILATOR_DPI); do echo $$f >> $@.tmp; done @if ! cmp -s $@.tmp $@ 2>/dev/null; then mv $@.tmp $@; else rm -f $@.tmp; fi From 653d865a46ee21516d0f2fdb5b530205246f6a43 Mon Sep 17 00:00:00 2001 From: Carlotta Chiarini Date: Mon, 14 Sep 2026 14:31:18 +0200 Subject: [PATCH 26/26] Update floonoc rev in Bender.yml and remove unused floonoc patch --- Bender.yml | 2 +- Makefile | 5 ----- floonoc.patch | 13 ------------- 3 files changed, 1 insertion(+), 19 deletions(-) delete mode 100644 floonoc.patch diff --git a/Bender.yml b/Bender.yml index c501df89..c61b97d6 100644 --- a/Bender.yml +++ b/Bender.yml @@ -42,7 +42,7 @@ dependencies: common_cells : { git: "https://github.com/pulp-platform/common_cells.git" , version: 1.21.0 } tech_cells_generic: { git: "https://github.com/pulp-platform/tech_cells_generic.git", version: 0.2.11 } fractal_sync : { git: "https://github.com/VictorIsachi/fractal_sync" , rev: df8e21b7e2b0e2d3198bf44a60b4ca67c334bcc2 } # branch: main - floo_noc : { git: "https://github.com/FondazioneChipsIT/FlooNoC.git" , rev: 2db2e6470d14921a0c32455f3b2647d600b6c681 } # branch: cc/row-major + floo_noc : { git: "https://github.com/FondazioneChipsIT/FlooNoC.git" , rev: f3db5e76a5461f590e743e2583f1607ecbabc24e } # branch: cc/row-major event_unit_flex : { git: "https://github.com/pulp-platform/event_unit_flex.git" , rev: 763c3b9977970f656326c70a96debfb2ac0f85b2 } export_include_dirs: diff --git a/Makefile b/Makefile index 42bc705a..b7d674e1 100644 --- a/Makefile +++ b/Makefile @@ -442,11 +442,6 @@ profile-ips: $(profile_targs) $(profile_defs) \ > ${compile_script} -floonoc-patch: - cd $(FLOONOC_ROOT) && \ - git apply ../../../../floonoc.patch && \ - cd ../../../../ - build-hw: hw-all sdk: diff --git a/floonoc.patch b/floonoc.patch deleted file mode 100644 index 17ec9a93..00000000 --- a/floonoc.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/hw/floo_route_comp.sv b/hw/floo_route_comp.sv -index 966f3c2..95c050c 100644 ---- a/hw/floo_route_comp.sv -+++ b/hw/floo_route_comp.sv -@@ -63,7 +63,7 @@ module floo_route_comp - .default_idx_i ( '0 ) - ); - -- `ASSERT(DecodeError, !dec_error) -+ //`ASSERT(DecodeError, !dec_error) - end else if (RouteCfg.RouteAlgo == XYRouting) begin : gen_xy_bits_routing - assign id_o.port_id = '0; - assign id_o.x = addr_i[RouteCfg.XYAddrOffsetX +: $bits(id_o.x)];