Skip to content

WFE/WFI in wb + pending irq can cause interrupt to be missed #403

@silabs-hfegran

Description

@silabs-hfegran

WFE/WFI in wb + IRQ can cause interrupt to be missed

An wfi/wfe in wb while there is a pending and enabled interrupt for one cycle causes interrupt to be missed. In the example below the second pending and enabled interrupt wakes up the core and is taken.

Steps to Reproduce

  1. git hash: df6c2cd
  2. Assertion:
    property p_higher_lvl_than_mintthresh_th_can_preempt;
            clic.irq
        ##1 ($past(clic.priv) == current_priv_mode)
        &&  ($past(clic.level) > effective_clic_level)
        &&  mstatus_fields.mie
        &&  is_interrupt_allowed == 1'b1
      |->
            irq_ack
      or
            rvfi_valid[->1:2]
        ##0 rvfi_dbg_mode
      or
            rvfi_valid[->1:2]
        ##0 rvfi_intr.exception
      or
            rvfi_valid[->1:2]
        ##0 rvfi_trap.exception
      or
            rvfi_valid[->1:2]
        ##0 is_cause_nmi
      ;
    endproperty : p_higher_lvl_than_mintthresh_th_can_preempt

    a_higher_lvl_than_mintthresh_th_can_preempt: assert property(p_higher_lvl_than_mintthresh_th_can_preempt)
    else
      `uvm_error(info_tag,
        $sformatf("Higher level than mintthresh should be able to interrupt"));

  1. Logfile and/or wave-dump info (screen shots can be useful)
    image

Metadata

Metadata

Labels

Component:OtherNon-RTL, non-documentation (e.g. bhv, sva)Status:ResolvedIssue has been resolved, but closure is pending on git merge and/or issuer confirmationType:BugFor bugs in any content (RTL, Documentation, etc.)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions