Non-supported parameter combination (PMP + INSTR_RDATA_WIDTH=128)
Created by: Silabs-ArjanB
Git tag: eae1cabc (august 5 2019) Parameters: INSTR_RDATA_WIDTH = 128, PULP_SECURE = 1, USE_PMP = 1
RI5CY can be (compile-time) configured to have a 32-bit wide instr_rdata_i interface (when INSTR_RDATA_WIDTH = 32) or a 128-bit wide instr_rdata_i interface (when INSTR_RDATA_WIDTH = 128). The INSTR_RDATA_WIDTH parameter also determines which prefetch module is instantiated (respectively riscv_prefetch_buffer or riscv_prefetch_L0_buffer).
The riscv_prefetch_L0_buffer does not receive/handle the riscv_if_stage instr_err_pmp_i signal and when used the the fetch_failed signal is always tied low, so if the PMP is programmed to filter certain instruction accesses, then acceses will get filtered, but no instruction error will be raised.
It is not clear whether the intention is to support Instruction PMP when INSTR_RDATA_WIDTH = 128 or not, but unfortunately the parameter settings of tb/core/tb_top.sv are such that this scenario occurs.
There seem to be three basic options: • Document that ‘Instruction PMP’ filtering is not supported when INSTR_RDATA_WIDTH = 128 • Document that USE_PMP = 1 is not supported when INSTR_RDATA_WIDTH = 128 • Update riscv_prefetch_L0_buffer to deal with instruction errors