OpenCores
URL https://opencores.org/ocsvn/riscv_vhdl/riscv_vhdl/trunk

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [docs/] [doxygen/] [06a_dsu.doxy] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 sergeykhbr
/** @page dsu_page Debug Support Unit (DSU)
2
 
3
 Debug Support Unit (DSU) was developed to interact with "RIVER" CPU
4
 via its debug port interace. This bus provides access to all internal CPU
5
 registers and states and may be additionally extended by request.
6
 Run control functionality like 'run', 'halt', 'step' or 'breakpoints'
7
 imlemented using proprietary algorithms and intend to simplify integration
8
 with debugger application.
9
 
10
 Set of general registers and control registers (CSR) are described in
11
 RISC-V privileged ISA specification and also available for read and write
12
 access via debug port.
13
 
14
 @note Take into account that CPU can have any number of
15
 platform specific CSRs that usually not entirely documented.
16
 
17
 @section dsu_regs DSU registers mapping
18
 DSU acts like a slave AMBA AXI4 device that is directly mapped into
19
 physical memory. Default address location for our implementation
20
 is 0x80020000. DSU directly transforms device offset address
21
 into one of regions of the debug port:
22
 
23
    
  • 0x00000..0x08000 (Region 1): CSR registers.
  • 24
        
  • 0x08000..0x10000 (Region 2): General set of registers.
  • 25
        
  • 0x10000..0x18000 (Region 3): Run control and debug support registers.
  • 26
        
  • 0x18000..0x20000 (Region 4): Local DSU region that doesn't access CPU debug port.
  • 27
     
    28
     
    29
     @par Example:
    30
         Bus transaction at address 0x80023C10
    31
         will be redirected to Debug port with CSR index 0x782.
    32
     
    33
     @subsection dsu_csr CSR Region (32 KB)
    34
     
    35
     @par User Exception Program Counter (0x00208). ISA offset 0x041.
    36
     
    37
     |Bits|Type| Reset |  Name         | Definition
    38
     |:--:|:--:|:-----:|:-------------:|---------------------------------------------|
    39
     | 64 | RO | 64h'0 | uepc | User mode exception program counter. Instruction URET is used to return from traps in User Mode into specified instruction pointer. URET is only provided if user-mode traps are supported.
    40
     
    41
     @par Machine Status Register (0x01800). ISA offset 0x300.
    42
     
    43
     |Bits|Type| Reset |Field Name| Bits  | Description
    44
     |:--:|:--:|:-----:|:---------|:-----:|:------------------------------------------------------------|
    45
     | 1  | RW | 1b'0  | SD       | 63    | Bit summarizes whether either the FS field or XS field signals the presence of some dirty state that will require saving extended user context to memory
    46
     | 22 | RW | 22h'0 | WPRI     | 62:20 | Reserved
    47
     | 5  | RW | 5h'0  | VM (WARL)| 28:24 | Virtual addressing enable
    48
     | 4  | RW | 4h'0  | WPRI     | 23:20 | Reserved
    49
     | 1  | RW | 1b'0  | MXR      | 19    | Make eXecutable Readable
    50
     | 1  | RW | 1b'0  | PUM      | 18    | Protect User Memory bit modifies the privilege with which loads access virtual memory
    51
     | 1  | RW | 1b'0  | MPRV     | 17    | Privilege level at which loads and stores execute
    52
     | 2  | RW | 2h'0  | XS       | 16:15 | Context switch reducing flags: 0=All Off; 1=None dirty or clean, some on; 2=None dirty, some clean; 3=Some dirty
    53
     | 2  | RW | 2h'0  | FS       | 14:13 | Context switch reducing flags: 0=Off; 1=Initial; 2=Clean; 3=Dirty
    54
     | 2  | RW | 2h'0  | MPP      | 12:11 | Priviledge mode on MRET
    55
     | 2  | RW | 2h'0  | HPP      | 10:9  | Priviledge mode on HRET
    56
     | 1  | RW | 1b'0  | SPP      | 8     | Priviledge mode on SRET
    57
     | 1  | RW | 1b'0  | MPIE     | 7     | MIE prior to the trap
    58
     | 1  | RW | 1b'0  | HPIE     | 6     | HIE prior to the trap
    59
     | 1  | RW | 1b'0  | SPIE     | 5     | SIE prior to the trap
    60
     | 1  | RW | 1b'0  | UPIE     | 4     | UIE prior to the trap
    61
     | 1  | RW | 1b'0  | MIE      | 3     | Machine interrupt enable bit
    62
     | 1  | RW | 1b'0  | HIE      | 2     | Hypervisor interrupt enable bit
    63
     | 1  | RW | 1b'0  | SIE      | 1     | Super-user interrupt enable bit
    64
     | 1  | RW | 1b'0  | UIE      | 0     | User interrupt enable bit
    65
     
    66
     @par Machine Trap-Vector Base-Address Register (0x01828). 
    ISA offset 0x305.
    67
     
    68
     |Bits|Type| Reset | Field Name        | Definition
    69
     |:--:|:--:|:-----:|:-----------------:|:---------------------------------------------|
    70
     | 64 | RW | 64h'0 | mtvec | Trap-vector Base Address. The mtvec register is an XLEN-bit read/write register that holds the base address of the M-mode trap vector.
    71
     
    72
     @par Machine Exception Program Counter (0x01A08). 
    ISA offset 0x341.
    73
     
    74
     |Bits|Type| Reset | Field Name        | Definition
    75
     |:--:|:--:|:-----:|:-----------------:|:---------------------------------------------|
    76
     | 64 | RW | 64h'0 | mepc | Machine mode exception program counter. Instruction MRET is used to return from traps in User Mode into specified instruction pointer. On implementations that do not support instruction-set extensions with 16-bit instruction alignment, the two low bits (mepc[1:0]) are always zero.
    77
     
    78
     @par Machine Cause Register (0x01A10). 
    ISA offset 0x342.
    79
     
    80
     |Bits|Type| Reset | Field Name   |Bits| Definition
    81
     |:--:|:--:|:-----:|:-------------|:--:|:---------------------------------------------|
    82
     | 1  | RW | 1b'0  | Interrupt    | 63 | The Interrupt bit is set if the trap was caused by an interrupt.
    83
     | 63 | RW | 63h'0 | Exception Code | 62:0 | Exception code. The Exception Code field contains a code identifying the last exception. Table 3.6 lists the possible machine-level exception codes.
    84
     
    85
     @par Machine Cause Register (0x01A18). 
    ISA offset 0x343.
    86
     
    87
     |Bits|Type| Reset | Field Name   |Bits| Definition
    88
     |:--:|:--:|:-----:|:-------------|:--:|:---------------------------------------------|
    89
     | 64 | RW | 64h'0 | mbadaddr     | 63:0 | Exception address. When a hardware breakpoint is triggered, or an instruction-fetch, load, or store address-misaligned or access exception occurs, mbadaddr is written with the faulting address. mbadaddr is not modified for other exceptions.
    90
     
    91
     @par Machine ISA Register (0x07880). ISA offset 0xf10.
    92
     
    93
     |Bits|Type| Reset |Field Name| Bits  | Description
    94
     |:--:|:--:|:-----:|:---------|:-----:|:------------------------------------------------------------|
    95
     | 2  | RO | 2h'2  | Base (WARL)| 63:62 | Integer ISA width: 1=32 bits; 2=64 bits; 3=128 bits.
    96
     | 34 | RO | 64h'0 | WIRI       | 61:28 | Reserved.
    97
     | 28 | RO | 28h'141181 | Extension (WARL) | 27:0 | Supported ISA extensions. See priviledge-isa datasheet.
    98
     
    99
     @par Machine Vendor ID (0x07888). ISA offset 0xf11.
    100
     
    101
     |Bits|Type| Reset |Field Name| Bits  | Description
    102
     |:--:|:--:|:-----:|:---------|:-----:|:------------------------------------------------------------|
    103
     | 64 | RO | 64h'0 | Vendor | 63:0 | Vendor ID. read-only register encoding the manufacturer of the part. This register must be readable in any implementation, but a value of 0 can be returned to indicate the field is not implemented or that this is a non-commercial implementation.
    104
     
    105
     @par Machine Architecture ID  Register (0x07890). ISA offset 0xf12.
    106
     
    107
     |Bits|Type| Reset |Field Name| Bits  | Description
    108
     |:--:|:--:|:-----:|:---------|:-----:|:------------------------------------------------------------|
    109
     | 64 | RO | 64h'0 | marchid | 63:0 |Architecture ID. Read-only register encoding the base microarchitecture of the hart. This register must be readable in any implementation, but a value of 0 can be returned to indicate the field is not implemented. The combination of mvendorid and marchid should uniquely identify the type of hart microarchitecture that is implemented.
    110
     
    111
     @par Machine implementation ID Register (0x07898). ISA offset 0xf13.
    112
     
    113
     |Bits|Type| Reset |Field Name| Bits  | Description
    114
     |:--:|:--:|:-----:|:---------|:-----:|:------------------------------------------------------------|
    115
     | 64 | RO | 64h'0 | mimplid | 63:0 | Implementation ID. CSR provides a unique encoding of the version of the processor implementation. This register must be readable in any implementation, but a value of 0 can be returned to indicate that the field is not implemented.
    116
     
    117
     @par Hart ID Register (0x078A0). ISA offset 0xf14.
    118
     
    119
     |Bits|Type| Reset |Field Name| Bits  | Description
    120
     |:--:|:--:|:-----:|:---------|:-----:|:------------------------------------------------------------|
    121
     | 64 | RO | 64h'0 | mhartid | 63:0 | Integer ID of hardware thread.  Hart IDs mightnot necessarily be numbered contiguously in a multiprocessor system, but at least one hart musthave a hart ID of zero.
    122
     
    123
     
    124
     @subsection dsu_iregs General CPU Registers Region (32 KB)
    125
     
    126
     @par CPU integer registers (0x08000).
    127
     
    128
     |Offset |Bits|Type| Reset | Name | Definition
    129
     |:------|:--:|:--:|:-----:|:----:|---------------------------------------------|
    130
     |0x08000| 64 | RW | 64h'0 | zero | x0. CPU General Integer Register hardware connected to zero.
    131
     |0x08008| 64 | RW | 64h'0 | ra   | x1. Return address.
    132
     |0x08010| 64 | RW | 64h'0 | sp   | x2. Stack pointer.
    133
     |0x08018| 64 | RW | 64h'0 | gp   | x3. Global pointer.
    134
     |0x08020| 64 | RW | 64h'0 | tp   | x4. Thread pointer.
    135
     |0x08028| 64 | RW | 64h'0 | t0   | x5. Temporaries 0.
    136
     |0x08030| 64 | RW | 64h'0 | t1   | x6. Temporaries 1.
    137
     |0x08038| 64 | RW | 64h'0 | t2   | x7. Temporaries 2.
    138
     |0x08040| 64 | RW | 64h'0 | s0/fp| x8. CPU General Integer Register 'Saved register 0/ Frame pointer'.
    139
     |0x08048| 64 | RW | 64h'0 | s1   | x9. Saved register 1.
    140
     |0x08050| 64 | RW | 64h'0 | a0   | x10. Function argument 0. It is also used to save return value.
    141
     |0x08058| 64 | RW | 64h'0 | a1   | x11. Function argument 1.
    142
     |0x08060| 64 | RW | 64h'0 | a2   | x12. Function argument 2.
    143
     |0x08068| 64 | RW | 64h'0 | a3   | x13. Function argument 3.
    144
     |0x08070| 64 | RW | 64h'0 | a4   | x14. Function argument 4.
    145
     |0x08078| 64 | RW | 64h'0 | a5   | x15. Function argument 5.
    146
     |0x08080| 64 | RW | 64h'0 | a6   | x16. Function argument 6.
    147
     |0x08088| 64 | RW | 64h'0 | a7   | x17. Function argument 7.
    148
     |0x08090| 64 | RW | 64h'0 | s2   | x18. Saved register 2.
    149
     |0x08098| 64 | RW | 64h'0 | s3   | x19. Saved register 3.
    150
     |0x080a0| 64 | RW | 64h'0 | s4   | x20. Saved register 4.
    151
     |0x080a8| 64 | RW | 64h'0 | s5   | x21. Saved register 5.
    152
     |0x080b0| 64 | RW | 64h'0 | s6   | x22. Saved register 6.
    153
     |0x080b8| 64 | RW | 64h'0 | s7   | x23. Saved register 7.
    154
     |0x080c0| 64 | RW | 64h'0 | s8   | x24. Saved register 8.
    155
     |0x080c8| 64 | RW | 64h'0 | s9   | x25. Saved register 9.
    156
     |0x080d0| 64 | RW | 64h'0 | s10  | x26. Saved register 10.
    157
     |0x080d8| 64 | RW | 64h'0 | s11  | x27. Saved register 11.
    158
     |0x080e0| 64 | RW | 64h'0 | t3   | x28. Temporaries 3.
    159
     |0x080e8| 64 | RW | 64h'0 | t4   | x29. Temporaries 4.
    160
     |0x080f0| 64 | RW | 64h'0 | t5   | x30. Temporaries 5.
    161
     |0x080f8| 64 | RW | 64h'0 | t6   | x31. Temporaries 6.
    162
     |0x08100| 64 | RO | 64h'0 | pc   | Instruction pointer. Cannot be modified because shows the latest executed instruction address
    163
     |0x08108| 64 | RW | 64h'0 | npc  | Next Instruction Pointer
    164
     
    165
     
    166
     @subsection dsu_control Run Control and Debug support Region (32 KB)
    167
     
    168
     @par Run control/status registers (0x10000).
    169
     
    170
     |Bits|Type| Reset | Field Name | Bits  | Description
    171
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    172
     | 44 | RW | 61h'0 | Reserved   | 63:6  | Reserved.
    173
     | 16 | RO | 16h'0 | core_id    | 15:4  | Core ID.
    174
     | 1  | RW | 1b'0  | Reserved   | 3     | Reserved.
    175
     | 1  | RO | 1b'0  | breakpoint | 2     | Breakpoint. Status bit is set when CPU was halted due the EBREAK instruction.
    176
     | 1  | WO | 1b'0  | stepping_mode | 1  | Stepping mode. This bit enables stepping mode if the Register 'steps' is non zero.
    177
     | 1  | RW | 1b'0  | halt       | 0     | Halt mode. When this bit is set CPU pipeline is in the halted state. CPU can be halted at any time without impact on processing data.
    178
     
    179
     @par Stepping mode Steps registers (0x10008).
    180
     
    181
     |Bits|Type| Reset | Field Name | Bits  | Description
    182
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    183
     | 64 | RW | 64h'0 | steps   | 63:0  | Step counter. Total number of instructions that should execute CPU before halt. CPU is set into stepping using 'stepping mode' bit in Run Control register.
    184
     
    185
     @par Clock counter registers (0x10010).
    186
     
    187
     |Bits|Type| Reset | Field Name | Bits  | Description
    188
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    189
     | 64 | RW | 64h'0 | clock_cnt  | 63:0  | Clock counter. Clock counter is used for hardware computation of CPI rate. Clock counter isn't incrementing in Halt state.
    190
     
    191
     @par Step counter registers (0x10018).
    192
     
    193
     |Bits|Type| Reset | Field Name | Bits  | Description
    194
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    195
     | 64 | RW | 64h'0 | executed_cnt | 63:0  | Step counter. Total number of executed instructions. Step counter is used for hardware computation of CPI rate.
    196
     
    197
     @par Breakpoint Control registers (0x10020).
    198
     
    199
     |Bits|Type| Reset | Field Name | Bits  | Description
    200
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    201
     | 63 | RW | 63h'0 | Reserved   | 63:1  | Reserved
    202
     | 1  | RW | 1b'0  | trap_on_break | 0     | Trap On Break. Generate exception 'Breakpoint' on EBRAK instruction if this bit is set or just Halt the pipeline otherwise.
    203
     
    204
     @par Add hardware breakpoint registers (0x10028).
    205
     
    206
     |Bits|Type| Reset | Field Name | Bits  | Description
    207
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    208
     | 64 | RW | 64h'0 | add_break   | 63:0  | Add HW breakpoint address. Add specified address into Hardware breakpoint stack. In case of matching Instruction Pointer (pc) and any HW breakpoint there's injected EBREAK instruction on hardware level.
    209
     
    210
     @par Remove hardware breakpoint registers (0x10030).
    211
     
    212
     |Bits|Type| Reset | Field Name | Bits  | Description
    213
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    214
     | 64 | RW | 64h'0 | rem_break   | 63:0  | Remove HW breakpoint address. Remove specified address from Hardware breakpoints stack.
    215
     
    216
     @par Breakpoint Address Fetch registers (0x10038).
    217
     
    218
     |Bits|Type| Reset | Field Name | Bits  | Description
    219
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    220
     | 64 | RW | 64h'0 | br_address_fetch | 63:0  | Breakpoint fetch address. Specify address that will be ignored by Fetch stage and used Breakpoint Fetch Instruction value instead. This logic is used to avoid re-writing EBREAK into memory.
    221
     
    222
     @par Breakpoint Instruction Fetch registers (0x10040).
    223
     
    224
     |Bits|Type| Reset | Field Name | Bits  | Description
    225
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    226
     | 64 | RW | 64h'0 | br_instr_fetch | 63:0  | Breakpoint fetch instruction. Specify instruction that should executed instead of fetched from memory in a case of matching Breapoint Address Fetch register and Instruction pointer (pc).
    227
     
    228
     
    229
     @subsection dsu_local Local DSU Region (32 KB)
    230
     
    231
     @par Soft Reset registers (0x18000).
    232
     
    233
     |Bits|Type| Reset | Field Name | Bits  | Description
    234
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    235
     | 63 | RW | 63h'0 | Reserved   | 63:1  | Reserved.
    236
     | 1  | RW | 1b'0  | soft_reset | 0     | Soft Reset. Status bit is set when CPU was halted due the EBREAK instruction.
    237
     
    238
     @par Miss Access counter registers (0x18008).
    239
     
    240
     |Bits|Type| Reset | Field Name | Bits  | Description
    241
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    242
     | 64 | RO | 64h'0  | miss_access_cnt | 63:0 | Miss Access counter. This value as an additional debugging informantion provided by AXI Controller. It is possible to enable interrupt generation in Interrupt Controller on miss-access.
    243
     
    244
     @par Miss Access Address registers (0x18010).
    245
     
    246
     |Bits|Type| Reset | Field Name | Bits  | Description
    247
     |:--:|:--:|:-----:|:----------:|:-----:|:------------------------------------------------------------|
    248
     | 64 | RO | 64h'0  | miss_access_addr | 63:0 | Miss Access address. Address of the latest miss-accessed transaction. This information comes from AXI Controller.
    249
     
    250
     @par Bus Utilization registers (0x18040 + n*2*sizeof(uint64_t)).
    251
     
    252
     |Offset |Bits|Type| Reset | Name  | Definition
    253
     |:------|:--:|:--:|:-----:|:-----:|---------------------------------------------|
    254
     |0x18040| 64 | RO | 64h'0 | w_cnt | Write transactions counter for master 0. Master 0 is the RIVER CPU by default.
    255
     |0x18048| 64 | RO | 64h'0 | r_cnt | Read transactions counter for master 0.
    256
     |0x18050| 64 | RO | 64h'0 | w_cnt | Write transactions counter for master 1. Master 1 is unused in a case of configuration with RIVER CPU.
    257
     |0x18058| 64 | RO | 64h'0 | r_cnt | Read transactions counter for master 1.
    258
     |0x18060| 64 | RO | 64h'0 | w_cnt | Write transactions counter for master 2. Master 2 is the GRETH by default (Ethernet Controller with master interface).
    259
     |0x18068| 64 | RO | 64h'0 | r_cnt | Read transactions counter for master 2.
    260
     
    261
     
    262
    */

    powered by: WebSVN 2.1.0

    © copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.