Program 17: Independent ALU chains¶
Program catalogue · Instruction reference · Executable reference
Purpose¶
Provide a workload of interleaved, independent accumulator chains for later 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-17 |
| Headless selection | --program 17 |
| Visualizer scenario | rv32i-program17 |
| Registered test | RV32ISingleCycleSystemTest/program-17 |
| Instruction image | 73 words, starting at 0x00000000; last word at 0x00000120 |
| 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–x8 |
Eight accumulator chains; register xi starts at i and increments by i |
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 x2, x0, 2 # 0x00000004 | 0x00200113
addi x3, x0, 3 # 0x00000008 | 0x00300193
addi x4, x0, 4 # 0x0000000C | 0x00400213
addi x5, x0, 5 # 0x00000010 | 0x00500293
addi x6, x0, 6 # 0x00000014 | 0x00600313
addi x7, x0, 7 # 0x00000018 | 0x00700393
addi x8, x0, 8 # 0x0000001C | 0x00800413
addi x1, x1, 1 # 0x00000020 | 0x00108093
addi x2, x2, 2 # 0x00000024 | 0x00210113
addi x3, x3, 3 # 0x00000028 | 0x00318193
addi x4, x4, 4 # 0x0000002C | 0x00420213
addi x5, x5, 5 # 0x00000030 | 0x00528293
addi x6, x6, 6 # 0x00000034 | 0x00630313
addi x7, x7, 7 # 0x00000038 | 0x00738393
addi x8, x8, 8 # 0x0000003C | 0x00840413
addi x1, x1, 1 # 0x00000040 | 0x00108093
addi x2, x2, 2 # 0x00000044 | 0x00210113
addi x3, x3, 3 # 0x00000048 | 0x00318193
addi x4, x4, 4 # 0x0000004C | 0x00420213
addi x5, x5, 5 # 0x00000050 | 0x00528293
addi x6, x6, 6 # 0x00000054 | 0x00630313
addi x7, x7, 7 # 0x00000058 | 0x00738393
addi x8, x8, 8 # 0x0000005C | 0x00840413
addi x1, x1, 1 # 0x00000060 | 0x00108093
addi x2, x2, 2 # 0x00000064 | 0x00210113
addi x3, x3, 3 # 0x00000068 | 0x00318193
addi x4, x4, 4 # 0x0000006C | 0x00420213
addi x5, x5, 5 # 0x00000070 | 0x00528293
addi x6, x6, 6 # 0x00000074 | 0x00630313
addi x7, x7, 7 # 0x00000078 | 0x00738393
addi x8, x8, 8 # 0x0000007C | 0x00840413
addi x1, x1, 1 # 0x00000080 | 0x00108093
addi x2, x2, 2 # 0x00000084 | 0x00210113
addi x3, x3, 3 # 0x00000088 | 0x00318193
addi x4, x4, 4 # 0x0000008C | 0x00420213
addi x5, x5, 5 # 0x00000090 | 0x00528293
addi x6, x6, 6 # 0x00000094 | 0x00630313
addi x7, x7, 7 # 0x00000098 | 0x00738393
addi x8, x8, 8 # 0x0000009C | 0x00840413
addi x1, x1, 1 # 0x000000A0 | 0x00108093
addi x2, x2, 2 # 0x000000A4 | 0x00210113
addi x3, x3, 3 # 0x000000A8 | 0x00318193
addi x4, x4, 4 # 0x000000AC | 0x00420213
addi x5, x5, 5 # 0x000000B0 | 0x00528293
addi x6, x6, 6 # 0x000000B4 | 0x00630313
addi x7, x7, 7 # 0x000000B8 | 0x00738393
addi x8, x8, 8 # 0x000000BC | 0x00840413
addi x1, x1, 1 # 0x000000C0 | 0x00108093
addi x2, x2, 2 # 0x000000C4 | 0x00210113
addi x3, x3, 3 # 0x000000C8 | 0x00318193
addi x4, x4, 4 # 0x000000CC | 0x00420213
addi x5, x5, 5 # 0x000000D0 | 0x00528293
addi x6, x6, 6 # 0x000000D4 | 0x00630313
addi x7, x7, 7 # 0x000000D8 | 0x00738393
addi x8, x8, 8 # 0x000000DC | 0x00840413
addi x1, x1, 1 # 0x000000E0 | 0x00108093
addi x2, x2, 2 # 0x000000E4 | 0x00210113
addi x3, x3, 3 # 0x000000E8 | 0x00318193
addi x4, x4, 4 # 0x000000EC | 0x00420213
addi x5, x5, 5 # 0x000000F0 | 0x00528293
addi x6, x6, 6 # 0x000000F4 | 0x00630313
addi x7, x7, 7 # 0x000000F8 | 0x00738393
addi x8, x8, 8 # 0x000000FC | 0x00840413
addi x1, x1, 1 # 0x00000100 | 0x00108093
addi x2, x2, 2 # 0x00000104 | 0x00210113
addi x3, x3, 3 # 0x00000108 | 0x00318193
addi x4, x4, 4 # 0x0000010C | 0x00420213
addi x5, x5, 5 # 0x00000110 | 0x00528293
addi x6, x6, 6 # 0x00000114 | 0x00630313
addi x7, x7, 7 # 0x00000118 | 0x00738393
addi x8, x8, 8 # 0x0000011C | 0x00840413
ebreak # 0x00000120 | 0x00100073
Execution¶
- Eight setup instructions initialize
x1throughx8to 1 through 8. - Execute eight unrolled rounds. Each round increments every register by its own index:
x1 += 1, ...,x8 += 8. - Each register finishes at nine times its index, giving
9, 18, 27, 36, 45, 54, 63, 72. - EBREAK follows the 72 ALU instructions, for 73 attempts total.
There is no branch loop in the image. Adjacent instructions use different accumulators; each chain's next update is eight instructions later. This is a workload shape, not a claim about the reference's cycle throughput.
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 |
0x00000009 |
Register result |
x2 |
0x00000012 |
Register result |
x3 |
0x0000001B |
Register result |
x4 |
0x00000024 |
Register result |
x5 |
0x0000002D |
Register result |
x6 |
0x00000036 |
Register result |
x7 |
0x0000003F |
Register result |
x8 |
0x00000048 |
Register result |
PC |
0x00000120 |
EBREAK address |
Attempts |
73 | Checkpoints I0–I72 |
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. No loads or stores occur. Pipeline timing belongs to the later implementation-specific evaluation.
Simulation and checkpoints¶
For a headless functional check, run build/rv32i_experiment --core single --program 17 --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 73 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 73 instruction-attempt checkpoints of RV32ISingleCycleSystemTest/program-17, with a behavioral core. Times are absolute simulator units, not milliseconds or an ISA latency.
| Checkpoint | Time | Instruction / address | Expected architectural effects |
|---|---|---|---|
| I0 | 7080 | ADDI @ 0x00000000 | raw=0x00100093, pc_after=0x00000004, wb=x1=0x00000001, mem=None, flow=next |
| I1 | 11080 | ADDI @ 0x00000004 | raw=0x00200113, pc_after=0x00000008, wb=x2=0x00000002, mem=None, flow=next |
| I2 | 15080 | ADDI @ 0x00000008 | raw=0x00300193, pc_after=0x0000000c, wb=x3=0x00000003, mem=None, flow=next |
| I3 | 19080 | ADDI @ 0x0000000c | raw=0x00400213, pc_after=0x00000010, wb=x4=0x00000004, mem=None, flow=next |
| I4 | 23080 | ADDI @ 0x00000010 | raw=0x00500293, pc_after=0x00000014, wb=x5=0x00000005, mem=None, flow=next |
| I5 | 27080 | ADDI @ 0x00000014 | raw=0x00600313, pc_after=0x00000018, wb=x6=0x00000006, mem=None, flow=next |
| I6 | 31080 | ADDI @ 0x00000018 | raw=0x00700393, pc_after=0x0000001c, wb=x7=0x00000007, mem=None, flow=next |
| I7 | 35080 | ADDI @ 0x0000001c | raw=0x00800413, pc_after=0x00000020, wb=x8=0x00000008, mem=None, flow=next |
| I8 | 39080 | ADDI @ 0x00000020 | raw=0x00108093, pc_after=0x00000024, wb=x1=0x00000002, mem=None, flow=next |
| I9 | 43080 | ADDI @ 0x00000024 | raw=0x00210113, pc_after=0x00000028, wb=x2=0x00000004, mem=None, flow=next |
| I10 | 47080 | ADDI @ 0x00000028 | raw=0x00318193, pc_after=0x0000002c, wb=x3=0x00000006, mem=None, flow=next |
| I11 | 51080 | ADDI @ 0x0000002c | raw=0x00420213, pc_after=0x00000030, wb=x4=0x00000008, mem=None, flow=next |
| I12 | 55080 | ADDI @ 0x00000030 | raw=0x00528293, pc_after=0x00000034, wb=x5=0x0000000a, mem=None, flow=next |
| I13 | 59080 | ADDI @ 0x00000034 | raw=0x00630313, pc_after=0x00000038, wb=x6=0x0000000c, mem=None, flow=next |
| I14 | 63080 | ADDI @ 0x00000038 | raw=0x00738393, pc_after=0x0000003c, wb=x7=0x0000000e, mem=None, flow=next |
| I15 | 67080 | ADDI @ 0x0000003c | raw=0x00840413, pc_after=0x00000040, wb=x8=0x00000010, mem=None, flow=next |
| I16 | 71080 | ADDI @ 0x00000040 | raw=0x00108093, pc_after=0x00000044, wb=x1=0x00000003, mem=None, flow=next |
| I17 | 75080 | ADDI @ 0x00000044 | raw=0x00210113, pc_after=0x00000048, wb=x2=0x00000006, mem=None, flow=next |
| I18 | 79080 | ADDI @ 0x00000048 | raw=0x00318193, pc_after=0x0000004c, wb=x3=0x00000009, mem=None, flow=next |
| I19 | 83080 | ADDI @ 0x0000004c | raw=0x00420213, pc_after=0x00000050, wb=x4=0x0000000c, mem=None, flow=next |
| I20 | 87080 | ADDI @ 0x00000050 | raw=0x00528293, pc_after=0x00000054, wb=x5=0x0000000f, mem=None, flow=next |
| I21 | 91080 | ADDI @ 0x00000054 | raw=0x00630313, pc_after=0x00000058, wb=x6=0x00000012, mem=None, flow=next |
| I22 | 95080 | ADDI @ 0x00000058 | raw=0x00738393, pc_after=0x0000005c, wb=x7=0x00000015, mem=None, flow=next |
| I23 | 99080 | ADDI @ 0x0000005c | raw=0x00840413, pc_after=0x00000060, wb=x8=0x00000018, mem=None, flow=next |
| I24 | 103080 | ADDI @ 0x00000060 | raw=0x00108093, pc_after=0x00000064, wb=x1=0x00000004, mem=None, flow=next |
| I25 | 107080 | ADDI @ 0x00000064 | raw=0x00210113, pc_after=0x00000068, wb=x2=0x00000008, mem=None, flow=next |
| I26 | 111080 | ADDI @ 0x00000068 | raw=0x00318193, pc_after=0x0000006c, wb=x3=0x0000000c, mem=None, flow=next |
| I27 | 115080 | ADDI @ 0x0000006c | raw=0x00420213, pc_after=0x00000070, wb=x4=0x00000010, mem=None, flow=next |
| I28 | 119080 | ADDI @ 0x00000070 | raw=0x00528293, pc_after=0x00000074, wb=x5=0x00000014, mem=None, flow=next |
| I29 | 123080 | ADDI @ 0x00000074 | raw=0x00630313, pc_after=0x00000078, wb=x6=0x00000018, mem=None, flow=next |
| I30 | 127080 | ADDI @ 0x00000078 | raw=0x00738393, pc_after=0x0000007c, wb=x7=0x0000001c, mem=None, flow=next |
| I31 | 131080 | ADDI @ 0x0000007c | raw=0x00840413, pc_after=0x00000080, wb=x8=0x00000020, mem=None, flow=next |
| I32 | 135080 | ADDI @ 0x00000080 | raw=0x00108093, pc_after=0x00000084, wb=x1=0x00000005, mem=None, flow=next |
| I33 | 139080 | ADDI @ 0x00000084 | raw=0x00210113, pc_after=0x00000088, wb=x2=0x0000000a, mem=None, flow=next |
| I34 | 143080 | ADDI @ 0x00000088 | raw=0x00318193, pc_after=0x0000008c, wb=x3=0x0000000f, mem=None, flow=next |
| I35 | 147080 | ADDI @ 0x0000008c | raw=0x00420213, pc_after=0x00000090, wb=x4=0x00000014, mem=None, flow=next |
| I36 | 151080 | ADDI @ 0x00000090 | raw=0x00528293, pc_after=0x00000094, wb=x5=0x00000019, mem=None, flow=next |
| I37 | 155080 | ADDI @ 0x00000094 | raw=0x00630313, pc_after=0x00000098, wb=x6=0x0000001e, mem=None, flow=next |
| I38 | 159080 | ADDI @ 0x00000098 | raw=0x00738393, pc_after=0x0000009c, wb=x7=0x00000023, mem=None, flow=next |
| I39 | 163080 | ADDI @ 0x0000009c | raw=0x00840413, pc_after=0x000000a0, wb=x8=0x00000028, mem=None, flow=next |
| I40 | 167080 | ADDI @ 0x000000a0 | raw=0x00108093, pc_after=0x000000a4, wb=x1=0x00000006, mem=None, flow=next |
| I41 | 171080 | ADDI @ 0x000000a4 | raw=0x00210113, pc_after=0x000000a8, wb=x2=0x0000000c, mem=None, flow=next |
| I42 | 175080 | ADDI @ 0x000000a8 | raw=0x00318193, pc_after=0x000000ac, wb=x3=0x00000012, mem=None, flow=next |
| I43 | 179080 | ADDI @ 0x000000ac | raw=0x00420213, pc_after=0x000000b0, wb=x4=0x00000018, mem=None, flow=next |
| I44 | 183080 | ADDI @ 0x000000b0 | raw=0x00528293, pc_after=0x000000b4, wb=x5=0x0000001e, mem=None, flow=next |
| I45 | 187080 | ADDI @ 0x000000b4 | raw=0x00630313, pc_after=0x000000b8, wb=x6=0x00000024, mem=None, flow=next |
| I46 | 191080 | ADDI @ 0x000000b8 | raw=0x00738393, pc_after=0x000000bc, wb=x7=0x0000002a, mem=None, flow=next |
| I47 | 195080 | ADDI @ 0x000000bc | raw=0x00840413, pc_after=0x000000c0, wb=x8=0x00000030, mem=None, flow=next |
| I48 | 199080 | ADDI @ 0x000000c0 | raw=0x00108093, pc_after=0x000000c4, wb=x1=0x00000007, mem=None, flow=next |
| I49 | 203080 | ADDI @ 0x000000c4 | raw=0x00210113, pc_after=0x000000c8, wb=x2=0x0000000e, mem=None, flow=next |
| I50 | 207080 | ADDI @ 0x000000c8 | raw=0x00318193, pc_after=0x000000cc, wb=x3=0x00000015, mem=None, flow=next |
| I51 | 211080 | ADDI @ 0x000000cc | raw=0x00420213, pc_after=0x000000d0, wb=x4=0x0000001c, mem=None, flow=next |
| I52 | 215080 | ADDI @ 0x000000d0 | raw=0x00528293, pc_after=0x000000d4, wb=x5=0x00000023, mem=None, flow=next |
| I53 | 219080 | ADDI @ 0x000000d4 | raw=0x00630313, pc_after=0x000000d8, wb=x6=0x0000002a, mem=None, flow=next |
| I54 | 223080 | ADDI @ 0x000000d8 | raw=0x00738393, pc_after=0x000000dc, wb=x7=0x00000031, mem=None, flow=next |
| I55 | 227080 | ADDI @ 0x000000dc | raw=0x00840413, pc_after=0x000000e0, wb=x8=0x00000038, mem=None, flow=next |
| I56 | 231080 | ADDI @ 0x000000e0 | raw=0x00108093, pc_after=0x000000e4, wb=x1=0x00000008, mem=None, flow=next |
| I57 | 235080 | ADDI @ 0x000000e4 | raw=0x00210113, pc_after=0x000000e8, wb=x2=0x00000010, mem=None, flow=next |
| I58 | 239080 | ADDI @ 0x000000e8 | raw=0x00318193, pc_after=0x000000ec, wb=x3=0x00000018, mem=None, flow=next |
| I59 | 243080 | ADDI @ 0x000000ec | raw=0x00420213, pc_after=0x000000f0, wb=x4=0x00000020, mem=None, flow=next |
| I60 | 247080 | ADDI @ 0x000000f0 | raw=0x00528293, pc_after=0x000000f4, wb=x5=0x00000028, mem=None, flow=next |
| I61 | 251080 | ADDI @ 0x000000f4 | raw=0x00630313, pc_after=0x000000f8, wb=x6=0x00000030, mem=None, flow=next |
| I62 | 255080 | ADDI @ 0x000000f8 | raw=0x00738393, pc_after=0x000000fc, wb=x7=0x00000038, mem=None, flow=next |
| I63 | 259080 | ADDI @ 0x000000fc | raw=0x00840413, pc_after=0x00000100, wb=x8=0x00000040, mem=None, flow=next |
| I64 | 263080 | ADDI @ 0x00000100 | raw=0x00108093, pc_after=0x00000104, wb=x1=0x00000009, mem=None, flow=next |
| I65 | 267080 | ADDI @ 0x00000104 | raw=0x00210113, pc_after=0x00000108, wb=x2=0x00000012, mem=None, flow=next |
| I66 | 271080 | ADDI @ 0x00000108 | raw=0x00318193, pc_after=0x0000010c, wb=x3=0x0000001b, mem=None, flow=next |
| I67 | 275080 | ADDI @ 0x0000010c | raw=0x00420213, pc_after=0x00000110, wb=x4=0x00000024, mem=None, flow=next |
| I68 | 279080 | ADDI @ 0x00000110 | raw=0x00528293, pc_after=0x00000114, wb=x5=0x0000002d, mem=None, flow=next |
| I69 | 283080 | ADDI @ 0x00000114 | raw=0x00630313, pc_after=0x00000118, wb=x6=0x00000036, mem=None, flow=next |
| I70 | 287080 | ADDI @ 0x00000118 | raw=0x00738393, pc_after=0x0000011c, wb=x7=0x0000003f, mem=None, flow=next |
| I71 | 291080 | ADDI @ 0x0000011c | raw=0x00840413, pc_after=0x00000120, wb=x8=0x00000048, mem=None, flow=next |
| I72 | 295080 | EBREAK @ 0x00000120 | raw=0x00100073, pc_after=0x00000120, wb=None, mem=None, flow=next, halted=true |