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

Правильный констрейн на выход, как его выполнить

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

create_clock -name {ifclk} -period 20.834 -waveform { 0.000 10.417 } [get_ports {ifclk}]


set_output_delay -add_delay  -max -clock [get_clocks {ifclk}]  [expr 14.600 + 2.500] [get_ports {pktend}]
set_output_delay -add_delay  -min -clock [get_clocks {ifclk}]  [expr 0 + 2.500] [get_ports {pktend}]


# при такой записи (set_multycycle_path -setup N и без -hold [N-1]) фиттер должен сделать так, чтобы самый длинный путь был не больше T*N, а короткий не короче T*[N-1]
set_multicycle_path -setup -start -to [get_keepers {pktend}] 2

Даже с использованием output register, констрейн по setup не выполняется. Решил применить set_multycycle_path, чтобы pktend сдвинуть  на такт. Опять не помогло. Да и разбег между Data Arrival Time у setup и hold стал слишком большой 46.552-36.550=10,002 нс. А у меня должно быть не более 20.834-14.6=6,234 нс.

FPGA-CycloneV. Используется преобразователь уровней, поэтому появилась задержка в приходе тактовой на FPGA 2.5 нс.

Также не могу понять значение clock delay нормально или великовато? Тактовая ifclk заведена на спец вход и является Global Clock. Провести ifclk через pll и сдвинуть по фазе не могу, уже две pll питаются от этого входа.

setup.thumb.png.1553f6a31bb58022aee768eb87456a37.pnghold.thumb.png.25b5a7fb1d7c39b84c73b68050ba4e3f.png

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


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

2 hours ago, dinam said:

Тактовая ifclk заведена на спец вход и является Global Clock. Провести ifclk через pll и сдвинуть по фазе не могу, уже две pll питаются от этого входа.

а тактовая на которой работает приемник сигнала с портов плис pktend откуда берется? с плис, раздатчика опоры и т.д. Ведь по идее, set_output_delay задает параметры tsu/th внешнего, относительно плис, "регистра"-приемника

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


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

Тактовую выдает сам приемник сигнала pktend. Приёмник выдает 48 МГц 3,3 В, а банк FPGA питается от 1,5 В. Поэтому используется преобразователь уровней.

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


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

Вопрос не понятен. Судя по вейвформам, переходные процессы (окно между hold и setup) сдвинулось на один период вправо, и данные пришли во втором такте, а не первом. Получилось что то около 3/4 периода сетап и около 1/4 периода холд (по скринам точнее не скажешь) - соотвествует требованиям задания констрейнтов set_output_delay. Итого, констрейнты, включая multicycle 2, выполнены, все в порядке.

Другое дело, что судя по скрину данные (data required) должны придти в первом такте а не втором ... но тогда малтисайкл использовать нельзя!

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


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

Я немного другое вижу. Во первых, тактовая FPGA немного задержана, относительно тактовой приёмника , поэтому для приёмника данные должны прийти во втором такте. Data Arrival Time у setup оказалось таким большим, что оно уже залезло на третий такт. 

Т.е. если не использовать set_multicycle_path, то с output register, наносекунд 6 не хватает, насколько я помню. Если использовать set_multicycle_path, то сразу перепрыгиваем на третий такт. А промежуточного значения не получается.

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


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

16 hours ago, dinam said:

Тактовую выдает сам приемник сигнала pktend. Приёмник выдает 48 МГц 3,3 В, а банк FPGA питается от 1,5 В. Поэтому используется преобразователь уровней.

Понятно, правда я такие вещи делаю через виртуальный клок в одной группе с вашим ifclk. Но тут это роли не играет. Все на ваших скринах верно. И задание ваших параметров и применение мультицикла.

Вы сами задали задержку выходного сигнала как 14.600 + 2.500+20.834 ~= 38нс, + задержка выходного буфера порядка 3нс, получается ваши 41 нс. Задержка тактового дерева, от ifclk до триггеров внутри плиса 4.7нс, затем от него отсчитывается ваше время 41.нс. Поэтому все четко по Data Arrival

По Data Required вы сами прописали себе окно по tsu = 14.6 + 2.5 = 17.1нс. Вот от него и отсчиталось время.

ЕМНИП для tsu/th нужно задать минимальное(наихудшее)  время предустановки/удержания исходя их характеристик чипа приемника. У вас по tsu действительно указано минимальное время предустановки 14.6нс или 70% периода частоты 20,834нс?  Настолько плохой чип?

Уберите для начала мультицикл, поставьте правильные значение tsu/th с учетом задержек трас и вашего буфера, проанализируйте картину. Может быть все решится подбором выходных задержек(если они есть в буферах). Ну а если нет, тогда на полтакта можно сдвинуться по выходу.

 

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


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

Это не самый "плохой" сигнал есть и tsu=18.7 нс, чип CY7C68013A. На полтакта это сделать по спадающему фронту? Если да, то надо почитать как правильно это сделать и констрейны прописать.

pktend.png

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


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

Just now, dinam said:

Это не самый "плохой" сигнал есть и tsu=18.7 нс, чип CY7C68013A. На полтакта это сделать по спадающему фронту? Если да, то надо почитать как правильно это сделать и констрейны прописать.

Ого, тогда печально( придется попотеть. Может просто pktend сделать 2 такта? я не помню интерфейс этого чипа) Да, на полтакта это инверсия клока в выходных буферах.

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


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

На мой взгляд, малтисайкл ни к чему здесь, а проблема - в фазах клока, поскольку, я так понял, с генератора тактирование подается и на ПЛИС, и на CY7C68013A, причем в ПЛИС явно клок задерживается больше. А лучше бы было наоборот, так что надо очень аккуратно задержать фазу приемного клока в CY7C68013A - пропустить через ПЛИС (взять клок с выхода), или скорректировать внешней RC. И еще, необходимо проанализировать возможности ПЛИС в выдаче сигнала pktend в интервале 0..14.6нс : если разница в репортах между сетап и холд окажется больше 14.6нс, то корректировки фазы недостаточно, и придется увеличивать период IFCLK.

+ Можно еще попробовать подвинуть фазу клока выходного триггера ptkend - вроде бы современные ПЛИС допускают небольшие манипуляции с деревом клока (на этапе мэппера). Но это лучше почитать в документации.

И еще замечание. Задержку внешнего преобразователя неверно считать как 2.5нс одинаковой и для сетап и для холд. Т.е. по сетап наверно правильно, а вот по холду лучше брать более жесткое (меньшее) значение, скажем 1.5нс (если в даташите не указан разброс задержек) - так гарантированно не промахнетесь.
 

 

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


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

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

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


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

я в свое время списал у Cypress задержку тактовой частоты на DDR регистре. И это был FX3, соответственно частота 100 MHz, а не 50

 

-- PCLK output
		u0 : entity work.clk_ddio PORT MAP (
				aclr			=> '0',--greset_h,
				datain_h		=> (others => '0'),
				datain_l		=> (others => '1'),
				outclock		=> clk100,
				dataout		=> FX3_PCLK);

 

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


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

to Sergey_Bekrenyov 

То ли не понял вашу идею, то ли не понял как её реализовать. Вы предлагаете способ уменьшить Clock delay, которая у меня порядка 5 нс? Если не сложно, можете чуть подробнее?

Сделал по спадающему такту. Все получилось.

setup_pktend.png

hold_pktend.png

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


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

4 minutes ago, dinam said:

То ли не понял вашу идею, то ли не понял как её реализовать. Вы предлагаете способ уменьшить Clock delay, которая у меня порядка 5 нс? Если не сложно, можете чуть подробнее?

У Сергея в коде инверсия на DDR регистре(посмотрите назначение h/l), это более хорошее решение, если DDR регистры в проекте есть

4 minutes ago, dinam said:

Сделал по спадающему такту. Все получилось.

вы как раз это и сделали)

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


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

6 hours ago, dinam said:

to Sergey_Bekrenyov 

То ли не понял вашу идею, то ли не понял как её реализовать. Вы предлагаете способ уменьшить Clock delay, которая у меня порядка 5 нс? Если не сложно, можете чуть подробнее?

Сделал по спадающему такту. Все получилось.

 

Задержать на 180 или инвертировать, все верно. 

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


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

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

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


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

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

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

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

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

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

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

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

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

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