реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Encounter: constraints for clock mux
Poluektovich
сообщение Apr 24 2012, 06:53
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 15-09-08
Из: Зеленоград
Пользователь №: 40 201



Доброе время суток!
В проекте есть клоковый мультиплексор частот полученных с ВЧ и НЧ генераторов с помощью деления (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?
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Apr 24 2012, 08:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(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?

Сообщение отредактировал Torpeda - Apr 24 2012, 08:28
Go to the top of the page
 
+Quote Post
Poluektovich
сообщение Apr 24 2012, 10:07
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 15-09-08
Из: Зеленоград
Пользователь №: 40 201



1. Мультиплексор безглитчевый на триггерах
2. Вход выбора не константный, case_analysis не использую
3-4. Encounter видит только один клок, другой интерпретирует как цепь. Репорт с помощью report_timing -clock_from ...
5. версия 9
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Apr 24 2012, 11:38
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(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 ....

Сообщение отредактировал Torpeda - Apr 24 2012, 11:53
Go to the top of the page
 
+Quote Post
Poluektovich
сообщение Apr 24 2012, 12:09
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 15-09-08
Из: Зеленоград
Пользователь №: 40 201



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. Какие могут быть необходимы?
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Apr 24 2012, 12:14
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(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) Вы синтез Енкаунтером делаете?

Сообщение отредактировал Torpeda - Apr 24 2012, 12:19
Go to the top of the page
 
+Quote Post
Poluektovich
сообщение Apr 24 2012, 12:24
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 15-09-08
Из: Зеленоград
Пользователь №: 40 201



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.
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Apr 24 2012, 12:36
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(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 Енкаунтер какой выдавал на "пропущенный" клок?

Сообщение отредактировал Torpeda - Apr 24 2012, 12:40
Go to the top of the page
 
+Quote Post
Poluektovich
сообщение Apr 24 2012, 12:42
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 15-09-08
Из: Зеленоград
Пользователь №: 40 201



1) нет t12clk
2) два делителя на счетчиках (один RCLK делит на 32, получаем clk_1khz_domain, а другой FCLK делит на 2, получаем t12clk)
3) варнинга не было
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Apr 24 2012, 13:00
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(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?
Go to the top of the page
 
+Quote Post
Poluektovich
сообщение Apr 24 2012, 13:15
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 15-09-08
Из: Зеленоград
Пользователь №: 40 201



Код
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;


Go to the top of the page
 
+Quote Post
Torpeda
сообщение Apr 24 2012, 13:23
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(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 соответствующих флопов.
Go to the top of the page
 
+Quote Post
Poluektovich
сообщение Apr 24 2012, 13:53
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 15-09-08
Из: Зеленоград
Пользователь №: 40 201



1) в D-Flop без QN и буфер после флопа. Может в этом и дело.
2) попробую
Go to the top of the page
 
+Quote Post
Torpeda
сообщение Apr 24 2012, 14:00
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424



Цитата(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 до и после синтеза.

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

Сообщение отредактировал Torpeda - Apr 24 2012, 14:01
Go to the top of the page
 
+Quote Post
Poluektovich
сообщение Apr 25 2012, 07:43
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 15-09-08
Из: Зеленоград
Пользователь №: 40 201



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

Делаю именно так.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 09:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01549 секунд с 7
ELECTRONIX ©2004-2016