diff --git a/docs/rdl_features/external.rst b/docs/rdl_features/external.rst index aea8e13..5137a73 100644 --- a/docs/rdl_features/external.rst +++ b/docs/rdl_features/external.rst @@ -71,6 +71,9 @@ hwif_in..rd_ack Single-cycle strobe indicating a read transfer has completed. Qualifies all other read response signals. + If the transfer is always completed in the same cycle, it is acceptable to + tie this signal to ``hwif_out..req && !hwif_out..req_is_wr``. + hwif_in..rd_data Read response data. @@ -79,6 +82,9 @@ Write Response hwif_in..wr_ack Single-cycle strobe indicating a write transfer has completed. + If the transfer is always completed in the same cycle, it is acceptable to + tie this signal to ``hwif_out..req && hwif_out..req_is_wr``. + External Blocks diff --git a/src/peakrdl_regblock/module_tmpl.sv b/src/peakrdl_regblock/module_tmpl.sv index 759a954..9aed24f 100644 --- a/src/peakrdl_regblock/module_tmpl.sv +++ b/src/peakrdl_regblock/module_tmpl.sv @@ -56,6 +56,10 @@ module {{ds.module_name}} ( end else begin if(external_req & ~external_wr_ack & ~external_rd_ack) external_pending <= '1; else if(external_wr_ack | external_rd_ack) external_pending <= '0; + assert(external_wr_ack -> (external_pending | external_req)) + else $error("An external wr_ack strobe was asserted when no external request was active"); + assert(external_rd_ack -> (external_pending | external_req)) + else $error("An external rd_ack strobe was asserted when no external request was active"); end end {%- endif %}