Skip to content

Commit 840aeaf

Browse files
Implement move immediate op
1 parent 1777fcf commit 840aeaf

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

src/main/scala/main/Core.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import _root_.circt.stage.ChiselStage
44

55
class Core extends Module {
66
val io = IO(new Bundle {
7+
val execute = Input(Bool());
8+
79
val debug_memory_write = Input(Bool());
810
val debug_memory_write_address = Input(UInt(8.W));
911
val debug_memory_write_data = Input(UInt(8.W));
@@ -29,7 +31,7 @@ class Core extends Module {
2931
memory.io.writePorts(0).address := io.debug_memory_write_address;
3032
memory.io.writePorts(0).data := io.debug_memory_write_data;
3133

32-
dispatcher.io.thread_requesting_opcode := thread.io.idle;
34+
dispatcher.io.thread_requesting_opcode := thread.io.idle && io.execute;
3335
dispatcher.io.thread_program_pointer := thread.io.program_pointer;
3436

3537
val read_ready_delayed = RegNext(dispatcher.io.read_requested, false.B);
@@ -59,8 +61,7 @@ class Core extends Module {
5961
thread.io.operation := dispatcher.io.opcode;
6062
thread.io.src_register := dispatcher.io.src_register;
6163
thread.io.dst_register := dispatcher.io.dst_register;
62-
thread.io.immediate_a := 2.U(8.W);
63-
thread.io.immediate_b := 3.U(8.W);
64+
thread.io.immediate := Cat(dispatcher.io.read_immediate_u, dispatcher.io.read_immediate_l);
6465

6566
io.debug_thread_debug_output := thread.io.debug_output;
6667
}

src/main/scala/main/Thread.scala

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ class Thread extends Module {
1010
val operation = Input(Operation());
1111
val src_register = Input(Register());
1212
val dst_register = Input(Register());
13-
val immediate_a = Input(UInt(8.W));
14-
val immediate_b = Input(UInt(8.W));
13+
val immediate = Input(UInt(16.W));
1514

1615
val program_pointer = Output(UInt(8.W));
1716
val end_of_program = Output(Bool());
@@ -22,9 +21,9 @@ class Thread extends Module {
2221
val end_of_program = RegInit(false.B);
2322
val idle = RegInit(true.B);
2423

25-
val register_a = RegInit(2.U(16.W));
26-
val register_b = RegInit(3.U(16.W));
27-
val register_c = RegInit(7.U(16.W));
24+
val register_a = RegInit(0.U(16.W));
25+
val register_b = RegInit(0.U(16.W));
26+
val register_c = RegInit(0.U(16.W));
2827

2928
val alu = Module(new Alu())
3029
alu.io.execute := false.B;
@@ -89,7 +88,17 @@ class Thread extends Module {
8988
}
9089

9190
when(io.operation === Operation.MoveImmediate) {
92-
91+
when(io.dst_register === Register.A) {
92+
register_a := io.immediate
93+
}
94+
95+
when(io.dst_register === Register.B) {
96+
register_b := io.immediate
97+
}
98+
99+
when(io.dst_register === Register.C) {
100+
register_c := io.immediate
101+
}
93102
}
94103

95104
when(io.operation === Operation.MoveRegister) {

src/test/scala/main/CoreTest.scala

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +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(0b00010010.U(8.W));
10+
dut.io.debug_memory_write_data.poke(0b00001010.U(8.W));
1111

1212
println("[CoreTest]=====");
1313
dut.clock.step(1);
1414

1515
dut.io.debug_memory_write.poke(true.B);
16-
dut.io.debug_memory_write_address.poke(3.U(8.W));
17-
dut.io.debug_memory_write_data.poke(0b00100010.U(8.W));
16+
dut.io.debug_memory_write_address.poke(1.U(8.W));
17+
dut.io.debug_memory_write_data.poke(0b01000000.U(8.W));
1818

1919
println("[CoreTest]=====");
2020
dut.clock.step(1);
2121

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+
2226
println("[CoreTest]=====");
2327
dut.clock.step(1);
2428

29+
dut.io.execute.poke(true.B);
30+
2531
println("[CoreTest]=====");
2632
dut.clock.step(1);
2733

0 commit comments

Comments
 (0)