Jump to content

    
zombi

Констрейны для DDR интерфейса

Recommended Posts

Есть внешняя мс подключенная к плис.

Эта мс формирует и данные и клок, режим DDR.

Клок поступает на dedicated clk pin плис, данные на обычные IO.

В даташите на мс оговорено что данные появляются на его выходе минимум за 5 нс до любого фронта клока и минимум 5 нс удерживаются после него.

Длина всех проводников одинаковая.

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

Проект работает, но чувство того что чего-то не хватает меня не покидает.

Надо ли какие-то set_input_delay добавить к SDC?

 

Share this post


Link to post
Share on other sites

Почитайте статьи Дениса Шехалева по sdc - он с примерами доступно объясняет. 

Во например - https://kit-e.ru/fpga/synopsys-design-constraint-yazyk-zadaniya-vremennyh-ogranichenij-na-primere-altera-timequest-chast-3/

Ну и он может и сам объявится и подскажет что непонятно.

Share this post


Link to post
Share on other sites

Насколько помню - в ПЛИС обычные входы могут иметь значительные задержки (емнип около 6 нс), поэтому даже при таком соотношении частот, вероятно, лучше всё же указать в sdc соотношение клока и даных.

Share this post


Link to post
Share on other sites
5 hours ago, zombi said:

Так на ней всё в порядке?

по холду верно, а по сетапу ИМХО не тот фронт они выбрали. Хуже они не сделали, но физический смысл изменили)

Share this post


Link to post
Share on other sites
2 minutes ago, zombi said:

А в констрейне 4 -max правильно записали? 

Насколько понял - эта картинка нарисована исходя из того, что на входе ПЛИС данные сменяются одновременно с фронтом (внешнего) клока (на входе ПЛИС).

У Вас же исходно - клок в середине данных. Т.е. Вам нужно ИМХО прописать задержки по нулям. Ну или в тех пределах, которые соответствуют таймингам конкретной ПЛИС.

Т.е. если 

16 hours ago, zombi said:

данные появляются на его выходе минимум за 5 нс до любого фронта клока и минимум 5 нс удерживаются после него

то можно в некотором окне разрешить Квартусу смещать данные относительно клока. Скажем, если задержать данные максимум на 3 нс, то будете иметь минимум 2 нс на сетап и минимум 5 нс на холд.

Share this post


Link to post
Share on other sites
6 minutes ago, zombi said:

А в констрейне 4 -max правильно записали? 

записано верно

3 hours ago, des00 said:

по холду верно, а по сетапу ИМХО не тот фронт они выбрали. Хуже они не сделали, но физический смысл изменили)

поправка, эта фраза относится к tsu/th входного регистра приемника. Если рассматривать выходной регистр передачтика (который и описывается командами set_input_delay), то картинка верная, как и запись. Максимальная задержка влияет на окно по tsu (сколько данные будут стоять до следующего фронта), минимальная на окно по th (сколько данные будут удерживаться после фронта). Логику и математику не обманешь

16 hours ago, zombi said:

Да, забыл написать - плис работает на частоте 150 МГц, а с внешней мс может поступать максимум 12 МГц.

функциональную схему стыка бы нарисовали, где указали путь обработки данных с микросхемы. все было бы намного проще.

Share this post


Link to post
Share on other sites
8 minutes ago, des00 said:

Если рассматривать выходной регистр передачтика (который и описывается командами set_input_delay), то картинка верная, как и запись

Спасибо! 

Не знаю - можно ли задавать отрицательные задержки на входе? Если да - то можно разрешить двигать данные в широких пределах, скажем +- 3 нс а то и больше (в зависимости от временнЫх параметров ПЛИС).

Share this post


Link to post
Share on other sites
1 minute ago, Yuri124 said:

Не знаю - можно ли задавать отрицательные задержки на входе?

задавать можно любые, вы же описываете временные параметры источника сигнала, а там могут быть отрицательные задержки, относительно общего источника тактовой частоты для микросхемы источника и для ПЛИС. Если в документации стоит отрицательное число, то его и нужно задавать (встречается например на ЦАПах когда внутри есть PLL/DLL)

1 minute ago, Yuri124 said:

Если да - то можно разрешить двигать данные в широких пределах, скажем +- 3 нс а то и больше (в зависимости от временнЫх параметров ПЛИС).

у xilinx там максимум полпериода опорной частоты 200/300/400МГц, у альтеры где то также. Поэтому в таких широких пределах врядли. По идее софт сам должен двигать эти задержки, но иногда ему нужна помошь, в виде "молотка и гвоздей", а иногда и "микроскопа", чтобы сделать динамически настраиваемую задержку.

Share this post


Link to post
Share on other sites
20 minutes ago, des00 said:

функциональную схему стыка бы нарисовали, где указали путь обработки данных с микросхемы. все было бы намного проще.

Не совсем понял о какой функциональной схеме Вы спрашиваете.

Реализовал так:

по обоим фронтам входного клока 12 МГц защелкиваю данные в регистрах (вот для них и пытаюсь констрейны записать)

стандартным образом частотой 150 МГц выделяю фронт частоты 12 МГц и использую этот сигнал как событие для дальнейших действий на частоте 150

Share this post


Link to post
Share on other sites
12 minutes ago, des00 said:

Поэтому в таких широких пределах врядли

Спасибо.

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

Просто мысль возникла - что, например, задержка во вх. IO буфере будет, скажем, 5 нс, а на CLK вх. буфере - меньше, например, 3 нс. Вот уже имеем сдвиг данных 2 нс. 

Т.е. сказать Квартусу - что это не страшно, чтобы он не наворачивал обратно эти 2 нс задержки на клок.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.