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

Как правильно сместить выходные данные относительно выходного клока?

Добрый день, коллеги!

Давно я не работал с синхронной памятью, и немного стал подзабывать тонкости. Непосредственно сам вопрос в заголовке. Но если рассмотреть более подробно, то пусть имеется вот такая упрощенная диаграмма, ее нужно реализовать на выходе ПЛИС:

wr_wf.thumb.png.bd0ed41e18e6ab2648d2d7b96267b788.png

Имеется выходной клок CLK и выходные данные DQ (на самом деле это двунаправленная шина, но сейчас не важно).

Есть ограничения на 'data setup' и 'data hold', пусть для примера Tds = 1.5 ns, Tdh = 0.8

 

1. Как правильно написать констрейт? Например так будет корректно?

set_output_delay -max -clock clk -1.5  [get_ports {DQ}]
set_output_delay -min -clock clk +0.8 [get_ports DQ}]

 

2. Как правильно вывести выходной клок CLK относительно внутреннего. Будет ли достаточно сформировать его на PLL без смещения фазы? Или здесь тоже нужны констрейты?

 

3. Нужно ли для сигнала DQ устанавливать выходной триггер в ножке? Или в данном случае это неправильно и синтезатор не сможет так обеспечить требуемые Tds и Tdh

 

4. Ну и последний вопрос. Следует ли учитывать в контрейтах задержки при распространении сигналов на плате? Где то в примерах видел, что добавляют погрешность +/- 100 ps
Получается, что Tds = 1.5+0.1 = 1.6 ns; Tdh = 0.8+0.1 = 0.9 ns 

 

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


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

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

Указывая Ts и Th - вы просто контролируете в отчетах о слаках будет ли на стороне приемника правильное положение фронта клока, относительно данных. Синтезатор даже может задействовать всякие задержки внутри выходных буферов(если таковы имеются), чтобы саков не было. Но это не панацея. Поэтому часто выходной клок формируется отдельной pll, где вы уже двигаете этот клок так, как вам надо. Ну или банально инвертируете клок. На том-же самом DDR регистре.

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


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

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

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

Указывая Ts и Th - вы просто контролируете в отчетах о слаках будет ли на стороне приемника правильное положение фронта клока, относительно данных. Синтезатор даже может задействовать всякие задержки внутри выходных буферов(если таковы имеются), чтобы саков не было. Но это не панацея. Поэтому часто выходной клок формируется отдельной pll, где вы уже двигаете этот клок так, как вам надо. Ну или банально инвертируете клок. На том-же самом DDR регистре.

Да, я так когда то и делал, двигал фазу выходного клока. Но там была опытная разработка и нужно было проверить на стенде работу алгоритма. Потому обмен с SDRAM делал на скорую руку. И мне тогда такое решение со сдвигом клока не очень понравилось. Подумал, может быть есть какие то более элегантные варианты.

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

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


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

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

2. вообще пофигу, это сорс-синхронная шина, дата привязана к выходному клоку  а не внутреннему

3. желательно, но необязательно

4. можете поджать констрейнты процентов на 10-20

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


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

On 4/24/2024 at 12:42 PM, gin said:

Следует ли учитывать в контрейтах задержки при распространении сигналов на плате?

Следует. Если длины отдельных сигналов в шине не выровнены.
Ну и еще учитывается разница в распространении сигналов от пина чипа до его внутреннего вх/вых блока.

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


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

3 часа назад, Yuri124 сказал:

Ну и еще учитывается разница в распространении сигналов от пина чипа до его внутреннего вх/вых блока.

По идее, если использовать триггер, расположенный в пине, то от этого триггера до физического выхода - там совсем копеечная задержка выйдет?

 

 

Посмотрел пример, который дает Terasic для своей отладочной платы.

Так там они выходной клок двигают именно на PLL. Причем для частоты 100 МГц сдвиг  - минус 3 нс. Т.е. клок как бы опережает данные. Любопытно.  Очень похоже просто на некое магическое число, экспериментально подобранное для конкретной электрической схемы. Констрейнты у такие:

set_output_delay -max -clock clk_dram_ext 1.6  [get_ports {DRAM_DQ* DRAM_*DQM}]
set_output_delay -min -clock clk_dram_ext -0.9 [get_ports {DRAM_DQ* DRAM_*DQM}]

 

Судя по всему, без PLL в такой задаче не обойтись. Смещение выходного клока - на нем, а констрейнты - только для контроля правильности разводки. Причем, видимо, сдвиг на PLL нужно отдельно рассчитывать исходя из тактовой частоты. Для 100 МГц - один, для 200 - другой.

Эх, а как хотелось бы сделать универсально... 

 

 

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


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

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

 

Эх, а как хотелось бы сделать универсально... 

 

По идее у каждого производителя должно быть типовое решение.

У Альтеры есть документ

Implementing a Source Synchronous Interface

between Altera FPGAs

 

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


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

Двигать клок относительно данных, или данные относительно клока - без разницы. При этом если двигать клок, то нужно двигать именно клок тактирующий выходные флопы, а не тот что наружу выходит. А если двигать дату, то нужно флопы размещать подальше от выхода, так что от идеи с размещение флопов в паде придется отказаться.

При этом мне кажется что при правильных констрейнтах (плюс в сетапе и минус в холде, как я написал, и как в примере терасика) тул сам затянет клок для выходных флопов и постарается разместить их так, чтобы выходная задержка уложилась в констрейнт. И да, не нужно пытаться разместить флопы в паде, это может сильно помешать. А вот выходной клок лучше сделать дедикейтед пином чтобы было поменьше лэтенси.

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

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


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

On 4/24/2024 at 12:42 PM, gin said:

1. Как правильно написать констрейнт?

2. Как правильно вывести выходной клок CLK относительно внутреннего?

3. Нужно ли для сигнала DQ устанавливать выходной триггер в ножке?

4. Следует ли учитывать в контрейнтах задержки при распространении сигналов на плате?

Altera:

an433.pdf

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


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

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

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

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

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

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

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

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

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

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