diff --git a/core/write_back.sv b/core/write_back.sv index 4e4ffe9..48fa4d3 100644 --- a/core/write_back.sv +++ b/core/write_back.sv @@ -32,11 +32,13 @@ module write_back( register_file_writeback_interface.writeback rf_wb, inflight_queue_interface.wb iq, id_generator_interface.wb id_gen, + id_table_interface.wb idt, output logic instruction_complete ); logic done [NUM_WB_UNITS-1:0]; logic early_done [NUM_WB_UNITS-1:0]; + logic [$clog2(INFLIGHT_QUEUE_DEPTH)-1:0] unit_ids [NUM_WB_UNITS-1:0]; logic accepted [NUM_WB_UNITS-1:0]; logic [XLEN-1:0] rd [NUM_WB_UNITS-1:0]; @@ -47,13 +49,37 @@ module write_back( logic [$clog2(INFLIGHT_QUEUE_DEPTH)-1:0] iq_index, iq_index_corrected, iq_index_r; instruction_id_t issue_id, issue_id_r; - //Re-assigning interface inputs to array types so that they can be dynamically indexed + logic [INFLIGHT_QUEUE_DEPTH-1:0] id_early_done, id_done, id_done_r; + + always_comb begin + for (int i = 0; i < INFLIGHT_QUEUE_DEPTH; i++) begin + id_early_done[i]=0; + for (int j = 0; j < NUM_WB_UNITS; j++) begin + id_early_done[i] |= early_done[j] && (unit_ids[j] == i); + end + end + end + genvar i; + generate + for (i=0; i