Poluektovich 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 · Жалоба Доброе время суток! В проекте есть клоковый мультиплексор частот полученных с ВЧ и НЧ генераторов с помощью деления (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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 (изменено) · Жалоба Доброе время суток! В проекте есть клоковый мультиплексор частот полученных с ВЧ и НЧ генераторов с помощью деления (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? Изменено 24 апреля, 2012 пользователем Torpeda Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Poluektovich 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 · Жалоба 1. Мультиплексор безглитчевый на триггерах 2. Вход выбора не константный, case_analysis не использую 3-4. Encounter видит только один клок, другой интерпретирует как цепь. Репорт с помощью report_timing -clock_from ... 5. версия 9 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 (изменено) · Жалоба 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 .... Изменено 24 апреля, 2012 пользователем Torpeda Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Poluektovich 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 · Жалоба 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. Какие могут быть необходимы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 (изменено) · Жалоба 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) Вы синтез Енкаунтером делаете? Изменено 24 апреля, 2012 пользователем Torpeda Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Poluektovich 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 (изменено) · Жалоба 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 Енкаунтер какой выдавал на "пропущенный" клок? Изменено 24 апреля, 2012 пользователем Torpeda Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Poluektovich 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 · Жалоба 1) нет t12clk 2) два делителя на счетчиках (один RCLK делит на 32, получаем clk_1khz_domain, а другой FCLK делит на 2, получаем t12clk) 3) варнинга не было Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 · Жалоба 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 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 · Жалоба 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 · Жалоба 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 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 · Жалоба 1) в D-Flop без QN и буфер после флопа. Может в этом и дело. 2) попробую Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topor_topor 0 24 апреля, 2012 Опубликовано 24 апреля, 2012 (изменено) · Жалоба 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 до и после синтеза. В любом случае дайте знать чем закончилось.... Изменено 24 апреля, 2012 пользователем Torpeda Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Poluektovich 0 25 апреля, 2012 Опубликовано 25 апреля, 2012 · Жалоба Спасибо за ответы. После устранения буфера и определения клока с выхода триггера, появились пути по обоим клокам. Советую записать с DC в конце синтеза SDC как вход для Енкаунтера. Делаю именно так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться