Skip to content

Commit a57d5f8

Browse files
Reduce delay in parsing read instructions by one clock cycle
1 parent 47c5d22 commit a57d5f8

3 files changed

Lines changed: 29 additions & 4 deletions

File tree

src/main/scala/main/Core.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ class Core extends Module {
4343
when(true.B) {
4444
printf(p"\t[Core]=====");
4545
printf(p"\n\t\tdispatcher.io.read_requested=${dispatcher.io.read_requested}");
46-
printf(p"\n\t\tread_ready_delayed=${read_ready_delayed}");
4746
printf(p"\n\t\tdispatcher.io.read_program_pointer=${dispatcher.io.read_program_pointer}");
4847
printf(p"\n\t\tdispatcher.io.read_opcode=${dispatcher.io.read_opcode}");
4948
// printf(p"\n\t\tread_ready_delayed=${read_ready_delayed}");

src/main/scala/main/Dispatcher.scala

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import chisel3._
22
import chisel3.util._
33
import _root_.circt.stage.ChiselStage
44

5-
// TODO: Make dispatcher instantly drive value
65
class Dispatcher extends Module {
76
val io = IO(new Bundle {
87
val thread_requesting_opcode = Input(Bool());
@@ -21,7 +20,7 @@ class Dispatcher extends Module {
2120
val dst_register = Output(Register());
2221
val program_pointer = Output(UInt(8.W));
2322
});
24-
23+
2524
io.read_program_pointer := io.thread_program_pointer;
2625
io.read_requested := false.B;
2726

@@ -49,43 +48,65 @@ class Dispatcher extends Module {
4948
printf(p"\n\t\tImmediate Lower ${io.read_immediate_l}");
5049
printf(p"\n\t\tImmediate Upper ${io.read_immediate_u}\n\n");
5150

52-
opcode := Operation.safe(io.read_opcode(6, 3))._1;
51+
val read_opcode = Operation.safe(io.read_opcode(6, 3))._1;
52+
opcode := read_opcode;
53+
io.opcode := read_opcode;
5354

5455
val registers_code = io.read_opcode(2, 0);
5556

5657
when(registers_code === 0.U) {
5758
src_register := Register.A;
5859
dst_register := Register.B;
60+
61+
io.src_register := Register.A;
62+
io.dst_register := Register.B;
5963
}
6064

6165
when(registers_code === 1.U) {
6266
src_register := Register.A;
6367
dst_register := Register.C;
68+
69+
io.src_register := Register.A;
70+
io.dst_register := Register.C;
6471
}
6572

6673
when(registers_code === 2.U) {
6774
src_register := Register.B;
6875
dst_register := Register.A;
76+
77+
io.src_register := Register.B;
78+
io.dst_register := Register.A;
6979
}
7080

7181
when(registers_code === 3.U) {
7282
src_register := Register.B;
7383
dst_register := Register.C;
84+
85+
io.src_register := Register.B;
86+
io.dst_register := Register.C;
7487
}
7588

7689
when(registers_code === 4.U) {
7790
src_register := Register.C;
7891
dst_register := Register.A;
92+
93+
io.src_register := Register.C;
94+
io.dst_register := Register.A;
7995
}
8096

8197
when(registers_code === 5.U) {
8298
src_register := Register.C;
8399
dst_register := Register.B;
100+
101+
io.src_register := Register.C;
102+
io.dst_register := Register.B;
84103
}
85104

86105
opcode_loaded := true.B;
106+
io.opcode_loaded := true.B;
87107

88108
program_pointer := io.read_program_pointer;
109+
io.program_pointer := io.read_program_pointer;
89110

90111
io.read_requested := false.B;
91112
}

src/main/scala/main/Thread.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ class Thread extends Module {
9999
when(io.dst_register === Register.C) {
100100
register_c := io.immediate
101101
}
102+
103+
program_counter.io.update := true.B;
104+
program_counter.io.branch := false.B;
105+
106+
io.idle := false.B;
102107
}
103108

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

0 commit comments

Comments
 (0)