Skip to content

Program 18: Dependent ALU chain

Program catalogue · Instruction reference · Executable reference

Purpose

Provide an adjacent read-after-write dependency chain for later forwarding and throughput comparisons.

This is one of the six workload fixtures. This page specifies its instructions and architectural result; pipeline cycles, stalls, and throughput are implementation-specific and are not established by this reference run.

Setup

Property Value
Benchmark workload ID program-18
Headless selection --program 18
Visualizer scenario rv32i-program18
Registered test RV32ISingleCycleSystemTest/program-18
Instruction image 66 words, starting at 0x00000000; last word at 0x00000104
Initial state PC = 0x00000000; all registers zero; neither halted nor trapped
Memories Separate instruction and data memories, 256 KiB each; unlisted data bytes zero
Start address Bytes, in increasing address order
None —

The table lists the complete preloaded data image, not instruction bytes. No data image is required.

Register Role established by the program
x1 Single accumulator, starting at 1

The shared setup describes reset, loading, and the behavioral-core selection. These hand-written programs do not use the standard ABI stack.

Assembly

Every instruction word is shown, including words that a trap or branch may prevent from executing. Address and word comments identify the exact fixture image. The repeated blocks are fully expanded; there are no omitted instructions or runtime loop directives.

addi x1, x0, 1                 # 0x00000000 | 0x00100093
addi x1, x1, 1                 # 0x00000004 | 0x00108093
addi x1, x1, 1                 # 0x00000008 | 0x00108093
addi x1, x1, 1                 # 0x0000000C | 0x00108093
addi x1, x1, 1                 # 0x00000010 | 0x00108093
addi x1, x1, 1                 # 0x00000014 | 0x00108093
addi x1, x1, 1                 # 0x00000018 | 0x00108093
addi x1, x1, 1                 # 0x0000001C | 0x00108093
addi x1, x1, 1                 # 0x00000020 | 0x00108093
addi x1, x1, 1                 # 0x00000024 | 0x00108093
addi x1, x1, 1                 # 0x00000028 | 0x00108093
addi x1, x1, 1                 # 0x0000002C | 0x00108093
addi x1, x1, 1                 # 0x00000030 | 0x00108093
addi x1, x1, 1                 # 0x00000034 | 0x00108093
addi x1, x1, 1                 # 0x00000038 | 0x00108093
addi x1, x1, 1                 # 0x0000003C | 0x00108093
addi x1, x1, 1                 # 0x00000040 | 0x00108093
addi x1, x1, 1                 # 0x00000044 | 0x00108093
addi x1, x1, 1                 # 0x00000048 | 0x00108093
addi x1, x1, 1                 # 0x0000004C | 0x00108093
addi x1, x1, 1                 # 0x00000050 | 0x00108093
addi x1, x1, 1                 # 0x00000054 | 0x00108093
addi x1, x1, 1                 # 0x00000058 | 0x00108093
addi x1, x1, 1                 # 0x0000005C | 0x00108093
addi x1, x1, 1                 # 0x00000060 | 0x00108093
addi x1, x1, 1                 # 0x00000064 | 0x00108093
addi x1, x1, 1                 # 0x00000068 | 0x00108093
addi x1, x1, 1                 # 0x0000006C | 0x00108093
addi x1, x1, 1                 # 0x00000070 | 0x00108093
addi x1, x1, 1                 # 0x00000074 | 0x00108093
addi x1, x1, 1                 # 0x00000078 | 0x00108093
addi x1, x1, 1                 # 0x0000007C | 0x00108093
addi x1, x1, 1                 # 0x00000080 | 0x00108093
addi x1, x1, 1                 # 0x00000084 | 0x00108093
addi x1, x1, 1                 # 0x00000088 | 0x00108093
addi x1, x1, 1                 # 0x0000008C | 0x00108093
addi x1, x1, 1                 # 0x00000090 | 0x00108093
addi x1, x1, 1                 # 0x00000094 | 0x00108093
addi x1, x1, 1                 # 0x00000098 | 0x00108093
addi x1, x1, 1                 # 0x0000009C | 0x00108093
addi x1, x1, 1                 # 0x000000A0 | 0x00108093
addi x1, x1, 1                 # 0x000000A4 | 0x00108093
addi x1, x1, 1                 # 0x000000A8 | 0x00108093
addi x1, x1, 1                 # 0x000000AC | 0x00108093
addi x1, x1, 1                 # 0x000000B0 | 0x00108093
addi x1, x1, 1                 # 0x000000B4 | 0x00108093
addi x1, x1, 1                 # 0x000000B8 | 0x00108093
addi x1, x1, 1                 # 0x000000BC | 0x00108093
addi x1, x1, 1                 # 0x000000C0 | 0x00108093
addi x1, x1, 1                 # 0x000000C4 | 0x00108093
addi x1, x1, 1                 # 0x000000C8 | 0x00108093
addi x1, x1, 1                 # 0x000000CC | 0x00108093
addi x1, x1, 1                 # 0x000000D0 | 0x00108093
addi x1, x1, 1                 # 0x000000D4 | 0x00108093
addi x1, x1, 1                 # 0x000000D8 | 0x00108093
addi x1, x1, 1                 # 0x000000DC | 0x00108093
addi x1, x1, 1                 # 0x000000E0 | 0x00108093
addi x1, x1, 1                 # 0x000000E4 | 0x00108093
addi x1, x1, 1                 # 0x000000E8 | 0x00108093
addi x1, x1, 1                 # 0x000000EC | 0x00108093
addi x1, x1, 1                 # 0x000000F0 | 0x00108093
addi x1, x1, 1                 # 0x000000F4 | 0x00108093
addi x1, x1, 1                 # 0x000000F8 | 0x00108093
addi x1, x1, 1                 # 0x000000FC | 0x00108093
addi x1, x1, 1                 # 0x00000100 | 0x00108093
ebreak                         # 0x00000104 | 0x00100073

Execution

  1. Initialize x1=1.
  2. Execute 64 unrolled copies of addi x1, x1, 1. Every instruction consumes the result of its immediate predecessor.
  3. The final value is 65. EBREAK makes the total 1 + 64 + 1 = 66 attempts.

Unlike Program 17, all updates share one register. There is still no branch loop and no memory traffic. Matching this result establishes instruction effects, not whether a later pipeline avoids stalls.

Expected result

These are the fixture's explicit final-state assertions. Unlisted registers are not implicitly zero; their values follow the assembly. The store table enumerates every written byte, including zero-valued writes.

Item Expected value Meaning
x1 0x00000041 Single accumulator, starting at 1
PC 0x00000104 EBREAK address
Attempts 66 Checkpoints I0–I65
HALTED 1 Project halt
TRAPPED 0 No exception
TRAP_CAUSE 0 None, a project enum code
Start address Bytes, in increasing address order
None —

No data writes occur; the initial data image is unchanged. The repeated assembly is fully expanded so every loaded instruction address can be matched to a checkpoint.

Simulation and checkpoints

For a headless functional check, run build/rv32i_experiment --core single --program 18 --period 4000 --max-cycles 4096 --allocation-limit-mib 512. Select baseline or advanced for the same fixture on another core; add --fidelity reference for the structural-datapath reference profile. The explicit period is a scheduling choice, not a performance result. Use the campaign procedure for clock-certified measurements.

All 66 instruction attempts are included, with absolute simulator time and checkpoint number. The terminating EBREAK is included. The table is scrollable in both directions. Observation conventions distinguish these attempts from loaded word addresses and hardware cycles.

All 66 instruction-attempt checkpoints of RV32ISingleCycleSystemTest/program-18, with a behavioral core. Times are absolute simulator units, not milliseconds or an ISA latency.

CheckpointTimeInstruction / addressExpected architectural effects
I07080ADDI @ 0x00000000raw=0x00100093, pc_after=0x00000004, wb=x1=0x00000001, mem=None, flow=next
I111080ADDI @ 0x00000004raw=0x00108093, pc_after=0x00000008, wb=x1=0x00000002, mem=None, flow=next
I215080ADDI @ 0x00000008raw=0x00108093, pc_after=0x0000000c, wb=x1=0x00000003, mem=None, flow=next
I319080ADDI @ 0x0000000craw=0x00108093, pc_after=0x00000010, wb=x1=0x00000004, mem=None, flow=next
I423080ADDI @ 0x00000010raw=0x00108093, pc_after=0x00000014, wb=x1=0x00000005, mem=None, flow=next
I527080ADDI @ 0x00000014raw=0x00108093, pc_after=0x00000018, wb=x1=0x00000006, mem=None, flow=next
I631080ADDI @ 0x00000018raw=0x00108093, pc_after=0x0000001c, wb=x1=0x00000007, mem=None, flow=next
I735080ADDI @ 0x0000001craw=0x00108093, pc_after=0x00000020, wb=x1=0x00000008, mem=None, flow=next
I839080ADDI @ 0x00000020raw=0x00108093, pc_after=0x00000024, wb=x1=0x00000009, mem=None, flow=next
I943080ADDI @ 0x00000024raw=0x00108093, pc_after=0x00000028, wb=x1=0x0000000a, mem=None, flow=next
I1047080ADDI @ 0x00000028raw=0x00108093, pc_after=0x0000002c, wb=x1=0x0000000b, mem=None, flow=next
I1151080ADDI @ 0x0000002craw=0x00108093, pc_after=0x00000030, wb=x1=0x0000000c, mem=None, flow=next
I1255080ADDI @ 0x00000030raw=0x00108093, pc_after=0x00000034, wb=x1=0x0000000d, mem=None, flow=next
I1359080ADDI @ 0x00000034raw=0x00108093, pc_after=0x00000038, wb=x1=0x0000000e, mem=None, flow=next
I1463080ADDI @ 0x00000038raw=0x00108093, pc_after=0x0000003c, wb=x1=0x0000000f, mem=None, flow=next
I1567080ADDI @ 0x0000003craw=0x00108093, pc_after=0x00000040, wb=x1=0x00000010, mem=None, flow=next
I1671080ADDI @ 0x00000040raw=0x00108093, pc_after=0x00000044, wb=x1=0x00000011, mem=None, flow=next
I1775080ADDI @ 0x00000044raw=0x00108093, pc_after=0x00000048, wb=x1=0x00000012, mem=None, flow=next
I1879080ADDI @ 0x00000048raw=0x00108093, pc_after=0x0000004c, wb=x1=0x00000013, mem=None, flow=next
I1983080ADDI @ 0x0000004craw=0x00108093, pc_after=0x00000050, wb=x1=0x00000014, mem=None, flow=next
I2087080ADDI @ 0x00000050raw=0x00108093, pc_after=0x00000054, wb=x1=0x00000015, mem=None, flow=next
I2191080ADDI @ 0x00000054raw=0x00108093, pc_after=0x00000058, wb=x1=0x00000016, mem=None, flow=next
I2295080ADDI @ 0x00000058raw=0x00108093, pc_after=0x0000005c, wb=x1=0x00000017, mem=None, flow=next
I2399080ADDI @ 0x0000005craw=0x00108093, pc_after=0x00000060, wb=x1=0x00000018, mem=None, flow=next
I24103080ADDI @ 0x00000060raw=0x00108093, pc_after=0x00000064, wb=x1=0x00000019, mem=None, flow=next
I25107080ADDI @ 0x00000064raw=0x00108093, pc_after=0x00000068, wb=x1=0x0000001a, mem=None, flow=next
I26111080ADDI @ 0x00000068raw=0x00108093, pc_after=0x0000006c, wb=x1=0x0000001b, mem=None, flow=next
I27115080ADDI @ 0x0000006craw=0x00108093, pc_after=0x00000070, wb=x1=0x0000001c, mem=None, flow=next
I28119080ADDI @ 0x00000070raw=0x00108093, pc_after=0x00000074, wb=x1=0x0000001d, mem=None, flow=next
I29123080ADDI @ 0x00000074raw=0x00108093, pc_after=0x00000078, wb=x1=0x0000001e, mem=None, flow=next
I30127080ADDI @ 0x00000078raw=0x00108093, pc_after=0x0000007c, wb=x1=0x0000001f, mem=None, flow=next
I31131080ADDI @ 0x0000007craw=0x00108093, pc_after=0x00000080, wb=x1=0x00000020, mem=None, flow=next
I32135080ADDI @ 0x00000080raw=0x00108093, pc_after=0x00000084, wb=x1=0x00000021, mem=None, flow=next
I33139080ADDI @ 0x00000084raw=0x00108093, pc_after=0x00000088, wb=x1=0x00000022, mem=None, flow=next
I34143080ADDI @ 0x00000088raw=0x00108093, pc_after=0x0000008c, wb=x1=0x00000023, mem=None, flow=next
I35147080ADDI @ 0x0000008craw=0x00108093, pc_after=0x00000090, wb=x1=0x00000024, mem=None, flow=next
I36151080ADDI @ 0x00000090raw=0x00108093, pc_after=0x00000094, wb=x1=0x00000025, mem=None, flow=next
I37155080ADDI @ 0x00000094raw=0x00108093, pc_after=0x00000098, wb=x1=0x00000026, mem=None, flow=next
I38159080ADDI @ 0x00000098raw=0x00108093, pc_after=0x0000009c, wb=x1=0x00000027, mem=None, flow=next
I39163080ADDI @ 0x0000009craw=0x00108093, pc_after=0x000000a0, wb=x1=0x00000028, mem=None, flow=next
I40167080ADDI @ 0x000000a0raw=0x00108093, pc_after=0x000000a4, wb=x1=0x00000029, mem=None, flow=next
I41171080ADDI @ 0x000000a4raw=0x00108093, pc_after=0x000000a8, wb=x1=0x0000002a, mem=None, flow=next
I42175080ADDI @ 0x000000a8raw=0x00108093, pc_after=0x000000ac, wb=x1=0x0000002b, mem=None, flow=next
I43179080ADDI @ 0x000000acraw=0x00108093, pc_after=0x000000b0, wb=x1=0x0000002c, mem=None, flow=next
I44183080ADDI @ 0x000000b0raw=0x00108093, pc_after=0x000000b4, wb=x1=0x0000002d, mem=None, flow=next
I45187080ADDI @ 0x000000b4raw=0x00108093, pc_after=0x000000b8, wb=x1=0x0000002e, mem=None, flow=next
I46191080ADDI @ 0x000000b8raw=0x00108093, pc_after=0x000000bc, wb=x1=0x0000002f, mem=None, flow=next
I47195080ADDI @ 0x000000bcraw=0x00108093, pc_after=0x000000c0, wb=x1=0x00000030, mem=None, flow=next
I48199080ADDI @ 0x000000c0raw=0x00108093, pc_after=0x000000c4, wb=x1=0x00000031, mem=None, flow=next
I49203080ADDI @ 0x000000c4raw=0x00108093, pc_after=0x000000c8, wb=x1=0x00000032, mem=None, flow=next
I50207080ADDI @ 0x000000c8raw=0x00108093, pc_after=0x000000cc, wb=x1=0x00000033, mem=None, flow=next
I51211080ADDI @ 0x000000ccraw=0x00108093, pc_after=0x000000d0, wb=x1=0x00000034, mem=None, flow=next
I52215080ADDI @ 0x000000d0raw=0x00108093, pc_after=0x000000d4, wb=x1=0x00000035, mem=None, flow=next
I53219080ADDI @ 0x000000d4raw=0x00108093, pc_after=0x000000d8, wb=x1=0x00000036, mem=None, flow=next
I54223080ADDI @ 0x000000d8raw=0x00108093, pc_after=0x000000dc, wb=x1=0x00000037, mem=None, flow=next
I55227080ADDI @ 0x000000dcraw=0x00108093, pc_after=0x000000e0, wb=x1=0x00000038, mem=None, flow=next
I56231080ADDI @ 0x000000e0raw=0x00108093, pc_after=0x000000e4, wb=x1=0x00000039, mem=None, flow=next
I57235080ADDI @ 0x000000e4raw=0x00108093, pc_after=0x000000e8, wb=x1=0x0000003a, mem=None, flow=next
I58239080ADDI @ 0x000000e8raw=0x00108093, pc_after=0x000000ec, wb=x1=0x0000003b, mem=None, flow=next
I59243080ADDI @ 0x000000ecraw=0x00108093, pc_after=0x000000f0, wb=x1=0x0000003c, mem=None, flow=next
I60247080ADDI @ 0x000000f0raw=0x00108093, pc_after=0x000000f4, wb=x1=0x0000003d, mem=None, flow=next
I61251080ADDI @ 0x000000f4raw=0x00108093, pc_after=0x000000f8, wb=x1=0x0000003e, mem=None, flow=next
I62255080ADDI @ 0x000000f8raw=0x00108093, pc_after=0x000000fc, wb=x1=0x0000003f, mem=None, flow=next
I63259080ADDI @ 0x000000fcraw=0x00108093, pc_after=0x00000100, wb=x1=0x00000040, mem=None, flow=next
I64263080ADDI @ 0x00000100raw=0x00108093, pc_after=0x00000104, wb=x1=0x00000041, mem=None, flow=next
I65267080EBREAK @ 0x00000104raw=0x00100073, pc_after=0x00000104, wb=None, mem=None, flow=next, halted=true

Open program 18 reference