CsrBlock constructor

CsrBlock({
  1. required CsrBlockConfig config,
  2. required Logic clk,
  3. required Logic reset,
  4. required DataPortInterface? frontWrite,
  5. required DataPortInterface? frontRead,
  6. bool allowLargerRegisters = false,
  7. int logicalRegisterIncrement = 1,
  8. bool reserveName = false,
  9. bool reserveDefinitionName = false,
  10. String? definitionName,
})

Constructor for a CSR block.

Implementation

CsrBlock({
  required CsrBlockConfig 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,
})  : csrs = List.unmodifiable(config.registers.map(Csr.new)),
      super(
          definitionName: definitionName ?? 'CsrBlock_${config.name}_block') {
  _validate();

  for (var i = 0; i < csrs.length; i++) {
    if (csrs[i].config.backdoorAccessible) {
      _backdoorInterfaces.add(CsrBackdoorInterface(config: csrs[i].config));
      backdoorInterfaces.add(CsrBackdoorInterface(config: csrs[i].config));
      _backdoorInterfaces.last.connectIO(this, backdoorInterfaces.last,
          outputTags: {CsrBackdoorPortGroup.read},
          inputTags: {CsrBackdoorPortGroup.write},
          uniquify: (original) =>
              '${name}_${csrs[i].config.name}_backdoor_$original');
      _backdoorIndexMap[i] = _backdoorInterfaces.length - 1;
    }
  }

  _buildLogic();
}