SC-OBC Module V1 FPGA Developers Guide

Introduction

The SC-OBC Module V1 is a space-grade single-board computer that integrates the AMD Versal AI Edge Series VE2302 as its main processor. AMD Versal is a high-performance device implementing a heterogeneous computing (Adaptive SoC) architecture that combines a CPU, FPGA, and AI Engine. It enables efficient processing of large-scale sensor data—such as optical sensors, SAR, and LiDAR—including input preprocessing, hardware acceleration, vector-based edge computing, and high-capacity data recording.

A Microchip IGLOO2 device is implemented as a safety processor to perform health monitoring of the main processor. The hardware is composed of radiation-tolerant devices and industrial-grade components with proven radiation resistance, ensuring high reliability in space environments.

This document provides the technical information required to develop the FPGA design for the SC-OBC Module V1.

This document applies to the following product version:

Product Name Model Number

SC-OBC Module V1

SC-OBC-V1001

This document assumes that the reader has basic knowledge of FPGA development. Therefore, the following topics are not covered:

  • Basic technical information on AMD FPGA device specifications or development tools

  • Syntax of HDL languages, or fundamentals of digital circuit design and verification using HDL

  • Information related to the AMBA (Advanced Microcontroller Bus Architecture) specifications

For details on these topics, refer to the documents listed in the References section.

Required Development Tools

The following tools are required to develop the FPGA and update the safety processor firmware on the SC-OBC Module V1:

  • Main Processor (Versal) development: Vivado

  • Safety Processor firmware updates: Libero SoC (using the included FlashPro Express)

Supported Tool Versions

Tools Version URL

Vivado

2025.1 or later

Vivado Edition 2025.1

FPExpress (Libero SoC)

2025.1 or later

Libero SoC Design Suite Versions 2025.1 to 12.0

In addition, the development environment is expected to include general development tools such as GNU make and git.

Getting Started

This chapter provides the steps required to perform the following tasks:

  • Download the FPGA development environment for the SC-OBC Module V1

  • Build the design using the configuration for the Evaluation Board (EVB1001) provided by Space Cubics, and generate the Versal boot image files PDI (Programmable Device Image) and XSA (Xilinx Support Archive)

Download the SC-OBC Module V1 FPGA Development Environment

git clone git@github.com:spacecubics/sc-obc-v1-fpga.git

Build the SC-OBC Module V1

cd sc-obc-v1-fpga/versal
make implement

After the build completes, the files sc_obc_v1_versal.pdi and sc_obc_v1_versal.xsa will be generated under the work/implement/project directory. These files are used to boot the Versal device.

Main Processor (Versal) Development

This chapter describes how to develop the Main Processor implemented with the Versal device.

The provided development environment is configured with the standard features enabled for the SC-OBC Module V1 as implemented on the onboard hardware. Users can extend this environment by adding the functions required for their mission, enabling them to implement the capabilities needed for their spacecraft.

Directory Structure of the Development Environment

Before building, the Versal development environment has the following structure:

 versa               # Main Processor (Versal) FPGA project
  ├─ rtl/            # RTL sources
  ├─ ip/             # IP core configuration files
  ├─ constraints/    # Design constraint files
  ├─ script/         # Build scripts
  └─ work/           # **Generated after the first build**
        └ implement   # Work directory for FPGA implementation

When running make implement inside the versal directory, a work/implement/project directory is created. Vivado generates and expands the full set of project files inside this project directory.

Design Flow

The development of the Versal on the SC-OBC Module V1 can be carried out in two ways: using the Vivado GUI or using the command-line flow with RTL and Tcl scripts.

The Makefile included in the development environment provides two main targets: create_versal_ps_bd and build_fpga.

The following diagram illustrates the primary development flow for the SC-OBC-V1 FPGA.

sc-obc-v1-fpga-design-flow
Figure 1. SC-OBC Module V1 FPGA Design Flow

GUI Design Flow

This method uses the Vivado GUI for design work. First, run the create_versal_ps_bd target, then open and modify the Vivado project as needed.

The project can be opened using the following commands:

cd versal/work/implement
vivado project/sc_obc_v1_versal.xpr

After completing the design in Vivado, close the application and run the build_fpga target. This will export the .pdi and .xsa files generated from your design.

When using this flow, running make clean will remove the generated design files. If you perform design work in the GUI, it is strongly recommended to migrate your changes into scripts.

CLI Design Flow

This method uses RTL and Tcl scripts for design. The create_versal_ps_bd target includes entry points for loading RTL files and executing user scripts.

The following files are provided for users to add RTL or Tcl-based design logic:

  • rtl/user_rtl.list Lists the user RTL files to be loaded by Vivado. Any RTL added to this file is automatically included during the build.

  • script/implement/user_bd_logic.tcl A Tcl script for applying custom logic to the Block Design hierarchy. This script is executed at the end of the Block Design generation process.

  • constraints/sc-obc-v1-versal-user-io.xdc Constraint file for user-defined I/O. Used to specify pin assignments, pad numbers, I/O buffer configurations, drive strengths, and other I/O-related settings.

Processing System Development

The Processing System (PS) can be customized by modifying the configuration of the CIPS (Control, Interfaces & Processing System), allowing users to implement their own functions.

block_design
Figure 2. Versal Block Design

Within the Block Design hierarchy sc_obc_v1_versal, the CIPS is instantiated under the name versal_ps.

In the GUI design flow, you can modify the CIPS configuration by opening the Block Design and selecting Re-customize IP for the versal_ps instance.

In the CLI design flow, the configuration can be changed by overriding the properties of versal_ps as shown in the following example:

set_property -dict [list CONFIG.PS_PMC_CONFIG { \
    PS_MIO0  {{USAGE GPIO} {DIRECTION inout} {DRIVE_STRENGTH 12mA} {OUTPUT_DATA default} {PULL pulldown} {SCHMITT 0} {SLEW fast}}} \
] [get_bd_cells versal_ps]

Programmable Logic Development

All Programmable Logic (PL) in the SC-OBC Module V1 is fully accessible to the user, allowing mission-specific functions to be freely implemented to meet spacecraft requirements.

Programmable Logic Resources

The Programmable Logic of the SC-OBC Module V1 provides access to the following resources:

Category Item Resource

AI Engine

AI Engine-ML Tiles

32

AIE/AIE-ML Data Memory (Mb)

17

AIE-ML Shared Memory (Mb)

68

Programmable Logic

System Logic Cells

328,720

LUTs

150,272

DSP Engines

464

NoC Master / NoC Slave Ports

5

Distributed RAM (Mb)

4.6

Memory

Total Block RAM (Mb)

5.4

UltraRAM (Mb)

43.6

Accelerator RAM (Mb)

32

Serial Transceivers

GTYP Transceivers

8

Integrated Protocol IP

PCI Express

1 × Gen 4 × 8

40G Multirate Ethernet MAC

1

IO

HDIO

22

XPIO

54

GTYP

8

Programmable Logic Design Method

Designing the PL involves modifying the Block Design hierarchy or the top-level module (sc_obc_v1_versal.v). This approach follows the standard AMD MPSoC/FPGA design methodology.

For more information on Versal design techniques, refer to the Versal Adaptive SoC Design Guide.

IO Configuration

Users can utilize 22 HDIO pins, 54 XPIO pins, and 8 GTYP transceiver interfaces as IO connected to the Programmable Logic (PL).

HDIO Resource List

HDIO (High-Density I/O) includes resources that support low-speed SDR and DDR interfaces. It supports I/O standards corresponding to bank voltages of 1.8 V, 2.5 V, and 3.3 V.

For detailed information about Versal HDIO, refer to: link: Versal Adaptive SoC SelectIO Resources Architecture Manual (AM010)

The following HDIO resources are available to the user:

B2B Connector Name FPGA Pad IO Type

A22

IO_L0P_302

F14

HDIO

B22

IO_L0N_302

E14

HDIO

A24

IO_L1P_302

C14

HDIO

B24

IO_L1N_302

C13

HDIO

A26

IO_L2P_302

E13

HDIO

B26

IO_L2N_302

D14

HDIO

B23

IO_L3P_302

E12

HDIO

C23

IO_L3N_302

D12

HDIO

B25

IO_L4P_302

F11

HDIO

C25

IO_L4N_302

E11

HDIO

D22

IO_L5P_HDGC_302

D11

HDIO

E22

IO_L5N_HDGC_302

C12

HDIO

D24

IO_L6P_HDGC_302

D10

HDIO

E24

IO_L6N_HDGC_302

C10

HDIO

D26

IO_L7P_302

B10

HDIO

E26

IO_L7N_302

A10

HDIO

E21

IO_L8P_302

B11

HDIO

F21

IO_L8N_302

A11

HDIO

E23

IO_L9P_302

B12

HDIO

F23

IO_L9N_302

A13

HDIO

E25

IO_L10P_302

B13

HDIO

F25

IO_L10N_302

A14

HDIO


XPIO Resource List

XPIO supports both high-performance interfaces and low-speed SDR/DDR interfaces. With XPHY, XPIO enables data alignment, serialization, and deserialization. It supports I/O standards corresponding to bank voltages of 1.0 V, 1.2 V, 1.35 V, and 1.5 V.

For more information on Versal XPIO, refer to: link: Versal Adaptive SoC SelectIO Resources Architecture Manual (AM010)

The following XPIO resources are available to the user:

B2B Connector Name FPGA Pad IO Type

A28

IO_L0P_XCC_N0P0_703

J27

XPIO

B28

IO_L0N_XCC_N0P1_703

H28

XPIO

A30

IO_L1P_N0P2_703

H27

XPIO

B30

IO_L1N_N0P3_703

G28

XPIO

A32

IO_L2P_N0P4_703

G27

XPIO

B32

IO_L2N_N0P5_703

F28

XPIO

A34

IO_L3P_XCC_N1P0_703

E27

XPIO

B34

IO_L3N_XCC_N1P1_703

E28

XPIO

A36

IO_L4P_N1P2_703

D27

XPIO

B36

IO_L4N_N1P3_703

C28

XPIO

A38

IO_L5P_N1P4_703

C27

XPIO

B38

IO_L5N_N1P5_703

B28

XPIO

B27

IO_L6P_GC_XCC_N2P0_703

H25

XPIO

C27

IO_L6N_GC_XCC_N2P1_703

J26

XPIO

B29

IO_L7P_N2P2_703

G25

XPIO

C29

IO_L7N_N2P3_703

G26

XPIO

B31

IO_L8P_N2P4_703

F26

XPIO

C31

IO_L8N_N2P5_703

E26

XPIO

B33

IO_L9P_GC_XCC_N3P0_703

C25

XPIO

C33

IO_L9N_GC_XCC_N3P1_703

B25

XPIO

B35

IO_L10P_N3P2_703

A25

XPIO

C35

IO_L10N_N3P3_703

A26

XPIO

B37

IO_L11P_N3P4_703

B26

XPIO

C37

IO_L11N_N3P5_703

B27

XPIO

D28

IO_L12P_GC_XCC_N4P0_703

H23

XPIO

E28

IO_L12N_GC_XCC_N4P1_703

H24

XPIO

D30

IO_L13P_N4P2_703

F22

XPIO

E30

IO_L13N_N4P3_703

G23

XPIO

D32

IO_L14P_N4P4_703

E22

XPIO

E32

IO_L14N_N4P5_703

E23

XPIO

D34

IO_L15P_XCC_N5P0_703

D24

XPIO

E34

IO_L15N_XCC_N5P1_703

C24

XPIO

D36

IO_L16P_N5P2_703

C23

XPIO

E36

IO_L16N_N5P3_703

B23

XPIO

D38

IO_L17P_N5P4_703

A23

XPIO

E38

IO_L17N_N5P5_703

A24

XPIO

E27

IO_L18P_XCC_N6P0_703

G21

XPIO

F27

IO_L18N_XCC_N6P1_703

H22

XPIO

E29

IO_L19P_N6P2_703

E20

XPIO

F29

IO_L19N_N6P3_703

F21

XPIO

E31

IO_L20P_N6P4_703

D20

XPIO

F31

IO_L20N_N6P5_703

D21

XPIO

E33

IO_L21P_XCC_N7P0_703

B20

XPIO

F33

IO_L21N_XCC_N7P1_703

C21

XPIO

E35

IO_L22P_N7P2_703

A20

XPIO

F35

IO_L22N_N7P3_703

A21

XPIO

E37

IO_L23P_N7P4_703

C22

XPIO

F37

IO_L23N_N7P5_703

B22

XPIO

B39

IO_L24P_GC_XCC_N8P0_703

F23

XPIO

C39

IO_L24N_GC_XCC_N8P1_703

F24

XPIO

E40

IO_L25P_N8P2_703

E24

XPIO

F39

IO_L25N_N8P3_703

F25

XPIO

E39

IO_L26P_N8P4_703

D25

XPIO

F40

IO_L26N_N8P5_703

D26

XPIO

Safety Processor (IGLOO2) Development

The Safety Processor is used by programming the firmware provided by Space Cubics. At this time, modifications to the Safety Processor logic by the user are not supported.

It is recommended to always use the latest version of the IGLOO2 firmware.

Firmware Update

The development environment includes scripts for updating the firmware of the Safety Processor. By connecting a Microchip FlashPro to the OBC and running the following commands, you can update the firmware:

cd igloo2/tools
make program_image

After running the command, verify that the process completes successfully by confirming output similar to the following log:

mkdir -p ./log && echo "*" > ./log/.gitignore
FPExpress SCRIPT:script/program_image.tcl \
	"SCRIPT_ARGS:../bitstream/sc_obc_spv1.job" \
	LOGFILE:./log/program_image.log
Console Mode = Software Version: 2025.1.0.14
Programmer 'S209431' : JTAG TCK / SPI SCK frequency = 1 MHz
programmer 'S209431' : FlashPro5
Created new project '/home/exhome/daisuke/spacecubics/sc-obc-v1/sc-obc-v1-fpga/igloo2/tools/sc_obc_spv1/sc_obc_spv1.pro'
STAPL file '/home/exhome/daisuke/spacecubics/sc-obc-v1/sc-obc-v1-fpga/igloo2/tools/sc_obc_spv1/sc_obc_spv1.stp' has been loaded successfully.
DESIGN : sc_obc_spv1;  CHECKSUM : B723;  ALG_VERSION : 2
Software Version: 2025.1.0.14
STAPL file '/home/exhome/daisuke/spacecubics/sc-obc-v1/sc-obc-v1-fpga/igloo2/tools/sc_obc_spv1/sc_obc_spv1.stp' has been loaded successfully.
DESIGN : sc_obc_spv1;  CHECKSUM : B723;  ALG_VERSION : 2
Programmer 'S209431' : JTAG TCK / SPI SCK frequency = 1 MHz
programmer 'S209431' : FlashPro5
The 'create_job_project' command succeeded.
The 'set_programming_action' command succeeded.
programmer 'S209431' : Scan Chain...
Programmer 'S209431' : JTAG TCK / SPI SCK frequency = 1 MHz
programmer 'S209431' : Check Chain...
programmer 'S209431' : Scan and Check Chain PASSED.
programmer 'S209431' : device 'M2GL090' : Executing action PROGRAM
Programmer 'S209431' : JTAG TCK / SPI SCK frequency = 4 MHz
programmer 'S209431' : device 'M2GL090' : Family: Igloo2
programmer 'S209431' : device 'M2GL090' : Product:      M2GL090
programmer 'S209431' : device 'M2GL090' : Cortex-M3 Disabled (M3_ALLOWED = 0)
programmer 'S209431' : device 'M2GL090' : Programming Interface Protocol: JTAG
programmer 'S209431' : device 'M2GL090' : EXPORT ISC_ENABLE_RESULT[32] = 007f6b44
programmer 'S209431' : device 'M2GL090' : EXPORT CRCERR[1] = 0
programmer 'S209431' : device 'M2GL090' : EXPORT EDCERR[1] = 0
programmer 'S209431' : device 'M2GL090' : Programming FPGA Array...
programmer 'S209431' : device 'M2GL090' : Calculating component bitstream digests using programming file...
programmer 'S209431' : device 'M2GL090' : EXPORT Fabric component bitstream digest[256] = a7ae39945a8989aa2fe0a1ab8da73c28b00b45f55842edc5ce64814e120d45e7
programmer 'S209431' : device 'M2GL090' : EXPORT Entire bitstream digest[256] = 5e9b5956b50568d02bca36fba8aed519ef89f4920e947615408ec827bd1e956e
programmer 'S209431' : device 'M2GL090' : Reading digests for all the segments from the device...
programmer 'S209431' : device 'M2GL090' : EXPORT Fabric digest: [256] = 8882e3e7fc5166ea57964e00afc68b2aa1e791feff238b297c814b27f51d5e10
programmer 'S209431' : device 'M2GL090' : Design Name: sc_obc_spv1
programmer 'S209431' : device 'M2GL090' : EXPORT CHECKSUM[16] = b723
programmer 'S209431' : device 'M2GL090' : EXPORT READ_DESIGN_INFO: [272] = 000000000000000000000000000000000000000000317670735f63626f5f6373b723
programmer 'S209431' : device 'M2GL090' : EXPORT DESIGNVER[16] = 0000
programmer 'S209431' : device 'M2GL090' : EXPORT BACKLEVEL[16] = 0000
programmer 'S209431' : device 'M2GL090' : ===================================================================================
programmer 'S209431' : device 'M2GL090' : EXPORT DSN[128] = 23b45d5998b6bf67d173481d28369982
programmer 'S209431' : device 'M2GL090' : ===================================================================================
programmer 'S209431' : Finished: Sat Nov 15 18:14:34 2025 (Elapsed time 00:01:52)
programmer 'S209431' : device 'M2GL090' : Executing action PROGRAM PASSED.
programmer 'S209431' : Chain programming PASSED.
Chain Programming Finished: Sat Nov 15 18:14:34 2025 (Elapsed time 00:01:52)

                        o - o - o - o - o - o

The 'run_selected_actions' command succeeded.
The Execute Script command succeeded.
Exported log file ./log/program_image.log.