Golikov 0 November 1, 2013 Posted November 1, 2013 · Report post по какой-то причине, возможно и природной лени, не захотел связываться тут с ПЛЛ. Все таки, такой клок, он управляется руками, ПЛЛ имеет время выхода на режим и прочее, внутренне казалось так надежнее, тем более у меня с этим клоком другой связан. а куда тыкнуть для картинок после синтеза? Quote Share this post Link to post Share on other sites More sharing options...
Bad0512 2 November 1, 2013 Posted November 1, 2013 · Report post Второй фактор, который вносит комбинаторная логика - это смещение гейтированного клока по фазе от оригинала. В ПЛИС для клока предусмотрены отдельные "провода" и обеспечивается минимальная разница по времени прихода фронта на тактовые входы разных регистров (даже находящихся на большом удалении друг от друга). Исходя из этого, если прямой и инверсный клок формируется на отдельных регистрах, то на выходе этих регистров разница по фазе клоков минимальна и определяется разницей во времени прихода фронта исходного клока на каждый триггер. Дальнейшее расхождение зависит от того как эти сигналы будут проведены по ПЛИС во время P&R. Если инверсный клок формируется элементом "НЕ", то сдвиг по фазе (на выходе триггера и НЕ) будет гораздо больше. Но стоит ли об этом сдвиге беспокоиться - зависит от конкретного дизайна (для чего используются эти клоки и какие к ним требования). Вообще в ПЛИС есть PLL (в том числе перенастраиваемые на лету) которые предназначены для формирования клоков с различными особенностями, в том числе и взаимными. Поэтому, если хотите качественный клок - пользуйтесь встроенными PLL. Пр поводу "стОит ли беспокоиться" думаю вы сильно заблуждаететсь. Gated clock - абсолютное и безусловное зло с которым нужно беспощадно бороться. Даже если у вас смешные частоты порядка 10МГц. Главная проблема тут в том, что при формировании клока на логике (и неважно пропустите вы результат через триггер или нет) этот клок распространяется по обычным линиям, а не dedicated low skew interconnect. В результате возникает ситуация когда разводчику очень трудно выполнить тайминги, так как обычные сигналы, приходящие на тактируемый гейтед клоком элемент, формируемые в другом домене нормальным способом, опережают по времени прихода этот самый гейтед клок. В результате ситуация становится неразрешимой для разводчика, отсюда отрицательные слаки даже на небольших частотах. Именно поэтому гейтед клок выжигают калёным железом во всех мануалах и туториалах. З Ы В данной конкретной ситуации (деление одного клока на целое число и вывод наружу) вообще всё решается тривиально, без гейтед клоков и PLL.К чему 3 страницы обсуждать кривое решение, не проще ли написать правильно и красиво сразу? Quote Share this post Link to post Share on other sites More sharing options...
Sefo 0 November 1, 2013 Posted November 1, 2013 · Report post а куда тыкнуть для картинок после синтеза? Так просто строчкой ниже - я же на картинке обвел. Gated clock - абсолютное и безусловное зло с которым нужно беспощадно бороться. Радикальный, бескомпромисный и ничем не обоснованный подход - вот реальное зло. А gated clock - это просто штука с которой аккуратно надо обращаться. Кстати, а как Вы в ASIC предлагаете с ним бороться? Двухвходовый AND/OR-gate очень дешево и сердито - и деньги экономит и электроэнергию. Главная проблема тут в том, что при формировании клока на логике (и неважно пропустите вы результат через триггер или нет) этот клок распространяется по обычным линиям, а не dedicated low skew interconnect. Вы не правы. Такое конечно может быть, но случается, как правило, только тогда, когда dedicated low skew interconnect-ов на все клоки не хватает - эти интерконнекты относятся к ограниченным ресурсам ПЛИС. Ну еще может такое бывало в старые времена, когда тулы были глупы как валенки. З Ы В данной конкретной ситуации (деление одного клока на целое число и вывод наружу) вообще всё решается тривиально, без гейтед клоков и PLL.К чему 3 страницы обсуждать кривое решение, не проще ли написать правильно и красиво сразу? Мы не это обсуждаем :) Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 November 1, 2013 Posted November 1, 2013 · Report post Мистер Бэд уже пару раз высказывался ранее, основная его позиция все дураки, а я один знаю как делать... достаточно написать gatted clock в гугле или яндексе, и вы найдете весьма неоднозначное к нему отношение. А если поискать еще пристальнее, то вы найдете даже статьи на тему почему в некоторых случаях неплохо было бы его применить. Мистер Бэд уже как то учил меня делать 100 МГц - овый 1 тактовый умножитель в 64 бита. Теперь мистер Бэд у вас есть шанс явить миру схему деления клока на целое число 3 или 5 или 7 с выводом его на ружу.... Приведенное кривое решение позволяло это сделать и вывести на ружу не задействовав клоковый буфер... сейчас пойду картинок наделаю Вот нагенерил оба варианта. Вообщем что ли это... то ли лыжи не едут... Tehnology schematic кажет 2 абсолютно идентичных варианта схемы. однако в сообщениях мэпера упорно пишется варнинг про gated clock в случае always @(posedge clk_pin) begin if(reset == 1) begin CLKDivider <= 0; MCLK <= 1'b0; end else begin if(CLKDivider != MCLK_DIVIDER) CLKDivider <= CLKDivider + 1; else begin CLKDivider <= 0; MCLK <= ~MCLK; end end end и варнинга нет в случае always @(posedge clk_pin) begin if(reset == 1) begin CLKDivider <= 0; MCLK <= 1'b0; end else begin if(CLKDivider != MCLK_DIVIDER) CLKDivider <= CLKDivider + 1; else CLKDivider <= 0; if(ChangeCLKEnableSignal) MCLK <= ~MCLK; end end может LUT3 разный в 2 вариантах? и маперу легче оценить что никакой беды не вышло? Или там в схеме есть еще что-то... что я не посмотрел... ресет или еще что-то формируется иначе.... вообщем неведомая фигня) Хотя я думаю правда в том, что запихав сигнал в wire я усложнил задачу анализа, и среда просто не разглядела проблемы... Quote Share this post Link to post Share on other sites More sharing options...
Bad0512 2 November 1, 2013 Posted November 1, 2013 · Report post Мистер Бэд уже пару раз высказывался ранее, основная его позиция все дураки, а я один знаю как делать... достаточно написать gatted clock в гугле или яндексе, и вы найдете весьма неоднозначное к нему отношение. А если поискать еще пристальнее, то вы найдете даже статьи на тему почему в некоторых случаях неплохо было бы его применить. Мистер Бэд уже как то учил меня делать 100 МГц - овый 1 тактовый умножитель в 64 бита. Теперь мистер Бэд у вас есть шанс явить миру схему деления клока на целое число 3 или 5 или 7 с выводом его на ружу.... Приведенное кривое решение позволяло это сделать и вывести на ружу не задействовав клоковый буфер... сейчас пойду картинок наделаю Ну допустим всех я дураками не называл, хотя некоторые так периодически на это напрашиваются... Если ваши знания основываются исключительно на результатах поиска в гугле - мне вас искренне жаль. Ваш конкретный случай "полечить" от gated clock проще простого. А именно : вы неправильно применяете примитив ODDR2. Нужно на входы данных D0,D1 подать сигнал MCLK. На тактовый вход C0 подать клок, на котором работают ваши делители (clk_pin, кажется).На вход C1 подать инверсию этого клока ~clk_pin. При этом инвертор физически нигде не появится, эта функциональность есть внутри примтива ODDR2, и маппер об этом "знает". В этом случае не будет никаких дополнительных клоков, всё синхронно работает на одной частоте.И главное - нет gated clock. Кстати, а как Вы в ASIC предлагаете с ним бороться? Двухвходовый AND/OR-gate очень дешево и сердито - и деньги экономит и электроэнергию. Вы не правы. Такое конечно может быть, но случается, как правило, только тогда, когда dedicated low skew interconnect-ов на все клоки не хватает - эти интерконнекты относятся к ограниченным ресурсам ПЛИС. Ну еще может такое бывало в старые времена, когда тулы были глупы как валенки. Думаю, сравнение с асиками тут крайне неуместное ибо в них (насколько я понимаю) понятие low skew dedicated routing resources отсутствует в принципе. В случае с асиками gated clock - это просто not good design practice, то есть не фатальная неприятность, усложняющая на ровном месте дизайн и тайминг анализ. В случае Xilinx задействовать clock interconnect можно только через глобальный буфер, про Альтеру сказать не могу. Поэтому проблемы на переходе из домена в домен неизбежны.И дело тут не в тулсах - сделать по-другому не позволяет архитектура. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 November 1, 2013 Posted November 1, 2013 · Report post сделал схему с 2 регистрами always @(posedge clk_pin) begin if(reset == 1) begin CLKDivider <= 0; MCLK <= 1'b0; INV_MCLK <= 1'b1; end else begin if(CLKDivider != MCLK_DIVIDER) CLKDivider <= CLKDivider + 1; else CLKDivider <= 0; if(ChangeCLKEnableSignal) begin MCLK <= ~MCLK; INV_MCLK <= MCLK; end end end RTL - все как хотели, Tehnologic - та же схема. Как не крути после оптимизации она одна и та же во всех вариантах. Ваш конкретный случай "полечить" от gated clock проще простого. А именно : вы неправильно применяете примитив ODDR2. Нужно на входы данных D0,D1 подать сигнал MCLK. На тактовый вход C0 подать клок, на котором работают ваши делители (clk_pin, кажется).На вход C1 подать инверсию этого клока ~clk_pin. При этом инвертор физически нигде не появится, эта функциональность есть внутри примтива ODDR2, и маппер об этом "знает". В этом случае не будет никаких дополнительных клоков, всё синхронно работает на одной частоте.И главное - нет gated clock. применил как Ксалинкс советует. Мапер может и знает, но инвертер он постоянно ставит. Даже схема с 2 регистрами когда инверсии вообще не было, и то упростилась и стала с инвертером... ну и мне интуитивно кажется что на времянку в нашей с ксалинксом схеме меньше ограничений чем в вашей. Попробовал вариант мистера Бэда я так понимаю из бонусов что клоковый сигнал с буфера инвертер никуда не делся с клока, пропал с тригера, так как нужное значение генерится теперь на LUT. вот что мне думается. если на клоковом входе ДДРа будет несколько фронотов (ну типа дребезг) то защелкнется стабильное значение что на входе, по первому фронту и не будет меняться... если дребезг на входе данных ДДРа, то по хорошему клоку может защелкнутся что угодно или я не правильно рассуждаю? Quote Share this post Link to post Share on other sites More sharing options...
Sefo 0 November 9, 2013 Posted November 9, 2013 · Report post Tehnology schematic кажет 2 абсолютно идентичных варианта схемы. Что и требовалось доказать :cheers: Спасибо за предоставленные результаты синтеза и раскладки. Думаю, сравнение с асиками тут крайне неуместное ибо в них (насколько я понимаю) понятие low skew dedicated routing resources отсутствует в принципе. Неужели Вы всерьез думаете, что в ASIC не нужен low skew dedicated routing ? Между ПЛИС и ASIC, по большому счету, разница лишь в том, что некоторые специфические "ресурсы" в ПЛИС являются "предустановленными", а за одно и ограниченными по количеству, а в ASIC они создаются на отдельных этапах синтеза (и часто отдельными тулами). В случае с асиками gated clock - это просто not good design practice, то есть не фатальная неприятность, усложняющая на ровном месте дизайн и тайминг анализ. Увы, это не так. Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 November 10, 2013 Posted November 10, 2013 · Report post Что и требовалось доказать :cheers: Спасибо за предоставленные результаты синтеза и раскладки. . да в любое время... однако варнинг пропадает... усложнение описания сбивает синтезатор? Или наоборот делает для него более понятно то что происходит? Quote Share this post Link to post Share on other sites More sharing options...