Skip to content

Commit 61f1ed6

Browse files
Add writing full instruction for debug
1 parent 03ed9c7 commit 61f1ed6

3 files changed

Lines changed: 47 additions & 60 deletions

File tree

src/main/scala/main/Core.scala

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ class Core extends Module {
88

99
val debug_memory_write = Input(Bool());
1010
val debug_memory_write_address = Input(UInt(8.W));
11-
val debug_memory_write_data = Input(UInt(8.W));
11+
val debug_memory_write_data_0 = Input(UInt(8.W));
12+
val debug_memory_write_data_1 = Input(UInt(8.W));
13+
val debug_memory_write_data_2 = Input(UInt(8.W));
1214

1315
val debug_dispatcher_opcode = Output(Operation());
1416
val debug_dispatcher_program_pointer = Output(UInt(8.W));
@@ -23,17 +25,27 @@ class Core extends Module {
2325
memory.io.readPorts(0).enable := dispatcher.io.read_requested;
2426
memory.io.readPorts(0).address := 3.U * dispatcher.io.read_program_pointer;
2527
memory.io.readPorts(1).enable := dispatcher.io.read_requested;
26-
memory.io.readPorts(1).address := 3.U * dispatcher.io.read_program_pointer + 1.U;
28+
memory.io
29+
.readPorts(1)
30+
.address := 3.U * dispatcher.io.read_program_pointer + 1.U;
2731
memory.io.readPorts(2).enable := dispatcher.io.read_requested;
28-
memory.io.readPorts(2).address := 3.U * dispatcher.io.read_program_pointer + 2.U;
32+
memory.io
33+
.readPorts(2)
34+
.address := 3.U * dispatcher.io.read_program_pointer + 2.U;
2935

3036
memory.io.writePorts(0).enable := io.debug_memory_write;
31-
memory.io.writePorts(0).address := io.debug_memory_write_address;
32-
memory.io.writePorts(0).data := io.debug_memory_write_data;
37+
memory.io.writePorts(0).address := io.debug_memory_write_address * 3.U;
38+
memory.io.writePorts(0).data := io.debug_memory_write_data_0;
39+
memory.io.writePorts(1).enable := io.debug_memory_write;
40+
memory.io.writePorts(1).address := io.debug_memory_write_address * 3.U + 1.U;
41+
memory.io.writePorts(1).data := io.debug_memory_write_data_1;
42+
memory.io.writePorts(2).enable := io.debug_memory_write;
43+
memory.io.writePorts(2).address := io.debug_memory_write_address * 3.U + 2.U;
44+
memory.io.writePorts(2).data := io.debug_memory_write_data_2;
3345

3446
dispatcher.io.thread_requesting_opcode := thread.io.idle && io.execute;
3547
dispatcher.io.thread_program_pointer := thread.io.program_pointer;
36-
48+
3749
val read_ready_delayed = RegNext(dispatcher.io.read_requested, false.B);
3850
dispatcher.io.read_ready := read_ready_delayed;
3951
dispatcher.io.read_opcode := memory.io.readPorts(0).data(7, 0);
@@ -42,13 +54,19 @@ class Core extends Module {
4254

4355
when(true.B) {
4456
printf(p"\t[Core]=====");
45-
printf(p"\n\t\tdispatcher.io.read_requested=${dispatcher.io.read_requested}");
46-
printf(p"\n\t\tdispatcher.io.read_program_pointer=${dispatcher.io.read_program_pointer}");
57+
printf(
58+
p"\n\t\tdispatcher.io.read_requested=${dispatcher.io.read_requested}"
59+
);
60+
printf(
61+
p"\n\t\tdispatcher.io.read_program_pointer=${dispatcher.io.read_program_pointer}"
62+
);
4763
printf(p"\n\t\tdispatcher.io.read_opcode=${dispatcher.io.read_opcode}");
4864
// printf(p"\n\t\tread_ready_delayed=${read_ready_delayed}");
4965
printf(p"\n\t\tdispatcher_read_ready=${dispatcher.io.read_ready}");
5066
printf(p"\n\t\tdebug_dispatcher_opcode=${io.debug_dispatcher_opcode}");
51-
printf(p"\n\t\tdebug_dispatcher_program_pointer=${io.debug_dispatcher_program_pointer}");
67+
printf(
68+
p"\n\t\tdebug_dispatcher_program_pointer=${io.debug_dispatcher_program_pointer}"
69+
);
5270
printf(p"\n\t\texecute=${io.execute}");
5371
printf(p"\n\n");
5472
}
@@ -61,7 +79,10 @@ class Core extends Module {
6179
thread.io.operation := dispatcher.io.opcode;
6280
thread.io.src_register := dispatcher.io.src_register;
6381
thread.io.dst_register := dispatcher.io.dst_register;
64-
thread.io.immediate := Cat(dispatcher.io.read_immediate_u, dispatcher.io.read_immediate_l);
82+
thread.io.immediate := Cat(
83+
dispatcher.io.read_immediate_u,
84+
dispatcher.io.read_immediate_l
85+
);
6586

6687
io.debug_thread_debug_output := thread.io.debug_output;
6788
}

src/main/scala/main/Memory.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ import chisel3.util._
33
import _root_.circt.stage.ChiselStage
44

55
class Memory extends Module {
6-
val io = IO(new SRAMInterface(1024, UInt(8.W), 3, 1, 0));
6+
val io = IO(new SRAMInterface(1024, UInt(8.W), 3, 3, 0));
77

8-
val memory = SRAM(1024, UInt(8.W), 3, 1, 0);
8+
val memory = SRAM(1024, UInt(8.W), 3, 3, 0);
99

1010
io.readPorts(0) <> memory.readPorts(0);
1111
io.readPorts(1) <> memory.readPorts(1);
1212
io.readPorts(2) <> memory.readPorts(2);
13-
13+
1414
io.writePorts(0) <> memory.writePorts(0);
15+
io.writePorts(1) <> memory.writePorts(1);
16+
io.writePorts(2) <> memory.writePorts(2);
1517
}

src/test/scala/main/CoreTest.scala

Lines changed: 11 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,63 +7,27 @@ class CoreTest extends AnyFlatSpec with ChiselScalatestTester {
77
test(new Core) { dut =>
88
dut.io.debug_memory_write.poke(true.B);
99
dut.io.debug_memory_write_address.poke(0.U(8.W));
10-
dut.io.debug_memory_write_data.poke(0b00001010.U(8.W));
11-
12-
println("[CoreTest]=====");
13-
dut.clock.step(1);
14-
15-
dut.io.debug_memory_write.poke(true.B);
16-
dut.io.debug_memory_write_address.poke(1.U(8.W));
17-
dut.io.debug_memory_write_data.poke(0b01000000.U(8.W));
18-
19-
println("[CoreTest]=====");
20-
dut.clock.step(1);
21-
22-
dut.io.debug_memory_write.poke(true.B);
23-
dut.io.debug_memory_write_address.poke(2.U(8.W));
24-
dut.io.debug_memory_write_data.poke(0b00000000.U(8.W));
25-
26-
println("[CoreTest]=====");
27-
dut.clock.step(1);
28-
29-
dut.io.debug_memory_write.poke(true.B);
30-
dut.io.debug_memory_write_address.poke(3.U(8.W));
31-
dut.io.debug_memory_write_data.poke(0b00001000.U(8.W));
32-
33-
println("[CoreTest]=====");
34-
dut.clock.step(1);
35-
36-
dut.io.debug_memory_write.poke(true.B);
37-
dut.io.debug_memory_write_address.poke(4.U(8.W));
38-
dut.io.debug_memory_write_data.poke(0b00100010.U(8.W));
39-
40-
println("[CoreTest]=====");
41-
dut.clock.step(1);
42-
43-
dut.io.debug_memory_write.poke(true.B);
44-
dut.io.debug_memory_write_address.poke(5.U(8.W));
45-
dut.io.debug_memory_write_data.poke(0b00000000.U(8.W));
10+
dut.io.debug_memory_write_data_0.poke(0b00001010.U(8.W));
11+
dut.io.debug_memory_write_data_1.poke(0b01000000.U(8.W));
12+
dut.io.debug_memory_write_data_2.poke(0b00000000.U(8.W));
4613

4714
println("[CoreTest]=====");
4815
dut.clock.step(1);
4916

5017
dut.io.debug_memory_write.poke(true.B);
51-
dut.io.debug_memory_write_address.poke(6.U(8.W));
52-
dut.io.debug_memory_write_data.poke(0b00100000.U(8.W));
53-
54-
println("[CoreTest]=====");
55-
dut.clock.step(1);
18+
dut.io.debug_memory_write_address.poke(1.U(8.W));
19+
dut.io.debug_memory_write_data_0.poke(0b00001000.U(8.W));
20+
dut.io.debug_memory_write_data_1.poke(0b00100010.U(8.W));
21+
dut.io.debug_memory_write_data_2.poke(0b00000000.U(8.W));
5622

57-
dut.io.debug_memory_write.poke(true.B);
58-
dut.io.debug_memory_write_address.poke(7.U(8.W));
59-
dut.io.debug_memory_write_data.poke(0b00000000.U(8.W));
60-
6123
println("[CoreTest]=====");
6224
dut.clock.step(1);
6325

6426
dut.io.debug_memory_write.poke(true.B);
65-
dut.io.debug_memory_write_address.poke(8.U(8.W));
66-
dut.io.debug_memory_write_data.poke(0b00000000.U(8.W));
27+
dut.io.debug_memory_write_address.poke(2.U(8.W));
28+
dut.io.debug_memory_write_data_0.poke(0b00100000.U(8.W));
29+
dut.io.debug_memory_write_data_1.poke(0b00000000.U(8.W));
30+
dut.io.debug_memory_write_data_2.poke(0b00000000.U(8.W));
6731

6832
println("[CoreTest]=====");
6933
dut.clock.step(1);

0 commit comments

Comments
 (0)