Skip to main content

Documentation 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.

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 a .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

Click the appropriate .cfsconfig file in the VS Code Explorer. The System Planner dashboard opens automatically in the editor area.
If you have just finished creating a workspace with the Workspace Creation Wizard, the System Planner opens automatically — you do not need to navigate to it manually.

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.
ColumnDescription
CoreLists the available processor cores in the workspace.
Code Generation PluginDisplays the plugin associated with that core, used to generate source code.
Allocated PeripheralsShows the number of peripherals assigned to each core.
Assigned PinsShows the number of pins currently assigned.
Memory PartitionsShows the number of allocated memory partitions for the core.
If the System Planner detects configuration issues — such as pin conflicts — an error indicator appears in the affected cell. Click the chevron (>) to open the corresponding page and address the issue before generating code.

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:
  1. Filter options — Filter peripherals by allocation status: all, allocated, or available.
  2. Peripheral list — Displays all available peripherals. Use this panel to allocate peripherals to a project.
  3. 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

1

Find the peripheral

In the Peripheral List, locate the peripheral you want to assign.
2

Click Assign

Click Assign (+) to allocate the peripheral to a project.
3

Select a project

If there is more than one project, select the target project from the list to complete the allocation.
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 chosen role or peripheral clock frequency.

Limitations

  • 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.
1

Open Pin Config

Click the Manage chevron (>) next to the conflicting signal to open the Pin Config tab.
2

Disable the conflicting function

Disable one of the functions assigned to the conflicting pin.
3

Return to Peripheral Allocation

After resolving the issue, return to the Peripheral Allocation page to review the updated configuration.

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

  1. Peripheral list — Click a peripheral to view its associated signals.
  2. Filter options — Search by name, or filter by Assigned, Available, or Conflicts status.
  3. 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.
  4. Assign pin — Toggle a pin on or off to enable or disable the signal assignment.
  5. 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.
Use the Conflicts filter to quickly locate all conflicting pins and address them in one pass.
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

TypeDescription
CoreA processor core fed by a clock.
DividerA frequency step-down scaler.
MultiplierA frequency step-up scaler.
MuxA multiplexer that selects one of its inputs (or directs an input to one of its outputs).
OscillatorAn internal oscillator in the processor.
PeripheralA peripheral fed by a clock. Can often be enabled or disabled.
Pin InputA pin attached to an external oscillator. Must be assigned in the Pin Config tab first.
Pin OutputA 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

1

Locate free memory

Hover over a free region in the interactive memory allocation bar, then click add (➕). Alternatively, click Create Partition.
2

Fill in partition details

Complete the partition form:
FieldDescription
Memory TypeType of memory: RAM or Flash.
Partition NameA unique name for the partition.
Assigned ProjectsThe projects that will access the partition. Multiple projects can be selected for shared memory.
Access PermissionsConfigure read or read/write permissions per project. Designate one project as the owner for multi-project regions.
Plugin OptionsAdditional configuration for the code generation plugin (for example: Zephyr chosen field with values like sram or flash).
Starting AddressPartition start address in hexadecimal.
SizePartition 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.
Using the interactive memory bar streamlines the setup process by automatically pre-populating fields including core, memory type, starting address, and size.

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:
  1. Hexadecimal values — The current and reset hexadecimal values.
  2. Binary values — The reset value in binary, with modified bits highlighted by a distinct border.
  3. Field details — Click a bit group or register field to see its access type (R/W), bit range, and description.
This view is particularly useful for verifying that your peripheral, pin, and clock configurations produce the expected hardware register state before committing to code generation.

Build docs developers (and LLMs) love