@@ -2,7 +2,6 @@ import chisel3._
22import chisel3 .util ._
33import _root_ .circt .stage .ChiselStage
44
5- // TODO: Make dispatcher instantly drive value
65class 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\t Immediate Lower ${io.read_immediate_l}" );
5049 printf(p " \n\t\t Immediate 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 }
0 commit comments