run method

  1. @override
Future<void> run(
  1. Phase phase
)
override

Executes this Component's activities related to running the test.

Overrides of run must call super.run in an unawaited fashion. For example:

@override
Future<void> run(Phase phase) async {
  unawaited(super.run(phase));
  // New code goes here!
}

Implementation

@override
Future<void> run(Phase phase) async {
  unawaited(super.run(phase));

  sIntf.resetN.negedge.listen((event) {
    storage.reset();
    for (var i = 0; i < lanes.length; i++) {
      // read side reset
      _dataReadResponseMetadataQueue[_readAddrToChannel[i]!].clear();
      _dataReadResponseDataQueue[_readAddrToChannel[i]!].clear();
      // _dataReadResponseErrorQueue[_readAddrToChannel[i]!].clear();
      _dataReadResponseIndex[_readAddrToChannel[i]!] = 0;

      // write side reset
      _writeMetadataQueue[_writeAddrToChannel[i]!].clear();
      _writeDataQueue[_writeAddrToChannel[i]!].clear();
      _writeReadyToOccur[_writeAddrToChannel[i]!] = false;
    }
  });

  // register listeners on requests
  //  AR (read request)
  //  AW (write request)
  //  W (write request data)
  for (var i = 0; i < lanes.length; i++) {
    lanes[i]
        .writeAgent
        .reqAgent
        .monitor
        .stream
        .listen((d) => _receiveWrite(packet: d, index: i));
    lanes[i]
        .writeAgent
        .dataAgent
        .monitor
        .stream
        .listen((d) => _captureWriteData(packet: d, index: i));
    lanes[i]
        .readAgent
        .reqAgent
        .monitor
        .stream
        .listen((d) => _receiveRead(packet: d, index: i));
  }

  // wait for reset to complete
  await sIntf.resetN.nextPosedge;

  // handle responding to requests
  while (!Simulator.simulationHasEnded) {
    await sIntf.clk.nextNegedge;
    for (var i = 0; i < lanes.length; i++) {
      // write handling should come before reads for the edge case in which a
      // read happens in the cycle after the final WVALID for the same
      // channel/address
      // _driveWriteReadys(index: i);
      _respondWrite(index: i);
      // _captureWriteData(index: i);
      // _receiveWrite(index: i);

      // deal with reads after writes
      // _driveReadReadys(index: i);
      _respondRead(index: i);
      // _receiveRead(index: i);
    }
  }
}