Skip to content

Commit 28c4c2f

Browse files
implement slt and sltu
1 parent ea07205 commit 28c4c2f

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

documentation/Modules/Hart.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ Currently only the `LW` instruction uses stage 2, since in stage 1 `LW` requests
2424
- [x] ADD
2525
- [x] SUB
2626
- [x] SLL
27-
- [ ] SLT
28-
- [ ] SLTU
27+
- [x] SLT
28+
- [x] SLTU
2929
- [ ] XOR
3030
- [ ] SRL
3131
- [ ] SRA

src/main/scala/RISCV/Main.scala

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,46 @@ class Main() extends Module {
322322

323323
printf("[SLL] Rs1: %d Rs2: %d Rd: %d\n", decoder.io.rs1, decoder.io.rs2, decoder.io.rd);
324324
}
325+
326+
// SLT
327+
is("b010_0110011".U) {
328+
registers.io.read_address_a := decoder.io.rs1;
329+
registers.io.read_address_b := decoder.io.rs2;
330+
331+
registers.io.write_address := decoder.io.rd;
332+
registers.io.write_enable := true.B;
333+
334+
when(registers.io.out_a.asSInt < registers.io.out_b.asSInt) {
335+
registers.io.in := 1.U;
336+
}.otherwise {
337+
registers.io.in := 0.U;
338+
}
339+
340+
program_pointer := program_pointer + 1.U;
341+
stage := 0.U;
342+
343+
printf("[SLT] Rs1: %d Rs2: %d Rd: %d\n", decoder.io.rs1, decoder.io.rs2, decoder.io.rd);
344+
}
345+
346+
// SLTU
347+
is("b011_0110011".U) {
348+
registers.io.read_address_a := decoder.io.rs1;
349+
registers.io.read_address_b := decoder.io.rs2;
350+
351+
registers.io.write_address := decoder.io.rd;
352+
registers.io.write_enable := true.B;
353+
354+
when(registers.io.out_a < registers.io.out_b) {
355+
registers.io.in := 1.U;
356+
}.otherwise {
357+
registers.io.in := 0.U;
358+
}
359+
360+
program_pointer := program_pointer + 1.U;
361+
stage := 0.U;
362+
363+
printf("[SLTU] Rs1: %d Rs2: %d Rd: %d\n", decoder.io.rs1, decoder.io.rs2, decoder.io.rd);
364+
}
325365
}
326366
}
327367

src/test/scala/RISCV/MainSpec.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ class MainSpec extends AnyFreeSpec with Matchers with ChiselSim {
3232

3333
dut.clock.step(1);
3434

35+
dut.io.debug_write.poke(true.B);
36+
dut.io.debug_write_data.poke("b0000000_00001_00010_011_00010_0110011".U(32.W));
37+
dut.io.debug_write_addressess.poke(4.U);
38+
39+
dut.clock.step(1);
40+
3541
dut.io.debug_write.poke(false.B);
3642
dut.io.execute.poke(true.B);
3743

@@ -46,6 +52,8 @@ class MainSpec extends AnyFreeSpec with Matchers with ChiselSim {
4652
dut.clock.step(1);
4753
dut.clock.step(1);
4854
dut.clock.step(1);
55+
dut.clock.step(1);
56+
dut.clock.step(1);
4957
}
5058
}
5159
}

0 commit comments

Comments
 (0)