summaryrefslogtreecommitdiff
path: root/hdl/mem_arbiter.sv
diff options
context:
space:
mode:
Diffstat (limited to 'hdl/mem_arbiter.sv')
-rw-r--r--hdl/mem_arbiter.sv5
1 files changed, 4 insertions, 1 deletions
diff --git a/hdl/mem_arbiter.sv b/hdl/mem_arbiter.sv
index 1404a54..e39317d 100644
--- a/hdl/mem_arbiter.sv
+++ b/hdl/mem_arbiter.sv
@@ -32,12 +32,15 @@ module mem_arbiter
32 hold_valid[i] = 0; 32 hold_valid[i] = 0;
33 selector = 0; 33 selector = 0;
34 end else begin 34 end else begin
35 automatic bit selector_stale = 0;
36
35 if (ram_ready) ram_valid = 0; 37 if (ram_ready) ram_valid = 0;
36 38
37 if (!ram_valid && hold_valid[selector]) begin 39 if (!ram_valid && hold_valid[selector]) begin
38 ram_valid = 1; 40 ram_valid = 1;
39 ram_data = hold_data[selector]; 41 ram_data = hold_data[selector];
40 hold_valid[selector] = 0; 42 hold_valid[selector] = 0;
43 selector_stale = 1;
41 end 44 end
42 45
43 if (hold_valid == 0) begin 46 if (hold_valid == 0) begin
@@ -59,7 +62,7 @@ module mem_arbiter
59 end 62 end
60 end 63 end
61 64
62 if (hold_valid != 0) begin 65 if (hold_valid != 0 && (selector_stale || !ram_valid)) begin
63 for (int i = 0; i < `NUM_PDPS+1; ++i) begin 66 for (int i = 0; i < `NUM_PDPS+1; ++i) begin
64 automatic int j = selector + i; 67 automatic int j = selector + i;
65 if (j > `NUM_PDPS) 68 if (j > `NUM_PDPS)