Skip to content

Make nodes boot independently #1106

@martijnbastiaan

Description

@martijnbastiaan

After merging #1100, we'll have all our boot/reset logic in software which will make it much easier to work with. That PR doesn't change the reset logic in any way, it just moves it around. It currently works as follows:

  1. "Boot" CPU
    1. Gets programmed by the host
    2. Programs the clock boards
    3. Gets transceiver block out of reset (enabling the bittide domain / other CPUs)
    4. Activates each transceiver channel and waits until they've negotiated a link with their neighbors.
    5. Prints "all done" message to UART.
  2. Clock control CPU
    1. Gets programmed by the host
    2. Calibrates clocks
    3. Prints "all done" message to UART.
    4. (Keeps calibrating clocks.)
  3. Management unit CPU
    1. Gets programmed by the host
    2. Centers elastic buffers
    3. Sets the channels to "user" mode. This makes the channels accept data from the outside world instead of their negotiation state machinery.
    4. Prints UGNs captured by hardware component to UART.

The host would typically move on to program a demo/test, but that's out of scope for this issue. In any case, all these steps are sequential:

Image

I.e., there is a hard cut-off point at waiting for all transceiver channels to come up and another one waiting for all clocks to become stable. Ideally, the diagram would look like this:

Image

To get there, we have to do two things:

  • Remove the "channels ok" cut-off point. Clock control needs to only operate on active channels. The current software already accounts for this, we just need to make sure that that link mask reaches the software correctly.
  • Remove the "everything calibrated" cut-off point. This one is more tricky as we're balancing two requirements: all our components are placed after elastic buffers and capturing the UGN relies on capturing the very first "real" word out of the EB. To keep the UGNs valid buffers can't overflow, but if we remove the cut-off point clock frequencies won't be stable yet so they naturally will. The MUs will have to continuously move the elastic buffers to their midpoints and keep track of how many elements they remove/add and adjust the UGNs accordingly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions