Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Timeout events handling #8

Open
dpretet opened this issue Mar 31, 2024 · 0 comments
Open

Feature: Timeout events handling #8

dpretet opened this issue Mar 31, 2024 · 0 comments
Assignees
Labels
enhancement New feature or request

Comments

@dpretet
Copy link
Owner

dpretet commented Mar 31, 2024

Timeout detection and management can be enabled and configured by interface.
This avoids any deadlock if a slave doesn't respond to a request, or if a
master doesn't accept a completion.

The timeout management is done on slave interface (connected to a master agent)
and on master interface (connected on a slave agent). The timeout circuits run in
the clock domain of the switching logic, not on the master pr slave agent clock. So the
timeout counters never require any CDC stages.

The timers could be implemented in different manners:

  • With a shared counter implement millisecond or microsecond time reference,
    configurable based on the platform clock speed, spreading all the master and slave interface.
    Then all the master / slave interfaces would also implement a (small) local counter to measure
    timeout. This solution allows a compact implementation but is not very precise.
  • With a (wide) local counter in each master/slave interface. This solution will be very precise but require
    more area.

Time out events may occur on slave interface (connected to a master agent)
and on master interface (connected on a slave agent). Timeout events can occur
only inside the core (on switching logic) and/or with slave agents. The interconnect
will always accept new request if internal buffer are not full.

Timeout events can occur:

  • between slave interface and master interface for address/data channels (internal)
  • between master interface and slave interface for write completion channel (internal)
  • between master interface and slave interface for read data channel (internal)
  • between master interface interface and a slave agent for address/data channels (external)
  • between slave agent and a master interface for write completion channel (external)
  • between slave agent and a master interface for read data channel (external)

A timeout event must:

  • be marked with SLVERR in completion channel
  • drives a request / completion interface to free it

The core's behavior ensures the agents can continue to operate, but can't ensure
the whole system will still be operational. The user needs to correctly manage
these situations by communicating with a defecting slave or master and reboot it.

It would be suitable the axe-interconnect core implements a debug interface to stream
such event and inform the SOC's root master. In critical issue, the root master may reboot
the system.

@dpretet dpretet added the enhancement New feature or request label Mar 31, 2024
@dpretet dpretet self-assigned this Mar 31, 2024
@dpretet dpretet changed the title Feature: Timeout Events Handling Feature: Timeout events handling Oct 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant