Line 62... |
Line 62... |
// Load pending / target
|
// Load pending / target
|
input load_pending_i /*verilator public*/,
|
input load_pending_i /*verilator public*/,
|
input [4:0] rd_load_i /*verilator public*/,
|
input [4:0] rd_load_i /*verilator public*/,
|
|
|
// Multiplier status
|
// Multiplier status
|
input mult_lo_ex_i /*verilator public*/,
|
input mult_ex_i /*verilator public*/,
|
input mult_hi_ex_i /*verilator public*/,
|
|
input mult_lo_wb_i /*verilator public*/,
|
|
input mult_hi_wb_i /*verilator public*/,
|
|
|
|
// Multiplier result
|
|
input [63:0] result_mult_i /*verilator public*/,
|
|
|
|
// Result (EXEC)
|
// Result (EXEC)
|
input [31:0] result_ex_i /*verilator public*/,
|
input [31:0] result_ex_i /*verilator public*/,
|
|
|
// Result (WB)
|
// Result (WB)
|
Line 122... |
Line 116... |
// RA from PC-4 (exec)
|
// RA from PC-4 (exec)
|
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
else if (ra_i == rd_ex_i)
|
else if (ra_i == rd_ex_i)
|
begin
|
begin
|
// Multiplier has one cycle latency, stall if needed now
|
// Multiplier has one cycle latency, stall if needed now
|
if (mult_lo_ex_i | mult_hi_wb_i)
|
if (mult_ex_i)
|
stall_o = 1'b1;
|
stall_o = 1'b1;
|
else
|
else
|
begin
|
begin
|
result_ra_o = result_ex_i;
|
result_ra_o = result_ex_i;
|
resolved_o = 1'b1;
|
resolved_o = 1'b1;
|
Line 138... |
Line 132... |
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
// RA from PC-8 (writeback)
|
// RA from PC-8 (writeback)
|
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
else if (ra_i == rd_wb_i)
|
else if (ra_i == rd_wb_i)
|
begin
|
begin
|
if (mult_hi_wb_i)
|
|
result_ra_o = result_mult_i[63:32];
|
|
else if (mult_lo_wb_i)
|
|
result_ra_o = result_mult_i[31:0];
|
|
else
|
|
result_ra_o = result_wb_i;
|
result_ra_o = result_wb_i;
|
|
|
resolved_o = 1'b1;
|
resolved_o = 1'b1;
|
`ifdef CONF_CORE_DEBUG
|
`ifdef CONF_CORE_DEBUG
|
$display(" rA[%d] forwarded 0x%08x (PC-8)", ra_i, result_ra_o);
|
$display(" rA[%d] forwarded 0x%08x (PC-8)", ra_i, result_ra_o);
|
Line 177... |
Line 166... |
// RB from PC-4 (exec)
|
// RB from PC-4 (exec)
|
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
else if (rb_i == rd_ex_i)
|
else if (rb_i == rd_ex_i)
|
begin
|
begin
|
// Multiplier has one cycle latency, stall if needed now
|
// Multiplier has one cycle latency, stall if needed now
|
if (mult_lo_ex_i | mult_hi_wb_i)
|
if (mult_ex_i)
|
stall_o = 1'b1;
|
stall_o = 1'b1;
|
else
|
else
|
begin
|
begin
|
result_rb_o = result_ex_i;
|
result_rb_o = result_ex_i;
|
resolved_o = 1'b1;
|
resolved_o = 1'b1;
|
Line 194... |
Line 183... |
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
// RB from PC-8 (writeback)
|
// RB from PC-8 (writeback)
|
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
else if (rb_i == rd_wb_i)
|
else if (rb_i == rd_wb_i)
|
begin
|
begin
|
if (mult_hi_wb_i)
|
|
result_rb_o = result_mult_i[63:32];
|
|
else if (mult_lo_wb_i)
|
|
result_rb_o = result_mult_i[31:0];
|
|
else
|
|
result_rb_o = result_wb_i;
|
result_rb_o = result_wb_i;
|
|
|
resolved_o = 1'b1;
|
resolved_o = 1'b1;
|
|
|
`ifdef CONF_CORE_DEBUG
|
`ifdef CONF_CORE_DEBUG
|