aboutsummaryrefslogtreecommitdiff
path: root/targets/corstone-310/platform.scatter
diff options
context:
space:
mode:
Diffstat (limited to 'targets/corstone-310/platform.scatter')
-rw-r--r--targets/corstone-310/platform.scatter169
1 files changed, 169 insertions, 0 deletions
diff --git a/targets/corstone-310/platform.scatter b/targets/corstone-310/platform.scatter
new file mode 100644
index 0000000..f23f3a3
--- /dev/null
+++ b/targets/corstone-310/platform.scatter
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2019-2022 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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
+ *
+ * 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.
+ */
+
+/*
+ * Corstone-310 is the next generation Corstone-300 where the CPU
+ * has been upgraded to Cortex-M85.
+ *
+ * This is a simplified picture of the Corstone-310 memory system.
+ * Please refer to the Corstone SSE-310 Technical Reference Manual for
+ * further information.
+ *
+ * https://developer.arm.com/ip-products/subsystem/corstone/corstone-300
+ *
+ * +---------------+ +---------------+ +------+
+ * | Ethos-U55 | | Cortex-M85 +--+ ITCM |
+ * | | | | +------+
+ * | | | |
+ * | | | | +------+
+ * | M1 M0 | | +--+ DTCM |
+ * +---+-------+---+ +-------+-------+ +------+
+ * | | |
+ * | +---+---------------+-----+
+ * | | AMBA AXI NIC-400-Lite |
+ * | +---+-----------------+---+
+ * | | |
+ * +---+-------+------------+ +--+-------+
+ * | AMBA AXI NIC-400 | | SSE-300 |
+ * +---+--------+--------+--+ | SRAM |
+ * | | | +----------+
+ * +---+---+ +--+---+ +--+--+
+ * | Flash | | BRAM | | DDR |
+ * +-------+ +------+ +-----+
+ *
+ * +-----------------------+-------------+-------------+----+--------------------------------------+
+ * | Memory region name | Base addr | Size |IDAU| MCC load address + remarks |
+ * +-----------------------+-------------+-------------+----+--------------------------------------+
+ * | ITCM | 0x0000_0000 | 0x0000_8000 | NS | 32 kiB |
+ * | ITCM | 0x1000_0000 | 0x0000_8000 | S | Secure alias for NS ITCM |
+ * | FPGA Data SRAM; BRAM | 0x0100_0000 | 0x0020_0000 | NS | 2 MiB |
+ * | FPGA data SRAM; BRAM | 0x1100_0000 | 0x0020_0000 | S | Secure alias for NS BRAM |
+ * | DTCM | 0x2000_0000 | 0x0000_8000 | NS | 32 kiB |
+ * | DTCM | 0x3000_0000 | 0x0000_8000 | S | Secure alias for NS DTCM |
+ * | SSE-300 internal SRAM | 0x2100_0000 | 0x0040_0000 | NS | 2 banks of 2 MiB; 3 cycles latency |
+ * | SSE-300 internal SRAM | 0x3100_0000 | 0x0040_0000 | S | Secure alias for NS internal SRAM |
+ * | DDR | 0x6000_0000 | 0x1000_0000 | NS | 256 MB bank |
+ * | DDR | 0x7000_0000 | 0x1000_0000 | S | Secure alias for NS DDR |
+ * +-----------------------+-------------+-------------+----+--------------------------------------+
+ *
+ * Note: Ethos-U55 can access BRAM, internal SRAM and the DDR sections => activation buffers and
+ * the model should only be placed in those regions.
+ *
+ * Note: Alias regions means that secure and non-secure addresses are mapped to the same physical
+ * memory banks.
+ */
+
+/* default value - '1', for DRAM */
+#ifndef ETHOSU_MODEL
+#define ETHOSU_MODEL 1
+#endif
+
+/* default value - '1', for DRAM */
+#ifndef ETHOSU_ARENA
+#define ETHOSU_ARENA 1
+#endif
+
+#ifndef STACK_SIZE
+#define STACK_SIZE 0x8000
+#endif
+
+#ifndef HEAP_SIZE
+#define HEAP_SIZE 0x10000
+#endif
+
+#define ITCM_START 0x10000000
+#define ITCM_SIZE 0x00008000
+
+#define DTCM_START 0x30000000
+#define DTCM_SIZE 0x00008000
+
+#define BRAM_START 0x11000000
+#define BRAM_SIZE 0x00200000
+
+#define SRAM_START 0x31000000
+#define SRAM_SIZE 0x00400000
+
+#define DDR_START 0x70000000
+#define DDR_SIZE 0x10000000
+
+#if STACK_SIZE > DTCM_SIZE
+#error Stack size larger than DTCM size
+#endif
+
+/* ----------------------------------------------------------------------------
+ Stack seal size definition
+ *----------------------------------------------------------------------------*/
+
+APP_IMAGE BRAM_START BRAM_SIZE
+{
+ rom_exec BRAM_START BRAM_SIZE
+ {
+ *.o (RESET, +First)
+ *(InRoot$$Sections)
+ startup_ARMCM55.o
+ system_ARMCM55.o
+ target.o
+ .ANY1 (+RO +RW +ZI)
+ }
+
+ ARM_LIB_HEAP +0 EMPTY ALIGN 8 HEAP_SIZE {}
+ ARM_LIB_STACK DTCM_START EMPTY ALIGN 8 STACK_SIZE {}
+}
+
+; Place all SRAM and DDR execution regions in DDR. We have plenty of DDR
+; and can perform scatter loading from here.
+LOAD_REGION_DDR DDR_START DDR_SIZE
+{
+ ; Place model and its affiliates in DRAM
+ rom_dram DDR_START
+ {
+#if (ETHOSU_MODEL == 1)
+ * (network_model_sec)
+#endif
+ * (input_data_sec)
+ * (expected_output_data_sec)
+ * (output_data_sec)
+ }
+
+#if (ETHOSU_ARENA == 1)
+ ; Place tensor arena in DRAM if we have a fast memory area
+ ARENA +0 UNINIT ALIGN 16
+ {
+ * (.bss.tensor_arena)
+ }
+#endif
+
+ SRAM SRAM_START ALIGN 16 SRAM_SIZE
+ {
+#if (ETHOSU_MODEL == 0)
+ ; Place network model in SRAM
+ * (network_model_sec)
+#endif
+
+#if (ETHOSU_ARENA == 0)
+ ; Place tensor arena in SRAM
+ * (.bss.tensor_arena)
+#endif
+
+ ; Place scratch buffer in SRAM
+ * (.bss.ethosu_scratch)
+
+ ; SRAM data
+ * (.sram.data)
+ }
+}