Есть несколько тысяч однобитных сигналов. В каждом цикле любое их количество может быть активным. Надо последовательно перебрать все входы, и при "1" на входе, на выходе надо подать номер входящего сигнала и строб DATARDY. И так пока все активные сигналы не будут переданы. После чего выставляем строб готовности, защелкиваем новое состояние входов и повторяем процесс. Такой себе демультиплексер, только с поддержкой множественных активных сигналов. Ситуация осложняется тем, что в среднем активных сигналов будет меньше 10% от общего количества. Поэтому было бы хорошо сократить число циклов, необходимых для просмотра всех входов. Мои идеи:
- Машиной состояний пройтись в цикле по всем входам. Никакой оптимизации, количество циклов всегда постоянно и не зависит от входов.
- при помощи конструктива for i in 0 to n_inputs loop пройтись только по активным входам. К сожалению, я сомневаюсь что на несколько тысяч входных сигналов цикл сгенерирует хороший дизайн.
- При помощи OR построить что-то типа бинарного дерева поиска, перебирая только активные ветви. Ускорение перебора увеличением сложности. К тому же хорошо будет работать только на сгруппированых сигналах, имея "010101010" на входах никакого ускорения не получится.
- Спросить опытных людей, как бы они решили такую проблему. Цель синтеза Spartan 6.
|