Перейти к содержанию
    

Клок с регистра с разрешением

9 часов назад, Freibier сказал:

Интересуюсь чисто в образовательных целях.

Подскажите: 

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

ClkA и CLKB - выходы PLL плис. clkout - тактирует всю схему плис.

Сигналы clksel, clken формируются внешней мс  и поступают на обычные I/O плис.

Любое изменение сигнала clksel возможно только когда сигнал clken в нуле.

Длительность нуля на clken всегда больше 2-3 тактов минимальной из частот  (clkA,clkB).

На верилоге изобразил так:

 

module CLK( input clkA, clkB, clksel, clken, output clkout);

wire tclk = clksel ? clkA : clkB;

reg tenb;
always @(negedge tclk) tenb <= clken;

assign clkout = tclk & tenb;

endmodule

 

RTL:

2.thumb.jpg.b7b47553748bfe96932a22787f5362ae.jpg

 

Можно ли так делать?

 

Нужно больше исходных данных. В идеале надо применять клоковые мультиплексоры

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Jackov сказал:

Посмотрите вот здесь, начиная с 27:49

https://youtu.be/kju8fPDxi3Y?t=1669

Спасибо, полезная информация для меня.

38 минут назад, Flip-fl0p сказал:

Нужно больше исходных данных. В идеале надо применять клоковые мультиплексоры

Клоковые мультиплексоры это хардварные блоки плис предназначенные именно для этого?

Какие исходные данные еще нужны?

Сейчас не всегда можно купить ту FPGA которую хочется.

И некоторые проекты возможно вообще придётся переводить на cpld, а там вообще ничего нет. :biggrin:

Изменено пользователем Freibier

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Freibier сказал:

Спасибо, полезная информация для меня.

Клоковые мультиплексоры это хардварные блоки плис предназначенные именно для этого?

Какие исходные данные еще нужны?

Сейчас не всегда можно купить ту FPGA которую хочется.

И некоторые проекты возможно вообще придётся переводить на cpld, а там вообще ничего нет. :biggrin:

 

Из исходных данных.

1. Кто является источником мультиплексируемых клоков.

2. Кто является потребителем клока. Т.е итоговый клок выводится наружу или клок  исключительно внутри. 

3. Какие требования к выходному клоку. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 часов назад, Flip-fl0p сказал:

1. Кто является источником мультиплексируемых клоков.

2. Кто является потребителем клока. Т.е итоговый клок выводится наружу или клок  исключительно внутри. 

1. PLL самой плис

2. исключительно внутри

 

Я же писал :

Цитата

ClkA и CLKB - выходы PLL плис. clkout - тактирует всю схему плис.

Сигналы clksel, clken формируются внешней мс  и поступают на обычные I/O плис.

Любое изменение сигнала clksel возможно только когда сигнал clken в нуле.

Длительность нуля на clken всегда больше 2-3 тактов минимальной из частот  (clkA,clkB).

 

Цитата

3. Какие требования к выходному клоку. 

А какие требования должны/могут быть?

clkout поступает на одну из линий global clock плис.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 часов назад, Freibier сказал:

1. PLL самой плис

2. исключительно внутри

 

Я же писал :

 

А какие требования должны/могут быть?

clkout поступает на одну из линий global clock плис.

Не проще ли решить задачу тогда при помощи динамического реконфига PLL ? 

МК выдал команду - PLL сменил конфиг и выдает новую частоту. 

Цитата

Клоковые мультиплексоры это хардварные блоки плис предназначенные именно для этого?

Смотреть надо описание FPGA. С теми FPGA, с которыми я работаю, клоковые MUX - это хардаварные блоки. 

PS. Вкорячить клоковый MUX не сложно если он есть. Ну или перестроить PLL. Гораздо сложнее - правильно такой проект описать констрейнами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Flip-fl0p сказал:

Не проще ли решить задачу тогда при помощи динамического реконфига PLL ? 

Конечно проще, делаю так когда нужно. А сейчас у меня чисто академический вопрос.

Поскольку раньше никаких манипуляций с клоком не делал.

Всегда использовал то что приходит на ckl вход или формирует PLL.

Из видео ув. Jackov я получил исчерпывающий ответ.

1 час назад, Flip-fl0p сказал:

Гораздо сложнее - правильно такой проект описать констрейнами.

Думал всё просто, описать так же как описывается частота с выхода PLL или просто поступающая на пин.

Подскажите в чём сложность, какие нюансы?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, Freibier said:

Конечно проще, делаю так когда нужно. А сейчас у меня чисто академический вопрос.

Если чисто академический, то сначала надо погасить одну тактовую, потом включить другую. В теме про типовые блоки (в закрепе), есть код от @SM (к сожалению давно здесь не появляется) про мультиплексор тактовых. Правда у него есть один минус, если одна из тактовых отсутствует, переключения не будет. Поэтому для своих задач я добавлял еще асинхронную установку выхода. Переработанный мной код от @SM

module clock_switcher
(
  resetb ,  // clkout = resetb ? clkinb : clkina
  clkina ,
  clkinb ,
  sel    ,  // clkout = sel ? clkinb : clkina;
  clkout
);

  //------------------------------------------------------------------------------------------------------
  //
  //------------------------------------------------------------------------------------------------------

  input  logic  resetb; // clkout = resetb ? clkinb : clkina. resetb used if clkina can be absent
  input  logic  clkina;
  input  logic  clkinb;
  input  logic  sel   ; // clkout = sel ? clkinb : clkina;
  output logic  clkout;

  //------------------------------------------------------------------------------------------------------
  //
  //------------------------------------------------------------------------------------------------------

  logic [1:0] muxa;
  logic [1:0] muxb;

  wire ctrla = ~sel & ~muxb[1];
  wire ctrlb =  sel & ~muxa[1];

  always_ff @(negedge clkina or posedge resetb) begin
    if (resetb)
      muxa <= 2'b00;
    else
      muxa <= {muxa[0], ctrla};
  end

  always_ff @(negedge clkinb or posedge resetb) begin
    if (resetb)
      muxb[0] <= 1'b1;
    else
      muxb[0] <= ctrlb;
  end

  always_ff @(negedge clkinb) begin
    muxb[1] <= muxb[0];
  end

  assign clkout = (muxa[1] & clkina) | (muxb[1] & clkinb);

endmodule

 

11 hours ago, Freibier said:

Подскажите в чём сложность, какие нюансы?

в том что это ПЛИС, а не ASIC. Поэтому выход с тактовых трассировочных ресурсов на логику/выход с логики на тактовые трассировочные ресурсы обладает избыточной задержкой, которая может быть критична, при высоких тактовых.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, des00 said:

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

Ваше предложение однозначно прочитать не смог. Поэтому переспрошу.

Т.е. время распространения сигнала с глобальной клоковой линии на логику и возврат обратно на другую клоковую линию может быть критично.

Я правильно Вас понял?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, Freibier said:

Т.е. время распространения сигнала с глобальной клоковой линии на логику и возврат обратно на другую клоковую линию может быть критично?

Да. Особенно на современных ПЛИС. В приложении, Сыклон 5. Из картинок видно, что затащить логику на тактовую линию можно только через GCLK Control Block, а они стоят в определенных местах чипа. А затаскивание сигнала с тактовой в логику, может быть сопряжено с повышенным расходом логики. Т.к. эти линии действуют на весь LAB и на LUT непосредственно не идут. Там, ЕМНП, надо протаскивать эти сигналы через слой регистра в режиме повторителя и только потом на логику. Все это задержки, которые нужно учесть.

c5clock.png

c5wide.png

38 minutes ago, Freibier said:

Ваше предложение однозначно прочитать не смог. Поэтому переспрошу.

да я сам не смог)) поэтому поправил ошибки, как модератор))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. сигналы с глобальных линий клоков на логику и обратно занимают некоторое время t, и у разных плис это время разное.

Но если все триггеры плис тактируются только этим одним (уже вернувшимся на глобальную линию сигналом), то нужно ли вообще учитывать время t?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, Freibier said:

Т.е. сигналы с глобальных линий клоков на логику и обратно занимают некоторое время t, и у разных плис это время разное.

Но если все триггеры плис тактируются только этим одним (уже вернувшимся на глобальную линию сигналом), то нужно ли вообще учитывать время t?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ясно. Спасибо.

25 минут назад, des00 сказал:

либо в добавлении CDC логики

Т.е. в случае необходимости обмена данными между доменами тактируемыми исходным и мультиплексированным клоками - рассматривать эти клоки как асинхронные со всеми вытекающими?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

50 minutes ago, Freibier said:

в случае необходимости обмена данными между доменами тактируемыми исходным и мультиплексированным клоками - рассматривать эти клоки как асинхронные со всеми вытекающими?

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

Но, в зависимости от частоты и чипа, задержка может оказаться слишком большой - т.е. синтезатор не сможет расположить проект так, чтобы нивелировать ее величину.

Это ИМХО усложняется (затрудняется) тем, что синтезатор учитывает наихудшие возможные в данном кристалле задержки (для setup - максимальную, для hold - минимальную).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, Yuri124 сказал:

Но, в зависимости от частоты и чипа, задержка может оказаться слишком большой - т.е. синтезатор не сможет расположить проект так, чтобы нивелировать ее величину.

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

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

Если синтезатор смог нивелировать, то получаем положительный результат временного анализатора при требуемой частоте.

Если не смог, то временной анализатор сообщит максимально допустимую частоту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, Freibier said:

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

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

Если синтезатор смог нивелировать, то получаем положительный результат временного анализатора при требуемой частоте.

Если не смог, то временной анализатор сообщит максимально допустимую частоту.

зависит от умности синтезатора. тут как в случае многофазной синхронизации, частоты синхронны, но с задержкой по времени. Можно задержку между тактовыми уменьшить, а можно и по данным увеличить. Все синтезаторы, что мне попадались, уменьшать умеют, а вот увеличивать нет, там ручками(констрейнами) приходилось помогать.

Основное что тут нужно вынести и всегда помнить, что если делаем мультиплексор в рукопашную, то появляется сдвиг по времени между входной и выходной тактовой, порядка 5-7нс (путь в логику, логика, GCLK и обратно). И если между ними качаются данные, синтезатор естественно скажет на высоких частотах, что он не смог. Но победить это место, простыми методами: переборами сида, стратегией синтезатора и прочими умными настройками, не получится. Т.к. это физическое ограничение конкретной плис.

ЗЫ. Если этого не знать (читать документацию на чип), то некоторые разработчики, могут провести несколько дней в ступоре. Пока внимательно не изучат Detail Path Report во временном анализаторе и не сопоставят отсчет с Chip Editor

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...