Цитата
Внутри ПЛИС Hi-Z не действуют...
ЕМНИП синтезатор заменяет их на wire OR вполне успешно, иначе я не совсем понял как "запретить" блоку выставлять что-то на общую шину. Все блоки сидят на одной "IRQNUM" и должны какое-то состояние выставить. Разве нет?
Написал согласно Вашим рецептам, но с hi-z, синтезировалось и симулируется. Показывает 446 МГц для 100 блоков - вполне неплохо, хотя на большие "гирлянды" конечно масштабировать не стоит.
Теперь о каскадировании. Уважаемый RobFPGA, это была моя начальная идея, но я так и не придумал как потом объединять несколько выходных потоков в реальном времени.
Я немного неправильно описал систему, слишком упрощённо. Не хочу перегружать деталями.
Точный порядок прерываний не нужен, они квантуются каждые несколько десятков клоков - т.е. внутри этого окна они могут быть перемешаны, но обрабатывать их после этого окна нежелательно. Окна формируются прерыванием от Глобального Оконного Таймера (ГОТ). Т.е. между двумя событиями ГОТ порядок остальных прерываний роли не играет.
Общая логика такова: каждый блок может заявить прервание каждые Х клоков. Если Х>N то задача тривиальна но обычный случай это N=100..200 X=20, частота ок.300 МГц. Т.е. в критичном случае у нас будет 200 прерываний и 20 циклов (300 МГц) на обработку. Если прерывание не было обслужено на протяжении 20 циклов то поднимается флаг "ПРОСРОЧЕН" который тормозит конвеер пока все прерывания не обработают.
Обработка прерывания - запись его в большую очередь.
Соответственно задача стоит обработать макс. число прерываний за мин. время. Подход двоякий: во-первый второй тактовый сигнал большей частоты, во-вторых минимальное число клоков на обработку.
Если поделить все блоки на группы меньше 20 то задача банально решается опросом. Но после этого у нас есть N/20 независимых очередей которые надо склеить в одну сохранив порядок окон ГОТ. Мои неуклюжие попытки (поллинг мастеров и поочередная выгрузка очередей "до следующего ГОТа") к сожалению получались неудобными и медленными.
Я подозреваю надо обьеденить подходы, или сделав daisy-chain из локальных мастеров, или наоборот, сделать дерево где локальные мастера будут короткими daisy-chain цепочками (10 блоков синтезируются на ок.800 Мгц).
Я продолжаю экспериментировать, и буду благодарен за новые идеи.