Enabling Multicore Debugging on Culsans SoC with PikeOS Using Lauterbach TRACE32
In the scope of the ISOLDE project, we’ve been working on integrating PikeOS into a custom System-on-Chip (SoC) platform—Culsans—featuring two CVA6 RISC-V cores. This SoC is deployed on a Genesys2 development board, and a key focus of our effort has been enabling efficient debugging capabilities with Lauterbach's TRACE32, an industry-standard debugging suite.
Debugging is a cornerstone of modern embedded systems development. It helps uncover software issues early, improves reliability, and enhances application performance—essential qualities when developing safety-critical systems with PikeOS.
Platform Overview
Culsans is a dual-core SoC based on the CVA6 architecture. It's synthesized and deployed onto the Genesys2 board using Xilinx's Vivado toolchain. To support PikeOS development effectively, we required full-featured debugging capabilities across both CVA6 cores.
Hardware Integration for Debugging
Integrating Lauterbach debugging support required both hardware and software modifications:
- Mapping Debug Signals
The debug signals from Culsans' RISC-V debug module were routed to the PMOD interface on the Genesys2 board. We defined appropriate constraints within the Vivado project to accommodate this routing (details see: "Constraint Configuration" below). - Bitstream Generation
We generated the FPGA bitstream configured for dual-core operation and flashed it onto the board. - Debugger Setup
Using the RISC-V debug cable, we connected the PMOD interface to the Power Debug module (see "Lauterbach Connection via PMOD" below), which was linked via Ethernet to the host machine running TRACE32 (see "TRACE32 Configuration" below).
Constraint Configuration