From e17128ee85ae4fccf671f168e75cfabf7d3c53c7 Mon Sep 17 00:00:00 2001 From: Alban Gruin <alban.gruin@irit.fr> Date: Fri, 18 Feb 2022 13:43:20 +0100 Subject: [PATCH] sras: handle unhandled cases wrt. the overflow Signed-off-by: Alban Gruin <alban.gruin@irit.fr> --- src/frontend/frontend.sv | 17 +++++++++-------- src/frontend/sras.sv | 7 ++++++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/frontend/frontend.sv b/src/frontend/frontend.sv index d0f7b5ca..018573b4 100644 --- a/src/frontend/frontend.sv +++ b/src/frontend/frontend.sv @@ -380,14 +380,15 @@ module frontend import ariane_pkg::*; #( ) i_ras ( .clk_i, .rst_ni, - .flush_i ( flush_bp_i ), - .push_i ( ras_push ), - .pop_i ( ras_pop ), - .data_i ( ras_update ), - .begin_spec_i ( begin_spec_o ), - .valid_spec_i ( is_correct_predict ), - .bad_spec_i ( is_mispredict ), - .data_o ( ras_predict ) + .flush_i ( flush_bp_i ), + .push_i ( ras_push ), + .pop_i ( ras_pop ), + .data_i ( ras_update ), + .begin_spec_i ( begin_spec_o ), + .valid_spec_i ( is_correct_predict ), + .bad_spec_i ( is_mispredict ), + .resolved_type_i ( resolved_branch_i.cf_type ), + .data_o ( ras_predict ) ); btb #( diff --git a/src/frontend/sras.sv b/src/frontend/sras.sv index e5f7f8b6..a1ca5587 100644 --- a/src/frontend/sras.sv +++ b/src/frontend/sras.sv @@ -28,6 +28,7 @@ module sras #( input logic begin_spec_i, input logic valid_spec_i, input logic bad_spec_i, + input ariane_pkg::cf_t resolved_type_i, output ariane_pkg::ras_t data_o ); @@ -68,12 +69,16 @@ module sras #( ovf_counter_d[ptr_spec_q] = ovf_counter_q[ptr_spec_q] + 1'b1; end end else if (!push_i && pop_i) begin - if (ovf_counter_q[ptr_spec_q] != '0) begin + if (ovf_counter_q[ptr_spec_q] == '0) begin + ovf_counter_d[ptr_spec_d] = '0; // ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q]; + end else begin ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q] - 1'b1; end end else if (begin_spec_i) begin ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q]; end + end else if (bad_spec_i && resolved_type_i == ariane_pkg::Return && ovf_counter_q[ptr_spec_q] != '0) begin + ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q] - 1'b1; end end -- GitLab