Error response for unmapped address or forbidden read/write access (#168)
* feat: add ability to enable error output on the cpuif, when decoding errors occur (generate_cpuif_err in API). * fix: move signal to new place (after automatic vers) * feat: add info about new api (generate_cpuif_err) * fix: repair readback with latency * Adding generate_cpuif_err argument to peakrdl-regblock to generate cpuif error response, when the address is decoded incorrectly * add sw rd or/and wr attribure error response related and add error respone for external mem * add sw rd or/and wr error response test * add sw rd or/and wr error response for external register test and fix generation of rtl logic for external register * add sw rd or/and wr error response for external mem test * add sw rd or/and wr error response for apb3 imterfaces driver * add error response test for APB4, AXI4Lite and Avalon interfaces * rename --generate_cpuif_err to --generate-cpuif-err * style: minor typo fixes and test clean-up * refactor: move expected error check inside write/read functions * feat: add error response check to OBI testbench interface * feat: split generate-cpuif-err option into err-if-bad-addr and err-if-bad-rw options * feat: add err_if_bad_addr/rw to cfg_schema * feat: extend cpuif_err_rsp test to cover all combinations of bad_addr/bad_rw * style: lint fixes * fix: removed redundant if node.external condition to help coverage * Fix dangling hwif_in signals in testcase --------- Co-authored-by: Denis Trifonov <d.trifonov@yadro.com> Co-authored-by: Dominik Tanous <tanous@kandou.com> Co-authored-by: Sebastien Baillou <baillou@kandou.com> Co-authored-by: Alex Mykyta <amykyta3@users.noreply.github.com>
This commit is contained in:
@@ -126,6 +126,7 @@ module {{ds.module_name}}
|
||||
//--------------------------------------------------------------------------
|
||||
{{address_decode.get_strobe_struct()|indent}}
|
||||
decoded_reg_strb_t decoded_reg_strb;
|
||||
logic decoded_err;
|
||||
{%- if ds.has_external_addressable %}
|
||||
logic decoded_strb_is_external;
|
||||
{% endif %}
|
||||
@@ -138,11 +139,20 @@ module {{ds.module_name}}
|
||||
logic [{{cpuif.data_width-1}}:0] decoded_wr_biten;
|
||||
|
||||
always_comb begin
|
||||
automatic logic is_valid_addr;
|
||||
automatic logic is_invalid_rw;
|
||||
{%- if ds.has_external_addressable %}
|
||||
automatic logic is_external;
|
||||
is_external = '0;
|
||||
{%- endif %}
|
||||
{%- if ds.err_if_bad_addr %}
|
||||
is_valid_addr = '0;
|
||||
{%- else %}
|
||||
is_valid_addr = '1; // No error checking on valid address access
|
||||
{%- endif %}
|
||||
is_invalid_rw = '0;
|
||||
{{address_decode.get_implementation()|indent(8)}}
|
||||
decoded_err = (~is_valid_addr | is_invalid_rw) & decoded_req;
|
||||
{%- if ds.has_external_addressable %}
|
||||
decoded_strb_is_external = is_external;
|
||||
external_req = is_external;
|
||||
@@ -225,7 +235,11 @@ module {{ds.module_name}}
|
||||
assign cpuif_wr_ack = decoded_req & decoded_req_is_wr;
|
||||
{%- endif %}
|
||||
// Writes are always granted with no error response
|
||||
{%- if ds.err_if_bad_addr or ds.err_if_bad_rw %}
|
||||
assign cpuif_wr_err = decoded_err;
|
||||
{%- else %}
|
||||
assign cpuif_wr_err = '0;
|
||||
{%- endif %}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Readback
|
||||
|
||||
Reference in New Issue
Block a user