Skip to content

Core reset address change during reset window is not detected #36

@mekarlst

Description

@mekarlst

If the core_complex::reset_address parameter changes while reset is asserted, it does not get applied when reset de-asserts. It appears to stem from this logic:

template <unsigned int BUSWIDTH, typename QK> void core_complex<BUSWIDTH, QK>::run() {
    reset(GET_PROP_VALUE(reset_address));
    wait(SC_ZERO_TIME); // separate from elaboration phase
    do {
        wait(SC_ZERO_TIME);
        if(rst_i.read()) {
            reset(GET_PROP_VALUE(reset_address));  // Should this get moved after the wait?
            wait(rst_i.negedge_event());
        }
        ...

The internal reset call is made with the existing value of reset_address before entering the wait for the reset de-assertion. Once the negedge event is detected, any change to reset_address that may have occurred during the reset window is ignored.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions