Axi4SubordinateAgent constructor

Axi4SubordinateAgent({
  1. required Axi4SystemInterface sIntf,
  2. required List<Axi4Channel> channels,
  3. required Component parent,
  4. MemoryStorage? storage,
  5. int readResponseDelay(
    1. Axi4ReadRequestPacket request
    )?,
  6. int writeResponseDelay(
    1. Axi4WriteRequestPacket request
    )?,
  7. bool respondWithError(
    1. Axi4RequestPacket request
    )?,
  8. bool invalidReadDataOnError = true,
  9. bool dropWriteDataOnError = true,
  10. List<AxiAddressRange> ranges = const [],
  11. bool supportLocking = false,
  12. String name = 'axi4SubordinateAgent',
})

Creates a new model Axi4SubordinateAgent.

If no storage is provided, it will use a default SparseMemoryStorage.

Implementation

Axi4SubordinateAgent(
    {required this.sIntf,
    required this.channels,
    required Component parent,
    MemoryStorage? storage,
    this.readResponseDelay,
    this.writeResponseDelay,
    this.respondWithError,
    this.invalidReadDataOnError = true,
    this.dropWriteDataOnError = true,
    this.ranges = const [],
    this.supportLocking = false,
    String name = 'axi4SubordinateAgent'})
    : super(name, parent) {
  var maxAddrWidth = 0;
  var maxDataWidth = 0;
  for (var i = 0; i < channels.length; i++) {
    if (channels[i].hasRead) {
      maxAddrWidth = max(maxAddrWidth, channels[i].rIntf!.addrWidth);
      maxDataWidth = max(maxDataWidth, channels[i].rIntf!.dataWidth);
    }
    if (channels[i].hasWrite) {
      maxAddrWidth = max(maxAddrWidth, channels[i].wIntf!.addrWidth);
      maxDataWidth = max(maxDataWidth, channels[i].wIntf!.dataWidth);
    }
  }

  this.storage = storage ??
      SparseMemoryStorage(
        addrWidth: maxAddrWidth,
        dataWidth: maxDataWidth,
      );
  for (var i = 0; i < channels.length; i++) {
    if (channels[i].hasRead) {
      _dataReadResponseMetadataQueue.add([]);
      _dataReadResponseDataQueue.add([]);
      // _dataReadResponseErrorQueue.add([]);
      _dataReadResponseIndex.add(0);
      _readAddrToChannel[i] = _dataReadResponseMetadataQueue.length - 1;
    }
    if (channels[i].hasWrite) {
      _writeMetadataQueue.add([]);
      _writeReadyToOccur.add(false);
      _writeAddrToChannel[i] = _writeMetadataQueue.length - 1;
    }
  }
}