mirror of
https://github.com/openhwgroup/cva5.git
synced 2025-04-20 12:07:53 -04:00
writeback frequency improvement
This commit is contained in:
parent
a8d7872c45
commit
e4299bba99
2 changed files with 9 additions and 11 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue