[an error occurred while processing this directive]
|
Синхронность счетчика означает всего лишь то, что выходные сигналы появятся синхронно на выходах триггеров внутри ПЛИС. А вовсе не на выходных ножках, соединенных с теми самыми триггерами разной длины проводами. И в сгенеренном (независимо от carry chain) счетчике это условие выполняется.
Если же Вам необходимо получить синхронность именно на внешних выводах , то вам необходимо сделать так. Сам счетчик заставить считать с опережением на 1 такт, и пропустить выход через регистр, тактируемый той-же тактовой, что и счетчик. А триггеры регистра расположить в I/O-cell'ах. Это будет гарантировать, что время прохождения сигнала с выхода этого регистра до ножки корпуса для всех битов будет одно и тоже.
В том и разница, собственно, между MAX и ACEX/FLEX. Что у MAX к каждой ножке жестко привинчен триггер, а у FPGA этих триггеров разбросано по всему кристаллу немерено.
А вообще-то это является крайне редкой задачей, так как в основном требование синхронных систем это совсем не синхронность смены состояний в разных местах схемы, а требование к установлению всех сигналов к следующему перепаду тактовой частоты - а задержки по разным линиям имеют право гулять в десятки-сотни раз.
Теперь о собственно построении счетчика. В верилоге можно смело использовать примитивы CARRY, CASCADE и LCELL, если не доверяете синтезатору. Они имеется в библиотеке синтеза и квартуса, и максплюса (что я сам недавно проверил). Хотя при установленной опции "Carry chain: Auto" и "Carry chain size" 16..32" он вроде их генерит вполне пристойно. Ну а о том, как их в конкретном случае использовать лучше всего узнать в datasheet на выбранное семейство, где описаны виды цепочек переноса и каскадирования и их логика, а дальше думать самому какой из режимов выбрать в данном случае.
E-mail: info@telesys.ru