RecursiveModulePriorityEncoder constructor

RecursiveModulePriorityEncoder(
  1. Logic inp, {
  2. Logic? valid,
  3. String name = 'recursive_module_priority_encoder',
})

RecursiveModulePriorityEncoder constructor builds a tree of RecursiveModulePriorityEncoderNodes to compute the position of the trailing 1 from the LSB of inp.

Implementation

RecursiveModulePriorityEncoder(super.inp,
    {super.valid, super.name = 'recursive_module_priority_encoder'})
    : super(definitionName: 'RecursiveModulePriorityEncoder_W${inp.width}') {
  final topNode = RecursiveModulePriorityEncoderNode(inp.elements);
  final lo = topNode.ret;
  if (valid != null) {
    valid! <= topNode.ret.lt(inp.width);
  }
  final sz = output('out').width;
  output('out') <= ((lo.width < sz) ? lo.zeroExtend(sz) : lo.getRange(0, sz));
}