Axi4SubordinateAgent constructor
- required Axi4SystemInterface sIntf,
- required List<
Axi4Channel> channels, - required Component parent,
- MemoryStorage? storage,
- int readResponseDelay(
- Axi4ReadRequestPacket request
- int writeResponseDelay(
- Axi4WriteRequestPacket request
- bool respondWithError(
- Axi4RequestPacket request
- bool invalidReadDataOnError = true,
- bool dropWriteDataOnError = true,
- List<
AxiAddressRange> ranges = const [], - bool supportLocking = false,
- 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;
}
}
}