Оптимизация кода для CPLD
Добавлено: 04 апр 2017, 21:19
Собственно, пишу код для XC9572XL. Сначала тренировался на XC6SLX9 - все работало и занимало меньше макроячеек, чем есть в упомянутом CPLD. В процессе переноса выяснилось, что ресурсов все-таки не хватает. Путем сокращения функционала удалось разместить код, однако любой шаг в сторону приводит к невозможности синтеза схемы.
Сейчас задействовано 32/72 макроячеек, 251/360 product terms (кстати, как это называется по-русски?) и 27/72 регистров. Если увеличить разрядность регистра cnt с 15 до 17 бит, будет задействовано на 2 регистра больше и на 6 термов меньше, а если поднять до 19 бит, то для синтеза внезапно не будет хватать 234 термов! Где здесь логичная и понятная закономерность? Подобное происходит при минимальном изменении условия в конструкции if или замене цепочки if на case (вроде как и то, и то другое в последовательность мультиплексоров должно синтезироваться, но не прокатывает). В общем, я запутался и не знаю, как тут оптимизировать.
Сейчас задействовано 32/72 макроячеек, 251/360 product terms (кстати, как это называется по-русски?) и 27/72 регистров. Если увеличить разрядность регистра cnt с 15 до 17 бит, будет задействовано на 2 регистра больше и на 6 термов меньше, а если поднять до 19 бит, то для синтеза внезапно не будет хватать 234 термов! Где здесь логичная и понятная закономерность? Подобное происходит при минимальном изменении условия в конструкции if или замене цепочки if на case (вроде как и то, и то другое в последовательность мультиплексоров должно синтезироваться, но не прокатывает). В общем, я запутался и не знаю, как тут оптимизировать.