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.sv24
1 files changed, 11 insertions, 13 deletions
diff --git a/hdl/mem_arbiter.sv b/hdl/mem_arbiter.sv
index a48f96d..1404a54 100644
--- a/hdl/mem_arbiter.sv
+++ b/hdl/mem_arbiter.sv
@@ -34,6 +34,12 @@ module mem_arbiter
34 end else begin 34 end else begin
35 if (ram_ready) ram_valid = 0; 35 if (ram_ready) ram_valid = 0;
36 36
37 if (!ram_valid && hold_valid[selector]) begin
38 ram_valid = 1;
39 ram_data = hold_data[selector];
40 hold_valid[selector] = 0;
41 end
42
37 if (hold_valid == 0) begin 43 if (hold_valid == 0) begin
38 if (command_ready && command_valid) begin 44 if (command_ready && command_valid) begin
39 hold_valid[0] = 1; 45 hold_valid[0] = 1;
@@ -54,25 +60,17 @@ module mem_arbiter
54 end 60 end
55 61
56 if (hold_valid != 0) begin 62 if (hold_valid != 0) begin
57 automatic bit ram_was_valid = ram_valid;
58 for (int i = 0; i < `NUM_PDPS+1; ++i) begin 63 for (int i = 0; i < `NUM_PDPS+1; ++i) begin
59 automatic int j = selector + i; 64 automatic int j = selector + i;
60 if (j > `NUM_PDPS) j = j - (`NUM_PDPS+1); 65 if (j > `NUM_PDPS)
61 if (!ram_valid && hold_valid[j]) begin 66 j -= `NUM_PDPS+1;
62 ram_valid = 1; 67 if (hold_valid[j]) begin
63 ram_data = hold_data[j]; 68 selector = j;
64 hold_valid[j] = 0; 69 break;
65 end 70 end
66 end 71 end
67 if (ram_valid && !ram_was_valid) begin
68 if (selector == `NUM_PDPS)
69 selector = 0;
70 else
71 ++selector;
72 end
73 end 72 end
74 73
75
76 command_ready = hold_valid == 0; 74 command_ready = hold_valid == 0;
77 for (int i = 0; i < `NUM_PDPS; ++i) 75 for (int i = 0; i < `NUM_PDPS; ++i)
78 pdp_ready[i] = hold_valid == 0; 76 pdp_ready[i] = hold_valid == 0;