From cc38f4684885a035a089311f3cda1c2998b25e57 Mon Sep 17 00:00:00 2001 From: Luke Wren Date: Mon, 6 Dec 2021 07:27:57 +0000 Subject: [PATCH] Fix AMO wdata valid left high when entering trap at just the right time --- hdl/hazard3_core.v | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hdl/hazard3_core.v b/hdl/hazard3_core.v index 79dbd0f..98e5095 100644 --- a/hdl/hazard3_core.v +++ b/hdl/hazard3_core.v @@ -794,12 +794,13 @@ if (EXTENSION_A) begin: has_amo_alu amo_memop <= MEMOP_NONE; amo_load_data <= {W_DATA{1'b0}}; m_amo_wdata_valid_r <= 1'b0; + end else if (x_amo_phase == 3'h4 || (x_amo_phase == 3'h3 && bus_dph_ready_d) || m_trap_enter_soon) begin + // Higher precedence to make sure trap always clears the valid bit + m_amo_wdata_valid_r <= 1'b0; end else if (d_memop_is_amo && x_amo_phase == 3'h1 && bus_dph_ready_d) begin amo_memop <= d_memop; amo_load_data <= bus_rdata_d; m_amo_wdata_valid_r <= 1'b1; - end else if (x_amo_phase == 3'h4 || (x_amo_phase == 3'h3 && bus_dph_ready_d) || m_trap_enter_soon) begin - m_amo_wdata_valid_r <= 1'b0; end end