From 035a6b5a08d27afeeab5bafbd02b38620e0baba3 Mon Sep 17 00:00:00 2001 From: Stefan Mach Date: Tue, 3 Jul 2018 21:07:29 +0200 Subject: [PATCH] :bug: Fix FP register forwarding checks to use rd --- src/scoreboard.sv | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/scoreboard.sv b/src/scoreboard.sv index 913b30536..92abc3738 100644 --- a/src/scoreboard.sv +++ b/src/scoreboard.sv @@ -214,10 +214,10 @@ module scoreboard #( // look at the appropriate fields and look whether there was an // instruction that wrote the rd field before, first for RS1 and then for RS2, then for RS3 // we check the type of the stored result register file against issued register file - if ((mem_q[i].sbe.rd == rs1_i) && (is_rs1_fpr(mem_q[i].sbe.op) == is_rs1_fpr(issue_instr_o.op))) begin + if ((mem_q[i].sbe.rd == rs1_i) && (is_rd_fpr(mem_q[i].sbe.op) == is_rs1_fpr(issue_instr_o.op))) begin rs1_o = mem_q[i].sbe.result; rs1_valid_o = mem_q[i].sbe.valid; - end else if ((mem_q[i].sbe.rd == rs2_i) && (is_rs2_fpr(mem_q[i].sbe.op) == is_rs2_fpr(issue_instr_o.op))) begin + end else if ((mem_q[i].sbe.rd == rs2_i) && (is_rd_fpr(mem_q[i].sbe.op) == is_rs2_fpr(issue_instr_o.op))) begin rs2_o = mem_q[i].sbe.result; rs2_valid_o = mem_q[i].sbe.valid; end else if (mem_q[i].sbe.rd == rs3_i) begin // rs3 is only considered in FP cases so no check needed @@ -234,13 +234,13 @@ module scoreboard #( // make sure that we are not forwarding a result that got an exception for (int unsigned j = 0; j < NR_WB_PORTS; j++) begin if (mem_q[trans_id_i[j]].sbe.rd == rs1_i && wb_valid_i[j] && ~ex_i[j].valid - && (is_rs1_fpr(mem_q[trans_id_i[j]].sbe.op) == is_rs1_fpr(issue_instr_o.op))) begin + && (is_rd_fpr(mem_q[trans_id_i[j]].sbe.op) == is_rs1_fpr(issue_instr_o.op))) begin rs1_o = wbdata_i[j]; rs1_valid_o = wb_valid_i[j]; break; end if (mem_q[trans_id_i[j]].sbe.rd == rs2_i && wb_valid_i[j] && ~ex_i[j].valid - && (is_rs2_fpr(mem_q[trans_id_i[j]].sbe.op) == is_rs2_fpr(issue_instr_o.op))) begin + && (is_rd_fpr(mem_q[trans_id_i[j]].sbe.op) == is_rs2_fpr(issue_instr_o.op))) begin rs2_o = wbdata_i[j]; rs2_valid_o = wb_valid_i[j]; break;