1 · Core Scheduler FSM One per core
One scheduler controls the instruction being executed by all enabled lanes. The timeline row “Core 0 · FSM” is this state machine. These are sequential control states, not overlapping pipeline stages.
From cycle logs to a mental model of core scheduling, thread lanes, instructions, and register updates.
FSM = Finite-State Machine: a hardware controller that remembers its current state and changes state on clock edges. LSU = Load/Store Unit: the hardware in each thread lane that sends LDR (load) and STR (store) requests to data memory. The LSU itself also contains an FSM. ALU = Arithmetic Logic Unit: each active lane has a registered arithmetic datapath, but the ALU has no separate FSM; the Core Scheduler triggers it during EXECUTE.
One scheduler controls the instruction being executed by all enabled lanes. The timeline row “Core 0 · FSM” is this state machine. These are sequential control states, not overlapping pipeline stages.
The row “Lane 2 · LSU” shows this lane’s memory transaction progress, not an instruction pipeline. Non-memory instructions normally leave it IDLE.
Each lane has an 8-bit ALU with a registered alu_out. The shared decoder selects ADD, SUB, MUL, DIV or CMP. The ALU calculates on the rising edge while the Core FSM is in EXECUTE.
alu_out into the destination for arithmetic instructions. CMP instead uses the ALU output to update NZP condition flags. For LDR/STR, ALU output is not selected for data writeback.core_state == EXECUTE means the ALU computes/updates its output on the next rising edge. Arithmetic/CMP opcodes make the result useful; memory/control opcodes do not. The displayed alu_out is sampled before that edge and can still be the previous result. Unchanged output does not imply idle.Load a log and select a cycle to see the actual observed Core FSM + LSU FSM + ALU output together. Until then, the walkthrough above is a conceptual teaching example.
Each core fetches one instruction and moves through FETCH → DECODE → REQUEST → WAIT → EXECUTE → UPDATE. Stages are FSM states, not overlapped pipeline slots.
Each lane has a register file, ALU (Arithmetic Logic Unit), LSU (Load/Store Unit), and PC (Program Counter) calculation. The core shares the decoded instruction.
LDR/STR uses valid/ready handshakes. While LSUs wait, the core remains in WAIT; multiple lanes can have different LSU states even with a shared instruction.