RV12 RISC-V CPU Core Datasheet
RV12 RISC-V CPU Core Datasheet
Datasheet (v1.3)
[Link]
01-Feb-2018
c Roa Logic B.V.
Contents
1 Product Brief 1
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4 Configurations 17
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Core Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2.1 JEDEC BANK and JEDEC MANUFACTURER ID . . . . . . . . . 18
4.2.2 XLEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
i
RV12 RISC-V CPU Core (v1.3) Roa Logic
4.2.3 PC INIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.4 PLEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.5 PMP CNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.6 PMA CNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.7 HAS USER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.8 HAS SUPER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.9 HAS HYPER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.10 HAS RVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.11 HAS RVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.12 HAS RVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.13 HAS BPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.14 IS RV12E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.15 MULT LATENCY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.16 BPU LOCAL BITS . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.17 BPU GLOBAL BITS . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.18 HARTID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.19 ICACHE SIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.20 ICACHE BLOCK LENGTH . . . . . . . . . . . . . . . . . . . . . . 21
4.2.21 ICACHE WAYS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.22 ICACHE REPLACE ALG . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.23 DCACHE SIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.24 DCACHE BLOCK LENGTH . . . . . . . . . . . . . . . . . . . . . . 21
4.2.25 DCACHE WAYS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2.26 DCACHE REPLACE ALG . . . . . . . . . . . . . . . . . . . . . . . 22
4.2.27 BREAKPOINTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2.28 TECHNOLOGY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2.29 MNMIVEC DEFAULT . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2.30 MTVEC DEFAULT . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2.31 HTVEC DEFAULT . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2.32 STVEC DEFAULT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2.33 UTVEC DEFAULT . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
ii
RV12 RISC-V CPU Core (v1.3) Roa Logic
iii
RV12 RISC-V CPU Core (v1.3) Roa Logic
6 External Interfaces 48
6.1 AMBA3 AHB-Lite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.1.1 HRESETn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.1.2 HCLK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.1.3 IHSEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.1.4 IHADDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.1.5 IHRDATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.1.6 IHWRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.1.7 IHSIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.1.8 IHBURST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.1.9 IHPROT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.1.10 IHTRANS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.1.11 IHMASTLOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.1.12 IHREADY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.1.13 IHRESP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.1.14 DHSEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.1.15 DHADDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.16 DHRDATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.17 DHWDATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.18 DHWRITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.19 DHSIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.20 DHBURST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
iv
RV12 RISC-V CPU Core (v1.3) Roa Logic
6.1.21 DHPROT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.1.22 DHTRANS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.1.23 DHMASTLOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.1.24 DHREADY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.1.25 DHRESP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.2 Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.2.1 EXT NMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.2.2 EXT TINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.2.3 EXT SINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.2.4 EXT INT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.3 Physical Memory Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.3.1 pma cfg i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.3.2 pma adr i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7 Debug Unit 57
7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2 Debug Controller Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2.1 dbg stall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2.2 dbg strb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2.3 dbg we . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.2.4 dbg addr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.2.5 dbg dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.2.6 dbg dato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.2.7 dbg bp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.3 Register Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.4 Internal Register Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.4.1 Debug Control Register DBG CTRL . . . . . . . . . . . . . . . . . . . . 59
7.4.2 Debug Breakpoint Hit Register DBG HIT . . . . . . . . . . . . . . . . 60
7.4.3 Debug Interrupt Enable Register DBG IE . . . . . . . . . . . . . . . . 60
7.4.4 Debug Exception Cause Register DBG CAUSE . . . . . . . . . . . . . . 61
7.4.5 Debug Breakpoint Control Registers DBG CTRLx . . . . . . . . . . . . 62
7.4.6 Debug Breakpoint Data Registers DBG DATAx . . . . . . . . . . . . . 63
8 Resources 64
9 Acknowledgements 65
v
RV12 RISC-V CPU Core (v1.3) Roa Logic
10 Revision History 66
vi
1. Product Brief
1.1 Introduction
The RV12 is a highly configurable single-issue, single-core RV32I, RV64I compliant RISC
CPU intended for the embedded market. The RV12 is a member of the Roa Logic’s
32/64bit CPU family based on the industry standard RISC-V instruction set.
Branch Data
Instruction Predictor Cache
Interface
Execution Pipeline
CPU State
Decode/Optimize
Memory Access
Data
Pre-Decode
Write Back
Interface
Execute
Fetch
Register File
Instruction
Debug
Cache
Unit
Configurable Optional
Interface Unit
The RV12 implements a Harvard architecture for simultaneous instruction and data
memory accesses. It features an optimizing folded 6-stage pipeline, which optimizes over-
laps between the execution and memory accesses, thereby reducing stalls and improving
efficiency.
Optional features include Branch Prediction, Instruction Cache, Data Cache, Debug
Unit and optional Multiplier/Divider Units. Parameterized and configurable features in-
clude the instruction and data interfaces, the branch-prediction-unit configuration, and
the cache size, associativity, replacement algorithms and multiplier latency. Providing the
user with trade offs between performance, power, and area to optimize the core for the
application.
RV12 is compliant with the RISC-V User Level ISA v2.2 and Privileged Architecture
v1.10 specifications published by the RISC-V Foundation ([Link]).
1
RV12 RISC-V CPU Core (v1.3) Roa Logic
1.2 Features
High Performance 32/64bit CPU
• Optional/Parameterized branch-prediction-unit
• Optional/Parameterized caches
Highly Parameterized
• Architectural simulator
2
2. Introduction to the RV12
The RISC-V specification provides for multi-threading and multi-core implementations.
A core is defined as an implementation with its own instruction fetch unit. A hardware
thread, or hart, is defined as a processing engine with its own state. A core may contain
multiple hardware threads. See [Link] for the specifications1 .
The RV12 implements a single core 32/64bit Reduced Instruction Set Computing
(RISC) Central Processing Unit (CPU) with a single hardware thread, based on the RISC-
V User Instruction Set Architecture v2.2 and Supervisor Instruction Set Architecture v1.10
specifications. The core is highly configurable, providing the user with a trade-off between
area, power, and performance, thus allowing it to be optimized for the intended task.
See Chapter 4 for a description of the configuration options and parameters.
The highest privilege level is the Machine level. This is an inherent trusted level and
has access to, and can alter, the whole machine. The lowest level is the User/Application
level and is considered the least trusted level. It is used to protect the rest of the system
from malicious applications.
Supervisor mode is used to provide isolation between an operating system and the
machine and user levels. Hypervisor mode is used to virtualize operating systems.
The RV12 always implements Machine mode and optionally implements User mode
and parts of the Supervisor Mode.
3
RV12 RISC-V CPU Core (v1.3) Roa Logic
branches and jumps. The Memory stage is folded into the Execute and Write-Back stages.
The Decode stage optimizes the instruction stream to allow CPU stalls, instruction execu-
tion, and memory accesses to overlap, thereby effectively hiding CPU stalls and improving
the CPU’s cycles per instruction CPI.
Pre-Decode (PD)
The RV12 pipeline is capable of executing one instruction per clock cycle by overlapping
the execution stages. The figure below shows how 5 instructions are being operated on at
the same time; this is referred to as ‘being in flight’. Instruction A is the oldest instruction
and it’s in the Write Back (WB) stage, whereas Instruction E is the newest instruction
and it’s in the Instruction Fetch (IF) stage.
Instruction A IF PD ID EX MEM WB
Instruction B IF PD ID EX MEM WB
Instruction C IF PD ID EX MEM WB
Instruction D IF PD ID EX MEM WB
Instruction E IF PD ID EX MEM WB
Instruction F IF PD ID EX MEM WB
During the Instruction Fetch stage one instruction is read from the instruction memory
and the program counter is updated to point to the next instruction..
4
RV12 RISC-V CPU Core (v1.3) Roa Logic
When RVC Support is enabled, the Instruction Pre-Decode stage decodes a 16bit-compressed
instruction into a native 32bit instruction.
During the Instruction Decode stage the Register File is accessed and the bypass controls
are determined.
During the Execute stage the result is calculated for an ALU, MUL, DIV instruction, the
memory accessed for a Load/Store instruction, and branches and jumps are calculated and
checked against their predicted outcomes.
During the Memory stage, memory access by the pipeline is completed. Inclusion of this
stage ensures high performance of the pipeline.
During the Write Back stage the result from the Execution stage is written into the Register
File.
5
RV12 RISC-V CPU Core (v1.3) Roa Logic
the number of program counter entries, thereby reducing aliasing of the branch predictor
at the expense of a larger Branch Prediction Table.
Setting BPU GLOBAL BITS to zero creates a local-predictor. Setting BPU GLOBAL BITS
to any non-zero value adds history (previous branch prediction results) to the vector.
This allows the branch predictor to handle nested branches. Increasing the number of
BPU GLOBAL BITS adds more history to the vector at the expense of a larger Branch Pre-
diction Table.
If no BPU is present, then all forward branches are predicted taken and all backward
branches are predicted not-taken.
6
RV12 RISC-V CPU Core (v1.3) Roa Logic
7
3. RV12 Execution Pipeline
The RV12 implements a 32/64bit Integer modified form of the classic RISC pipeline. The
pipeline consists of the Instruction Fetch, Pre-Decode, Instruction Decode, Execution,
Memory Access, and Write Back stages as highlighted in the figure below.
Register
File
Branch
Multiplier
Instruction Decode
Instruction Fetch
Memory Access
Pre-decode
Write Back
Instruction
Execution
Interface
ICACHE
Bus
ALU
Interface
ICACHE
Store
Load
Bus
8
RV12 RISC-V CPU Core (v1.3) Roa Logic
IF Flush / Stall
pc+2
pc+4
if_nxt_pc ex_nxt_pc
st_nxt_pc
parcel_pc
ex_nxt_pc
if_pc
st_nxt_pc
pd_branch_pc
parcel_valid if_instr
parcel if_bubble
9
RV12 RISC-V CPU Core (v1.3) Roa Logic
PD bu_predict
pd_predict
if_pc pd_pc
pd_branch_pc
if_instr pd_instr
if_bubble pd_bubble
10
RV12 RISC-V CPU Core (v1.3) Roa Logic
ID
pd_pc id_pc
pd_instr id_instr
src1-to-RF
src2-to-RF
id_bubble
id_instr
pd_bubble
id_bypassA
id_bypassB
pd_pc id_opA
‘0’
immU id_opB
immI
11
RV12 RISC-V CPU Core (v1.3) Roa Logic
12
RV12 RISC-V CPU Core (v1.3) Roa Logic
EX
To/From DCACHE
lsu_r
lsu_bubble
Store
Load
lsu_stall
ex_flush
ex_nxt_pc lsu_r
div_r ex_r
mul_r
Branch
alu_r
div_r
div_bubble
Div
div_stall
mul_r
mul_bubble
Mul
mul_stall
id_bubble alu_r
id_instr alu_bubble
ALU
id_opA
opA-from-RF
wb_r lsu_bubble
mem_r OpA
div_bubble ex_bubble
ex_r
mul_bubble
id_opB
alu_bubble
lsu_stall
opB-from-RF
OpB ex_stall div_stall
mul_stall
alu_stall
13
RV12 RISC-V CPU Core (v1.3) Roa Logic
14
RV12 RISC-V CPU Core (v1.3) Roa Logic
MEM
ex_pc mem_pc
ex_instr mem_instr
ex_r mem_r
ex_bubble mem_bubble
15
RV12 RISC-V CPU Core (v1.3) Roa Logic
WB
mem_pc wb_pc
mem_instr wb_instr
mem_r wb_r
wb_dst
wb_we
mem_bubble
16
4. Configurations
4.1 Introduction
The RV12 is a highly configurable 32 or 64bit RISC CPU. The core parameters and
configuration options are described in this section.
17
RV12 RISC-V CPU Core (v1.3) Roa Logic
The JEDEC BANK and JEDEC MANUFACTURER ID parameters together set the manufacturer
ID of the RV12 core. The official Roa Logic JEDEC ID is:
7F 7F 7F 7F 7F 7F 7F 7F 7F 6E
This ID is specified via the JEDEC BANK and JEDEC MANUFACTURER ID parameters as:
JEDEC BANK = 0x0A (Corresponding to number of bytes)
JEDEC MANUFACTURER ID = 0x6E (Single byte JEDEC ID)
These parameters are then encoded into a single value stored in the mvendorid CSR per
the RISC-V v1.10 Privileged Specification.
See section 5.6.2 Vendor ID Register (mvendorid) for more details.
4.2.2 XLEN
The XLEN parameter specifies the width of the data path. Allowed values are either 32 or
64, for a 32bit or 64bit CPU respectively.
18
RV12 RISC-V CPU Core (v1.3) Roa Logic
4.2.3 PC INIT
The PC INIT parameter specifies the initialization vector of the Program Counter; i.e. the
boot address, which by default is defined as address ‘h200
4.2.4 PLEN
The PLEN parameter specifies the physical address space the CPU can address. This
parameter must be equal or less than XLEN. Using fewer bits for the physical address
reduces internal and external resources. Internally the CPU still uses XLEN, but only the
PLEN LSBs are used to address the caches and the external buses.
The RISC-V specification supports up to 16 Physical Memory Protection Entries which are
configured in software via the PMP CSRs. The PMP CNT parameter specifies the number
implemented in the RV12 processor, and must be set to a value of 16 or less. The default
value is 16.
The RV12 supports an unlimited number of Physically Protected Memory regions, the
attributes for which are configured in hardware via the Physical Memory Attribute (PMA)
Configuration and Address input ports. The PMA CNT parameter specifies the number of
regions supported; the defualt value is 16
The HAS USER parameter defines if User Privilege Level is enabled (‘1’) or disabled (‘0’).
The default value is disabled (‘0’).
The HAS SUPER parameter defines if Supervisor Privilege Level is enabled (‘1’) or disabled
(‘0’). The default value is disabled (‘0’).
The HAS HYPER parameter defines if Hypervisor Privilege Level is enabled (‘1’) or disabled
(‘0’). The default value is disabled (‘0’).
The HAS RVM parameter defines if the “M” Standard Extension for Integer Multiplication
and Division is enabled (‘1’) or disabled (‘0’). The default value is disabled (‘0’).
The HAS RVA parameter defines if the “A” Standard Extension for Atomic Memory In-
structions is enabled (‘1’) or disabled (‘0’). The default value is disabled (‘0’).
19
RV12 RISC-V CPU Core (v1.3) Roa Logic
The HAS RVC parameter defines if the “C” Standard Extension for Compressed Instructions
is enabled (‘1’) or disabled (‘0’). The default value is disabled (‘0’).
The CPU has an optional Branch Prediction Unit that can reduce the branch penalty
considerably by prediction if a branch is taken or not taken. The HAS BPU parameter
specifies if the core should generate a branch- predictor. Setting this parameter to 0
prevents the core from generating a branch-predictor. Setting this parameter to 1 instructs
the core to generate a branch-predictor. The type and size of the branch-predictor is
determined by the BP GLOBAL BITS and BP LOCAL BITS parameters.
See section 2.3 Branch Prediction Unit for more details.
4.2.14 IS RV12E
RV12 supports the RV32E Base Integer Instruction Set, Version 1.9. RV32E is a reduced
version of RV32I designed for embedded systems, reducing the number of integer registers
to 16. The IS RV12E parameter determines if this feature is enabled (‘1’) or disabled (‘0’).
The default value is disabled (‘0’).
If the “M” Standard Extension for Integer Multiplication and Division is enabled via the
HAS RVM parameter (HAS RVM=1 See section 4.2.7), a hardware multiplier will be generated
to support these instructions. By default (i.e. when MULT LATENCY=0) the generated
multiplier will be built as a purely combinatorial function.
The performance of the hardware multiplier may be improved at the expense of in-
creased latency of 1, 2 or 3 clock cycles by defining MULT LATENCY to 1, 2 or 3 respectively.
If the “M” Standard Extension is not enabled (HAS RVM=0) then the MULT LATENCY
parameter has no effect on the RV12 implementation.
The CPU has an optional Branch Prediction Unit that can reduce the branch penalty con-
siderably by prediction if a branch is taken or not taken. The BPU LOCAL BITS parameter
specifies how many bits from the program counter should be used for the prediction.
This parameter only has an effect if HAS BPU=1.
See section 2.3 Branch Prediction Unit for more details.
The CPU has an optional Branch Prediction Unit that can reduce the branch penalty con-
siderably by prediction if a branch is taken or not-taken. The BPU GLOBAL BITS parameter
specifies how many history bits should be used for the prediction.
This parameter only has an effect if HAS BPU=1.
See section 2.3 Branch Prediction Unit for more details.
20
RV12 RISC-V CPU Core (v1.3) Roa Logic
4.2.18 HARTID
The RV12 is a single thread CPU, for which each instantiation requires a hart identifier
(HARTID), which must be unique within the overall system. The default HARTID is 0, but
may be set to any integer.
The CPU has an optional instruction cache. The ICACHE SIZE parameter specifies the
size of the instruction cache in Kbytes. Setting this parameter to 0 prevents the core from
generating an instruction cache.
See section 2.7 Instruction Cache for more details.
The CPU has an optional instruction cache. The ICACHE BLOCK LENGTH parameter speci-
fies the number of bytes in one cache block.
See section 2.7 Instruction Cache for more details.
The CPU has an optional instruction cache. The ICACHE WAYS parameter specifies the
associativity of the cache. Setting this parameter to 1 generates a direct mapped cache,
setting it to 2 generates a 2-way set associative cache, setting it to 4 generates a 4-way set
associative cache, etc.
See section 2.7 Instruction Cache for more details. See section 2.7 Instruction Cache
for more details.
The CPU has an optional instruction cache. The ICACHE REPLACE ALG parameter specifies
the algorithm used to select which block will be replaced during a block-fill.
See section 2.7 Instruction Cache for more details. See section 2.7 Instruction Cache
for more details.
The CPU has an optional data cache. The DCACHE SIZE parameter specifies the size
of the instruction cache in Kbytes. Setting this parameter to ‘0’ prevents the core from
generating a data cache.
See section 2.6 Data Cache for more details.
The CPU has an optional data cache. The DCACHE BLOCK LENGTH parameter specifies the
number of bytes in one cache block.
See section 2.6 Data Cache for more details.
21
RV12 RISC-V CPU Core (v1.3) Roa Logic
The CPU has an optional data cache. The DCACHE WAYS parameter specifies the associativ-
ity of the cache. Setting this parameter to 1 generates a direct mapped cache, setting it to
2 generates a 2-way set associative cache, setting it to 4 generates a 4-way set associative
cache, etc.
See section 2.6 Data Cache for more details.
The CPU has an optional instruction cache. The DCACHE REPLACE ALG parameter specifies
the algorithm used to select which block will be replaced during a block-fill.
See section 2.6 Data Cache for more details.
4.2.27 BREAKPOINTS
The CPU has a debug unit that connects to an external debug controller. The BREAKPOINTS
parameter specifies the number of implemented hardware breakpoints. The maximum is
8.
4.2.28 TECHNOLOGY
The TECHNOLOGY parameter defines the target silicon technology and may be one of the
following values:
The MNMIVEC DEFAULT parameter defines the Machine Mode non-maskable interrupt vector
address. The default vector is defined relative to the Program Counter Initialisation vector
PC INIT as follows:
MNMIVEC DEFAULT = PC INIT - ’h004
The MTVEC DEFAULT parameter defines the interrupt vector address for the Machine Priv-
ilege Level. The default vector is defined relative to the Program Counter Initialisation
vector PC INIT as follows:
MTVEC DEFAULT = PC INIT - ’h040
22
RV12 RISC-V CPU Core (v1.3) Roa Logic
The HTVEC DEFAULT parameter defines the interrupt vector address for the Hypervisor
Privilege Level. The default vector is defined relative to the Program Counter Initialisation
vector PC INIT as follows:
HTVEC DEFAULT = PC INIT - ’h080
The STVEC DEFAULT parameter defines the interrupt vector address for the Supervisor
Privilege Level. The default vector is defined relative to the Program Counter Initialisation
vector PC INIT as follows:
STVEC DEFAULT = PC INIT - ’h0C0
The UTVEC DEFAULT parameter defines the interrupt vector address for the User Privilege
Level. The default vector is defined relative to the Program Counter Initialisation vector
PC INIT as follows:
UTVEC DEFAULT = PC INIT - ’h100
23
5. Control and Status Registers
5.1 Introduction
The state of the CPU is maintained by the Control & Status Registers (CSRs). They
determine the feature set, set interrupts and interrupt masks, and determine the privilege
level. The CSRs are mapped into an internal 12bit address space and are accessible using
special commands.
31 20 19 15 14 12 11 7 6 0
csr rs1 funct3 rd opcode
12 5 3 5 7
source/dest source CSRRW dest SYSTEM
source/dest source CSRRS dest SYSTEM
source/dest source CSRRC dest SYSTEM
source/dest zimm[4:0] CSRRWI dest SYSTEM
source/dest zimm[4:0] CSRRSI dest SYSTEM
source/dest zimm[4:0] CSRRCI dest SYSTEM
The CSRRW (Atomic Read/Write CSR) instruction atomically swaps values in the
CSRs and integer registers. CSRRW reads the old value of the CSR, zero-extends the
value to XLEN bits, and writes it to register rd. The initial value in register rs1 is written
to the CSR.
The CSRRS (Atomic Read and Set CSR) instruction reads the old value of the CSR,
zero-extends the value to XLEN bits, and writes it to register rd. The initial value in
register rs1 specifies the bit positions to be set in the CSR. Any bit that is high in rs1
will be set in the CSR, assuming that bit can be set. The effect is a logic OR between the
old value in the CSR and the new value in rs1.
If rs1 =X0, then the CSR is not written to.
The CSRRC (Atomic Read and Clear CSR) instruction reads the old value of the
CSR, zero-extends the value to XLEN bits, and writes it to register rd. The initial value
in register rs1 specifies the bit positions to be cleared in the CSR. Any bit that is high
in rs1 will be cleared in the CSR, assuming that bit can be cleared. If rs1 =X0, then the
CSR is not written to.
The CSRRWI, CSRRSI, and CSRRCI commands are similar in behavior. Except that
they update the CSR using an immediate value, instead of referencing a source register.
The immediate value is obtained by zero-extending the 5bit zimm field. If zimm[4:0] is
zero, then the CSR is not written to.
24
RV12 RISC-V CPU Core (v1.3) Roa Logic
31 20 19 15 14 12 11 7 6 0
csr rs1 funct3 rd opcode
12 5 3 5 7
RDCYCLE[H] 0 CSRRS dest SYSTEM
RDTIME[H] 0 CSRRS dest SYSTEM
RDINSTRET[H] 0 CSRRS dest SYSTEM
25
RV12 RISC-V CPU Core (v1.3) Roa Logic
26
RV12 RISC-V CPU Core (v1.3) Roa Logic
27
RV12 RISC-V CPU Core (v1.3) Roa Logic
The misa register is an XLEN-bit WARL read-write register reporting the ISA supported
by the hart.
XLEN-1 XLEN-2 XLEN-3 26 25 0
Base (WARL) WIRI Extensions (WARL)
2 XLEN-28 26
The extensions field encodes the presence of the standard extensions, with a single bit
per letter of the alphabet (bit 0 encodes the presence of extension “A”, bit 1 encodes the
presence of extension “B”, through to bit 25 that encodes the presence of extension “Z”).
The “I” bit will be set for RV32I and RV64I base ISAs, and the “E” bit will be set for
RV32E.
28
RV12 RISC-V CPU Core (v1.3) Roa Logic
The Base field encodes the native base integer ISA width as shown:
Value Description
1 32
2 64
The mvendorid read-only register is an XLEN-bit register encoding the JEDEC manufac-
turer ID of the provider of the core.
XLEN-1 7 6 0
Bank Offset
XLEN-7 7
The marched CSR is an XLEN-bit read-only register encoding the base microarchitecture
of the hart. For the RV12 CPU this is defined as:
XLEN-1 0
Architecture ID
XLEN
29
RV12 RISC-V CPU Core (v1.3) Roa Logic
mimpid is an XLEN-sized read-only register provides hardware version information for the
CPU.
XLEN-1 0
Implementation
XLEN
The RISC-V specification calls for the contents of mimpid to be defined by the sup-
plier/developer of the CPU core. In the Roa Logic implementation, this register is used
to define the User Specification, Privilege Specification and Extension Specifications sup-
ported by that specific version of the RV12 core.
The value held within the mimpid CSR is an integer denoting Specification and Exten-
sion support as defined in the following table:
XLEN-1 0
Hart ID
XLEN
The mhartid read-only register indicates the hardware thread that is running the code.
The RV12 implements a single thread, therefore this register always reads zero.
The mstatus register is an XLEN-bit read/write register formatted as shown in Figure 5.8
for RV32 and Figure 5.9 for RV64. The mstatus register keeps track of and controls the
hart’s current operating state. Restricted views of the mstatus register appear as the
sstatus and ustatus registers in the S-level and U-level ISAs respectively.
Interrupt-enable bits, MIE, SIE, and UIE, are provided for each privilege mode. These bits
are primarily used to guarantee atomicity with respect to interrupt handlers at the current
privilege level. When a hart is executing in privilege mode x, interrupts are enabled when
x IE=1. Interrupts for lower privilege modes are always disabled, whereas interrupts for
higher privilege modes are always enabled. Higher-privilege-level code can use separate
30
RV12 RISC-V CPU Core (v1.3) Roa Logic
31 30 23 22 21 20 19 18 17
SD WPRI TSR TW TVM MXR SUM MPRV
1 8 1 1 1 1 1 1
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
XS[1:0] FS[1:0] MPP[1:0] WPRI SPP MPIE WPRI SPIE UPIE MIE WPRI SIE UIE
2 2 2 2 1 1 1 1 1 1 1 1 1
XLEN-1 XLEN-2 36 35 34 33 32 31 23 22 21 20 19 18 17
SD WPRI SXL[1:0] UXL[1:0] WPRI TSR TW TVM MXR SUM MPRV
1 XLEN-37 2 2 9 1 1 1 1 1 1
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
XS[1:0] FS[1:0] MPP[1:0] WPRI SPP MPIE WPRI SPIE UPIE MIE WPRI SIE UIE
2 2 2 2 1 1 1 1 1 1 1 1 1
Figure 5.9: Machine-mode status register (mstatus) for RV64 and RV128.
per-interrupt enable bits to disable selected interrupts before ceding control to a lower
privilege level.
To support nested traps, each privilege mode x has a two-level stack of interrupt-enable
bits and privilege modes. x PIE holds the value of the interrupt-enable bit active prior
to the trap, and x PP holds the previous privilege mode. The x PP fields can only hold
privilege modes up to x, so MPP is two bits wide, SPP is one bit wide, and UPP is
implicitly zero. When a trap is taken from privilege mode y into privilege mode x, x PIE
is set to the value of x IE; x IE is set to 0; and x PP is set to y.
The MRET, SRET, or URET instructions are used to return from traps in M-mode,
S-mode, or U-mode respectively. When executing an xRET instruction, supposing x PP
holds the value y, x IE is set to x PIE; the privilege mode is changed to y; x PIE is set to
1; and x PP is set to U (or M if user-mode is not supported).
x PP fields are WLRL fields that need only be able to store supported privilege modes,
including x and any implemented privilege mode lower than x.
User-level interrupts are an optional extension and have been allocated the ISA exten-
sion letter N. If user-level interrupts are omitted, the UIE and UPIE bits are hardwired to
zero. For all other supported privilege modes x, the x IE and x PIE must not be hardwired.
For RV64 systems, the SXL and UXL fields are WARL fields that control the value of
XLEN for S-mode and U-mode, respectively. The encoding of these fields is the same as
the MXL field of misa. The effective XLEN in S-mode and U-mode are termed S-XLEN
and U-XLEN, respectively.
For RV32 systems, the SXL and UXL fields do not exist, and S-XLEN = 32 and
U-XLEN = 32.
31
RV12 RISC-V CPU Core (v1.3) Roa Logic
The MPRV (Modify PRiVilege) bit modifies the privilege level at which loads and stores
execute in all privilege modes. When MPRV=0, translation and protection behave as
normal. When MPRV=1, load and store memory addresses are translated and protected
as though the current privilege mode were set to MPP. Instruction address-translation and
protection are unaffected. MPRV is hardwired to 0 if U-mode is not supported.
The MXR (Make eXecutable Readable) bit modifies the privilege with which loads ac-
cess virtual memory. When MXR=0, only loads from pages marked readable will succeed.
When MXR=1, loads from pages marked either readable or executable (R=1 or X=1) will
succeed. MXR is hardwired to 0 if S-mode is not supported.
The SUM (permit Supervisor User Memory access) bit modifies the privilege with
which S-mode loads, stores, and instruction fetches access virtual memory. When SUM=0,
S-mode memory accesses to pages that are accessible by U-mode will fault. When SUM=1,
these accesses are permitted. SUM has no effect when page-based virtual memory is not
in effect. Note that, while SUM is ordinarily ignored when not executing in S-mode, it is
in effect when MPRV=1 and MPP=S. SUM is hardwired to 0 if S-mode is not supported.
Virtualization and Context Extensions are not supported by the RV12 v1.x implementa-
tion. The value of these fields will therefore be permanently set to 0.
The mtvec register is an XLEN-bit read/write register that holds trap vector configuration,
consisting of a vector base address (BASE) and a vector mode (MODE).
XLEN-1 21 0
BASE[XLEN-1:2] (WARL) MODE (WARL)
XLEN-2 2
The encoding of the MODE field is shown in Table 5.7. When MODE=Direct, all
traps into machine mode cause the pc to be set to the address in the BASE field. When
MODE=Vectored, all synchronous exceptions into machine mode cause the pc to be set
to the address in the BASE field, whereas interrupts cause the pc to be set to the address
in the BASE field plus four times the interrupt cause number.
32
RV12 RISC-V CPU Core (v1.3) Roa Logic
The machine exception delegation register (medeleg) and machine interrupt delegation
register (mideleg) are XLEN-bit read/write registers used to indicate that certain excep-
tions and interrupts should be processed directly by a lower privilege level.
When a trap is delegated to a less-privileged mode x, the x cause register is written
with the trap cause; the x epc register is written with the virtual address of the instruction
that took the trap; the x PP field of mstatus is written with the active privilege mode
at the time of the trap; the x PIE field of mstatus is written with the value of the active
interrupt-enable bit at the time of the trap; and the x IE field of mstatus is cleared. The
mcause and mepc registers and the MPP and MPIE fields of mstatus are not written.
XLEN-1 0
Synchronous Exceptions
XLEN
medeleg has a bit position allocated for every synchronous exception with the index
of the bit position equal to the value returned in the mcause register (i.e. setting bit 8
allows user-mode environment calls to be delegated to a lower-privilege trap handler).
XLEN-1 0
Interrupts
XLEN
mideleg holds trap delegation bits for individual interrupts, with the layout of bits
matching those in the mip register (i.e. STIP interrupt delegation control is located in bit
5).
XLEN-1 12 11 10 9 8 7 6 5 4 3 2 1 0
WIRI MEIP WIRI SEIP UEIP MTIP WIRI STIP UTIP MSIP WIRI SSIP USIP
XLEN-12 1 1 1 1 1 1 1 1 1 1 1 1
33
RV12 RISC-V CPU Core (v1.3) Roa Logic
XLEN-1 12 11 10 9 8 7 6 5 4 3 2 1 0
WPRI MEIE WPRI SEIE UEIE MTIE WPRI STIE UTIE MSIE WPRI SSIE USIE
XLEN-12 1 1 1 1 1 1 1 1 1 1 1 1
The MTIP, STIP, UTIP bits correspond to timer interrupt-pending bits for machine,
supervisor, and user timer interrupts, respectively. The MTIP bit is read-only and is
cleared by writing to the memory-mapped machine-mode timer compare register. The
UTIP and STIP bits may be written by M-mode software to deliver timer interrupts to
lower privilege levels. User and supervisor software may clear the UTIP and STIP bits
with calls to the AEE and SEE respectively.
There is a separate timer interrupt-enable bit, named MTIE, STIE, and UTIE for
M-mode, S-mode, and U-mode timer interrupts respectively.
Each lower privilege level has a separate software interrupt-pending bit (SSIP, USIP),
which can be both read and written by CSR accesses from code running on the local hart
at the associated or any higher privilege level. The machine-level MSIP bits are written by
accesses to memory-mapped control registers, which are used by remote harts to provide
machine-mode interprocessor interrupts.
The MEIP field in mip is a read-only bit that indicates a machine-mode external
interrupt is pending. MEIP is set and cleared by a platform-specific interrupt controller.
The MEIE field in mie enables machine external interrupts when set.
The SEIP field in mip contains a single read-write bit. SEIP may be written by M-mode
software to indicate to S-mode that an external interrupt is pending.
The UEIP field in mip provides user-mode external interrupts when the N extension
for user-mode interrupts is implemented. It is defined analogously to SEIP.
The MEIE, SEIE, and UEIE fields in the mie CSR enable M-mode external interrupts,
S-mode external interrupts, and U-mode external interrupts, respectively.
For all the various interrupt types (software, timer, and external), if a privilege level
is not supported, the associated pending and interrupt-enable bits are hardwired to zero
in the mip and mie registers respectively.
An interrupt i will be taken if bit i is set in both mip and mie, and if interrupts are
globally enabled. By default, M-mode interrupts are globally enabled if the hart’s current
privilege mode is less than M, or if the current privilege mode is M and the MIE bit in
the mstatus register is set. If bit i in mideleg is set, however, interrupts are considered
to be globally enabled if the hart’s current privilege mode equals the delegated privilege
mode (S or U) and that mode’s interrupt enable bit (SIE or UIE in mstatus) is set, or if
the current privilege mode is less than the delegated privilege mode.
Multiple simultaneous interrupts and traps at the same privilege level are handled
in the following decreasing priority order: external interrupts, software interrupts, timer
interrupts, then finally any synchronous traps.
The mnmivec register is an XLEN-bit read/write register that holds the base address of the
non-maskable interrupt trap vector. When an exception occurs, the pc is set to mnmivec.
34
RV12 RISC-V CPU Core (v1.3) Roa Logic
XLEN-1 0
mnmivec
XLEN
The mscratch register is an XLEN-bit read/write register dedicated for use by machine
mode. It is used to hold a pointer to a machine-mode hart-local context space and swapped
with a user register upon entry to an M-mode trap handler.
XLEN-1 0
mscratch
XLEN
mepc is an XLEN-bit read/write register. The two low bits (mepc[1:0]) are always zero.
XLEN-1 0
mepc
XLEN
When a trap is taken, mepc is written with the virtual address of the instruction that
encountered the exception.
The mcause register is an XLEN-bit read-write register. The Interrupt bit is set if the
exception was caused by an interrupt. The Exception Code field contains a code identifying
the last exception. The remaining center bits will read zero
XLEN-1 XLEN-2 0
Interrupt Exception Code (WLRL)
1 XLEN-1
35
RV12 RISC-V CPU Core (v1.3) Roa Logic
The mtval register is an XLEN-bit read-write register formatted as shown in Figure 5.19.
XLEN-1 0
mtval
XLEN
When a trap is taken into M-mode, mtval is written with exception-specific informa-
tion to assist software in handling the trap. Otherwise, mtval is never written by the
implementation, though it may be explicitly written by software.
When a hardware breakpoint is triggered, or an instruction-fetch, load, or store address-
misaligned, access, or page-fault exception occurs, mtval is written with the faulting ef-
fective address. On an illegal instruction trap, mtval is written with the first XLEN bits
of the faulting instruction as described below. For other exceptions, mtval is set to zero,
but a future standard may redefine mtval’s setting for other exceptions.
36
RV12 RISC-V CPU Core (v1.3) Roa Logic
For instruction-fetch access faults with variable-length instructions, mtval will point to
the portion of the instruction that caused the fault while mepc will point to the beginning
of the instruction.
31 30 29 28 6 5 4 3 2 1 0
HPM31 HPM30 HPM29 ... HPM5 HPM4 HPM3 IR TM CY
1 1 1 23 1 1 1 1 1 1
Note: Machine performnce counters are currently unsupported and therefore all HPMn
bits are hardwired to ’0’.
The counter-enable registers mcounteren and scounteren control the availability of
the hardware performance monitoring counters to the next-lowest privileged mode.
When the CY, TM or IR bit in the mcounteren register is clear, attempts to read the
cycle, time, or instret register while executing in S-mode or U-mode will cause an illegal
instruction exception. When one of these bits is set, access to the corresponding register
is permitted in the next implemented privilege mode (S-mode if implemented, otherwise
U-mode).
If S-mode is implemented, the same bit positions in the scounteren register analo-
gously control access to these registers while executing in U-mode. If S-mode is permitted
to access a counter register and the corresponding bit is set in scounteren, then U-mode
is also permitted to access that register.
The mcycle CSR holds a count of the number of cycles the hart has executed since some
arbitrary time in the past. The mcycle register has 64-bit precision on all RV32 and RV64
systems.
On RV32 only, reads of the mcycle CSR returns the low 32 bits, while reads of the
mcycleh CSR returns bits 63–32.
The minstret CSR holds a count of the number of instructions the hart has retired since
some arbitrary time in the past. The minstret register has 64-bit precision on all RV32
and RV64 systems.
On RV32 only, reads of the minstret CSR returns the low 32 bits, while reads of the
minstreth CSR returns bits 63–32.
37
RV12 RISC-V CPU Core (v1.3) Roa Logic
The Machine High Performance event selector CSRs mhpevent3-31 are implemented but
unsupported in the current RV12 implementation.
The sstatus register is an XLEN-bit read/write register. The sstatus register keeps track
of the processor’s current operating state.
XLEN-1 XLEN-2 19 18 17 16 15 14 13 12 9 8 7 6 5 4 3 2 1 0
SD 0 PUM 0 XS[1:0] FS[1:0] 0 SPP 0 SPIE UPIE 0 SIE UIE
1 XLEN-20 1 1 2 2 4 1 2 1 1 2 1 1
The SPP bit indicates the privilege level at which a hart was executing before entering
supervisor mode. When a trap is taken, SPP is set to 0 if the trap originated from user
mode, or 1 otherwise. When an SRET instruction is executed to return from the trap
handler, the privilege level is set to user mode if the SPP bit is 0, or supervisor mode if
the SPP bit is 1; SPP is then set to 0.
The SIE bit enables or disables all interrupts in supervisor mode. When SIE is clear,
interrupts are not taken while in supervisor mode. When the hart is running in user-mode,
the value in SIE is ignored, and supervisor-level interrupts are enabled. The supervisor
can disable indivdual interrupt sources using the sie register.
The SPIE bit indicates whether interrupts were enabled before entering supervisor
mode. When a trap is taken into supervisor mode, SPIE is set to either SIE or UIE
depending on whether the trap was taken in supervisor or user mode respectively, and SIE
is set to 0. When an SRET instruction is executed, if SPP=S, then SIE is set to SPIE; or if
SPP=U, then UIE is set to SPIE. In either case, SPIE is then set to 1.
The UIE bit enables or disables user-mode interrupts. User-level interrupts are enabled
only if UIE is set and the hart is running in user-mode. The UPIE bit indicates whether user-
level interrupts were enabled prior to taking a user-level trap. When a URET instruction is
executed, UIE is set to UPIE, and UPIE is set to 1.
The PUM (Protect User Memory) bit modifies the privilege with which S-mode loads, stores,
and instruction fetches access virtual memory. When PUM=0, translation and protection
behave as normal. When PUM=1, S-mode memory accesses to pages that are accessible by
U-mode will fault. PUM has no effect when executing in U-mode.
The supervisor exception delegation register (sedeleg) and supervisor interrupt delegation
register (sideleg) are XLEN-bit read/write registers.
38
RV12 RISC-V CPU Core (v1.3) Roa Logic
In systems with all three privilege modes (M/S/U), setting a bit in medeleg or mideleg
will delegate the corresponding trap in S-mode or U-mode to the S-mode trap handler. If
U-mode traps are supported, S-mode may in turn set corresponding bits in the sedeleg
and sideleg registers to delegate traps that occur in U-mode to the U-mode trap handler.
The sip register is an XLEN-bit read/write register containing information on pending in-
terrupts, while sie is the corresponding XLEN-bit read/write register containing interrupt
enable bits.
XLEN-1 10 9 8 7 6 5 4 3 2 1 0
WIRI SEIP UEIP WIRI STIP UTIP WIRI SSIP USIP
XLEN-10 1 1 2 1 1 2 1 1
XLEN-1 10 9 8 7 6 5 4 3 2 1 0
WPRI SEIE UEIE WPRI STIE UTIE WPRI SSIE USIE
XLEN-10 1 1 2 1 1 2 1 1
Three types of interrupts are defined: software interrupts, timer interrupts, and exter-
nal interrupts. A supervisor-level software interrupt is triggered on the current hart by
writing 1 to its supervisor software interrupt-pending (SSIP) bit in the sip register. A
pending supervisor-level software interrupt can be cleared by writing 0 to the SSIP bit
in sip. Supervisor-level software interrupts are disabled when the SSIE bit in the sie
register is clear.
Interprocessor interrupts are sent to other harts by means of SBI calls, which will
ultimately cause the SSIP bit to be set in the recipient hart’s sip register.
A user-level software interrupt is triggered on the current hart by writing 1 to its user
software interrupt-pending (USIP) bit in the sip register. A pending user-level software
interrupt can be cleared by writing 0 to the USIP bit in sip. User-level software interrupts
are disabled when the USIE bit in the sie register is clear. If user-level interrupts are not
supported, USIP and USIE are hardwired to zero.
All bits besides SSIP, USIP, and UEIP in the sip register are read-only.
A supervisor-level timer interrupt is pending if the STIP bit in the sip register is set.
Supervisor-level timer interrupts are disabled when the STIE bit in the sie register is
clear. An SBI call to the SEE may be used to clear the pending timer interrupt.
A user-level timer interrupt is pending if the UTIP bit in the sip register is set. User-
level timer interrupts are disabled when the UTIE bit in the sie register is clear. If
user-level interrupts are supported, the ABI should provide a facility for scheduling timer
interrupts in terms of real-time counter values. If user-level interrupts are not supported,
UTIP and UTIE are hardwired to zero.
A supervisor-level external interrupt is pending if the SEIP bit in the sip register is set.
Supervisor-level external interrupts are disabled when the SEIE bit in the sie register is
39
RV12 RISC-V CPU Core (v1.3) Roa Logic
clear. The SBI should provide facilities to mask, unmask, and query the cause of external
interrupts.
The UEIP field in sip contains a single read-write bit. UEIP may be written by S-
mode software to indicate to U-mode that an external interrupt is pending. Additionally,
the platform-level interrupt controller may generate user-level external interrupts. The
logical-OR of the software-writeable bit and the signal from the external interrupt con-
troller are used to generate external interrupts for user mode. When the UEIP bit is read
with a CSRRW, CSRRS, or CSRRC instruction, the value returned in the rd destina-
tion register contains the logical-OR of the software-writable bit and the interrupt signal
from the interrupt controller. However, the value used in the read-modify-write sequence
of a CSRRS or CSRRC instruction is only the software-writable UEIP bit, ignoring the
interrupt value from the external interrupt controller.
User-level external interrupts are disabled when the UEIE bit in the sie register is
clear. If the N extension for user-level interrupts is not implemented, UEIP and UEIE are
hardwired to zero.
The stvec register is an XLEN-bit read/write register that holds the base address of the
S-mode trap vector. When an exception occurs, the pc is set to stvec. The stvec register
is always aligned to a 4-byte boundary.
XLEN-1 21 0
Trap-Vector Base Address (WARL) 0
XLEN-2 2
The stvec register is an XLEN-bit read/write register that holds trap vector configu-
ration, consisting of a vector base address (BASE) and a vector mode (MODE).
XLEN-1 21 0
BASE[XLEN-1:2] (WLRL) MODE (WARL)
XLEN-2 2
The BASE field in stvec is a WARL field that can hold any valid virtual or physical
address, subject to the following alignment constraints: the address must always be at
least 4-byte aligned, and the MODE setting may impose additional alignment constraints
on the value in the BASE field.
Value Name Description
0 Direct All exceptions set pc to BASE.
1 Vectored Asynchronous interrupts set pc to BASE+4×cause.
≥2 — Reserved
The encoding of the MODE field is shown in Table 5.9. When MODE=Direct, all
traps into supervisor mode cause the pc to be set to the address in the BASE field. When
40
RV12 RISC-V CPU Core (v1.3) Roa Logic
MODE=Vectored, all synchronous exceptions into supervisor mode cause the pc to be set
to the address in the BASE field, whereas interrupts cause the pc to be set to the address
in the BASE field plus four times the interrupt cause number.
The sscratch register is an XLEN-bit read/write register, dedicated for use by the super-
visor. Typically, sscratch is used to hold a pointer to the hart-local supervisor context
while the hart is executing user code. At the beginning of a trap handler, sscratch is
swapped with a user register to provide an initial working register.
XLEN-1 0
sscratch
XLEN
sepc is an XLEN-bit read/write register formatted as shown in Figure 7-24. The low bit
of sepc (sepc[0]) is always zero. On implementations that do not support instruction-
set extensions with 16-bit instruction alignment, the two low bits (sepc[1:0]) are always
zero. When a trap is taken, sepc is written with the virtual address of the instruction
that encountered the exception.
XLEN-1 0
sepc
XLEN
The scause register is an XLEN-bit read-only register. The Interrupt bit is set if the
exception was caused by an interrupt. The Exception Code field contains a code identifying
the last exception.
XLEN-1 XLEN-2 0
Interrupt Exception Code (WLRL)
1 XLEN-1
Table 5.10 below lists the possible exception codes for the current supervisor ISAs.
41
RV12 RISC-V CPU Core (v1.3) Roa Logic
The stval register is an XLEN-bit read-write register formatted as shown in Figure 5.29.
When a trap is taken into S-mode, stval is written with exception-specific information to
assist software in handling the trap. Otherwise, stval is never written by the implemen-
tation, though it may be explicitly written by software.
When a hardware breakpoint is triggered, or an instruction-fetch, load, or store access
or page-fault exception occurs, or an instruction-fetch or AMO address-misaligned excep-
tion occurs, stval is written with the faulting address. For other exceptions, stval is set
to zero, but a future standard may redefine stval’s setting for other exceptions.
XLEN-1 0
stval
XLEN
For instruction-fetch access faults and page faults on RISC-V systems with variable-
length instructions, stval will point to the portion of the instruction that caused the fault
while sepc will point to the beginning of the instruction.
The stval register can optionally also be used to return the faulting instruction bits
on an illegal instruction exception (sepc points to the faulting instruction in memory).
After an illegal instruction trap, stval will contain the entire faulting instruction
42
RV12 RISC-V CPU Core (v1.3) Roa Logic
provided the instruction is no longer than XLEN bits. If the instruction is less than
XLEN bits long, the upper bits of stval are cleared to zero. If the instruction is more
than XLEN bits long, stval will contain the first XLEN bits of the instruction.
31 30 29 28 6 5 4 3 2 1 0
0 0 0 ... 0 0 0 IR TM CY
1 1 1 23 1 1 1 1 1 1
The counter-enable register scounteren controls the availability of the hardware per-
formance monitoring counters to U-mode.
When the CY, TM, or IR bit in the scounteren register is clear, attempts to read the
cycle, time or instret register while executing in U-mode will cause an illegal instruction
exception. When one of these bits is set, access to the corresponding register is permitted.
The following CSRs are shadow registers of their Machine and Supervisor Mode counter-
parts, providing access only to User Mode bits where relevant. See the Machine Mode and
Supervisor Mode descriptions for more information
ustatus
uie & uip
utvec
uscratch
uepc
ucause
utval
cycle is an XLEN-bit read-only register. The RDCYCLE pseudo-instruction reads the low
XLEN bits of the cycle CSR that holds a count of the number of clock cycles executed
by the processor on which the hardware thread is running from an arbitrary start time in
the past.
time is an XLEN-bit read-only register. The RDTIME pseudo-instruction reads the time
CSR, where the underlying action causes a trap and enables the ABI return the time value.
43
RV12 RISC-V CPU Core (v1.3) Roa Logic
cycleh is a read-only register that contains bits 63-32 of the counter of the number of
clock cycles executed by the processor.
RDCYCLEH is an RV32I-only instruction providing access to this register.
instreth is a read-only register that contains bits 63-32 of the instruction counter.
RDINSTRETH is an RV32I-only instruction providing access to this register
31 24 23 16 15 87 0
pmp3cfg pmp2cfg pmp1cfg pmp0cfg pmpcfg0
8 8 8 8
31 24 23 16 15 87 0
pmp7cfg pmp6cfg pmp5cfg pmp4cfg pmpcfg1
8 8 8 8
31 24 23 16 15 87 0
pmp11cfg pmp10cfg pmp9cfg pmp8cfg pmpcfg2
8 8 8 8
31 24 23 16 15 87 0
pmp15cfg pmp14cfg pmp13cfg pmp12cfg pmpcfg3
8 8 8 8
44
RV12 RISC-V CPU Core (v1.3) Roa Logic
63 56 55 48 47 40 39 32 31 24 23 16 15 87 0
pmp7cfg pmp6cfg pmp5cfg pmp4cfg pmp3cfg pmp2cfg pmp1cfg pmp0cfg pmpcfg0
8 8 8 8 8 8 8 8
63 56 55 48 47 40 39 32 31 24 23 16 15 87 0
pmp15cfg pmp14cfg pmp13cfg pmp12cfg pmp11cfg pmp10cfg pmp9cfg pmp8cfg pmpcfg2
8 8 8 8 8 8 8 8
The PMP address registers are CSRs named pmpaddr0–pmpaddr15. Each PMP address
register encodes bits 33–2 of a 34-bit physical address for RV32, as shown in Figure 5.33.
For RV64, each PMP address register encodes bits 55–2 of a 56-bit physical address, as
shown in Figure 5.34.
31 0
address[33:2] (WARL)
32
63 54 53 0
WIRI address[55:2] (WARL)
32
Figure 5.35 shows the layout of a PMP configuration register. The R, W, and X bits,
when set, indicate that the PMP entry permits read, write, and instruction execution,
respectively. When one of these bits is clear, the corresponding access type is denied. The
remaining 2 fields, A and L, are described in the following sections.
7 6 5 4 3 2 1 0
L (WARL) WIRI A (WARL) X (WARL) W (WARL) R (WARL)
1 2 2 1 1 1
The A field in a PMP entry’s configuration register encodes the address-matching mode
of the associated PMP address register. The encoding of this field is shown in Table 5.11.
When A=0, this PMP entry is disabled and matches no addresses. Two other address-
matching modes are supported: naturally aligned power-of-2 regions (NAPOT), including
the special case of naturally aligned four-byte regions (NA4); and the top boundary of an
arbitrary range (TOR). These modes support four-byte granularity.
NAPOT ranges make use of the low-order bits of the associated address register to
encode the size of the range, as shown in Table 5.12.
If TOR is selected, the associated address register forms the top of the address range,
and the preceding PMP address register forms the bottom of the address range. If PMP
entry i’s A field is set to TOR, the entry matches any address a such that pmpaddri−1 ≤
a < pmpaddri . If PMP entry 0’s A field is set to TOR, zero is used for the lower bound,
and so it matches any address a < pmpaddr0 .
45
RV12 RISC-V CPU Core (v1.3) Roa Logic
A Name Description
0 OFF Null region (disabled)
1 TOR Top of range
2 NA4 Naturally aligned four-byte region
3 NAPOT Naturally aligned power-of-two region, ≥8 bytes
Table 5.12: NAPOT range encoding in PMP address and configuration registers.
The L bit indicates that the PMP entry is locked, i.e., writes to the configuration register
and associated address registers are ignored. Locked PMP entries may only be unlocked
with a system reset. If PMP entry i is locked, writes to pmpicfg and pmpaddri are ignored.
Additionally, if pmpicfg.A is set to TOR, writes to pmpaddri-1 are ignored.
In addition to locking the PMP entry, the L bit indicates whether the R/W/X per-
missions are enforced on M-mode accesses. When the L bit is set, these permissions are
enforced for all privilege modes. When the L bit is clear, any M-mode access matching
the PMP entry will succeed; the R/W/X permissions apply only to S and U modes.
PMP entries are statically prioritized. The lowest-numbered PMP entry that matches any
byte of an access determines whether that access succeeds or fails. The matching PMP
entry must match all bytes of an access, or the access fails, irrespective of the L, R, W, and
X bits. For example, if a PMP entry is configured to match the four-byte range 0xC–0xF,
then an 8-byte access to the range 0x8–0xF will fail, assuming that PMP entry is the
highest-priority entry that matches those addresses.
If a PMP entry matches all bytes of an access, then the L, R, W, and X bits determine
whether the access succeeds or fails. If the L bit is clear and the privilege mode of the
access is M, the access succeeds. Otherwise, if the L bit is set or the privilege mode of the
access is S or U, then the access succeeds only if the R, W, or X bit corresponding to the
access type is set.
If no PMP entry matches an M-mode access, the access succeeds. If no PMP entry
matches an S-mode or U-mode access, but at least one PMP entry is implemented, the
access fails.
46
RV12 RISC-V CPU Core (v1.3) Roa Logic
Failed accesses generate a load, store, or instruction access exception. Note that a
single instruction may generate multiple accesses, which may not be mutually atomic. An
access exception is generated if at least one access generated by an instruction fails, though
other accesses generated by that instruction may succeed with visible side effects. Notably,
instructions that reference virtual memory are decomposed into multiple accesses.
47
6. External Interfaces
The RV12 CPU is designed to support a variety of external bus interfaces. The following
sections define the default AMBA3 AHB-Lite and Interrupt Interfaces.
6.1.1 HRESETn
When the active low asynchronous HRESETn input is asserted (‘0’), the core is put into its
initial reset state.
6.1.2 HCLK
HCLK is the system clock. All internal logic operates at the rising edge of the system clock.
All AHB bus timings are related to the rising edge of HCLK.
48
RV12 RISC-V CPU Core (v1.3) Roa Logic
6.1.3 IHSEL
IHSEL is a slave selection signal and therefore provided for AHB-Lite completeness. This
signal is tied permanently high (‘1’)
6.1.4 IHADDR
IHADDR is the instruction address bus. Its size is determined by PHYS ADDR SIZE.
6.1.5 IHRDATA
IHRDATA transfers the instruction from memory to the CPU. Its size is determined by
XLEN.
6.1.6 IHWRITE
IHWRITE indicates whether the current transfer is a read or a write transfer. The instruction
write is always negated (‘0’).
6.1.7 IHSIZE
The instruction transfer size is indicated by IHSIZE. Its value depends on the XLEN pa-
rameter and if the current transfer is a cache-line fill or non-cacheable instruction read.
6.1.8 IHBURST
The instruction burst type indicates if the transfer is a single transfer or part of a burst.
49
RV12 RISC-V CPU Core (v1.3) Roa Logic
6.1.9 IHPROT
The instruction protection signals provide information about the bus transfer. They are
intended to implement some level of protection.
6.1.10 IHTRANS
6.1.11 IHMASTLOCK
The instruction master lock signal indicates if the current transfer is part of a locked
sequence, commonly used for Read-Modify-Write cycles. The instruction master lock is
always negated (‘0’).
6.1.12 IHREADY
IHREADY indicates whether the addressed slave is ready to transfer data or not. When
IHREADY is negated (‘0’) the slave is not ready, forcing wait states. When IHREADY is
asserted (‘0’) the slave is ready and the transfer completed.
6.1.13 IHRESP
IHRESP is the instruction transfer response; it can either be OKAY (‘0’) or ERROR (‘1’). An
error response causes a Bus Error exception.
6.1.14 DHSEL
DHSEL is a slave selection signal and therefore provided for AHB-Lite completeness. This
signal is tied permanently high (‘1’)
50
RV12 RISC-V CPU Core (v1.3) Roa Logic
6.1.15 DHADDR
DHADDR is the data address bus. Its size is determined by PHYS ADDR SIZE.
6.1.16 DHRDATA
DHRDATA transfers the data from memory to the CPU. Its size is determined by XLEN.
6.1.17 DHWDATA
DHWDATA transfers the data from the CPU to memory. Its size is determined by XLEN.
6.1.18 DHWRITE
DHWRITE indicates whether the current transfer is a read or a write transfer. It is asserted
(‘1’) during a write and negated (‘0’) during a read transfer.
6.1.19 DHSIZE
The data transfer size is indicated by DHSIZE. Its value depends on the XLEN parameter
and if the current transfer is a cache-line fill/write-back or a non-cacheable data transfer.
6.1.20 DHBURST
The instruction burst type indicates if the transfer is a single transfer or part of a burst.
51
RV12 RISC-V CPU Core (v1.3) Roa Logic
6.1.21 DHPROT
The data protection signals provide information about the bus transfer. They are intended
to implement some level of protection.
6.1.22 DHTRANS
6.1.23 DHMASTLOCK
The data master lock signal indicates if the current transfer is part of a locked sequence,
commonly used for Read-Modify-Write cycles. The data master lock is always negated
(‘0’).
6.1.24 DHREADY
DHREADY indicates whether the addressed slave is ready to transfer data or not. When
DHREADY is negated (‘0’) the slave is not ready, forcing wait states. When DHREADY is
asserted (‘0’) the slave is ready and the transfer completed.
6.1.25 DHRESP
DHRESP is the data transfer response; it can either be OKAY (‘0’) or ERROR (‘1’). An error
response causes a Bus Error exception.
52
RV12 RISC-V CPU Core (v1.3) Roa Logic
6.2 Interrupts
The RV12 supports multiple external interrupts and is designed to operate in conjunction
with an external Platform Level Interrupt Controller (PLIC) as defined in Chapter 7 of
the RISC-V Privilege Level specification v1.10.
Dedicated pins on the RV12 core present the interrupt to the CPU which then expects
the Identifier of the Source Interrupt to be presented by the PLIC at the appropriate
interrupt vector upon a claim of the interrupt.
The RV12 supports a single external non-maskable interrupt, accessible in Machine Mode
only. The interrupt vector for EXT NMI is defined as an RV12 core parameter MNMIVEC DEFAULT
(see section 4.2 )
53
RV12 RISC-V CPU Core (v1.3) Roa Logic
RV12 supports one general-purpose external interrupt input per operating mode, as defined
in Table 6.11:
Each interrupt will be serviced by the operating mode it corresponds to, or alterna-
tively a higher priority mode depending on the system configuration and specific operating
conditions at the time the interrupt is handled. This includes if interrupt delegation is
enabled, if a specific is implemented, or the specific operating mode at the time of servicing
for example.
Notes:
1. An external interrupt will never be serviced by a lower priority mode than that
corresponding to the input pin. For example, an interrupt presented to EXT INT[1]
– corresponding to supervisor mode – cannot be serviced by a user mode ISR.
2. Conversely, Machine Mode may service interrupts arriving on any of the interrupt
inputs due to it have the highest priority.
54
RV12 RISC-V CPU Core (v1.3) Roa Logic
Each pma cfg i port is a 14 bit input used to set specific attributes for the associated
Protected Memory region as defined in Figure 6.1 and Table 6.13:
13 12 11 10 9 8 7 6 5 4 3 2 1 0
A AMO r w x c cc ri wi m Mem Type
2 2 1 1 1 1 1 1 1 1 2
The PMA address registers are CSRs named pmpaddrn , when n is an integer between 0
and PMA CNT-1. Each PMA address register encodes bits 33–2 of a 34-bit physical address
for RV32, as shown in Figure 6.2. For RV64, each PMP address register encodes bits 55–2
of a 56-bit physical address, as shown in Figure 6.3.
55
RV12 RISC-V CPU Core (v1.3) Roa Logic
31 0
address[33:2] (WARL)
32
63 54 53 0
WIRI address[55:2] (WARL)
32
56
7. Debug Unit
7.1 Introduction
The Debug Unit is a separate unit in the CPU. It’s not directly related to any instruction
execution or support functions, like Cache or Branch Prediction. Instead it provides a
means to halt the CPU and inspect its internal registers and state as a means of debugging
the execution program.
The Debug Unit has its own interfaces and must be connected to an external debug
controller that provides the actual interfacing to the external Debug Tools. The Debug
Unit does not stall the CPU, instead it relies on the external debug controller to stall the
CPU when the Debug Unit requests it.
The CPU is halted when dbg stall is asserted (‘1’). No new instructions are fed into the
execution units. Any instructions already issued are finished.
The Debug Unit can use this signal to pause program execution and inspect the CPU’s
state and registers. The Debug Controller must assert dbg stall immediate (combinato-
rial) when the Debug Unit asserts dbg bp.
The Debug Controller asserts (‘1’) the Access Strobe signal when it wants to read from or
write to the Debug Unit or the CPU’s registers. It must remain asserted until the Debug
Unit acknowledges completion of the access by asserting (‘1’) dbg ack.
57
RV12 RISC-V CPU Core (v1.3) Roa Logic
7.2.3 dbg we
The Debug Controller asserts (‘1’) the Write Enable signal when it wants to write to
the Debug Unit or the CPU’s registers. It must remain asserted until the Debug Unit
acknowledges completion of the access by asserting (‘1’) dbg ack. It is valid only when
dbg strb is asserted as well.
The address bus carries the register-address that is is read from or written to. See Register
Map for the details.
The write data bus carries the data to be written to the Debug Unit’s or CPU’s registers.
The read data bus carries the data read from the Debug Unit’s or CPU’s registers.
7.2.7 dbg bp
The Debug Unit asserts (‘1’) BreakPoint when a hardware breakpoint, single-step, branch-
trace, or exception hit occurred. This is the CPU stall request from the Debug Unit to the
external debug controller. The Debug Controller must assert (‘1’) dbg stall immediately
(combinatorial) upon detecting dbg bp asserted.
58
RV12 RISC-V CPU Core (v1.3) Roa Logic
The XLEN size DBG CTRL controls the single-step and branch-tracing functions.
XLEN-1 2 1 0
Reserved bte sste
XLEN-2 1 1
sste Description
0 Single-Step-Trace disabled
1 Single-Step-Trace enabled
59
RV12 RISC-V CPU Core (v1.3) Roa Logic
bte Description
0 Branch-Step-Trace disabled
1 Branch-Step-Trace enabled
XLEN-1 16 15 14 13 12 11 10 9 8 7 2 1 0
Reserved bp7h bp7h bp7h bp7h bp7h bp7h bp7h bp7h 6‘h0 bth sste
XLEN-16 1 1 1 1 1 1 1 1 6 1 1
The Debug Breakpoint Hit register contains the reason(s) why the Debug Unit re-
quested to stall the CPU.
The Single-Step-Trace-Hit field is asserted (‘1’) when the Single-Step-Trace function
requests to stall the CPU. This is a sticky bit. It is set by the Debug Unit, but must be
cleared by the Debug Environment.
The Branch-Trace-Hit field is asserted (‘1’) when the Branch-Trace function requests
to stall the CPU. This is a sticky bit. It is set by the Debug Unit, but must be cleared by
the Debug Environment.
The Breakpoint-Hit fields are asserted (‘1’) when the respective hardware breakpoint
triggered and requests to stall the CPU. There is one bit for each implemented hardware
breakpoint. These are sticky bits. They are set by the Debug Unit, but must be cleared
by the Debug Environment.
31 0
ie
Bit# Description
31-18 External Interrupts
17 Timer Interrupt
16 Software Interrupt
11 Environment call from Machine Mode
10 Environment call from Hypervisor Mode
9 Environment call from Supervisor Mode
8 Environment call from User Mode
7 Store Access Fault
Table 7.5 continued on next page. . .
60
RV12 RISC-V CPU Core (v1.3) Roa Logic
The dbg ie register determines what exceptions cause the Debug Unit to assert dbg bp.
Normally an exception causes the CPU to load the trap-vector and enter the trap routine,
but if the applicable bit in the dbg ie bit is set, then the CPU does not load the trap-
vector, does not change mcause and mepc, and does not enter the trap vector routine when
that exception is triggered. Instead the CPU sets DBG CAUSE and asserts dbg bp, thereby
handing over control to the external debug controller.
The lower 16bits of the register represent the trap causes as defined in the mcause
register. The upper 16bits represent the interrupt causes as defined in the mcause register.
Logic ‘1’ indicates the CPU hands over execution to the debug controller when the cor-
responding exception is triggered. For example setting bit-2 to ‘1’ causes the BREAKPOINT
trap to assert dbg bp and hand over control to the debug controller. At least the BREAKPOINT
exception must be set in the dbg ie register.
31 0
cause
The DBG CAUSE register contains the exception number that caused the CPU to hand
over control to the external Debug Controller. See the mcause register description for a
description of all exceptions.
61
RV12 RISC-V CPU Core (v1.3) Roa Logic
Because the RISC-V defines the cause register as an integer value, there is no easy way
to detect if there was no cause. It’s recommended that the Debug Environment writes
‘-1’ into the dbg cause register upon starting the debug session and after handling each
exception.
The debug controller’s software layer must translate the value in the DBG CAUSE reg-
ister to the debugger’s control signal. The table below shows the basic mapping of the
DBG CAUSE register to GDB Signals.
31 7 6 4 3 2 1 0
reserved cc 00 ena impl
25 3 2 1 1
The DBG BPCTRL registers control the functionality of the hardware breakpoints. There
is a Breakpoint Control Register for each implemented hardware breakpoint. The BREAKPOINTS
parameter defines the amount of hardware breakpoints that are implemented.
The Breakpoint Implemented field informs the Debug Environment if the hardware
breakpoint is implemented. The bit is set (‘1’) when the hardware breakpoint is imple-
mented and (‘0’) when it is not. The Debug Environment should read the DBG BPCTRL
registers and examine the Breakpoint Implemented fields to determine the amount of
hardware breakpoints implemented.
impl Description
0 Hardware Breakpoint not implemented
1 Hardware Breakpoint implemented
The Breakpoint Enable bit enables or disables the breakpoint. The hardware break-
point is enabled when the bit is set (‘1’) and disabled when the bit is cleared (‘0’). When
the hardware breakpoint is disabled it will not generate a breakpoint hit, even if the break-
point conditions are met. Clearing the breakpoint enable bit does not clear any pending
hits. These must be cleared in the DBG HIT register.
62
RV12 RISC-V CPU Core (v1.3) Roa Logic
ena Description
0 Hardware Breakpoint is disabled
1 Hardware Breakpoint is enabled
The Breakpoint Condition Code bits determine what condition triggers the hardware
breakpoint.
cc Description
3’b000 Instruction Fetch
3’b001 Data Load
3’b010 Data Store
3’b011 Data Access
3’b1-- Reserved
Instruction Fetch
The hardware breakpoint will trigger a breakpoint exception when the CPU is about to
execute the instruction at the address specified in the DBG DATA register.
Data Load
The hardware breakpoint will trigger a breakpoint exception when the CPU reads from
the address specified in the DBG DATA register.
Data Store
The hardware breakpoint will trigger a breakpoint exception when the CPU writes to the
address specified in the DBG DATA register.
Data Access
The hardware breakpoint will trigger a breakpoint exception when the CPU accesses (ei-
ther reads from or writes to) the address specified in the DBG DATA register.
XLEN-1 0
Data
The DBG DATA registers contain the data/value that trigger a breakpoint hit. There
is a Breakpoint Data Register for each implemented hardware breakpoint. The meaning
of the DBG DATA register depends on the condition code set in the associated DBG BPCTRL
register. See the DBG CTRL register for the meaning of the DBG DATA register.
63
8. Resources
Below are some example implementations for various platforms. All implementations are
push button, no effort has been undertaken to reduce area or improve performance.
64
9. Acknowledgements
The RV12 CPU is designed to be compliant with the specifications listed below. This
datasheet also includes documentation derived from these specifications as permitted under
the Creative Commons Attribution 4.0 International License:
“The RISC-V Instruction Set Manual, Volume II: Privileged Architecture, Ver-
sion 1.10”, Editors Andrew Waterman and Krste Asanović, RISC-V Founda-
tion, May 2017.
65
10. Revision History
66