Overview of the debug infrastructure

For this release we have set the goal to create the basic debug infrastructure for lowRISC. Before going into the details, we want to give you an overview about where we are heading with the debug infrastructure. Essentially, there are two methods to debug a processor:

While we have support for run-control debugging in the roadmap, we currently focus on trace debugging. So for our first release we have defined the following functionalities we want to support:

In the picture below you can find an updated overview of the lowRISC system architecture. If you compare it to the previous SoC overview you can see that the major change and main topic of this tutorial is the new debug infrastructure.


You can find the functionalities covered by modules throughout the system. For best scalability and modularity we decided to connect the debug modules with a separate network. Currently we use one debug ring as a compromise between throughput and resource utilization. The following figure focuses on the debug system.


The figure also shows the connection to the host PC that communicates with the debug modules with debug packets. The actual data transport between the host and the debug system is abstracted by using the Generic Logic Interface Project (glip) which provides a simple bi-directional FIFO interface and different physical interfaces like UART, USB and JTAG.

Work on the the debug infrastructure has been produced as part of the Open SoC Debug project, where you can also find a broader introduction. The debug infrastructure presented in this tutorial is just the first step. Before we jump into the details and get some hands-on experience, we want to briefly outline where the debug subsystem is headed:

Please get in touch with us if you have ideas and opinions about future directions we should take. Now it’s time to learn more about the debug system or jump into using it: