The System Planner is CodeFusion Studio’s central configuration dashboard. It provides a visual, interactive environment for configuring every aspect of your SoC: which peripherals are assigned to which cores, how pins are multiplexed, what the clock tree looks like, how memory is partitioned, and what the resulting register values will be. All configuration choices are stored in aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/analogdevicesinc/codefusion-studio/llms.txt
Use this file to discover all available pages before exploring further.
.cfsconfig file alongside your project, and the System Planner translates those choices into ready-to-build source code via its Generate Code tab.
Opening the System Planner
- From the workspace
- From the CFS Home page
- From the Command Palette
Click the appropriate
.cfsconfig file in the VS Code Explorer. The System Planner dashboard opens automatically in the editor area.Dashboard tabs
The System Planner dashboard is organized into the following tabs. Each tab focuses on a specific aspect of the system configuration.Peripheral Allocation
Assign SoC peripherals to cores, configure settings, and manage pin assignments per peripheral.
Pin Config
Graphically configure pin multiplexing and function selection. Identifies and resolves conflicting pin assignments.
Clock Config
Configure clock sources, dividers, and multiplexers. Enforces hardware frequency constraints and visualizes the complete clock tree.
Memory Allocation
Create, edit, and delete memory partitions. Assign RAM and Flash blocks to cores with configurable access permissions.
Registers
View register values produced by the current configuration. Filter to show only modified registers, and inspect bit-level details.
Embedded AI Tools
Import and configure supported AI models for specific cores, and apply engine-specific options before code generation.
Profiling
Capture runtime and inference-level traces from the target and prepare CTF traces for visualization.
Generate Code
Generate source files from the complete system configuration with a single click, or select specific cores to regenerate.
Workspace Projects table
Located at the bottom of the System Planner dashboard, the Workspace Projects table provides an at-a-glance overview of every core in the workspace and its current resource allocations. Use this table to track resource allocation across cores and ensure everything is properly configured before generating code. Click the chevron (>) in any cell to open the corresponding configuration page.| Column | Description |
|---|---|
| Core | Lists the available processor cores in the workspace. |
| Code Generation Plugin | Displays the plugin associated with that core, used to generate source code. |
| Allocated Peripherals | Shows the number of peripherals assigned to each core. |
| Assigned Pins | Shows the number of pins currently assigned. |
| Memory Partitions | Shows the number of allocated memory partitions for the core. |
Peripheral Allocation
The Peripheral Allocation tab lets you assign SoC peripherals to projects, configure their settings, and manage pin assignments — all from a single panel.Overview
The Peripheral Allocation view is divided into three main areas:- Filter options — Filter peripherals by allocation status: all, allocated, or available.
- Peripheral list — Displays all available peripherals. Use this panel to allocate peripherals to a project.
- Core Projects section — Shows each project with its assigned peripherals, signals, and pins.
Each project in the Core Projects section corresponds to a core on the device — for example, ARM Cortex-M4 or RISC-V.
Assignment types
There are two types of peripheral assignments:- Peripheral assignments: An entire peripheral (such as UART0 or I²C2) is assigned to a single project. That project has full responsibility for initializing the peripheral, handling interrupts, and managing its resources.
- Pin assignments: Some peripherals — such as GPIO — allow assignment at the individual pin level. Pins belonging to the same peripheral can be assigned to and managed independently by multiple projects.
Allocate a peripheral
For GPIO peripherals, individual pins are assigned instead of the entire peripheral.
Peripheral Settings sidebar
When you allocate a peripheral, the Peripheral Settings sidebar opens. From here you can:- Add a Description to capture notes about the peripheral’s role (for example: “UART0 – Used for debug console output”).
- Assign pins by toggling signals on or off. If multiple pin options are available, select from a dropdown then toggle it on.
- Set configuration parameters specific to the peripheral (defined in the SoC data model, optionally extended by the plugin). Use Reset to Default to restore all settings.
- Specify code generation plugin options such as Zephyr
chosenrole or peripheral clock frequency.
Limitations
Peripheral allocation constraints
Peripheral allocation constraints
- After a peripheral is allocated to a project, it must be removed before it can be allocated to another project.
- Certain peripherals can only be allocated to specific projects due to hardware constraints.
- If a peripheral is shared across multiple projects (such as GPIO0), the primary project is responsible for system-wide initialization, including configuring clock sources and frequencies.
Resolve pin conflicts
If a conflict appears when a pin is enabled, a conflict icon is displayed next to the signal.Open Pin Config
Click the Manage chevron (>) next to the conflicting signal to open the Pin Config tab.
Pin Config
The Pin Config tab provides a graphical pin multiplexing and function selection editor. It removes the tedious and error-prone elements of manual pin configuration and flags conflicts in real time.Key components
- Peripheral list — Click a peripheral to view its associated signals.
- Filter options — Search by name, or filter by Assigned, Available, or Conflicts status.
- Pin Mux map — Visual representation of the current multiplexing configuration. Hover over a pin to view its assigned function. Zoom with the scroll wheel; drag with the left mouse button.
- Assign pin — Toggle a pin on or off to enable or disable the signal assignment.
- Configuration sidebar — Click the configure icon next to a signal to open settings for that pin.
Assign a pin
Each expanded peripheral lists signals with their name and pin designation. Toggle the pin to on to assign a signal. This enables the pin in generated code and updates the mux map.Resolve conflicts
Conflicts occur when multiple signals are configured to use the same physical pin. They are shown as red circles in the mux map and red X icons in the peripheral list. To resolve a conflict, disable one of the functions assigned to that pin.Configuration sidebar
The configuration sidebar is available after the pin is assigned and its peripheral is allocated. The available fields depend on the signal type:- GPIO signals expose all configuration options, including the attached function and code generation metadata (availability depends on firmware platform).
- Peripheral signals expose basic options such as pull-up/pull-down state and power supply.
Use the Reset to default link in the sidebar to revert any changes to a signal’s settings.
Clock Config
The Clock Config tab lets you configure clock sources, dividers, multiplexers, and output pins across the entire processor. It enforces hardware frequency constraints and provides error indicators when settings are out of range.Clock tree diagram
The visual clock tree is similar to the diagram found in the processor’s User Guide. Nodes represent cores, peripherals, pins, multiplexers, and clock scalers. Frequencies at each node are shown within the node itself.- Hover over any node or line to view frequency and configuration details.
- Bold nodes and lines are enabled; faint nodes and lines are disabled.
- Scroll to zoom; drag to pan; click the fit-to-screen icon to resize the diagram to your window.
Node types
| Type | Description |
|---|---|
| Core | A processor core fed by a clock. |
| Divider | A frequency step-down scaler. |
| Multiplier | A frequency step-up scaler. |
| Mux | A multiplexer that selects one of its inputs (or directs an input to one of its outputs). |
| Oscillator | An internal oscillator in the processor. |
| Peripheral | A peripheral fed by a clock. Can often be enabled or disabled. |
| Pin Input | A pin attached to an external oscillator. Must be assigned in the Pin Config tab first. |
| Pin Output | A pin that sends a clock signal externally. Must be assigned in the Pin Config tab first. |
Configuring a clock node
Click any node in the diagram or the node list to open its configuration options. Only valid options are enabled by the tool. Changes are immediately reflected in the diagram.Clock errors
Nodes shown in red indicate an error that must be resolved before code generation:- Frequency out of range — The frequency is above or below the hardware limits for that peripheral.
- Unconfigured value — A required setting has not been specified, such as an unspecified frequency at a pin input or an unset pin mux for a clock signal.
Some clock settings — such as external input and output — require a corresponding pin to be configured in the Pin Config tab before they can be enabled.
Memory Allocation
The Memory Allocation tab enables partitioning of internal and external SoC memory. Use it to create memory partitions and assign specific blocks of RAM or Flash to cores, ensuring critical functions own the memory resources they need.Create a partition
Locate free memory
Hover over a free region in the interactive memory allocation bar, then click add (➕). Alternatively, click Create Partition.
Fill in partition details
Complete the partition form:
| Field | Description |
|---|---|
| Memory Type | Type of memory: RAM or Flash. |
| Partition Name | A unique name for the partition. |
| Assigned Projects | The projects that will access the partition. Multiple projects can be selected for shared memory. |
| Access Permissions | Configure read or read/write permissions per project. Designate one project as the owner for multi-project regions. |
| Plugin Options | Additional configuration for the code generation plugin (for example: Zephyr chosen field with values like sram or flash). |
| Starting Address | Partition start address in hexadecimal. |
| Size | Partition size in KB, MB, or bytes. |
Partitions cannot overlap or extend into occupied memory. If the selected range is already in use, an error message will appear. Modify or delete existing partitions before proceeding.
Edit or delete a partition
To edit, click a partition directly in the memory allocation bar, or locate it in the central view and click Configure. To delete, click Delete in the Edit Partition form, or use the delete icon in the central view.Registers
The Registers tab displays all register values produced by the current configuration and highlights registers that have been modified. Modified registers are marked with an asterisk (*).
Search and filter
Use the Search field to locate registers by name or address. Use preset filters to view only modified or unmodified registers.View register details
Click a register name to inspect its bit-level contents:- Hexadecimal values — The current and reset hexadecimal values.
- Binary values — The reset value in binary, with modified bits highlighted by a distinct border.
- Field details — Click a bit group or register field to see its access type (R/W), bit range, and description.