diff options
Diffstat (limited to '')
| -rw-r--r-- | hdl/defs.svh | 2 | ||||
| -rw-r--r-- | hdl/mem_arbiter.sv | 24 |
2 files changed, 12 insertions, 14 deletions
diff --git a/hdl/defs.svh b/hdl/defs.svh index 3206764..f4590c8 100644 --- a/hdl/defs.svh +++ b/hdl/defs.svh | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | 5 | ||
| 6 | `define PDP_ADDRESS_BITS 15 | 6 | `define PDP_ADDRESS_BITS 15 |
| 7 | 7 | ||
| 8 | `define NUM_PDPS 2 | 8 | `define NUM_PDPS 16 |
| 9 | 9 | ||
| 10 | `define UART_BYTE_BITS 8 | 10 | `define UART_BYTE_BITS 8 |
| 11 | 11 | ||
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; |
