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

Encounter: constraints for clock mux

Доброе время суток!

В проекте есть клоковый мультиплексор частот полученных с ВЧ и НЧ генераторов с помощью деления (generated_clock). Чтобы избежать использования case analysis в Design Compiler задаю ограничение

set_clock_groups -logically_exclusive -group {clka} -group {clkb}

и параметр

set timing_enable_multiple_clocks_per_reg true

В DC получаю пути по обоим клокам. Однако, временной анализатор в Encounter выдает пути лишь по одному клоку.

Как можно побороть Encounter?

 

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


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

Доброе время суток!

В проекте есть клоковый мультиплексор частот полученных с ВЧ и НЧ генераторов с помощью деления (generated_clock). Чтобы избежать использования case analysis в Design Compiler ..... временной анализатор в Encounter выдает пути лишь по одному клоку.

Как можно побороть Encounter?

 

1) Как сделан клоковый мультиплексор? Простой МUХ2?

2) Если так, то ч то даёт

report_case_analysis

по этому МUХ2? Нет ли константы по входу S?

3) видит ли

report_clocks

ВСЕ Ваши клоки на входе МUХ2?

4) Какой репорт Вам выдает пути лишь по одному клоку?

5) Какая версия Encounter?

Изменено пользователем Torpeda

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


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

1. Мультиплексор безглитчевый на триггерах

2. Вход выбора не константный, case_analysis не использую

3-4. Encounter видит только один клок, другой интерпретирует как цепь. Репорт с помощью report_timing -clock_from ...

5. версия 9

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


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

1. Мультиплексор безглитчевый на триггерах

2. Вход выбора не константный, case_analysis не использую

3-4. Encounter видит только один клок, другой интерпретирует как цепь. Репорт с помощью report_timing -clock_from ...

5. версия 9

 

1) "Вход выбора не константный, case_analysis не использую" - а репортик report_case_analysis всётаки чё говорит (репорт по выходных AND2)?

2) "report_timing -clock_from ..." - а дальше опции.... Полагаю, репорт -clock_from СК1 даёт результат, а -clock_from СК2 не даёт....

Также предположим что "report_clocks" выдал только СК1... Это так?

Тогда ответ простой - Encounter выдает пути лишь по СК1 потому что СК2 не существует.

3) Задефайните СК2 и делов-то....

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

 

P.S. "безглитчевый на триггерах " - стрёмно звучит... тут должно быть "безглитчевый на gated_clock_component" .... а иначе только неправильно задай глобальные переменные Encounter ....

Изменено пользователем Torpeda

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


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

1. report_case_analysis одну константу дал внутри проекта, с выром клоков она не связана.

2-3. все так и есть, clk2 нет в клоковом дереве, для энкаунтера это цепь.

Каким образом clk2 задефайнить? В исходном sdc clk1 и clk2 определены через set_generated_clock.

4. Отчетов encounter у меня сейчас нет, я rtl и лог. синтезом занимаюсь, пытаюсь понять как это грамотно обконстрейнить, чтоб энкаунтер нужный тайминг выдавал.

 

Вот по поводу глобальных переменных в Encounter очень интересно. Пытался безуспешно найти аналог timing_enable_multiple_clocks_per_reg из DC. Какие могут быть необходимы?

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


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

1. report_case_analysis дает пустой отчет

2-3. все так и есть, clk2 нет в клоковом дереве, для энкаунтера это цепь.

Каким образом clk2 задефайнить? В исходном sdc clk1 и clk2 определены через set_generated_clock.

4. Отчеты у меня сейчас нет, я rtl и лог. синтезом занимаюсь, пытаюсь понять как это грамотно обконстрейнить, чтоб энкаунтер нужный тайминг выдавал.

 

1) "clk2 нет в клоковом дереве, для энкаунтера это цепь." - точнее, CLK2 не виден в CTE (common timing engine) во время STA.

До постройки клокового дерева, Вы скорее не дошли....

2) "Каким образом clk2 задефайнить? В исходном sdc clk1 и clk2 определены через set_generated_clock."

Схему как клоки с осцилятора выходят и в MUX заходят + всё с SDC что к ним относится можно увидеть?

3) "Отчеты у меня сейчас нет, я rtl и лог. синтезом занимаюсь, " - раз вы видите результаты команд - значит есть:

Либо копируем текст с экрана,

Либо в конце команды добавляем > report.txt

4) Вы синтез Енкаунтером делаете?

Изменено пользователем Torpeda

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


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

2)

create_clock -name "fclk_domain" -period 100 -waveform { 0 50  } [get_ports FCLK]   // from HF oscillator
create_clock -name "rclk_domain" -period 30000 -waveform {0 15000} [get_ports RCLK]   // from LF oscillator

create_generated_clock -name "clk_1khz_domain" -divide_by 32 \
  -source [get_ports RCLK] [get_pins {i_clk_div/CLK_1KHZ}]     
create_generated_clock -name "t12clk" -divide_by 2 -source [get_ports FCLK]  [get_pins {i_clk_div/TCLKP}] 

# muxes clocks
set_clock_groups -logically_exclusive -group {t12clk} -group {clk_1khz_domain}

t12clk и clk_1khz_domain - входы клокового мультиплексора

 

3) репорты у тополога вчера получал, по памяти пишу.

4) Логический - DC, физический - Encounter.

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


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

2)

create_clock -name "fclk_domain" -period 100 -waveform { 0 50  } [get_ports FCLK]   // from HF oscillator
create_clock -name "rclk_domain" -period 30000 -waveform {0 15000} [get_ports RCLK]   // from LF oscillator

create_generated_clock -name "clk_1khz_domain" -divide_by 32 \
  -source [get_ports RCLK] [get_pins {i_clk_div/CLK_1KHZ}]     
create_generated_clock -name "t12clk" -divide_by 2 -source [get_ports FCLK]  [get_pins {i_clk_div/TCLKP}] 

# muxes clocks
set_clock_groups -logically_exclusive -group {t12clk} -group {clk_1khz_domain}

t12clk и clk_1khz_domain - входы клокового мультиплексора

 

3) репорты у тополога вчера получал, по памяти пишу.

4) Логический - DC, физический - Encounter.

1) Какого клока нет в report_clocks?

2) Что из себя представляет i_clk_div?

3) А Warning Енкаунтер какой выдавал на "пропущенный" клок?

Изменено пользователем Torpeda

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


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

1) нет t12clk

2) два делителя на счетчиках (один RCLK делит на 32, получаем clk_1khz_domain, а другой FCLK делит на 2, получаем t12clk)

3) варнинга не было

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


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

1) нет t12clk

2) два делителя на счетчиках (один RCLK делит на 32, получаем clk_1khz_domain, а другой FCLK делит на 2, получаем t12clk)

3) варнинга не было

 

Вообще-то generated_clock может с выхода Q гейта\флопа или входа CK флопа быть задан.....

1) как описаны в RTL - CLK_1KHZ и TCLKP?

2) Как reg CLK_1KHZ & reg TCLKP?

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


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

module clk_div (input RCLK, 
                input FCLK,  
                input res_por, 
                output CLK_1KHZ, 
                output TCLKP);

reg [4:0] cnt;
reg clk2;

always @(posedge RCLK or negedge res_por)
if(~res_por)
   cnt<='h0;
else 
   cnt<=cnt+1'b1;

always @(posedge FCLK or negedge res_por)
if(~res_por)
   clk2<='h0;
else 
   clk2<=~clk2;

assign CLK_1KHZ = cnt[4];
assign TCLKP = clk2;

 

 

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


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

always @(posedge FCLK or negedge res_por)
if(~res_por)
   clk2<='h0;
else 
   clk2<=~clk2;

assign CLK_1KHZ = cnt[4];
assign TCLKP = clk2;

 

1) А во что синтезилось clk2?

Не в D-Flop без QN + инвертор?

2) Задайте create_generated_clock с выходов Q соответствующих флопов.

 

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


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

1) в D-Flop без QN и буфер после флопа. Может в этом и дело.

2) попробую

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


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

1) в D-Flop без QN и буфер после флопа. Может в этом и дело.

2) попробую

1)Скорее всего Енкаунтер не может найти один пин с команды [get_pins {i_clk_div/TCLKP}] - то-ли брать FF.Q то-ли INV.A.

В CLK_1KHZ случае, скореее всего клок идёт прямо с Q. Правильно?

2) Что даёт на выходе команда [get_pins {i_clk_div/TCLKP}] в конце синтеза?

Лутше попробовать - прямо в Енкаунтере...

3) Замените при синтезе "D-Flop без QN и буфер" на просто "D-Flop с QN", при этом клок должен идти строго с Q.

4) SDC до и после синтеза - разные должны быть....

Советую записать с DC в конце синтеза SDC как вход для Енкаунтера.

Сверте SDC до и после синтеза.

 

В любом случае дайте знать чем закончилось....

Изменено пользователем Torpeda

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


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

Спасибо за ответы.

После устранения буфера и определения клока с выхода триггера, появились пути по обоим клокам.

Советую записать с DC в конце синтеза SDC как вход для Енкаунтера.

Делаю именно так.

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


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

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

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

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

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

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

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

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

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

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