Перейти к содержанию
    

Как заставить Quartus экономить LABы

Ситуация такова : есть некий проект (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 (что это вообще) !!!

post-2003-1356421089_thumb.jpg

post-2003-1356421099_thumb.jpg

(вход DATAD это непосредственно combout ячейки с LUT)

По моему представлению (да и по размещению) описанная сверху схема должна занимать ровно столько LCELL-ов, какова разрядность счётчика. Как в этом убедить квартус ?

P.S. Максимальная длинна carry цепочек задана как 70. Цепочки строятся, только почему-то располагаются отдельно от регистров. Никаких констрэйнов на размещение этих регистров нет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 Aleks17

На сколько помню, там у квартуса было своё видение вопроса если использовать синхронный сброс. Сейчас собрал ваш счётчик в пустом проекте ( QII v11.0sp1 / EP4CGX30CF23C6 , настройки по умолчанию) - вижу 24 LE для вашей разрядности (22). 22 лута + тригера на сам счётчик (классический вид), 1 лут на COUT и 1 лут на GND, в принипе, с такой ситуацией думаю можно жить :laughing: (правда можно было бы пободаться, но думаю пару лутов сверху разрядности - это не так страшно как двойное кол-во лутов). Наличие или отсутствие SDC не влияет на раскладку (10ns период).

У вас какие настройки в квартусе включены?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Register packing включён. Синхронный сброс (включение- выключение) тоже не влияет. Ситуацию удалось побороть отключив в fitter-е опцию "optimize hold timing for all paths".

Уж не знаю, что там quartus себе придумал но он решил разнести carry chain и регистры подальше в устройстве. Дизайн полностью синхронный, clock-и глобальные. Все те счётчики (и их ввходные и выходные регистры) - в одном clock домене.

Не понимаю, что там за проблемы с hold timing-ом могут быть (кстати hold violation для этих сигналов не появляются ни с опцией, ни без неё).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...