diff options
Diffstat (limited to 'hdl')
| -rw-r--r-- | hdl/mem_arbiter.sv | 5 |
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) |
