From c7a32c4d00a3105013c2f1f5437fc6bb0e5a2a3e Mon Sep 17 00:00:00 2001 From: Luke Wren Date: Sun, 3 Jul 2022 19:02:30 +0100 Subject: [PATCH] SBA: fix alignment check using a stale address when the trigger is an sbaddress write. Fix new transfers being allowed to start when sberror or sbbusyerror are set. --- hdl/debug/dm/hazard3_dm.v | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/hdl/debug/dm/hazard3_dm.v b/hdl/debug/dm/hazard3_dm.v index 6a1520f..db9a37d 100644 --- a/hdl/debug/dm/hazard3_dm.v +++ b/hdl/debug/dm/hazard3_dm.v @@ -368,9 +368,12 @@ wire sb_want_start_read = (sbreadonaddr && dmi_write && dmi_regaddr == ADDR_SBADDRESS0) || (sbreadondata && dmi_read && dmi_regaddr == ADDR_SBDATA0); +wire [1:0] sb_next_align = sbreadonaddr && dmi_write && dmi_regaddr == ADDR_SBADDRESS0 ? + dmi_pwdata[1:0] : sbaddress[1:0]; + wire sb_badalign = - (sbaccess == 3'h1 && sbaddress[0]) || - (sbaccess == 3'h2 && |sbaddress[1:0]); + (sbaccess == 3'h1 && sb_next_align[0]) || + (sbaccess == 3'h2 && |sb_next_align[1:0]); wire sb_badsize = sbaccess > 3'h2; @@ -413,7 +416,7 @@ always @ (posedge clk or negedge rst_n) begin sberror <= SBERROR_BADADDR; end end - end else if (sb_want_start_read || sb_want_start_write) begin + end else if (sb_want_start_read || sb_want_start_write && ~|sberror && !sbbusyerror) begin if (sb_badsize) begin sberror <= SBERROR_BADSIZE; end else if (sb_badalign) begin