Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Правильное использование locked у PLL
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
Jackov
Приветствую!

Имеется Cyclone4, а в нём имеется PLL.
Как известно PLL на рабочий режим выходит не сразу, сразу после запуска она выдаёт нестабильную частоту.
Тактировать схемы такой нестабильной частотой, понятное дело, нельзя - могут сбойнуть. Для этого в PLL предусмотрен специальный выход "locked". Доподлинно неизвестно синхронизирован ли этот выход с тактовой частотой выдаваемой PLL, или нет. Потому встаёт вопрос: как правильно использовать этот выход.
Я предлагаю такую схему:
Нажмите для просмотра прикрепленного файла
На Verilog-е выглядит так:
Код
module M1(
    ....................................
    (*chip_pin = "Y2"*) input inMHz50);


    wire Locked33_6, MHz33_6_;
    PLL1 PLL1(.c0(MHz33_6_), .locked(Locked33_6), .inclk0(inMHz50));
    wire Enable33_6Q;
    DFF Enable33_6(.q(Enable33_6Q), .d(Locked33_6), .clk(MHz33_6_), .clrn(1'd1), .prn(1'd1));
    wire MHz33_6;
    LCELL Cell(.out(MHz33_6), .in(Enable33_6Q & MHz33_6_));

    .......ля-ля-ля тополя.......
endmodule

LCELL нужен только для того чтобы на него сослаться в констрейнах, по другому я не сумел.

Сами констрейны выглядят так:
Код
derive_clock_uncertainty

#тактовая частота с генератора 50МГц
create_clock -period 50MHz -name {inMHz50} [get_ports {inMHz50}]

#тактовая частота с PLL
create_generated_clock -name MHz33_6_  -source [get_ports {inMHz50}] [get_pins {PLL1|altpll_component|auto_generated|pll1|clk[0]}] -divide_by 5 -multiply_by 7 -duty_cycle 70.00
create_generated_clock -name MHz33_6   -source [get_pins {PLL1|altpll_component|auto_generated|pll1|clk[0]}] [get_nets {Cell}] -invert

То что в названии частоты присутствует 33,6 МГц - это пережиток прошлого, сейчас там 70.
В последней строчке я и ссылаюсь на LCELL, "-invert" присутствует из-за того что компилятор по каким-то своим причинам инвертирует сигнал после LCELL.

Вопроса, собственно, два: Правильно ли использовать выход "locked" подобным образом? И если правильно, правильно ли заданы констрейны?
Opex
У xilinx есть клоковые буферы со входом enable, у альтеры, наверное, тоже есть подобное.
Можно использовать locked в качестве сигнала сброса.
Всякие хитрые манипуляции с тактовой, мне кажется, до добра не доведут..

И еще, обычно трассы для тактовых сигналов в плисах отделены от обычной логики, элемента "И" может и не оказаться, тогда клок разведется через логику, и опять в клоки. Такой каши лучше избегать.
bogaev_roman
to Jackov Что мешает использовать этот сигнал в качестве сброса(инверсный)? Что на altera, что на xilinx я так и делаю.
ViKo
Цитата(bogaev_roman @ Jan 23 2015, 12:07) *
to Jackov Что мешает использовать этот сигнал в качестве сброса(инверсный)? Что на altera, что на xilinx я так и делаю.

И я.
Код
module Reset_m (
  input    bit        res_ext,    //!< External reset (knob, port)
  input    bit        no_lock,    //!< PLL no locked reset
  input    bit        res_cmd,    //!< MCU command reset
  input    bit        clks,        //!< Slow Clock
output    bit        res_int        //!< Internal wide device reset
);
  bit            rest;        //!< Reset start
  assign rest = res_ext || no_lock || res_cmd;
  
  bit        [1:0]    ress;        //!< Reset sequence
  always_ff @(posedge rest, posedge clks) begin
    if (rest) ress <= '1;
    else ress <= {ress[0], 1'b0};
  end
  assign res_int = ress[1];

endmodule : Reset_m
Jackov
Цитата(Opex @ Jan 23 2015, 11:46) *
У xilinx есть клоковые буферы со входом enable, у альтеры, наверное, тоже есть подобное.
Ммм... не совсем понял.

Цитата(Opex @ Jan 23 2015, 11:46) *
Всякие хитрые манипуляции с тактовой, мне кажется, до добра не доведут..
Согласен, сам такое не люблю. Но я же немножко. rolleyes.gif
Как я думаю, дребезгов, гонок и прочих гличей быть не должно.

Цитата(Opex @ Jan 23 2015, 11:46) *
И еще, обычно трассы для тактовых сигналов в плисах отделены от обычной логики, элемента "И" может и не оказаться, тогда клок разведется через логику, и опять в клоки. Такой каши лучше избегать.
Забыл написать, этот LCELL подключил к глобальному клоку, судя по Чип Планеру, действительно подключился.

Цитата(Opex @ Jan 23 2015, 11:46) *
Можно использовать locked в качестве сигнала сброса.
Цитата(bogaev_roman @ Jan 23 2015, 12:07) *
to Jackov Что мешает использовать этот сигнал в качестве сброса(инверсный)? Что на altera, что на xilinx я так и делаю.
Цитата(ViKo @ Jan 23 2015, 12:13) *
И я.
Не хотелось бы. Это до каждого триггера пойдёт линия сброса - усложняет трассировку, а если сброс делать синхронным то ещё и логику. Конечно, можно не каждый триггер сбрасывать, а только нужный, но это надо думать какие нужно, какие нет, а думать над этим желания нет, т.к. у меня в проекте сброс вообще не предусмотрен, ПЛИСка в устройстве одна и сбрасывать её попросту некому, да и ненужно это - запустилась и работает.
Hose
Яков, начните с изучения плл. Он красиво нарисован в описании на семейство... И есть у меня такое подозрение, что там уже реализовано отключение выхода при отсутствии захвата. Если не найдете, или нет такой функции, то не стоит делать, поскольку захват плл - штука условная и аналоговая, учитывая ширину петли альтеровского плл. Устанете потом искать куда пропадают такты.
Opex
Цитата(Jackov @ Jan 23 2015, 21:22) *
Ммм... не совсем понял.


У альтеры вон есть какой-то Clock Control Block, и у него есть вход enable, 0 подать, и не будет выходить клок.

Цитата(Jackov @ Jan 23 2015, 21:22) *
Не хотелось бы. Это до каждого триггера пойдёт линия сброса - усложняет трассировку, а если сброс делать синхронным то ещё и логику. Конечно, можно не каждый триггер сбрасывать, а только нужный, но это надо думать какие нужно, какие нет, а думать над этим желания нет, т.к. у меня в проекте сброс вообще не предусмотрен, ПЛИСка в устройстве одна и сбрасывать её попросту некому, да и ненужно это - запустилась и работает.


Вы вручную что ли все разводить собираетесь?
А кто без ресета все в нужное начальное состояние устанавливает?

SM
Цитата(Jackov @ Jan 23 2015, 19:22) *
Не хотелось бы. Это до каждого триггера пойдёт линия сброса - усложняет трассировку,

Это, с какого перепуга то? У Вас и так резет обязан быть. Вот к нему и примешать lock.
DuHast
Только меня смущает, что на MHz33_6 не будет ни какой частоты?
Jackov
Цитата(Hose @ Jan 23 2015, 20:10) *
Яков, начните с изучения плл. Он красиво нарисован в описании на семейство... И есть у меня такое подозрение, что там уже реализовано отключение выхода при отсутствии захвата. Если не найдете, или нет такой функции, то не стоит делать, поскольку захват плл - штука условная и аналоговая, учитывая ширину петли альтеровского плл. Устанете потом искать куда пропадают такты.
Что я могу сказать? Смотрел осциллографом, когда этот locked переходит в 1 частота к этому времени действительно стабилизируется. А без него схема сбоит.

Цитата(Opex @ Jan 23 2015, 20:18) *
У альтеры вон есть какой-то Clock Control Block, и у него есть вход enable, 0 подать, и не будет выходить клок.
Ага, спасибо за наводку, посмотрю.

Цитата(Opex @ Jan 23 2015, 20:18) *
Вы вручную что ли все разводить собираетесь?
Цитата(SM @ Jan 23 2015, 20:51) *
Это, с какого перепуга то?
Я, конечно, утверждать не берусь, но рассуждая логически, чем сложнее трассировка, тем хуже тайменги, а у меня и так констрейны с натяжкой сходятся.
Хотя если для асинхронного сброса есть специально выделенная сеть, как для клоков, тогда да, тогда усложнить не должно.

Цитата(Opex @ Jan 23 2015, 20:18) *
А кто без ресета все в нужное начальное состояние устанавливает?
Цитата(SM @ Jan 23 2015, 20:51) *
У Вас и так резет обязан быть. Вот к нему и примешать lock.
Ну почему же обязан? Кто ПЛИСку ресетить будет? Некому её ресетить. Я не знаю как у Хилых, но Альтера гарантирует при старте нулевые состояния на всех триггерах.

Цитата(DuHast @ Jan 23 2015, 21:36) *
Только меня смущает, что на MHz33_6 не будет ни какой частоты?
Она там есть, только 70 Мгц - имена старые остались.
DuHast
Цитата(Jackov @ Jan 23 2015, 21:40) *
Она там есть, только 70 Мгц - имена старые остались.

У Вас
MHz33_6 = locked AND (locked задержанный на такт)
откуда там клок?
SM
Цитата(Jackov @ Jan 23 2015, 21:40) *
Хотя если для асинхронного сброса есть специально выделенная сеть, как для клоков, тогда да, тогда усложнить не должно.

Именно так. Тем более, что домешивание LOCK к и так имеющемуся резету, добавит лишь один логический элемент во всю схему, никак более ее не изменив.
ViKo
Вижу в Мегавизарде Альтеры Enable self-reset on loss lock. Отметить галкой и забыть про сбои.
Jackov
Цитата(DuHast @ Jan 23 2015, 21:43) *
У Вас
MHz33_6 = locked AND (locked задержанный на такт)
откуда там клок?

Да, картинку криво нарисовал, верхний вход элемента И должен быть подключён к клоку от PLL.
Jackov
Цитата(ViKo @ Jan 23 2015, 22:00) *
Вижу в Мегавизарде Альтеры Enable self-reset on loss lock. Отметить галкой и забыть про сбои.
Посмотрел, это не то.

Цитата(SM @ Jan 23 2015, 21:52) *
Именно так. Тем более, что домешивание LOCK к и так имеющемуся резету, добавит лишь один логический элемент во всю схему, никак более ее не изменив.
Нет желания возиться с этими сбросами, хотелось бы обойтись малой кровью.

Цитата(Opex @ Jan 23 2015, 20:18) *
У альтеры вон есть какой-то Clock Control Block, и у него есть вход enable, 0 подать, и не будет выходить клок.
Да, нашёл:
Нажмите для просмотра прикрепленного файла
Пожалуй остановлюсь на этом варианте. Завёл locked с PLL на вход разрешения напрямую, надеюсь пичёк в начале не проскочит.
Opex
Xilinx, кстати, не рекомендует использовать такое отключение клока, а вместо этого использовать входы CE.

Xilinx® recommends that you use the CLB clock enable pin instead of gated clocks.
Gated clocks can cause glitches, increased clock delay, clock skew, and other undesirable
effects. Using clock enable saves clock resources, and can improve timing
characteristic and analysis of the design.
If you want to use a gated clock for power reduction, most FPGA devices now have a
clock enabled global buffer resource called BUFGCE. However, a clock enable is still the
preferred method to reduce or stop the clock to portions of the design.
Jackov
Цитата(Opex @ Jan 26 2015, 18:18) *
а вместо этого использовать входы CE.

Это где они находятся?
Opex
В триггерах всяких, и т.д.
Просто рекомендуется писать

if (enable) begin
...
end

если нужна отключаемая часть схемы, а что и как там конкретно отключится - среда сама разберется.
Почти то же самое, что и ресет, только просто на паузу ставится. Поддерживается аппаратно, дополнительных ресурсов не потребует, трассировку дополнительно не усложнит.
Jackov
Цитата(Opex @ Jan 29 2015, 18:24) *
if (enable) begin
...
end

Обратно не понял. Если так написать, то это получится обыкновенный DV-триггер на базе D-триггера плисочного, и эта DV логика потребует ресурсов.
SM
Цитата(Jackov @ Jan 29 2015, 22:06) *
DV-триггер на базе D-триггера плисочного,


Что такое DV-триггер?

А это синтезируется, скорее всего, в подачу сигнала "enable" на вход CE "обычного плисочного триггера", а на вход его данных будет подано то, что внутри этого условия описано.
Jackov
Цитата(SM @ Jan 29 2015, 22:27) *
Что такое DV-триггер?
Если V == 1, триггер работает как обычный D, если V == 0, хранит своё состояние. Как-то так:
Нажмите для просмотра прикрепленного файла

Цитата(SM @ Jan 29 2015, 22:27) *
А это синтезируется, скорее всего, в подачу сигнала "enable" на вход CE "обычного плисочного триггера", а на вход его данных будет подано то, что внутри этого условия описано.
CE это который вот этот?
Нажмите для просмотра прикрепленного файла
Кстати да, этот вход давно мне покоя не даёт. Где-то слышал или читал, что это разрешение клока. Но это разрешение надо подавать синхронно клоку или необязательно? И как к нему достучатся из верилога? Что-то мне подсказывает, что одним таким условием не обойдёшься, скорее всего надо ещё и настройки компилятора крутить.
doom13
Цитата(Jackov @ Jan 29 2015, 23:36) *
Кстати да, этот вход давно мне покоя не даёт. Где-то слышал или читал, что это разрешение клока. Но это разрешение надо подавать синхронно клоку или необязательно? И как к нему достучатся из верилога? Что-то мне подсказывает, что одним таким условием не обойдёшься, скорее всего надо ещё и настройки компилятора крутить.

Достучаться, как и написано выше
Код
always@(posedge clk)begin
    if(en) q <= d;
end

Krys
Цитата(Opex @ Jan 26 2015, 21:18) *
Xilinx, кстати, не рекомендует использовать такое отключение клока, а вместо этого использовать входы CE.
CODE

Xilinx® recommends that you use the CLB clock enable pin instead of gated clocks.
Gated clocks can cause glitches, increased clock delay, clock skew, and other undesirable
effects. Using clock enable saves clock resources, and can improve timing
characteristic and analysis of the design.
If you want to use a gated clock for power reduction, most FPGA devices now have a
clock enabled global buffer resource called BUFGCE. However, a clock enable is still the
preferred method to reduce or stop the clock to portions of the design.

Судя из приведённого текста (к стати, дайте плиз линк на исходник), наоборот, хилинх рекомендует использовать именно такой глобальный тактовый буфер с входом разрешения.
SM
Цитата(Jackov @ Jan 29 2015, 23:36) *
Кстати да, этот вход давно мне покоя не даёт. Где-то слышал или читал, что это разрешение клока. Но это разрешение надо подавать синхронно клоку или необязательно? И как к нему достучатся из верилога? Что-то мне подсказывает, что одним таким условием не обойдёшься, скорее всего надо ещё и настройки компилятора крутить.


Да, подавать надо с соблюдением Tsu и Th, но это проследит сам разводчик. Как достучаться - установить этот триггер в виде примитива (модуля) (для LatticeXP2, например, так - FD1P3AY ff_inst (.D(data), .SP(en), .CK(clk), .Q(data_out) ). Название примитива и имена портов следует смотреть в хелпе на конкретное семейство ПЛИС. Так как, используя условие в верилоге, синтезатор заведет его на CE только в том случае, если это будет выгоднее других способов по взвешенной оценке всех критериев оптимизации. Для того же Lattice, например, оно начинает пользоваться CE тогда, когда достаточно много триггеров его использует, так как CE, как и резеты, могут быть подключены к вторичным глобальным линиям, которые экономят ресурс разводки для сильно разветвленных сигналов.
ViKo
Точно так же, как и подавать данные на D вход.
Могу даже предположить, что CE на самом деле не затрагивает тактовый сигнал никак, а манипулирует именно с данными. Можно влезть в структуру триггера и разобраться.
SM
Цитата(ViKo @ Feb 2 2015, 11:36) *
Можно влезть в структуру триггера и разобраться.

В среднестатистическом триггере затрагивает именно клок. Так как один элемент 2И-НЕ, нужный для реализации CE по клоку, это 4 транзистора, а 2-2И-ИЛИ + 1 инвертор, что надо для реализации по данным, аж считать лень сколько.... (на вскидку где-то 14 штук)
ViKo
Книжка есть - Пухальский, Новосельцева. Цифровые устройства.
Там можно почитать, что да как.
SM
Цитата(ViKo @ Feb 2 2015, 12:01) *
Там можно почитать, что да как.

Есть куда более точные источники - например SPICE модели стандартных ячеек из технологических библиотек. Если не лень читать схему в виде SPICE описания, я выложу. У меня есть в запасе и те, где клок отключают, и где данные коммутируют аналоговыми ключами, первых больше, чем вторых.

PS
Хотя, извините, нет, не выложу. NDA, черт бы его побрал.
Opex
Цитата(Krys @ Feb 2 2015, 13:04) *
Судя из приведённого текста (к стати, дайте плиз линк на исходник), наоборот, хилинх рекомендует использовать именно такой глобальный тактовый буфер с входом разрешения.


Вы прочитали невнимательно.
ug626 - Synthesis and Simulation Design Guide.

Jackov
Цитата(SM @ Feb 2 2015, 11:34) *
Как достучаться - установить этот триггер в виде примитива (модуля)
Проблематично, слишком много таких триггеров.
SM
Цитата(Jackov @ Feb 2 2015, 19:27) *
Проблематично, слишком много таких триггеров.

А Вам зачем об этом думать? Синтезатор что ли что-то куда-то впихнуть не может?

Если их много, их можно в цикле "for generate" расставить... например...
Jackov
Цитата(SM @ Feb 2 2015, 19:45) *
А Вам зачем об этом думать? Синтезатор что ли что-то куда-то впихнуть не может?

Если их много, их можно в цикле "for generate" расставить... например...

Видимо я чего-то недопонимаю.
Стоит задача заблокировать работу схемы в момент когда ПЛЛ выдаёт нестабильную частоту. Для этого вывод lock у ПЛЛ заводим на вход СЕ триггерам, притом всем (можно не всем, а только критичным) триггерам в схеме, ибо все триггеры должны быть заблокированы. И вот не совсем понято как это написать. Приходит на ум способ описания асинхронного сброса
Код
always @(posedge CLK or posedge aReset)
begin
    if(aReset)
    begin    Q = 1'd0; end
        else begin Q = D; end
end

Только вместо aReset должен быть этот самый СЕ, но как я разумею в Верилоге такого нет.
А как через generate организовать, чёт не соображу.
SM
Извращение какое. Зачем его разводить по всей схеме? Пустите весь клок через него, используя элемент навроде DCS у Lattice ( стр. 19-20 в документе ), если уж так приспичит. Хотя, самое правильное, пускать его именно на асинхронный резет вместе с общим резетом, так как, при сбое, lock может пропасть уже после того, как сам клок сбойнет. Детектор lock-а не умеет предугадывать сбои. Хотя я за все время ни разу не видел такое вживую, чтобы лок пропадал при стабильном входном клоке.
Krys
Цитата(Opex @ Feb 2 2015, 18:28) *
Вы прочитали невнимательно.
очень внимательно. Написано: не используйте гейтед клок. Но если всё же надо, то используйте глобальный буфер с разрешением. Глобальный буфер с разрешением - не совсем гейтед клок.


Цитата(Jackov @ Feb 3 2015, 00:21) *
Только вместо aReset должен быть этот самый СЕ, но как я разумею в Верилоге такого нет.
Откройте тот самый документ от Opex: http://www.xilinx.com/support/documentatio...inx14_7/sim.pdf Стр. 62, там один в один Ваш код. Ну и что, что название сброс, а не разрешение? Для машины нет разницы, как Вы его назвали.
Opex
Цитата(Krys @ Feb 3 2015, 08:36) *
очень внимательно. Написано: не используйте гейтед клок. Но если всё же надо, то используйте глобальный буфер с разрешением. Глобальный буфер с разрешением - не совсем гейтед клок.


The BUFGCE primitive creates an enabled clock buffer using the BUFGMUX select mechanism.
BUFGCE is a global clock buffer with a single gated input.

...most FPGA devices now have a clock enabled global buffer resource called BUFGCE.
Тот самый глобальный буфер с разрешением. А дальше
However, a clock enable is still the preferred method to reduce or stop the clock to portions of the design.
Противопоставление СЕ этому буферу.

Krys
Это всё понятно. Однако просто гейтед клок в их понимании - это когда тактовая стробируется прямо на обычных лутах. Это страшно, и чтобы было не так страшно они советуют ставить глобальный буфер с разрешением.
Ну а фраза
Цитата
a clock enable is still the preferred method
- тут есть слово предпочтительный, но не значит же, что mandatory. Т.е. кто разобраться сам не может - ему подсказывают, что раз не можете, тогда не парьтесь, а поверьте нам. Но кто может разобраться - тот уж сам выберет, что ему надо. preferred - это не категорично.
Opex
Советуем использовать одно, но лучше используйте другое?
Я, наверное, еще не очень понимаю их хитрую индийскую логику laugh.gif
Jackov
Цитата(Krys @ Feb 3 2015, 06:36) *
там один в один Ваш код.
Не совсем, у меня в always-е два сигнала фигурируют, там один. Попробую завтра так сделать, отпишусь что получилось.
Krys
Цитата(Opex @ Feb 3 2015, 21:02) *
Советуем использовать одно, но лучше используйте другое?
Я, наверное, еще не очень понимаю их хитрую индийскую логику :laugh:
Вам что, надо выкрутиться любой ценой? Или в каком-то информационном состязании победить, закрыв глаза на всё?

Я освежу историю, с чего всё началось.

Был совет использовать глобальный буфер с разрешением.
Вы сказали, что так делать не рекомендуется, приведя фрагмент текста на английском, где сказано, что не рекомендуется гейтед клок, а вместо этого лучше глобальный буфер с разрешением.
Я возразил, что наоборот рекомендуется.
И тут Вы начали выкручиваться.

Моё понимание того фрагмента на английском: "гейтед клок не рекомендуется, лучше вместо него глобальный буфер с разрешением (не являющийся в чистом виде тем, что они понимают под гейтед клок). Но предпочтительным остаётся использование CE в каждом триггере".
И ещё раз: "предпочтительно CE, но и глобальный буфер вполне пойдёт вместо чистого гейтед клока. Вот гейтед клок - тут уж точно лучше не использовать". Что значит "предпочтительно"? Это может значить, например, что с весовым коэффициентом 51% предпочтительно CE, но во многих случаях (например 49%) удобнее глобальный буфер с разрешением. Так что тут разработчик должен оценить все обстоятельства и принять решение, одно из двух, оба не возбраняются. Если он не в состоянии принять решение - то тогда ему говорят предпочтительно CE.

Итого: на исходный вопрос можно ли использовать глобальный буфер с разрешением ответ - вполне, и это следует в частности из того текста на английском.

Цитата(Jackov @ Feb 3 2015, 23:41) *
Не совсем, у меня в always-е два сигнала фигурируют, там один
Ну да, у Вас асинхронный сброс, не вчитался. Просто сотрите его из олвейза ))) Будет сброс синхронный, а засинтезируется он как клок енэйбл. И наверняка (потом покажете кусок схемы) он ляжет как дополнительный вход LUTа, стоящего перед входом данных триггера. По опыту, не хочет синтезатор подключать сигналы типа CE к соответствующим входам триггера, лучше ему через LUT. Ну на то есть причины конечно (хотя это касается Xilinx, в Альтере может и захочет).
Opex
Цитата(Krys @ Feb 4 2015, 08:09) *
Вам что, надо выкрутиться любой ценой? Или в каком-то информационном состязании победить, закрыв глаза на всё?

Откуда выкрутиться? Я куда-то попал?
Во все глаза искал совет использовать BUFGCE, видел только CE. Ткните уже носом, куда смотреть.
Я вот вижу:
Xilinx® recommends that you use the CLB clock enable pin instead of gated clocks.
If you want to use a gated clock for power reduction, most FPGA devices now have a
clock enabled global buffer resource called BUFGCE. However, a clock enable is still the
preferred method to reduce or stop the clock to portions of the design.

Перевод такой:
Xilinx рекомендует использовать CLB CE вместо gated clocks.
В ПЛИСах теперь есть BUFGCE, однако лучше использовать CE.

Неправильно перевожу? Или есть другой источник сведений?

Цитата(Krys @ Feb 4 2015, 08:09) *
Моё понимание того фрагмента на английском: "гейтед клок не рекомендуется, лучше вместо него глобальный буфер с разрешением

Понял, у меня с английским проблемы.

Приоритет по предпочтительности использования:

1) BUFGCE.
2) CLB CE.
3) Gated clock.

Так получается?
SM
Цитата(Opex @ Feb 4 2015, 19:02) *
1) BUFGCE.
2) CLB CE.
3) Gated clock.

Так получается?

Нет. Не так.

1) CLB CE.
2) BUFGCE.
3) Gated clock.

Но, в данном, конкретном случае, явно BUFGCE просится, ввиду особенности задачи.
ViKo
Топикстартеру надо пересмотреть свою позицию:
Цитата
Это до каждого триггера пойдёт линия сброса - усложняет трассировку, а если сброс делать синхронным то ещё и логику. Конечно, можно не каждый триггер сбрасывать, а только нужный, но это надо думать какие нужно, какие нет, а думать над этим желания нет, т.к. у меня в проекте сброс вообще не предусмотрен, ПЛИСка в устройстве одна и сбрасывать её попросту некому, да и ненужно это - запустилась и работает.
Krys
Цитата(ViKo @ Feb 5 2015, 00:23) *
Топикстартеру надо пересмотреть свою позицию:
В чём конкретно?


Цитата(SM @ Feb 4 2015, 23:55) *
1) CLB CE.
2) BUFGCE.
3) Gated clock.
Но, в данном, конкретном случае, явно BUFGCE просится, ввиду особенности задачи.
Поддерживаю. Да и задача то вполне распространённая. Поэтому я и говорю "предпочтительно" - это может означать например 51% против 49% случаев, так что грань в решении весьма неоднозначная, нужно учитывать свои особенности.
А приоритеты я бы даже так расставил:
1) CLB CE.
2) BUFGCE.
100) Gated clock
, показывая, что BUFGCE довольно близко к CLB CE и лишь немного уступает последнему для общего случая (для конкретного может не уступать).

Цитата(Opex @ Feb 4 2015, 22:02) *
Откуда выкрутиться? Я куда-то попал?
Вам возразили. Для многих это недопустимо, и надо с этим не соглашаться до последнего во что бы то ни стало.


Цитата(Opex @ Feb 4 2015, 22:02) *
Xilinx® recommends that you use the CLB clock enable pin instead of gated clocks.
If you want to use a gated clock for power reduction, most FPGA devices now have a
clock enabled global buffer resource called BUFGCE. However, a clock enable is still the
preferred method to reduce or stop the clock to portions of the design.

Перевод такой:
Xilinx рекомендует использовать CLB CE вместо gated clocks.
В ПЛИСах теперь есть BUFGCE, однако лучше использовать CE.

Неправильно перевожу? Или есть другой источник сведений?
Нет, другого источника нет, кроме, пожалуй, опыта и сухого остатка от прочтения других доков возможно и от других плис. Переводите наверное правильно. Но вот воспринимаете не совсем (ИМХО). Я бы перевёл так:
1. Xilinx рекомендует использовать CLB CE вместо gated clocks.
2. Но если всё же gated clocks нужен, то В ПЛИСах теперь есть BUFGCE,
3. Однако лучше предпочтительнее использовать CE. При том даже не так. Дословный перевод данного пункта более мягкий: "тем не менее, CE всё ещё является предпочтительным методом...". Т.е. так написано, чтобы показать отсутствие категоричности в использовании CE вместо BUFGCE.

ViKo
Krys, перечитайте тему с начала, что не задавать неотвечаемое.

Диву даюсь - обсуждаются способы манипуляции тактовой частотой, которая еще не установилась.
Krys
Цитата(ViKo @ Feb 5 2015, 12:08) *
Krys, перечитайте тему с начала, что не задавать неотвечаемое.
Почему же неотвечаемое? Перефразирую вопрос: что в процитированном Вами фрагменте Вам не понравилось?
SM
Цитата(Krys @ Feb 5 2015, 05:27) *
100) Gated clock

Да не 100) он, а именно 3). Просто, его надо уметь готовить - им пугают не знающих, так как легко можно получить глитчи в клоке при некорректном использовании. Но стоит подумать пару минут, и нарисовать диаграммы включение и выключения, и все встанет на свои места, как избежать этих глитчей. Во всем остальном (почти, еще задержка будет другая, но вполне детерминированная) он от BUFGCE, где безглитчевая схема встроена, и ее самому описывать не надо, не отличается.
ViKo
Цитата(Krys @ Feb 5 2015, 10:07) *
Почему же неотвечаемое? Перефразирую вопрос: что в процитированном Вами фрагменте Вам не понравилось?

"думать над этим желания нет" - а там, может, всего от пары триггеров и зависит зависание всей схемы. Это еще надо умудриться подвесить схему.
"усложняет трассировку" - для сброса есть специально выделенные цепи, вплоть до глобального сброса каждого триггера.
- я не смотрел конкретно, но разве та галочка в мегавизарде self-reset on loss lock не спасает, пока тактовая частота не установится?
Krys
Цитата(SM @ Feb 5 2015, 14:34) *
Да не 100) он, а именно 3)

Тогда так:
1) CLB CE.
1,15) BUFGCE.
3) Gated clock.

)))))
Jackov
Цитата(Jackov @ Feb 3 2015, 20:41) *
Не совсем, у меня в always-е два сигнала фигурируют, там один. Попробую завтра так сделать, отпишусь что получилось.

Цитата(Krys @ Feb 4 2015, 06:09) *
Ну да, у Вас асинхронный сброс, не вчитался. Просто сотрите его из олвейза ))) Будет сброс синхронный, а засинтезируется он как клок енэйбл. И наверняка (потом покажете кусок схемы) он ляжет как дополнительный вход LUTа, стоящего перед входом данных триггера. По опыту, не хочет синтезатор подключать сигналы типа CE к соответствующим входам триггера, лучше ему через LUT. Ну на то есть причины конечно (хотя это касается Xilinx, в Альтере может и захочет).
В общем вот. Имеем такой код:
Код
module test(output reg Q, input D, En, input Clk);
    always @(posedge Clk)
    begin
        if(En)
        begin
            Q = D;
        end
    end
endmodule
Синтезатор, вроде, ссинтезировал правильно
Нажмите для просмотра прикрепленного файла
А вот как развелось
Нажмите для просмотра прикрепленного файла
Такое ощущение, что надо чего-то в настройках повращать.
Запускал в Квартуе 9.1 для Циклона 4.

Цитата(SM @ Feb 4 2015, 20:55) *
1) CLB CE.
2) BUFGCE.
3) Gated clock.

Но, в данном, конкретном случае, явно BUFGCE просится, ввиду особенности задачи.
Поясните ньюфагу по хардкору. Если всё правильно понял, то Gated clock - это разрешение клока на триггере, BUFGCE - переключатель клоков с входом разрешения. CLB CE - это что за зверь?


Цитата(ViKo @ Feb 4 2015, 21:23) *
Топикстартеру надо пересмотреть свою позицию:
Разверните мысль, пожалуйста.
ViKo
Развернул уже, и не раз.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.