1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
RVController
============
RVController is a program for use in Luacontrollers (from the mesecons mod) in Luanti.
It emulates a single RISC-V hart and a configurable amount (64KiB default) of RAM.
Features:
* RV32IMACBZicfilp_Zicntr_Zicond_Zicsr_Zifencei_Zihintpause_Zilsd_Zimop_Zabha_Zacas_Zalasr_Zawrs_Zcb_Zclsd_Zcmop_Zcmp_Zcmt_Zbkb_Zbkx_Xh3bextm instruction set provides:
- 32-bit address space
- 32 32-bit registers (31 general-purpose + 1 zero register)
- Selectable endianness
- Multiply/divide instructions
- Bit manipulation including crossbar permutation and multiple-bit extraction
- Atomic memory operations via load-reserved/store-conditional, compare-and-swap, or math/bitwise operations directly on memory
- Byte/halfword/word atomic memory operation sizes
- Conditional zero instructions
- Freely mixable 16/32-bit instruction lengths
- Performance counters and timers
- Pause hint for power management
- Wait-for-reservation-set instructions to watch for memory changes
- Single-instruction function prologues/epilogues and jump tables
- Compatibility with future MOP-based extensions
- Forward-edge control-flow integrity via landing pads
* Mutable ISA via writable bits in misa CSR
* Mesecons and digilines I/O
* Configurable RAM size and clock speed
* Mesecons, digilines, and timer interrupts
* Support for the privileged architecture (currently M-mode only), including:
- Configurable interrupt masking
- Built-in trap handler, or replace it with your own
- Optional vectored interrupt routing
- Double-trap detection
* Built in machine-code monitor with help system and basic debugging support (including breakpoint)
Specifications:
RVController is intended to be compliant with the following specifications:
* RV32I Base Integer Instruction Set, Version 2.1
* "Zifencei" Extension for Instruction-Fetch Fence, Version 2.0
- Note: Implemented as a 'nop' instruction as memory is always consistent (see note on RVWMO below)
* "Zicsr" Extension for Control and Status Register (CSR) Instructions, Version 2.0
* "Zicond" Extension for Integer Conditional Operations, Version 1.0.0
* "Zicntr" Extension for Counters, Version 2.0
* "Zimop" Extension for May-Be-Operations, Version 1.0
* "M" Extension for Integer Multiplication and Division, Version 2.0
- Note: This implies the following:
- * Zmmul Extension, Version 1.0
* "A" Extension for Atomic Instructions, Version 2.1
- Note: This implies the following:
- * "Zalrsc" Extension for Load-Reserved/Store-Conditional Instructions
- * "Zaamo" Extension for Atomic Memory Operations
* RVWMO Memory Consistency Model, Version 2.0
- Note: The actual implemented memory model is significantly more strict (memory is always consistent, there is no cache)
* "Ztso" Extension for Total Store Ordering, Version 1.0
* "C" Extension for Compressed Instructions, Version 2.0
- Note: This implies the following:
- * "Zca" Extension for Code Size Reduction, Version 1.0.0
* Zcb: Extension for Code Size Reduction, Version 1.0.0
* "Zcmop" Compressed May-Be-Operations Extension, Version 1.0
* Zcmp: Extension for Code Size Reduction, Version 1.0.0
* Zcmt: Extension for Code Size Reduction, Version 1.0.0
* "B" Extension for Bit Manipulation, Version 1.0.0
- Note: This implies the following:
- * Zba: Extension for Address generation, Version 1.0.0
- * Zbb: Extension for Basic bit-manipulation, Version 1.0.0
- * Zbs: Extension for Single-bit instructions, Version 1.0.0
* "Zihintpause" Extension for Pause Hint, Version 2.0
* Zilsd, Zclsd: Extensions for Load/Store pair for RV32, Version 1.0
* "Zabha" Extension for Byte and Halfword Atomic Memory Operations, Version 1.0
* "Zacas" Extension for Atomic Compare-and-Swap (CAS) Instructions, Version 1.0.0
* "Zalasr" Atomic Load-Acquire and Store-Release Instructions, Version 1.0
* "Zawrs" Extension for Wait-on-Reservation-Set instructions, Version 1.01
* Zbkb: Extension for Bit-manipulation for Cryptography, Version 1.0.0
* Zbkx: Extension for Crossbar permutations, Version 1.0.0
* Zicfilp: Control Flow Integrity - Landing Pad
* Xh3bextm: Hazard3 bit extract multiple
- Note: Defined in the Hazard3 reference manual, available at https://github.com/Wren6991/Hazard3/releases/download/v1.1/hazard3.pdf
* Machine-Level ISA, Version 1.13
* "Smdbltrp" Double Trap Extension, Version 1.0
For full specification text, visit https://docs.riscv.org/reference/home/index.html
Documentation files:
* _start_here.txt: This file
* toolchain.txt: Cross-toolchain setup, needed if you want to build software and don't already have a riscv32(be)-none-elf toolchain
* monitor.txt: Setup and operation of the built-in machine-code monitor
* ecall.txt: Available M-mode ecall functions
* csr.txt: Control and status registers
* mmio.txt: Memory-mapped I/O
|