TimeQuest для чайников. Часть 3 (Клоки как вас много)

Клоки мультиплексируемые внутри

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

module mux (input sel, clk1, clk2, dat1, dat2, output oclk, output logic odat) ;

  assign mux_clk = sel ? clk1 : clk2;
  assign mux_dat = sel ? dat1 : dat2;

  always_ff @(posedge mux_clk) begin
    odat <= mux_dat;
  end

  assign oclk = mux_clk;

endmodule

sdc файл для такого проекта выглядит очень просто

derive_clock_uncertainty

create_clock -period 100MHz -name {clk1} [get_ports {clk1}]
create_clock -period 100MHz -name {clk2} [get_ports {clk2}]

set_clock_groups -exclusive -group {clk1} -group {clk2}

Как видите командой описания отношения клоков, мы говорим, что клоки clk1 и clk2 представляют собой эксклюзивные группы, т.е. цепь mux_clk рассматривается либо нагруженная клоком clk1, либо клоком clk2. Всё, больше ничего не нужно описывать. Остальное Quartus и TimeQuest определит и сделает сам.


Клоки мультиплексируемые снаружи

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

create_clock -period 100MHz -name {clk_100MHz} [get_ports {clk}]
create_clock -period  50MHz -name {clk_50MHz}  [get_ports {clk}] -add
create_clock -period  10MHz -name {clk_10MHz}  [get_ports {clk}] -add

Всё, анализ времянок на выполнение будет произведен по всем этим клокам автоматически.


Итого

Как видите алгоритм действия многочастотных проектах везде один :

1. Описать все клоки, идушие снаружи ПЛИС (create_clock)

2. Описать все клоки, генерируемые внутри ПЛИС (create_generated_clock/derive_pll_clocks)

3. Описать их соотношения, определив группы связанных клоков (set_clock_groups)

Алгоритм простой и понятный как автомат Калашникова. Как и обещал, ничего сложного %)


PS. Нашел в сети заметки об особенностях комманды set_closk_groups от Альтера Гуру

set_clock_groups notes

Using the set_clock_groups command without hiding domain-crossing signals 

Рекомендую ознакомиться, особенно с первой

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Syntax highlight code surrounded by the {syntaxhighlighter SPEC}...{/syntaxhighlighter} tags, where SPEC is a Syntaxhighlighter options string or "class="OPTIONS" title="the title".
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <p> <span> <s> <strike> <div> <h1> <h2> <h3> <h4> <h5> <h6> <img> <map> <area> <hr> <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <caption> <tbody> <tr> <td> <em> <b> <u> <i> <strong> <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code> <cite> <embed> <object> <param> <strike>
  • Использовать как разделитель страниц.

Подробнее о форматировании