* Initial

This commit is contained in:
al
2026-06-15 19:20:24 +02:00
commit 331f96efe4
22 changed files with 3840 additions and 0 deletions
+134
View File
@@ -0,0 +1,134 @@
# Memory Model
ReviveSparc implements the SPARC V9 memory architecture, including the cache hierarchy, MMU, and memory ordering models.
## Cache Hierarchy
```
CLIENT (Core)
|
+-- L1 I-Cache (16 KB, 4-way, 32-byte line)
+-- L1 D-Cache (16 KB, 4-way, 32-byte line)
|
+-- L2 Cache (shared, 512 KB - 4 MB, 8-way)
|
+-- Main Memory (DDR4, configurable)
```
### L1 Caches
- **Capacity**: 16 KB each for instructions and data
- **Associativity**: 4-way set associative
- **Line size**: 32 bytes
- **Latency**: 2 cycles (hit), 1 cycle (tag check)
- **Policy**: Write-back (D-cache), read-only (I-cache)
- **Coherency**: MOESI protocol between cores
### L2 Cache
- **Capacity**: Configurable (512 KB to 4 MB)
- **Associativity**: 8-way set associative
- **Line size**: 64 bytes
- **Latency**: 12 cycles (hit)
- **Policy**: Write-back, write-allocate
- **Coherency**: Inclusive of L1 (snoop filter)
## MMU (Memory Management Unit)
The SPARC Reference MMU provides virtual-to-physical address translation.
### Address Spaces
| Mode | Virtual Address Width | Physical Address Width |
|------|----------------------|----------------------|
| 32-bit (V8 compat) | 32 bits | 40 bits |
| 64-bit (V9) | 44 bits | 44 bits |
### TLB Structure
```
ITLB (64 entries)
Fully associative
Supports 8 KB, 64 KB, 256 KB, 4 MB pages
DTLB (64 entries)
Fully associative
Supports same page sizes as ITLB
```
### Translation Process
```
Virtual Address (44 bits)
|
+-- VPN[0:2] --> TLB Lookup (parallel)
| |
| +-- Hit? --> PPN + Offset --> Physical Address
| +-- Miss --> TLB Miss Trap (TLB miss handler)
|
+-- Offset --> Direct to physical address
```
### TSB (Translation Storage Buffer)
The TSB is a software-managed cache of page table entries. On a TLB miss, the trap handler searches the TSB before walking the full page table.
## Memory Ordering
ReviveSparc supports three memory models:
### Total Store Order (TSO)
The default SPARC V9 model:
- Stores appear in program order to all observers
- Loads may pass stores (store buffer forwarding)
- Atomic operations provide full ordering
### Partial Store Order (PSO)
Relaxed store ordering:
- Stores to different locations may be reordered
- Stores to the same location appear in order
- MEMBAR is required for ordering constraints
### Relaxed Memory Order (RMO)
Maximum relaxation:
- Loads and stores may be reordered freely
- All ordering is explicit via MEMBAR instructions
- Highest performance on multi-core configurations
## Atomic Operations
| Instruction | Description |
|-------------|-------------|
| `CAS` | Compare and Swap (32-bit) |
| `CASX` | Compare and Swap (64-bit) |
| `SWAP` | Atomic swap |
| `LDSTUB` | Atomic load-and-store-byte |
| `CASA` | Compare and Swap (alternate space) |
| `CASXA` | Compare and Swap (alternate space, 64-bit) |
## Configuration
Memory parameters can be configured at startup:
```bash
./sparc-emu -l1i 16k -l1d 16k -l2 1m -mem tso kernel.bin
```
Or via the C API:
```c
sparc_mem_config_t mem = {
.l1i_size = 16 * 1024,
.l1d_size = 16 * 1024,
.l2_size = 1 * 1024 * 1024,
.memory_model = MEM_TSO,
.num_cores = 4
};
sparc_t *cpu = sparc_new_with_config(&mem);
```