Separate reset domain for RocketTile?

27 Views Asked by At

Is there a way to wire RocketTile to a separate (external) reset signal, so that the tile can be held in reset while the rest of the system is active?

The code seems to support a separate reset domain for the Tile, but there isn't an example of how to make use of it.

1

There are 1 best solutions below

0
Ben On

I found a way to do this (not sure if it's the best way). I added this config:

class WithSeparateReset extends Config((site, here, up) => {
  case RocketCrossingKey => up(RocketCrossingKey, site) map { r =>
    r.copy(forceSeparateClockReset = true)
  }
})

Somehow the build system seems to be smart enough to elide the separate clock since the clock crossing remains synchronous, but an additional hartIsInReset port does get punched out to the system top. Then it can be connected in the testbench like so:

val hart_reset = true.B // As an example, just hold the tile in reset forever
Debug.connectDebug(dut.debug, dut.resetctrl, dut.psd, clock, hart_reset, io.success)