Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Encounter: constraints for clock mux
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Разработка цифровых, аналоговых, аналого-цифровых ИС
Poluektovich
Доброе время суток!
В проекте есть клоковый мультиплексор частот полученных с ВЧ и НЧ генераторов с помощью деления (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?
Torpeda
Цитата(Poluektovich @ Apr 24 2012, 09:53) *
Доброе время суток!
В проекте есть клоковый мультиплексор частот полученных с ВЧ и НЧ генераторов с помощью деления (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?
Poluektovich
1. Мультиплексор безглитчевый на триггерах
2. Вход выбора не константный, case_analysis не использую
3-4. Encounter видит только один клок, другой интерпретирует как цепь. Репорт с помощью report_timing -clock_from ...
5. версия 9
Torpeda
Цитата(Poluektovich @ Apr 24 2012, 13:07) *
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 ....
Poluektovich
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. Какие могут быть необходимы?
Torpeda
Цитата(Poluektovich @ Apr 24 2012, 15:09) *
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) Вы синтез Енкаунтером делаете?
Poluektovich
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.
Torpeda
Цитата(Poluektovich @ Apr 24 2012, 15:24) *
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 Енкаунтер какой выдавал на "пропущенный" клок?
Poluektovich
1) нет t12clk
2) два делителя на счетчиках (один RCLK делит на 32, получаем clk_1khz_domain, а другой FCLK делит на 2, получаем t12clk)
3) варнинга не было
Torpeda
Цитата(Poluektovich @ Apr 24 2012, 15:42) *
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?
Poluektovich
Код
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;


Torpeda
Цитата(Poluektovich @ Apr 24 2012, 16:15) *
Код
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 соответствующих флопов.
Poluektovich
1) в D-Flop без QN и буфер после флопа. Может в этом и дело.
2) попробую
Torpeda
Цитата(Poluektovich @ Apr 24 2012, 16:53) *
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 до и после синтеза.

В любом случае дайте знать чем закончилось....
Poluektovich
Спасибо за ответы.
После устранения буфера и определения клока с выхода триггера, появились пути по обоим клокам.
Цитата
Советую записать с DC в конце синтеза SDC как вход для Енкаунтера.

Делаю именно так.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.