Skip to content
Snippets Groups Projects
Commit 7dfbc2e8 authored by Alban Gruin's avatar Alban Gruin
Browse files

sras: improve segmented RAS ressource usage


Signed-off-by: default avatarAlban Gruin <alban.gruin@irit.fr>
parent e5893b6f
Branches
Tags
No related merge requests found
...@@ -48,13 +48,19 @@ module sras #( ...@@ -48,13 +48,19 @@ module sras #(
assign pp_plus_one = tos_q[ptr_spec_q] + 1'b1; assign pp_plus_one = tos_q[ptr_spec_q] + 1'b1;
assign prev_minus_one = previous_tos - 1'b1; assign prev_minus_one = previous_tos - 1'b1;
for (genvar i = 0; i < SpecDepth; i++) begin always_comb begin
assign tos_d[i] = (flush_i) ? '0 : tos_d = tos_q;
(i == ptr_spec_d && push_i && !pop_i) ? prev_plus_one :
(i == ptr_spec_q && push_i && !pop_i) ? pp_plus_one : if (flush_i) begin
(i == ptr_spec_d && !push_i && pop_i) ? prev_minus_one : tos_d = '0;
(i == ptr_spec_d && !bad_spec_i && begin_spec_i) ? tos_q[ptr_spec_q] : end else if (push_i && !pop_i) begin
tos_q[i]; tos_d[ptr_spec_d] = prev_plus_one;
tos_d[ptr_spec_q] = pp_plus_one;
end else if (!push_i && pop_i) 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];
end
end end
assign data_o = stack_q[previous_tos_addr][previous_tos]; assign data_o = stack_q[previous_tos_addr][previous_tos];
...@@ -65,14 +71,28 @@ module sras #( ...@@ -65,14 +71,28 @@ module sras #(
ariane_pkg::ras_t [DEPTH-1:0] new_stack, prev_stack; ariane_pkg::ras_t [DEPTH-1:0] new_stack, prev_stack;
for (genvar i = 0; i < DEPTH; i++) begin always_comb begin
assign new_stack[i] = ((i == previous_tos && pop_i) || new_stack = stack_q[ptr_spec_d];
(i == prev_plus_one && push_i)) ? to_push :
(!bad_spec_i && begin_spec_i) ? stack_q[ptr_spec_q][i] : if (!bad_spec_i && begin_spec_i) begin
stack_q[ptr_spec_d][i]; new_stack = stack_q[ptr_spec_q];
end
if (pop_i) begin
new_stack[previous_tos] = to_push;
end
assign prev_stack[i] = (i == pp_plus_one && push_i) ? to_push : if (push_i) begin
stack_q[ptr_spec_q][i]; new_stack[prev_plus_one] = to_push;
end
end
always_comb begin
prev_stack = stack_q[ptr_spec_q];
if (push_i) begin
prev_stack[pp_plus_one] = to_push;
end
end end
for (genvar i = 0; i < SpecDepth; i++) begin for (genvar i = 0; i < SpecDepth; i++) begin
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment