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

Altera, Констрейны, два независимых для фиттера клока

Всем привет!

В одном проекте, работающим на большое частоте, появилась необходимость в прописании констрейнов на проект...

Допустим, имеется два модуля счетчиков - один инкрементирует, другие декрементирует (это условно, в реальном проекте вместо счетчиков другие модули).

Они, по сути, работают на одном клоке... При компиляции проекта, синтезатор пытается выровнять пути сигналов по всем проекту. Но, мне необходимо так прописать констрейны, чтобы два клока clk_incr и clk_decr были экслюзивные. Т.е. как бы абсолютно два разных клоковых домена, не связанных между собой:

RTL:

module Top (

input inclk,
output imp1,
output imp2

);

mypll mypll_0( 
	.inclk0 (inclk),
	.c0 (clk)
);

wire clk_incr = clk;
wire clk_decr = clk;

defparam CounterIncr.parWIDTH = 32;
CounterIncr CounterIncr(
	.clk (clk_incr),
	.out (imp1) );

defparam CounterDecr.parWIDTH = 32;
CounterDecr CounterDecr(
	.clk (clk_decr),
	.out (imp2) );

endmodule

SDC:

#**************************************************************
# Time Information
#**************************************************************

set_time_format -unit ns -decimal_places 3



#**************************************************************
# Create Clock
#**************************************************************

create_clock -name {inclk} -period 20.000 -waveform { 0.000 10.000 } [get_ports {inclk}]


#**************************************************************
# Create Generated Clock
#**************************************************************

create_generated_clock -name {mypll_0|altpll_component|auto_generated|pll1|clk[0]} -source [get_pins {mypll_0|altpll_component|auto_generated|pll1|inclk[0]}] -duty_cycle 50/1 -multiply_by 6 -master_clock {inclk} [get_pins {mypll_0|altpll_component|auto_generated|pll1|clk[0]}] 

Вот, вопрос, собственно в том - что именно мне нужно прописать в SDC чтобы скомпилировалось так как задумывалось...

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


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

3 minutes ago, dde29 said:

Вот, вопрос, собственно в том - что именно мне нужно прописать в SDC чтобы скомпилировалось так как задумывалось...

они из одного источника, по данным не связанные. что он там у вас выравнивает?

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


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

4 minutes ago, des00 said:

они из одного источника, по данным не связанные. что он там у вас выравнивает?

Я может не правильно мысли свои донес) Другими словами, ТаймКвест показывает меньшее значение максимальной частоты Fmax при компиляции проектс с двумя счетчиками, по сравнению чем с один счетчиком.

Вопрос - почему частота уменьшается, если ресурсы практически не задействованы и модули не связаны?

Почему занялся этим вопросом - имеется проект, в котором генерируются разные сигналы, с возможностью шага мелкого шага смещение (ну т.е. модуль работает на большое частоте...)

Если таких разных сигналов 2 то все ок, добавляешь в проект 3-й - и все рушится, проект перестает адекватно работать... Вот и возникла мысль сделать для каждого такого сигнала что-то вроде set_false_path

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


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

3 minutes ago, dde29 said:

Я может не правильно мысли свои донес) Другими словами, ТаймКвест показывает меньшее значение максимальной частоты Fmax при компиляции проектс с двумя счетчиками, по сравнению чем с один счетчиком.

Ну это естественно. Чем больше логики тем ниже может быть частота. Зависит от чипа, его размеров, распиновки, используемых ресурсов. Но вот как вы увидели влияние при вашем требовании в sdc 20нс (50МГц). Что это за плис или что это за счетчики, которые на 50МГц не могут быть разведены. У вас какой нибудь стратикс, два счетчика на порты и порты на разные стороны чипа? 

3 minutes ago, dde29 said:

Если таких разных сигналов 2 то все ок, добавляешь в проект 3-й - и все рушится, проект перестает адекватно работать... Вот и возникла мысль сделать для каждого такого сигнала что-то вроде set_false_path

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

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


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

1 minute ago, des00 said:

Ну это естественно. Чем больше логики тем ниже может быть частота. Зависит от чипа, его размеров, распиновки, используемых ресурсов. Но вот как вы увидели влияние при вашем требовании в sdc 20нс (50МГц). Что это за плис или что это за счетчики, которые на 50МГц не могут быть разведены. У вас какой нибудь стратикс, два счетчика на порты и порты на разные стороны чипа? 

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

50 МГц это входная частота от генератора, следом рождается в PLL клок 300 МГц. Вот на этой частоте и работают эти условные счетчики.

Ну асинхры точно никакой нет - так как источник, вход по сути один (клок от генератора). По поводу констрейнов - да, поэтому и вопрос - что я еще могу умного прописать)) У меня 10й цыклон LP

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


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

12 minutes ago, dde29 said:

 По поводу констрейнов - да, поэтому и вопрос - что я еще могу умного прописать)) У меня 10й цыклон LP

не надо ничего прописывать. вам нужно взять Technology map viewer + TimeQuest и смотреть что именно у вас валится. Потом уже думать почему. Частоты тут не причем. Добавляете логики, ломаются пути разводки, увеличиваются задержки, валятся тактовые. Сплошь и рядом на плотных проектах.

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


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

4 minutes ago, des00 said:

не надо ничего прописывать. вам нужно взять Technology map viewer + TimeQuest и смотреть что именно у вас валится. Потом уже думать почему. Частоты тут не причем. Добавляете логики, ломаются пути разводки, увеличиваются задержки, валятся тактовые. Сплошь и рядом на плотных проектах.

Понял, гляну, спасибо!)

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


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

On 11/22/2021 at 9:24 AM, dde29 said:

При компиляции проекта, синтезатор пытается выровнять пути сигналов по всем проекту. ....Вот, вопрос, собственно в том - что именно мне нужно прописать в SDC чтобы скомпилировалось так как задумывалось...

Так ка всё описано говорит тулзе посадить оба счётчика на одно клоковое дерево.

При этом отсутствие дата пасов между ними не заставляет "выровнять пути сигналов по всем проекту". Если связей действительно между ними нет.

Но.... тулза может балансировать внешние выходы которые висят на виртуальных флопах заактированных одним соурсом .

Чтобы всё понять, нужно тайминг репорты анализировать.

Добавление третьего счётчика может валить тайминги изза отсутствия оптимального расположения ресурсов (а какие таймин виолейшены кстати?).

Есть 2 варианта:

1) Сделать 2 независимых клоковых дерева и описать через create_clock.  Привязываем IO к нужным клокам.

2) Фальш пас от всех флопов одного счетчика ко всем флопам другого и наоборот. И по всем IO.

 

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


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

On 11/29/2021 at 1:21 AM, topor_topor said:

Так ка всё описано говорит тулзе посадить оба счётчика на одно клоковое дерево.

При этом отсутствие дата пасов между ними не заставляет "выровнять пути сигналов по всем проекту". Если связей действительно между ними нет.

Но.... тулза может балансировать внешние выходы которые висят на виртуальных флопах заактированных одним соурсом .

Чтобы всё понять, нужно тайминг репорты анализировать.

Добавление третьего счётчика может валить тайминги изза отсутствия оптимального расположения ресурсов (а какие таймин виолейшены кстати?).

Есть 2 варианта:

1) Сделать 2 независимых клоковых дерева и описать через create_clock.  Привязываем IO к нужным клокам.

2) Фальш пас от всех флопов одного счетчика ко всем флопам другого и наоборот. И по всем IO.

 

Вот! Именно с добавлением параллельного (у них общий только клок ) - и проект может рухнуть.

Вопрос именно как использовать create_clock при том, что клоки, например разветвил assign clk1 = clk_pll, assign clk2 = clk_pll ...

При этом варианте таймквестом не получается использовать create_clock

По поводу false_path можете пример привести в моем случае?)

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


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

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

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

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

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

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

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

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

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

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