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

Vivado 2017.x XDC Trouble

Столкнулся со следующей проблемой, которая проявляется на версиях 2017.3 и 2017.4 установленных на разных машинах:

- Vivado при коррекции содержимого в окне IO Ports часто заявляет, что данный вывод уже занят другим сигналом. Если отказаться от замены, а затем прописать снова, то после нескольких попыток вывод нормально назначается;

- В другой раз Vivado на этапе создания битстрима заявляет, что какие-то выводы не назначены и в IO Ports они действительно оказываются без привязки, при этом содержимое XDC файла не менялось, там они по прежнему прописаны. Пока не пропишешь их снова в IO Ports, их упоминание в XDC просто игнорируется.

 

Кто-нибудь знает, как это лечится?

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

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


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

Столкнулся со следующей проблемой, которая проявляется на версиях 2017.3 и 2017.4 установленных на разных машинах:

 

Есть два прикола:

Если в XDC в конце строки стоит символ комментария (#), то вся такая строка считается закомментированной. Не скажу за последние версии, но на предыдущих версиях было.

Если какие-нибудь пины назначены внутри IP-блоков и они конфликтуют с вашими назначениями, то приоритет у IP, а ваши окажутся неназначенными.

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


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

Если какие-нибудь пины назначены внутри IP-блоков и они конфликтуют с вашими назначениями, то приоритет у IP, а ваши окажутся неназначенными.

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

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


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

Приветствую!

 

Есть два прикола:
Это всего лишь особенности TCL ...

 

Если в XDC в конце строки стоит символ комментария (#), то вся такая строка считается закомментированной. Не скажу за последние версии, но на предыдущих версиях было.
Ставте ; перед # и будет Вам комент как надо.

 

Если какие-нибудь пины назначены внутри IP-блоков и они конфликтуют с вашими назначениями, то приоритет у IP, а ваши окажутся неназначенными.
В Vivado есть иерархия применения constrain - кто последний того и тапки (в отличии от классического варианта).

То есть Вы можете переназначить любой уже заданный параметр если зададите его в xdc или tcl который применяется после того файла в котором сидит не нравящийся Вам constrain.

Иногда можно просто переназначив нужный constrain, иногда предварительно удалив старый и потом уже назначив новый.

Сейчас (в отличии от старых версий) в файлах constaint поддерживался весь TCL поэтому можно например так извращается

mgt_pin.tcl
### MGT pins
# 3..0
if {[llength [get_ports -quiet {dp_c2m_p}]] >= 4} {
    set_property PACKAGE_PIN  J5  [get_ports {dp_c2m_n[0]}  ]; # C3
...
    set_property PACKAGE_PIN  N6  [get_ports {dp_c2m_p[3]}  ]; # A30
}
# 7..4
if {[llength [get_ports -quiet {dp_c2m_p}]] >= 8} {
    set_property PACKAGE_PIN  V3  [get_ports {dp_c2m_n[4]}  ]; # A35
...
    set_property PACKAGE_PIN  R6  [get_ports {dp_c2m_p[7]}  ]; # B32
}

reassign_pcie.tcl
#
reset_property LOC [get_cells -hierarchical \
  -filter {NAME =~ *gen_channel_container[*].*gen_gthe3_channel_inst[*].GTHE3_CHANNEL_PRIM_INST}]

set_property LOC GTHE3_CHANNEL_X0Y7 [get_cells -hierarchical \
  -filter {NAME =~ *gen_channel_container[0].*gen_gthe3_channel_inst[0].GTHE3_CHANNEL_PRIM_INST}]
...
set_property LOC GTHE3_CHANNEL_X0Y0 [get_cells -hierarchical \
  -filter {NAME =~ *gen_channel_container[1].*gen_gthe3_channel_inst[3].GTHE3_CHANNEL_PRIM_INST}]

В первом файле автоматом назначает пины для MGT в зависимости от ширины шины в исходнике.

Во втором - отменяет назначение позиций MGT заданное в корке и назначает свои.

Можно наворотить даже целые функции корректируя нетлист после синтеза.

## replace BUFG clock buffers to BUFH  for DDR controllert C0,C1,C2,C3
for {set i 0} {$i < 4} {incr i} {
    set parent "i_pcie_sys/i_ddr_ctrl/inst/mig_7series_0/u_ddr_ctrl_st_mig_7series_0_1_mig/c${i}_u_ddr3_infrastructure"
    puts "BUFG -> BUFH: ${parent}/u_bufg_clkdiv0"
    puts "BUFG -> BUFH: ${parent}/gen_mmcm.u_bufg_mmcm_ps_clk"

    replace_buf ${parent} "u_bufg_clkdiv0"  "BUFG" "BUFH" "clkdiv0_bufh"
    replace_buf ${parent} "gen_mmcm.u_bufg_mmcm_ps_clk" "BUFG" "BUFH" "mmcm_ps_bufh"
}

:wacko: где replace_buf это самописная функци которая грузится в "сервисном" файле constrain

 

Порядок применения xdc/tcl зависит от порядка включения в проект или от назначенного данному файлу приоритета.

 

Удачи! Rob.

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


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

Сейчас (в отличии от старых версий) в файлах constaint поддерживался весь TCL поэтому можно например так извращается
А сейчас и старые версии это какие? Я недавно попробовал в xdc функцию написать, меня послали.

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


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

Приветствую

А сейчас и старые версии это какие? Я недавно попробовал в xdc функцию написать, меня послали.

Уже и не помню 2014 или 2015 вроде.

Но я наверно некорректно объяснил. Так как Vivado пытается синхронизировать XDC с изменениями через GUI то и сейчас с XDC c ограничениями.

Используйте tcl расширение для constarin файлов и там можно творить что хочешь. Но изменения в constrain через GUI не изменяют содержимое tcl. Надо будет синхронизировать ручками если что.

 

Удачи!. Rob.

P.S. Вот как например выглядет список costraint файлов в моих проектах

# Add constrain file
# {syn_use  impl_use  enable  "file_name"  scoped_to_ref}
set constr_files {
  {0 1 1 "$dsn_dir/src/tcl/service_proc.tcl"                 ""           }
  {1 1 1 "$dsn_dir/src/xdc/PN_clock.xdc"                     ""           }
  {0 1 1 "$dsn_dir/src/xdc/PN_pcie_pin.tcl"                  ""           }
  {0 1 1 "$dsn_dir/src/xdc/PN_fmc_pin.tcl"                   ""           }
  {0 1 1 "$dsn_dir/src/xdc/PN_ddr4_pin.tcl"                  ""           }
  {0 1 1 "$dsn_dir/src/xdc/PN_misc.xdc"                      ""           }
  {0 1 1 "$dsn_dir/src/xdc/PN_misc.tcl"                      ""           }
  {0 1 0 "$dsn_dir/src/xdc/PN_dbg1.tcl"                      ""           }
  {0 1 0 "$dsn_dir/src/xdc/PN_dbg2.tcl"                      ""           }
  {0 1 0 "$dsn_dir/src/xdc/PN_dbg3.tcl"                      ""           }
  {1 1 1 "$dsn_dir/src/ip_repo/misc/src/gray_cdc.tcl"        "gray_cdc"   }
  {1 1 1 "$dsn_dir/src/ip_repo/misc/src/arst_cdc.tcl"        "arst_cdc"   }
}

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


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

Это всего лишь особенности TCL ...

 

Ставте ; перед # и будет Вам комент как надо.

 

Обычный конец команды.

 

Вот я встретил в VHDL коде для ReFLEX DevKit такое:

 

entity A10_FMC is generic

( DEVICE : string := "Arria 10" -- Target Device

; MIF_VERSION : string := "rom_id_version.mif" --

; MIF_TIMECODE : string := "rom_id_timecode.mif" --

; CONNECT_FMC_HA : integer range 0 to 12 := 12 --

; CONNECT_FMC_HB : integer range 0 to 11 := 11 --

; CONNECT_FMC_LA : integer range 0 to 17 := 17 --

); port --

( clk_100mhz_1 : in std_logic --

; clk_100mhz_2 : in std_logic --

; led_usr_red1_n : out std_logic --

 

);

end entity A10_FMC;

 

Работает :rolleyes:

 

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


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

Работает :rolleyes:
И что тут такого особенного? Дурацкое форматирование, сбивающее с толку? Да, есть. В остальном абсолютно валидный код.

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


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

Приветствую

 

И что тут такого особенного? Дурацкое форматирование, сбивающее с толку? Да, есть. В остальном абсолютно валидный код.

Такое форматирование удобно при автогенерации кода - проще отслеживать когда добавлять ;

 

Удачи! Rob.

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


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

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

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

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

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

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

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

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

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

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