Stage 12: passing tests
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user