From b994674c5a12662f24cbb3ac99eb9170b008f903 Mon Sep 17 00:00:00 2001 From: Luke Wren Date: Sat, 20 Aug 2022 18:13:45 +0100 Subject: [PATCH] Cleanup to avoid negative array index (legal but causes whinging) --- hdl/hazard3_csr.v | 4 ++-- hdl/hazard3_frontend.v | 15 +++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/hdl/hazard3_csr.v b/hdl/hazard3_csr.v index 25ad7d6..4ef9675 100644 --- a/hdl/hazard3_csr.v +++ b/hdl/hazard3_csr.v @@ -441,8 +441,8 @@ reg [NUM_IRQS-1:0] eirq_active_above_ppreempt; always @ (*) begin: eirq_compare integer i; for (i = 0; i < NUM_IRQS; i = i + 1) begin - eirq_active_above_preempt[i] = meipa[i] && meiea[i] && meipra[i * 4 +: 4] >= meicontext_preempt; - eirq_active_above_ppreempt[i] = meipa[i] && meiea[i] && meipra[i * 4 +: 4] >= meicontext_ppreempt; + eirq_active_above_preempt[i] = meipa[i] && meiea[i] && {1'b0, meipra[i * 4 +: 4]} >= meicontext_preempt; + eirq_active_above_ppreempt[i] = meipa[i] && meiea[i] && meipra[i * 4 +: 4] >= meicontext_ppreempt; end end diff --git a/hdl/hazard3_frontend.v b/hdl/hazard3_frontend.v index d7627c3..1bb52a7 100644 --- a/hdl/hazard3_frontend.v +++ b/hdl/hazard3_frontend.v @@ -105,10 +105,10 @@ reg [1:0] mem_data_predbranch; // to decode the instruction, but until then can be flushed harmlessly. reg [W_DATA-1:0] fifo_mem [0:FIFO_DEPTH]; -reg [FIFO_DEPTH:0] fifo_err; +reg fifo_err [0:FIFO_DEPTH]; reg [1:0] fifo_predbranch [0:FIFO_DEPTH]; reg [1:0] fifo_valid_hw [0:FIFO_DEPTH]; -reg [FIFO_DEPTH:-1] fifo_valid; +reg fifo_valid [0:FIFO_DEPTH]; wire [W_DATA-1:0] fifo_rdata = fifo_mem[0]; wire fifo_full = fifo_valid[FIFO_DEPTH - 1]; @@ -126,7 +126,6 @@ always @ (*) begin: boundary_conditions fifo_err[FIFO_DEPTH] = 1'b0; fifo_valid_hw[FIFO_DEPTH] = 2'b00; fifo_valid[FIFO_DEPTH] = 1'b0; - fifo_valid[-1] = 1'b1; for (i = 0; i < FIFO_DEPTH; i = i + 1) begin fifo_valid[i] = |EXTENSION_C ? |fifo_valid_hw[i] : fifo_valid_hw[i][0]; end @@ -149,11 +148,11 @@ always @ (posedge clk or negedge rst_n) begin: fifo_update fifo_predbranch[i] <= fifo_valid[i + 1] ? fifo_predbranch[i + 1] : mem_data_predbranch; end fifo_valid_hw[i] <= - jump_now ? 2'h0 : - fifo_valid[i + 1] && fifo_pop ? fifo_valid_hw[i + 1] : - fifo_valid[i] && fifo_pop && !fifo_push ? 2'h0 : - fifo_valid[i] && fifo_pop && fifo_push ? mem_data_hwvld : - !fifo_valid[i] && fifo_valid[i - 1] && fifo_push && !fifo_pop ? mem_data_hwvld : fifo_valid_hw[i]; + jump_now ? 2'h0 : + fifo_valid[i + 1] && fifo_pop ? fifo_valid_hw[i + 1] : + fifo_valid[i] && fifo_pop ? mem_data_hwvld & {2{fifo_push}} : + fifo_valid[i] ? fifo_valid_hw[i] : + fifo_push && !fifo_pop && (i == 0 || fifo_valid[i - |i]) ? mem_data_hwvld : 2'h0; end // Allow DM to inject instructions directly into the lowest-numbered // queue entry. This mux should not extend critical path since it is