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

Vivado 2017.x XDC Trouble

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(kaktus @ Apr 7 2018, 21:25) <{POST_SNAPBACK}>
Столкнулся со следующей проблемой, которая проявляется на версиях 2017.3 и 2017.4 установленных на разных машинах:


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

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(alexadmin @ Apr 9 2018, 11:03) <{POST_SNAPBACK}>
Если какие-нибудь пины назначены внутри IP-блоков и они конфликтуют с вашими назначениями, то приоритет у IP, а ваши окажутся неназначенными.

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

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


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

Цитата(alexadmin @ Apr 9 2018, 11:03) <{POST_SNAPBACK}>
Есть два прикола:
Это всего лишь особенности TCL ...

Цитата(alexadmin @ Apr 9 2018, 11:03) <{POST_SNAPBACK}>
Если в XDC в конце строки стоит символ комментария (#), то вся такая строка считается закомментированной. Не скажу за последние версии, но на предыдущих версиях было.
Ставте ; перед # и будет Вам комент как надо.

Цитата(alexadmin @ Apr 9 2018, 11:03) <{POST_SNAPBACK}>
Если какие-нибудь пины назначены внутри 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.gif где replace_buf это самописная функци которая грузится в "сервисном" файле constrain

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

Удачи! Rob.

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(RobFPGA @ Apr 10 2018, 02:05) <{POST_SNAPBACK}>
Сейчас (в отличии от старых версий) в файлах constaint поддерживался весь TCL поэтому можно например так извращается
А сейчас и старые версии это какие? Я недавно попробовал в xdc функцию написать, меня послали.

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


Ссылка на сообщение
Поделиться на другие сайты
Приветствую
Цитата(andrew_b @ Apr 10 2018, 08:14) <{POST_SNAPBACK}>
А сейчас и старые версии это какие? Я недавно попробовал в 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"   }
}

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


Ссылка на сообщение
Поделиться на другие сайты
QUOTE (RobFPGA @ Apr 10 2018, 03:05) <{POST_SNAPBACK}>
Это всего лишь особенности 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.gif

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(EugeneS @ Apr 10 2018, 14:22) <{POST_SNAPBACK}>
Работает rolleyes.gif
И что тут такого особенного? Дурацкое форматирование, сбивающее с толку? Да, есть. В остальном абсолютно валидный код.

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


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

Цитата(andrew_b @ Apr 10 2018, 15:25) <{POST_SNAPBACK}>
И что тут такого особенного? Дурацкое форматирование, сбивающее с толку? Да, есть. В остальном абсолютно валидный код.

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

Удачи! Rob.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация