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

Непонятки с констрейнами

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

Есть синхронный интерфейс с передачей по двум фронтам и 8 одинаковыми каналами.

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

На приемной стороне пишу следующие констрейны:

create_clock -name {s_clk_virtual[3]} -period $period_s_clk
create_clock -name {s_clk[3]} -period $period_s_clk [get_ports {fast_data_3[6]}]

set_multicycle_path -from [get_clocks {s_clk_virtual[3]}] -to [get_clocks {s_clk[3]}] 1

set_multicycle_path -setup -end -fall_from [get_clocks {s_clk_virtual[3]}] -rise_to [get_clocks {s_clk[3]}] 0
set_multicycle_path -setup -end -rise_from [get_clocks {s_clk_virtual[3]}] -fall_to [get_clocks {s_clk[3]}] 0

set_false_path -setup -fall_from [get_clocks {s_clk_virtual[3]}] -rise_to [get_clocks {s_clk[3]}]
set_false_path -setup -rise_from [get_clocks {s_clk_virtual[3]}] -fall_to [get_clocks {s_clk[3]}]
set_false_path -hold  -rise_from [get_clocks {s_clk_virtual[3]}] -rise_to [get_clocks {s_clk[3]}]
set_false_path -hold  -fall_from [get_clocks {s_clk_virtual[3]}] -fall_to [get_clocks {s_clk[3]}]

set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -max  0.5 [get_ports {fast_data_3[0]}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -max  0.5 [get_ports {fast_data_3[1]}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -max  0.5 [get_ports {fast_data_3[2]}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -max  0.5 [get_ports {fast_data_3[3]}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -max  0.5 [get_ports {fast_read_valid_3}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -max  0.5 [get_ports {fast_ready_3}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -min -0.5 [get_ports {fast_data_3[0]}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -min -0.5 [get_ports {fast_data_3[1]}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -min -0.5 [get_ports {fast_data_3[2]}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -min -0.5 [get_ports {fast_data_3[3]}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -min -0.5 [get_ports {fast_read_valid_3}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -min -0.5 [get_ports {fast_ready_3}]
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -max  0.5 [get_ports {fast_data_3[0]}]    -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -max  0.5 [get_ports {fast_data_3[1]}]    -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -max  0.5 [get_ports {fast_data_3[2]}]    -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -max  0.5 [get_ports {fast_data_3[3]}]    -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -max  0.5 [get_ports {fast_read_valid_3}] -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -max  0.5 [get_ports {fast_ready_3}]      -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -min -0.5 [get_ports {fast_data_3[0]}]    -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -min -0.5 [get_ports {fast_data_3[1]}]    -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -min -0.5 [get_ports {fast_data_3[2]}]    -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -min -0.5 [get_ports {fast_data_3[3]}]    -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -min -0.5 [get_ports {fast_read_valid_3}] -add_delay
set_input_delay -clock [get_clocks {s_clk_virtual[3]}] -clock_fall -min -0.5 [get_ports {fast_ready_3}]      -add_delay

После сборки смотрю Datasheet Report и вижу, что tsu в райное +-0.1, хотя я ожидал получить менше -0.5.

Причем проблема только с 3 каналом, для остальных tsu как я и рассчитывал в районе -0.6, -1.2.

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


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

17 hours ago, BSACPLD said:

После сборки смотрю Datasheet Report и вижу, что tsu в райное +-0.1, хотя я ожидал получить менше -0.5.

Причем проблема только с 3 каналом, для остальных tsu как я и рассчитывал в районе -0.6, -1.2.

Т.е. они у вас не сходятся или как ? 

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


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

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

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

Можно попробовать поиграться с различными seed (у Альтеры есть такое, но мне в свое время не помогло - похоже, что просто невозможно было в том проекте на той микросхеме).

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


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

@Yuri124 не в случае ввода/вывода. 95%, что шина 3 подключена на ноги двойного назначения, у них ёмкость больше

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


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

9 минут назад, des00 сказал:

@Yuri124 не в случае ввода/вывода. 95%, что шина 3 подключена на ноги двойного назначения, у них ёмкость больше

Если чип Альтеровский то есть такая замечательная ножка vrefb которую лучше избегать для скоростных вещей.

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


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

2 hours ago, des00 said:

Т.е. они у вас не сходятся или как ?

Quartus пишет, что сходятся, но судя по тому что выдает Datasheet Report они сходиться не должны (tsu 0.1 нс).

И на железе глючит именно этот канал.

Если вручную подкрутить задержки в Resource Property Editor так чтобы Datasheet Report выдавал tsu в районе -1.0 нс, то глюки исчезают.

Еще заметил, что если написать задержки без min/max и увеличить значение до 1.2, то tsu получается нормальный.

Увеличение значения до 1.2 в выше приведенном коде не приводило к желаемому результату.

set_multicycle_path -setup -end -fall_from [get_clocks {s_clk_virtual[3]}] -rise_to [get_clocks {s_clk[3]}] 0
set_multicycle_path -setup -end -rise_from [get_clocks {s_clk_virtual[3]}] -fall_to [get_clocks {s_clk[3]}] 0

set_false_path -setup -fall_from [get_clocks {s_clk_virtual[3]}] -rise_to [get_clocks {s_clk[3]}]
set_false_path -setup -rise_from [get_clocks {s_clk_virtual[3]}] -fall_to [get_clocks {s_clk[3]}]
set_false_path -hold  -rise_from [get_clocks {s_clk_virtual[3]}] -rise_to [get_clocks {s_clk[3]}]
set_false_path -hold  -fall_from [get_clocks {s_clk_virtual[3]}] -fall_to [get_clocks {s_clk[3]}]

set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_data_3[0]}]
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_data_3[1]}]
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_data_3[2]}]
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_data_3[3]}]
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_read_valid_3}]
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_ready_3}]
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_data_3[0]}] -clock_fall
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_data_3[1]}] -clock_fall
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_data_3[2]}] -clock_fall
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_data_3[3]}] -clock_fall
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_read_valid_3}] -clock_fall
set_input_delay -add_delay -clock [get_clocks {s_clk_virtual[3]}] 1.2 [get_ports {fast_ready_3}] -clock_fall

 

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


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

26 minutes ago, BSACPLD said:

Quartus пишет, что сходятся, но судя по тому что выдает Datasheet Report они сходиться не должны (tsu 0.1 нс).

И на железе глючит именно этот канал.

Если вручную подкрутить задержки в Resource Property Editor так чтобы Datasheet Report выдавал tsu в районе -1.0 нс, то глюки исчезают.

хмм, проект бы небольшой подготовили, покрутить, так с ходу мне не понять (

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


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

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

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

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

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

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

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

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

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

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