Stage 12: passing tests

This commit is contained in:
2025-11-09 18:23:24 +01:00
parent 603a1ac54a
commit 441f665d34
6 changed files with 15 additions and 24 deletions

View File

@@ -2,11 +2,9 @@
.text .text
_start: _start:
addi x1, x0, 0x0FB addi x1, x0, 0x0FB
nop # Next instruction depends on previous register op
sb x1, 100(x0) sb x1, 100(x0)
lb x31, 100(x0) lb x31, 100(x0)
addi x1, x0, 0x0FB addi x1, x0, 0x0FB
nop # Next instruction depends on previous register op
sb x1, 106(x0) sb x1, 106(x0)
lb x31, 106(x0) lb x31, 106(x0)

View File

@@ -2,11 +2,9 @@
.text .text
_start: _start:
addi x1, x0, 0x0FB addi x1, x0, 0x0FB
nop # Next instruction depends on previous register op
sb x1, 100(x0) sb x1, 100(x0)
lbu x31, 100(x0) lbu x31, 100(x0)
addi x1, x0, 0x0FB addi x1, x0, 0x0FB
nop # Next instruction depends on previous register op
sb x1, 106(x0) sb x1, 106(x0)
lbu x31, 106(x0) lbu x31, 106(x0)

View File

@@ -2,15 +2,11 @@
.text .text
_start: _start:
lui x1, 0xF lui x1, 0xF
nop # Next instruction depends on previous register op
ori x1, x1, 0x1BC ori x1, x1, 0x1BC
nop # Next instruction depends on previous register op
sh x1, 100(x0) sh x1, 100(x0)
lh x31, 100(x0) lh x31, 100(x0)
lui x1, 0xF lui x1, 0xF
nop # Next instruction depends on previous register op
ori x1, x1, 0x1BC ori x1, x1, 0x1BC
nop # Next instruction depends on previous register op
sh x1, 106(x0) sh x1, 106(x0)
lh x31, 106(x0) lh x31, 106(x0)

View File

@@ -2,15 +2,11 @@
.text .text
_start: _start:
lui x1, 0xF lui x1, 0xF
nop # Next instruction depends on previous register op
ori x1, x1, 0x1BC ori x1, x1, 0x1BC
nop # Next instruction depends on previous register op
sh x1, 100(x0) sh x1, 100(x0)
lhu x31, 100(x0) lhu x31, 100(x0)
lui x1, 0xF lui x1, 0xF
nop # Next instruction depends on previous register op
ori x1, x1, 0x1BC ori x1, x1, 0x1BC
nop # Next instruction depends on previous register op
sh x1, 106(x0) sh x1, 106(x0)
lhu x31, 106(x0) lhu x31, 106(x0)

View File

@@ -2,8 +2,6 @@
.text .text
_start: _start:
lui x1, 0x12345 lui x1, 0x12345
nop # Next instruction depends on previous register op
ori x1, x1, 0x1BC ori x1, x1, 0x1BC
nop # Next instruction depends on previous register op
sw x1, 100(x0) sw x1, 100(x0)
lw x31, 100(x0) lw x31, 100(x0)

View File

@@ -82,43 +82,48 @@ class Rv32i(sim: Boolean = true) extends Module {
reg_rd_index := rd_index; reg_rd_index := rd_index;
reg_file.io.rd_addr := reg_rd_index; reg_file.io.rd_addr := reg_rd_index;
val writeback_line = Mux(
reg_mux_executeout_dout,
reg_execute_out,
dmem.io.data_out
);
val rs1_data =
Mux(rs1_index === reg_rd_index && rs1_index =/= 0.U, writeback_line, reg_file.io.rs1_data)
val rs2_data =
Mux(rs2_index === reg_rd_index && rs2_index =/= 0.U, writeback_line, reg_file.io.rs2_data)
// EXECUTE // EXECUTE
val imm = immediate_decoder.io.immediate val imm = immediate_decoder.io.immediate
alu.io.a := Mux( alu.io.a := Mux(
control_unit.io.mux_rega_pc, control_unit.io.mux_rega_pc,
reg_file.io.rs1_data, rs1_data,
execute_pc execute_pc
); );
alu.io.b := Mux(control_unit.io.mux_regb_imm, reg_file.io.rs2_data, imm); alu.io.b := Mux(control_unit.io.mux_regb_imm, rs2_data, imm);
// Select what to send on writeback line // Select what to send on writeback line
val execute_out = Mux(control_unit.io.mux_alu_imm, alu.io.out, imm); val execute_out = Mux(control_unit.io.mux_alu_imm, alu.io.out, imm);
reg_execute_out := execute_out; reg_execute_out := execute_out;
reg_mux_executeout_dout := control_unit.io.mux_executeout_dout; reg_mux_executeout_dout := control_unit.io.mux_executeout_dout;
val writeback_line = Mux(
reg_mux_executeout_dout,
reg_execute_out,
dmem.io.data_out
);
reg_file.io.rd_data := reg_file.io.rd_data :=
Mux( Mux(
Delay.Delay(control_unit.io.mux_writeback_pc, 1, true.B), Delay.Delay(control_unit.io.mux_writeback_pc, 1, true.B),
writeback_line, writeback_line,
reg_pc Delay.Delay(reg_pc, 1, 0.U)
); );
// Writeback pipelining registers // Writeback pipelining registers
reg_pc := Mux( reg_pc := Mux(
control_unit.io.mux_pcadder_writeback, Delay.Delay(control_unit.io.mux_pcadder_writeback, 1, true.B),
pc_adder_out, pc_adder_out,
writeback_line writeback_line
); );
dmem.io.data_in := reg_file.io.rs2_data dmem.io.data_in := rs2_data
dmem.io.addr := execute_out dmem.io.addr := execute_out
io.ibus.wdata := 0.U; io.ibus.wdata := 0.U;