blob: fe28e6d8dea4d43b0011d95e694e445cde2bc90c [file] [log] [blame] [view]
Michael Schaffnerfc733212020-07-13 19:26:14 -07001[![Build Status](https://travis-ci.com/pulp-platform/riscv-dbg.svg?branch=master)](https://travis-ci.com/pulp-platform/riscv-dbg)
2
lowRISC Contributors802543a2019-08-31 12:12:56 +01003# RISC-V Debug Support for PULP Cores
4
5This module is an implementation of a debug unit compliant with the [RISC-V
6debug specification](https://github.com/riscv/riscv-debug-spec) v0.13.1. It is
7used in the [Ariane](https://github.com/pulp-platform/ariane) and
8[RI5CY](https://github.com/pulp-platform/riscv) cores.
9
10## Implementation
11We use an execution-based technique, also described in the specification, where
12the core is running in a "park loop". Depending on the request made to the debug
13unit via JTAG over the Debug Transport Module (DTM), the code that is being
14executed is changed dynamically. This approach simplifies the implementation
15side of the core, but means that the core is in fact always busy looping while
16debugging.
17
18## Features
19The following features are currently supported
20
21* Parametrizable buswidth for `XLEN=32` `XLEN=64` cores
22* Accessing registers over abstract command
23* Program buffer
24* System bus access (only `XLEN`)
25* DTM with JTAG interface
26
27These are not implemented (yet)
28
29* Trigger module
30* Quick access using abstract commands
31* Accessing memory using abstract commands
32* Authentication
33
34## Tests
35
36We use OpenOCD's [RISC-V compliance
37tests](https://github.com/riscv/riscv-openocd/blob/riscv/src/target/riscv/riscv-013.c),
Michael Schaffnerfc733212020-07-13 19:26:14 -070038our custom testbench in `tb/` and
39[riscv-tests/debug](https://github.com/riscv/riscv-tests/tree/master/debug).