Er68 Open-source RISC-V · OpenHW Group · Erbium branch

A thousand-core idea,
one Neighborhood at a time.

CORE-ET is the open-sourced CPU subsystem behind the Erbium SoC: eight dual-threaded RV64IMFC ET-Minion cores, each fused to an 8-lane vector unit built for tensor math, sharing an instruction cache, a barrier fabric, and a 512-bit ET-Link into the memory hierarchy. Every block on this page comes straight from the microarchitecture specifications in the repository.

8×2cores × HW threads
8SIMD lanes / core
256bvector registers
512bET-Link per cycle
16INT8 MACs / core / cycle

01 · The ET-Neighborhood

Eight Minions, one shared channel

The floorplan below follows the physical layout in the Neighborhood MAS: two columns of four Minions flank a central channel of shared logic, and every port exits north into the Shire. Select any block to read its role.

ET-LINK · 512b REQ / 512b RSP · HV DOMAIN → SHIRE CHANNEL SEMI-SYNCHRONOUS CDC / VDC BOUNDARY · LV DOMAIN BELOW MINION 0RV64IMFC + VPU MINION 1RV64IMFC + VPU MINION 2RV64IMFC + VPU MINION 3RV64IMFC + VPU MINION 4RV64IMFC + VPU MINION 5RV64IMFC + VPU MINION 6RV64IMFC + VPU MINION 7RV64IMFC + VPU NEIGHBORHOOD CHANNEL SHARED ICACHE2× L0 µCACHE + 32 KB L1 COOP. TENSORLOAD COOP. TENSORSTORE FAST LOCAL MESSAGING FLB FCC 2× PTW PMU ESRs · APB · DEBUGRUN CTRL · STATUS MONITOR · DLL EST.

02 · Inside the ET-Minion

A scalar core welded to a tensor engine

Each Minion is a dual-threaded, in-order, single-issue RV64IMFC core (M · F · C · Zicsr · Zifencei) split into four blocks: a Frontend that fetches from the shared ICache, an integer pipeline, a private 4 KB DCache that doubles as scratchpad, and the Vector Processing Unit.

FE · Frontend

Fetch & decode

An 8-stage frontend with one instruction-stream buffer per thread (2 × 32 B entries), fetching over the pipelined ICache interface. The VPU decoder lives in Frontend stage 5 so timing-clean control signals arrive at the vector unit.

2 threads32 B fetchshared I$
Intpipe · Integer pipeline

ID → EX → GSC → TAG → MEM → WB

An in-order integer pipeline with a MulDiv unit, CSR file, and three scoreboards (INT, FP, mask) tracking dependencies against the VPU. A dedicated GSC stage iterates gather/scatter addresses lane by lane.

MulDivCSR file3 scoreboards
L1D · DCache

4 KB cache or scratchpad

A private data cache wide enough to fill one register-file entry across all 8 VPU lanes in a single cycle. Two hardware FSMs run TensorLoads: one fills the L1 scratchpad, one streams operands straight into the VPU.

4 KBSCP mode2 TLoad FSMs
VPU · Vector Processing Unit

8 lanes, one identity

Eight identical lanes running in lockstep behind a control unit with its own µ-instruction sequencers. To software it is a single machine executing eight operations per cycle over 256-bit registers, masked per lane by M0.

F0–F8 pipe8×8b maskstensor µ-sequencing

Anatomy of one VPU lane

×8 per core · Minion VPU Specification §2.2
VRF

64 × 32-bit registers per lane (32 per thread). Seen across lanes: thirty-two 256-bit vector registers, viewable as 8×32b, 16×16b, or 32×8b objects.

TXFMA

Tensor fused multiply-add: one FP32 or two FP16 multiply-adds per cycle, feeding TensorFMA and TensorQuant operations.

2× TIMA

Two INT8 tensor multiply-accumulate units per lane — 16 INT8 MACs per core per cycle for quantized inference.

INT + Swizzle

32-bit integer/logic unit with short-swizzle support for packed-integer instructions.

Trans unit

ROM-backed transcendentals — exp2, log2, reciprocal — sequenced as µ-instructions by the VPU control.

Bypass

Full bypass network at each lane's unit inputs to collapse operand dependencies without stalling.


03 · Memory hierarchy

From lane to mesh, 512 bits at a time

Data moves over ET-Link — a two-channel valid/ready protocol carrying up to one 64-byte cache line per cycle per direction — into a Shire Cache whose SRAM is partitioned at boot into private L2, a distributed slice of the global L3, and software-managed scratchpad. Coherence is deliberately absent: software owns it, hardware spends the power budget on math.

L1D · per core

4 KB DCache / SCP

Private, VPU-width fills, TensorLoad FSMs bypass into scratchpad.

1 RF entry × 8 lanes / cycle
L0/L1 I · per neighborhood

µCache + 32 KB I$

Two 16-entry fully-associative L0s (one per 4 Minions) in front of a shared L1 ICache.

fixed-latency L0 hit path
Interconnect

ET-Link

Request + reply channels, valid/ready handshake through arbiters, crossbars, and FIFOs.

512 b / cycle / channel
L2 / L3 / SCP

Shire Cache

4 banks, 4-way, 64 B lines, write-back/write-allocate, full SECDED ECC on tag, state, and data.

4 MB POR · non-coherent
SoC

NoC mesh

L3 and scratchpad slivers distributed across Shires; writeAround coalescing preserves mesh bandwidth.

To_L3 / To_Sys · 512 b

04 · Coordination primitives

Synchronization at CSR speed

Inference kernels tile across cores. CORE-ET makes the coordination cost close to free with dedicated hardware in each Neighborhood and CPU subsystem, driven directly from CSR writes.

csr flb

Fast Local Barriers

User-mode barrier counters atomically incremented from a CSR write — all eight Minions rendezvous without a trip through memory.

csr fcc / fccnb · CREDINC0–3

Fast Credit Counters

Producer/consumer flow control in hardware: consumers block (or poll, non-blocking) on credits that producers grant through CREDINC registers.

csr tensor_coop

Cooperative TensorLoad

When many Minions stream the same tensor, their L2 read requests are coalesced into one — same data, one transaction's worth of power and bandwidth. A TensorStore twin handles the write side.

neighborhood fabric

Fast Local Messaging

A dedicated Minion-to-Minion messaging network, routed for minimal wirelength across the two Minion columns.

clint · 10 MHz

Timer & software IPIs

A 64-bit CLINT timer plus inter-processor software interrupts at the CPU-subsystem level.

plic

Platform interrupts

A standard RISC-V Platform-Level Interrupt Controller routes external interrupts to all sixteen hardware threads.


05 · Datasheet

Numbers, as documented

ParameterValueSource
ISARV64IMFC + Zicsr + Zifencei, M/S privilege (trap-and-emulate deviations documented)Minion Description
Core µarchDual-threaded, in-order, single-issue; FE + Intpipe + DCache + VPUMinion Description
Vector state32 × 256-bit registers; 8 × 8-bit mask registers; per-lane M0 predicationVPU Specification / ET PRM
Tensor mathTXFMA (1×FP32 or 2×FP16 FMA/lane) + 2× TIMA INT8 MAC/lane; TensorFMA, TensorQuant, TensorStore/Reduce sequencersVPU Specification
Transcendentalsexp2, log2, reciprocal via per-lane ROM-backed unitVPU Specification
L1 DCache4 KB private per core, scratchpad-capable, dual TensorLoad FSMsMinion DCache Description
ICache2 × L0 µcache (16-entry fully associative, 4 Minions each) + 32 KB shared L1Neighborhood ICache / FE–ICache Interface
Neighborhood8 Minions, 2 PTWs, Coop TLoad/TStore, FLMN, FLB, FCC, PMU, ESRs; LV/HV clock & voltage domains with DLL-derived Neighborhood clockNeighborhood MAS / Shire DLL docs
ET-LinkRequest + reply channels, 512 b (64 B line) per cycle each, valid/ready handshakeET-Link Specification
Shire Cache4 banks (build-time 4/8), 1–8 MB SRAM (POR 4 MB), boot-time L2/L3/SCP partitioning, 4-way, 64 B lines, WB/WA, SECDED ECC, writeAround coalescing, non-coherentShire Cache Specification
Subsystem1 Neighborhood + external L1 I$ SRAM + PLIC + CLINT (10 MHz) + FLB/FCC + CPU registers; AXI4 initiator of the Erbium SoCRepository README