diff --git a/src/frontend/sras.sv b/src/frontend/sras.sv
index 1bd7ed8e0d233f396eb16ee29dd05d20a4fa17f5..e8d92fbf43bcade4a97bd22b3dca2d56df68a856 100644
--- a/src/frontend/sras.sv
+++ b/src/frontend/sras.sv
@@ -54,44 +54,38 @@ module sras #(
     assign overflow = |ovf_counter_q[ptr_spec_q];
 
     always_comb begin
+        tos_d = tos_q;
         ovf_counter_d = ovf_counter_q;
 
         if (flush_i) begin
+            tos_d = '0;
             ovf_counter_d = '0;
         end else if (!bad_spec_i) begin
             if (push_i && !pop_i) begin
                 if (overflow) begin
                     ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q] + 1'b1;
-                end else if (prev_plus_one == '0 || pp_plus_one == '0) begin
-                    ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q] + 1'b1;
-                    if (begin_spec_i) begin
-                        ovf_counter_d[ptr_spec_q] = ovf_counter_q[ptr_spec_q] + 1'b1;
+                end else begin
+                    if (prev_plus_one == '0 || pp_plus_one == '0) begin
+                        ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q] + 1'b1;
+                        if (begin_spec_i) begin
+                            ovf_counter_d[ptr_spec_q] = ovf_counter_q[ptr_spec_q] + 1'b1;
+                        end
+                    end else begin
+                        tos_d[ptr_spec_d] = prev_plus_one;
+                        if (begin_spec_i) begin
+                            tos_d[ptr_spec_q] = pp_plus_one;
+                        end
                     end
                 end
-            end else if (!push_i && pop_i && ovf_counter_q[ptr_spec_q] != '0) begin
-                ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q] - 1'b1;
-            end else if (!bad_spec_i && begin_spec_i) begin
-                ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q];
-            end
-        end
-    end
-
-    always_comb begin
-        tos_d = tos_q;
-
-        if (flush_i) begin
-            tos_d = '0;
-        end else if (!bad_spec_i) begin
-            if (push_i && !pop_i && !overflow && prev_plus_one != '0 && pp_plus_one != '0) begin
-                tos_d[ptr_spec_d] = prev_plus_one;
-
-                if (begin_spec_i) begin
-                    tos_d[ptr_spec_q] = pp_plus_one;
+            end else if (!push_i && pop_i) begin
+                if (ovf_counter_q[ptr_spec_q] != '0) begin
+                    ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q] - 1'b1;
+                end else begin
+                    tos_d[ptr_spec_d] = prev_minus_one;
                 end
-            end else if (!push_i && pop_i && ovf_counter_q[ptr_spec_q] == '0) begin
-                tos_d[ptr_spec_d] = prev_minus_one;
             end else if (!bad_spec_i && begin_spec_i) begin
                 tos_d[ptr_spec_d] = tos_q[ptr_spec_q];
+                ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q];
             end
         end
     end
@@ -139,16 +133,15 @@ module sras #(
                             stack_q[i];
     end
 
-    initial stack_q = '0;
     always_ff @(posedge clk_i or negedge rst_ni) begin
-        stack_q <= stack_d;
-
         if (~rst_ni) begin
+            stack_q       <= '0;
             ptr_spec_q    <= '0;
             ptr_backup_q  <= '0;
             tos_q         <= '0;
             ovf_counter_q <= '0;
         end else begin
+            stack_q       <= stack_d;
             ptr_spec_q    <= ptr_spec_d;
             ptr_backup_q  <= ptr_backup_d;
             tos_q         <= tos_d;