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