Aleks17 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба Ситуация такова : есть некий проект (Ethernet-устройство). Чип - Cyclone IV GX, утилизация - 99% (не стоит кидать в меня камнями, сам знаю что нельзя так работать, но бОльшего устройства в этом корпусе нет). Так вот, занялся оптимизацией ресурсов - обратил внимание, что счётчики занимают ровно в 2 раза раза больше LCELL-ов, чем их (счётчиков) разрядность. Стал копать - ситуация примерно следующая. Счётчик, описанный следующим образом : link_timer : LPM_COUNTER generic map ( LPM_WIDTH => 22, LPM_DIRECTION => "UP", LPM_TYPE => "LPM_COUNTER", LPM_PORT_UPDOWN => "PORT_UNUSED" ) port map ( clock => tx_clock, SCLR => link_timer_reset, COUT => link_timer_cout, ACLR => reset ); Размещается на кристалле следующим образом : каждый разряд занимает 2 LCELL-а. В одном - логика (carry chain и сумматор), в другом - собственно регистр с синхронным и асинхронным сбросом. При этом синхронный сброс на регистр заведён как SLOAD а нога SDATA приходит с некой LCELL, порожденной воспалённым мозгом компилятора , называемой GND (что это вообще) !!! (вход DATAD это непосредственно combout ячейки с LUT) По моему представлению (да и по размещению) описанная сверху схема должна занимать ровно столько LCELL-ов, какова разрядность счётчика. Как в этом убедить квартус ? P.S. Максимальная длинна carry цепочек задана как 70. Цепочки строятся, только почему-то располагаются отдельно от регистров. Никаких констрэйнов на размещение этих регистров нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба 2 Aleks17 На сколько помню, там у квартуса было своё видение вопроса если использовать синхронный сброс. Сейчас собрал ваш счётчик в пустом проекте ( QII v11.0sp1 / EP4CGX30CF23C6 , настройки по умолчанию) - вижу 24 LE для вашей разрядности (22). 22 лута + тригера на сам счётчик (классический вид), 1 лут на COUT и 1 лут на GND, в принипе, с такой ситуацией думаю можно жить :laughing: (правда можно было бы пободаться, но думаю пару лутов сверху разрядности - это не так страшно как двойное кол-во лутов). Наличие или отсутствие SDC не влияет на раскладку (10ns период). У вас какие настройки в квартусе включены? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 27 декабря, 2012 Опубликовано 27 декабря, 2012 · Жалоба Такое впечатление, что register packing выключен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleks17 0 28 декабря, 2012 Опубликовано 28 декабря, 2012 · Жалоба Register packing включён. Синхронный сброс (включение- выключение) тоже не влияет. Ситуацию удалось побороть отключив в fitter-е опцию "optimize hold timing for all paths". Уж не знаю, что там quartus себе придумал но он решил разнести carry chain и регистры подальше в устройстве. Дизайн полностью синхронный, clock-и глобальные. Все те счётчики (и их ввходные и выходные регистры) - в одном clock домене. Не понимаю, что там за проблемы с hold timing-ом могут быть (кстати hold violation для этих сигналов не появляются ни с опцией, ни без неё). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться