Skip to content

Commit c10219a

Browse files
fix memory controller and test program
1 parent 61ac4d4 commit c10219a

3 files changed

Lines changed: 34 additions & 9 deletions

File tree

src/main/scala/RISCV/Main.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,10 +242,11 @@ class Main() extends Module {
242242
memory.io.address_2 := (registers.io.out_a + decoder.io.immediate) / 4.U + 1.U;
243243

244244
printf(
245-
"[SW] Rs1: %d Rs2: %d Immediate: %b\n",
245+
"[SW] Rs1: %d Rs2: %d Immediate: %b Raw Address: %b\n",
246246
decoder.io.rs1,
247247
decoder.io.rs2,
248-
registers.io.out_a + decoder.io.immediate
248+
registers.io.out_a + decoder.io.immediate,
249+
(registers.io.out_a + decoder.io.immediate) / 4.U
249250
);
250251
}
251252

src/main/scala/RISCV/Memory.scala

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,30 @@ class Memory() extends Module {
3232
io.read_value_1 := 0.U
3333
io.read_value_2 := 0.U
3434

35-
val isVGA = io.address_1 > 0b1000000000000.U;
35+
val isVGA = io.address_1 >= 0b1000000000000.U;
3636
io.address_vga := Mux(isVGA, io.address_1 - 0b1000000000000.U,0.U);
3737
io.write_vga := isVGA && io.write_1
3838
io.write_value_vga := io.write_value_1
3939

40+
when(isVGA) {
41+
printf(
42+
"Writing to VGA! Address: %b Data: %b\n",
43+
io.address_1 - 0b1000000000000.U,
44+
io.write_value_1
45+
);
46+
}
4047

4148
io.read_value_1 := memory.readWrite(
4249
io.address_1,
4350
io.write_value_1,
44-
io.read_1 || io.write_1,
51+
(io.read_1 || io.write_1) && !isVGA,
4552
io.write_1
4653
)
4754

4855
io.read_value_2 := memory.readWrite(
4956
io.address_2,
5057
io.write_value_2,
51-
io.read_2 || io.write_2,
58+
(io.read_2 || io.write_2) && !isVGA,
5259
io.write_2
5360
)
5461

src/test/scala/RISCV/MainSpec.scala

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,22 +44,39 @@ class MainSpec extends AnyFreeSpec with Matchers with ChiselSim {
4444
dut.io.debug_write.poke(true.B)
4545

4646
dut.io.debug_write_address.poke(0.U)
47-
dut.io.debug_write_data.poke(0b000000000111_00000_000_00001_0010011.U) // ADDI
47+
dut.io.debug_write_data.poke(0b00000000000000000100_00010_0110111L.U) // LUI
4848
dut.clock.step(1)
4949

5050
dut.io.debug_write_address.poke(1.U)
51-
dut.io.debug_write_data.poke(0b0000000_00001_00000_010_00000_0100011.U) // SW
51+
dut.io.debug_write_data.poke(0b000000001000_00001_000_00001_0010011L.U) // ADDI
5252
dut.clock.step(1)
5353

5454
dut.io.debug_write_address.poke(2.U)
55-
dut.io.debug_write_data.poke(0b000000000000_00000_010_00010_0000011.U) // LW
55+
dut.io.debug_write_data.poke(0b000000000000_00010_010_00000_0100011L.U) // SW
5656
dut.clock.step(1)
57+
58+
dut.io.debug_write_address.poke(3.U)
59+
dut.io.debug_write_data.poke(0b11111111100111111111_00000_1101111L.U) // JAL
60+
dut.clock.step(1)
61+
62+
63+
// dut.io.debug_write_address.poke(0.U)
64+
// dut.io.debug_write_data.poke(0b000000000111_00000_000_00001_0010011.U) // ADDI
65+
// dut.clock.step(1)
66+
67+
// dut.io.debug_write_address.poke(1.U)
68+
// dut.io.debug_write_data.poke(0b0000000_00001_00000_010_00000_0100011.U) // SW
69+
// dut.clock.step(1)
70+
71+
// dut.io.debug_write_address.poke(2.U)
72+
// dut.io.debug_write_data.poke(0b000000000000_00000_010_00010_0000011.U) // LW
73+
// dut.clock.step(1)
5774

5875
dut.io.debug_write.poke(false.B)
5976
dut.clock.step(1)
6077

6178
dut.io.execute.poke(true.B)
62-
dut.clock.step(12)
79+
dut.clock.step(24)
6380
}
6481
}
6582
}

0 commit comments

Comments
 (0)