Вдруг возникла на первый взгляд простейшая задача, но при попытке реализации "уткнулся в стену" - ничего разумного в голову не приходит

. Может у кого-то что-то подобное уже было (есть) или будут удачные мысли

.
Задача в следующем:
- есть черный ящик с
- n входами In(0) ... In(n-1)
- m выходами Out(0) ... Out(m-1)
- n-битовая управляющая шина C(0) ... C(n-1)
- количество активных ("1") бит на шине С всегда меньше или равно m (если это не соблюдается, то желательно выставлять сигнал ошибки, но это не проблема)
- требуется
- для каждого активного бита из С (например C(k)) подключать соответствующий вход In (в данном случае In(k)) к любому из выходов Out (я написал к "любому", но можно и более определенно - если C(k) является наименее значимым (LSB) из всех активных битов - то подключать к Out(0), для следующего активного бита - к Out(1) и так далее, хотя это несущественно).
Реальные значения для моей задачи таковы:
- максимальное
n - 32
- максимальное
m - 8
- ширина шин In и Out - 64 бита (а может и 72 - пока не решил)
Хочется все это сделать на комбинаторной логике, а не на State Machine - второй вариант тривиален, но потребует буферирования на FIFO всех 32-х входных каналов, чего хочется избежать любыми способами из-за ограничений силикона, и достаточно экономично (по тем-же причинам). Но на данный момент я не могу придумать не только экономичного решения, но вааще никакого, так что