| .. _debug-support: |
| |
| Debug Support |
| ============= |
| |
| Ibex offers support for execution-based debug according to the `RISC-V Debug Specification <https://riscv.org/specifications/debug-specification/>`_, version 0.13. |
| |
| |
| .. note:: |
| |
| Debug support in Ibex is only one of the components needed to build a System on Chip design with run-control debug support (think "the ability to attach GDB to a core over JTAG"). |
| Additionally, a Debug Module and a Debug Transport Module, compliant with the RISC-V Debug Specification, are needed. |
| |
| A supported open source implementation of these building blocks can be found in the `RISC-V Debug Support for PULP Cores IP block <https://github.com/pulp-platform/riscv-dbg/>`_. |
| |
| The `OpenTitan project <https://github.com/lowRISC/opentitan>`_ can serve as an example of how to integrate the two components in a toplevel design. |
| |
| Interface |
| --------- |
| |
| +-----------------+-----------+-----------------------------+ |
| | Signal | Direction | Description | |
| +=================+===========+=============================+ |
| | ``debug_req_i`` | input | Request to enter Debug Mode | |
| +-----------------+-----------+-----------------------------+ |
| |
| ``debug_req_i`` is the "debug interrupt", issued by the debug module when the core should enter Debug Mode. |
| |
| Parameters |
| ---------- |
| |
| +---------------------+-----------------------------------------------------------------+ |
| | Parameter | Description | |
| +=====================+=================================================================+ |
| | ``DmHaltAddr`` | Address to jump to when entering Debug Mode | |
| +---------------------+-----------------------------------------------------------------+ |
| | ``DmExceptionAddr`` | Address to jump to when an exception occurs while in Debug Mode | |
| +---------------------+-----------------------------------------------------------------+ |
| | ``DbgTriggerEn`` | Enable support for debug triggers | |
| +---------------------+-----------------------------------------------------------------+ |
| |
| Core Debug Registers |
| -------------------- |
| |
| Ibex implements four core debug registers, namely :ref:`csr-dcsr`, :ref:`csr-dpc`, and two debug scratch registers. |
| If the ``DbgTriggerEn`` parameter is set, debug trigger registers are available. |
| See :ref:`csr-tselect`, :ref:`csr-tdata1` and :ref:`csr-tdata2` for details. |
| All those registers are accessible from Debug Mode only. |
| If software tries to access them without the core being in Debug Mode, an illegal instruction exception is triggered. |