writeback frequency improvement

This commit is contained in:
Eric Matthews 2019-08-28 16:57:47 -07:00
parent a8d7872c45
commit e4299bba99
2 changed files with 9 additions and 11 deletions

View file

@ -67,7 +67,7 @@ module id_stack # (
generate begin
genvar i;
assign store_shift_bits[0] = 1;
assign retired_shift_bits[0] = retired;
assign retired_shift_bits[0] = 1;
for (i=1; i<STACK_DEPTH; i++) begin
assign store_shift_bits[i] = |store_done_ordered[STACK_DEPTH-1:i];
assign retired_shift_bits[i] = |id_done_ordered[STACK_DEPTH-1:i];
@ -93,7 +93,7 @@ module id_stack # (
retired_store_shiffted_stack[STACK_DEPTH-1:1] = store_shiffted_stack[STACK_DEPTH-2:0];
retired_store_shiffted_stack[0] = retired_id;
foreach (new_stack[i]) begin
new_stack[i] = (retired_shift_bits[i]) ? retired_store_shiffted_stack[i] : store_shiffted_stack[i];
new_stack[i] = (retired & retired_shift_bits[i]) ? retired_store_shiffted_stack[i] : store_shiffted_stack[i];
end
end

View file

@ -63,6 +63,7 @@ module write_back(
logic [MAX_INFLIGHT_COUNT-1:0] id_done_r;
logic [MAX_INFLIGHT_COUNT-1:0] id_done_ordered;
logic [MAX_INFLIGHT_COUNT-1:0] id_done_ordered_post_store;
logic retired, retired_r;
logic first_cycle_completion_abort;
@ -88,7 +89,7 @@ module write_back(
.retired(retired),
.store_committed(store_committed),
.store_id(store_id),
.id_done_ordered(id_done_ordered),
.id_done_ordered(id_done_ordered_post_store),
.retired_id(retired_id),
.ordering(id_ordering),
.ordering_post_store(id_ordering_post_store),
@ -151,19 +152,16 @@ module write_back(
//Find oldest done.
always_comb begin
foreach (id_done[i]) begin
id_done_ordered[i] = id_done[id_ordering_post_store[i]];
id_done_ordered[i] = id_done[id_ordering[i]];
id_done_ordered_post_store[i] = id_done[id_ordering_post_store[i]];
end
retired_id = id_ordering_post_store[MAX_INFLIGHT_COUNT-1];
retired_id = id_ordering[MAX_INFLIGHT_COUNT-1];
for (int i=MAX_INFLIGHT_COUNT-1; i>0; i--) begin
if (id_done_ordered[i])
if (inorder | id_done_ordered[i])
break;
retired_id = id_ordering_post_store[i-1];
retired_id = id_ordering[i-1];
end
if (inorder)
retired_id = id_ordering_post_store[MAX_INFLIGHT_COUNT-1];
end
//Read table for unit ID (acks, and rd_addr for register file)