Stage 8: all tests passing

This commit is contained in:
2025-11-07 15:27:15 +01:00
parent c88662403e
commit e83e7c11c1
3 changed files with 20 additions and 11 deletions

View File

@@ -1,12 +1,17 @@
# expected: 00000004, 0000008, 0000000C
# expected: 00000004, 0000008, 00000014, 0000000B
.text
_start:
jal x31, step1
step1:
jal x31, step2
step4:
addi x31, x0, 0x00B
jal x0, finish
step2:
jal x31, step3
step3:
jal x0, step4
addi x31, x0, 0x00A # This instruction should never be executed
finish:
nop

View File

@@ -1,15 +1,15 @@
# expected: 000000BA, 0000018, 0000000A
# expected: 000000BA, 000001C, 0000000A
.text
_start:
jal x1, step1
add x31, x0, 0x00A
addi x31, x0, 0x00A
jal x0, finish
step1:
jal x2, step2
add x31, x0, 0x0AB # This instruction should never be executed
add x31, x0, 0x0BA
addi x31, x0, 0x0AB # This instruction should never be executed
addi x31, x0, 0x0BA
jalr x31, 0(x1) # Check if return address is written to x31
step2:
jalr x0, 1(x2) # return to step1, but 1 further
jalr x0, 4(x2) # return to step1, but 1 further
finish:
nop

View File

@@ -124,10 +124,14 @@ class ControlUnit() extends Module {
// J instructions
is(OpCode.JAL) {
io.alu_opcode := AluOpCode.Add
io.alu_opcode := AluOpCode.Add // ALU is unused
io.reg_file_we := true.B // Write to regfile
io.mux_rega_pc := false.B // Send PC to ALU A
io.mux_regb_imm := false.B; // Send imm to ALU B
io.mux_writeback_pc := false.B;
// io.mux_rega_pc := false.B // Send PC to ALU A
// io.mux_regb_imm := false.B; // Send imm to ALU B
io.is_jump := true.B
io.mux_incrpc4_imm := false.B; // Send the immediate in PC
io.mux_regpc_executepc := false.B; // Add the immediate to the previous PC
@@ -145,7 +149,7 @@ class ControlUnit() extends Module {
io.mux_rega_pc := true.B // Send rs1 to ALU A
io.mux_regb_imm := false.B; // Send imm to ALU B
io.mux_alu_imm := false.B; // Send alu out to write back line
io.mux_alu_imm := true.B; // Send alu out to write back line
io.mux_pcadder_writeback := false.B; // Set pc to writeback dest
io.optype := OpType.I
}