CsrTop constructor
- required CsrTopConfig config,
- required Logic clk,
- required Logic reset,
- required DataPortInterface? frontWrite,
- required DataPortInterface? frontRead,
- bool allowLargerRegisters = false,
- int logicalRegisterIncrement = 1,
- bool reserveName = false,
- bool reserveDefinitionName = false,
- String? definitionName,
Create the CsrBlock from a configuration
Implementation
CsrTop(
{required CsrTopConfig super.config,
required super.clk,
required super.reset,
required super.frontWrite,
required super.frontRead,
super.allowLargerRegisters,
this.logicalRegisterIncrement = 1,
super.reserveName,
super.reserveDefinitionName,
String? definitionName})
: super(
definitionName: definitionName ??
'CsrTop_A${config.minAddrBits()}_'
'W${config.maxRegWidth()}_'
'BO${config.blockOffsetWidth}_'
'LR${allowLargerRegisters}_'
'RI$logicalRegisterIncrement') {
_validate();
for (final block in config.blocks) {
DataPortInterface? blockFdWrite;
DataPortInterface? blockFdRead;
if (frontWritePresent) {
blockFdWrite =
DataPortInterface(frontWrite!.dataWidth, blockOffsetWidth);
_fdWrites.add(blockFdWrite);
}
if (frontReadPresent) {
blockFdRead = DataPortInterface(frontRead!.dataWidth, blockOffsetWidth);
_fdReads.add(blockFdRead);
}
_blocks.add(CsrBlock(
config: block,
clk: clk,
reset: reset,
frontWrite: blockFdWrite,
frontRead: blockFdRead,
allowLargerRegisters: allowLargerRegisters));
}
for (var i = 0; i < blocks.length; i++) {
_backdoorInterfaces.add([]);
backdoorInterfaces.add([]);
_backdoorIndexMaps.add({});
for (var j = 0; j < blocks[i].registers.length; j++) {
if (blocks[i].registers[j].backdoorAccessible) {
_backdoorInterfaces[i]
.add(CsrBackdoorInterface(config: blocks[i].registers[j]));
backdoorInterfaces[i]
.add(CsrBackdoorInterface(config: blocks[i].registers[j]));
_backdoorInterfaces[i].last.connectIO(
this, backdoorInterfaces[i].last,
outputTags: {CsrBackdoorPortGroup.read},
inputTags: {CsrBackdoorPortGroup.write},
uniquify: (original) =>
'${name}_${blocks[i].name}_${blocks[i].registers[j].name}'
'_backdoor_$original');
_backdoorIndexMaps[i][j] = _backdoorInterfaces[i].length - 1;
}
}
}
_buildLogic();
}