реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Vivado 2017.x XDC Trouble, Неадекватное поведение при назначении выводов
kaktus
сообщение Apr 7 2018, 18:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 5-05-05
Из: Санкт-Петербург
Пользователь №: 4 756



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

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

Сообщение отредактировал kaktus - Apr 8 2018, 12:01
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Apr 9 2018, 08:03
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 571
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



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


Есть два прикола:
Если в XDC в конце строки стоит символ комментария (#), то вся такая строка считается закомментированной. Не скажу за последние версии, но на предыдущих версиях было.
Если какие-нибудь пины назначены внутри IP-блоков и они конфликтуют с вашими назначениями, то приоритет у IP, а ваши окажутся неназначенными.
Go to the top of the page
 
+Quote Post
SFx
сообщение Apr 9 2018, 21:17
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



Цитата(alexadmin @ Apr 9 2018, 11:03) *
Если какие-нибудь пины назначены внутри IP-блоков и они конфликтуют с вашими назначениями, то приоритет у IP, а ваши окажутся неназначенными.

плюсую. еще может быть такое не только с выводами, но и с GTx блоками. Некоторые корки имеют право задавать расположение их, но точно выбирать какие лейны используются - нет. отсюда нужна придельная внимательность при работе.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Apr 9 2018, 23:05
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 196
Регистрация: 23-12-04
Пользователь №: 1 643



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

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

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

Цитата(alexadmin @ Apr 9 2018, 11:03) *
Если какие-нибудь пины назначены внутри 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.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 10 2018, 05:14
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 972
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(RobFPGA @ Apr 10 2018, 02:05) *
Сейчас (в отличии от старых версий) в файлах constaint поддерживался весь TCL поэтому можно например так извращается
А сейчас и старые версии это какие? Я недавно попробовал в xdc функцию написать, меня послали.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Apr 10 2018, 06:05
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 196
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую
Цитата(andrew_b @ Apr 10 2018, 08:14) *
А сейчас и старые версии это какие? Я недавно попробовал в 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"   }
}
Go to the top of the page
 
+Quote Post
EugeneS
сообщение Apr 10 2018, 11:22
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 181
Регистрация: 28-08-04
Пользователь №: 557



QUOTE (RobFPGA @ Apr 10 2018, 03:05) *
Это всего лишь особенности 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
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 10 2018, 12:25
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 972
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(EugeneS @ Apr 10 2018, 14:22) *
Работает rolleyes.gif
И что тут такого особенного? Дурацкое форматирование, сбивающее с толку? Да, есть. В остальном абсолютно валидный код.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Apr 10 2018, 12:28
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 196
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую

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

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

Удачи! Rob.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 10 2018, 13:19
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 972
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Зато читать -- дец глазам.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th September 2018 - 12:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01085 секунд с 7
ELECTRONIX ©2004-2016