PriorityArbiter constructor

PriorityArbiter(
  1. List<Logic> requests, {
  2. String name = 'priority_arbiter',
  3. bool reserveName = false,
  4. bool reserveDefinitionName = false,
  5. String? definitionName,
})

Constructs an arbiter where the grant is given to the lowest-indexed request.

Implementation

PriorityArbiter(super.requests,
    {super.name = 'priority_arbiter',
    super.reserveName,
    super.reserveDefinitionName,
    String? definitionName})
    : super(
          definitionName:
              definitionName ?? 'PriorityArbiter_W${requests.length}') {
  Combinational([
    CaseZ(requests.rswizzle(), conditionalType: ConditionalType.priority, [
      for (var i = 0; i < count; i++)
        CaseItem(
          Const(
            LogicValue.filled(count, LogicValue.z).withSet(i, LogicValue.one),
          ),
          [for (var g = 0; g < count; g++) grants[g] < (i == g ? 1 : 0)],
        )
    ], defaultItem: [
      for (var g = 0; g < count; g++) grants[g] < 0
    ]),
  ]);
}