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

Constraint для clock domain crossing в Altera

Есть модуль, который принимает данные на одной частоте, отдает на другой. Оба клока (155 и 250 МГц) порождаются внутри схемы - один внутри Ethernet PHY, второй внутри PCIe-IP. Quartus выдает дикие слэки - больше 5нс, из которых около 80% приходится на clock delay (ровно 5нс, еще примерно 0.8нс - data delay). Пробовал разные констрейны, результат не меняется:

 

//Запихиваю длинные пути к клокам, на которые ругается Quartus, в переменные

set clk1 system|wrapper_mux_avl_2ch|phy_10gbaser_inst|...|g_fpll.altera_pll_156M~PLL_OUTP

UT_COUNTER|divclk

set clk2 system|pcie_256_dma|altera_s5_a2p|altpcie_hip_256_pipen1b|stratixv_hssi_gen3_pci

e_hip|coreclkout

 

//Вариант 1:

set_false_path -from [get_clocks {$clk1}] -to [get_clocks {$clk2}]

 

//Вариант 2:

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

 

Подскажите, пожалуйста, что я делаю не так.

Qusrtus 14, Stratix V

 

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


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

Оба клока (155 и 250 МГц)

Подскажите, пожалуйста, что я делаю не так.

Вы не корректно делаете CDC. клоки асинхронные и не кратные. Используйте FIFO/RAM.

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


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

set_false_path -from [get_clocks {$clk1}] -to [get_clocks {$clk2}]

 

//Вариант 2:

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

Ваши констрейны не работают. Макроподстановка изнутри {} не выполняется. В данном случае можно писать без фигурных скобок, так как списки из одного элемента. Если нужно больше элементов, то использовать команду list:

неправильно: [get_clocks {$clk1 $clk2}]

правильно: [get_clocks

  1. ]

А вообще, чтобы отчёты выглядели красиво, по возможности следует руками описать все клоки, взяв команды из листинга derive_pll_clocks.

 

Ещё, чуть не забыл: если вдруг значение clk1 внутри содержит пробелы, то без

  • оно будет ошибочно принято за список и неверно интерпретировано, так что на всякий случай
    • стоит использовать даже для списка из одного элемента.
      • правильно прикроет пробелы внутри clk1 эскейп последовательностями, и пробелы не будут интерпретироваться, как разделители списка.
Изменено пользователем Timmy

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


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

неправильно: [get_clocks {$clk1 $clk2}]

правильно: [get_clocks

  1. ]

 

Можно еще так: [get_clocks "$clk1 $clk2"]

Кавычки, в отличие от фигурных скобок, разрешают подстановку.

 

Но лучше, всё-таки, с list.

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

 

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


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

Вы не корректно делаете CDC. клоки асинхронные и не кратные. Используйте FIFO/RAM.

 

Я, возможно, не совсем корректно выразился - в самом модуле, где происходит перетактовка, у меня, конечно же, стоит двухпортовая память.

 

Ваши констрейны не работают. Макроподстановка изнутри {} не выполняется. В данном случае можно писать без фигурных скобок, так как списки из одного элемента. Если нужно больше элементов, то использовать команду list:

неправильно: [get_clocks {$clk1 $clk2}]

правильно: [get_clocks

  1. ]

А вообще, чтобы отчёты выглядели красиво, по возможности следует руками описать все клоки, взяв команды из листинга derive_pll_clocks.

 

Ещё, чуть не забыл: если вдруг значение clk1 внутри содержит пробелы, то без

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

 

Большое спасибо - помогло!

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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