Doka 1 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба Есть у xilinx такой документ: http://www.xilinx.com/support/documentatio...g-debugging.pdf - Vivado Design Suite Tutorial Programming and Debugging там в Lab 1: Using the Netlist Insertion Method for Debugging a Design описан подход по встраиванию ILA (chipscope), конструкция вида: Use a Tcl prompt to set the MARK_DEBUG attribute on a synthesized netlist: set_property mark_debug true [get_nets –hier [list {sine[*]}]] вставляется, но тулы не видят наличие ILA в залитом битстриме ПЛИС, я так понимаю, что прежде надо вставить IP-core ILA в проект, но не очень ясен этот механизм вставки в режиме работы non-project CLI. Как понимаю, прежде надо сгенерить ILA в GUI VIvado,а нетлист подсунуть уже в Vivado non-project CLI-mode design flow? Но как тогда вивадо поймёт что присутствующий нетлист - это ILA и смаппит команды типа set_property mark_debug true в сответствующие сигналы наблюдения? PS: есть еще документ http://www.xilinx.com/support/documentatio...6-vivado-ip.pdf Designing with IP c главой Tcl Commands for Common IP Operations сижу разбираюсь, но без описания на конкретном примере IP-ядра трудно(( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба Приветствую! черновик рецепта супа из топора :) # возьмем топор create_debug_core u_ila_0 ila # с требуемыми вкусовыми характеристиками set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0] set_property ALL_PROBE_SAME_MU_CNT 4 [get_debug_cores u_ila_0] set_property C_ADV_TRIGGER true [get_debug_cores u_ila_0] set_property C_DATA_DEPTH 8192 [get_debug_cores u_ila_0] set_property C_EN_STRG_QUAL true [get_debug_cores u_ila_0] set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_0] set_property C_TRIGIN_EN false [get_debug_cores u_ila_0] set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0] # кинем его в "кастрюлю" set_property port_width 1 [get_debug_ports u_ila_0/clk] connect_debug_port u_ila_0/clk [get_nets pcie_aclk] # ну а затем добавим ингредиенты... set probe_obj [create_debug_port u_ila_0 probe] set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports $probe_obj] set_property PORT_WIDTH width_of_probe [get_debug_ports $probe_obj] # ... и специи connect_debug_port $probe_obj [get_nets -hier -filter {NAME =~ partial_name_of nets}] connect_debug_port $probe_obj [get_nets -hier -filter {MARK_DEBUG==true}] ... # медленно варить на этапе opt_design Успехов! Rob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба И до кучи про ILA в вивадо, надо же было так через Ж... неудобно сделать, что асинхронный JTAG, не видится системой, если нет клока на ILA (нога не та, клок отвалился/отключился и т.д.). Такое ощущение, что инструмент отлаживали люди, явно далекие от регулярной работы с ПЛИС :( Не понимаю в чем была сложность, скопировать сигнал тап Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба RobFPGA, спасибо! осваиваю понемногу. На этом этапе валится: ## set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports $probe_obj] ## set_property PORT_WIDTH width_of_probe [get_debug_ports $probe_obj] ERROR: [Vivado 12-200] 'width_of_probe' is not a valid integer. while executing "source ${DIRBIN}/ila-debug-core.tcl" задаю точки к которым подключаться в RTL прагмой: (* mark_debug = "true" *) правильно ли я понимаю, что мне надо вручную подсчитать и суммировать разрядности всех wire, у которыз я прописал эту прагму и вставить итоговое число в скрипт вместо width_of_probe ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба Приветствую! Естественно валится - это-ж черновик width_of_probe - надо заменит число нужной Вам ширины probe partial_name_of nets - соответственно имя цепей Естественно ваяя сотни строк такой писанины скучно и с голоду можно помереть поэтому можно и нужно все это оформить в виде такого "комплексного_обеда.tcl" # первое... # create probe proc mk_probe {{ila u_ila_0} {mode DATA_AND_TRIGGER} {len 1}} { set probe_obj [create_debug_port $ila probe] set_property PROBE_TYPE $mode [get_debug_ports $probe_obj] set_property PORT_WIDTH $len [get_debug_ports $probe_obj] } # второе... # add sorted list of pins/nets to last probe port proc add2probe {ila net_obj} { set len [llength $net_obj] if {$len>0} { set net_obj [lsort -dictionary $net_obj] # mark a nets as debug for simple search and view in the schematic set_property mark_debug true $net_obj # get last probe port set probe_obj [lindex [get_debug_port $ila/probe*] end] # set probe_len [llength [get_nets -of [get_pins [get_debug_ports $probe_obj]]]] set probe_len [llength [string map {0 ""} [get_property is_connected [get_pins [get_debug_ports $probe_obj]]]]] # adjust probe width set_property PORT_WIDTH [expr $probe_len+$len] [get_debug_ports $probe_obj] # and connect new nets to end of probe port connect_debug_port $probe_obj $net_obj puts "Connecting $len nets" } } # компот... # get list of nets connected to Q output of register proc get_q_nets {name} { set net_obj [get_nets -of [get_pin -hier -filter "NAME =~ $name/Q"]] return $net_obj } # десерт... ... # вкусняшки... ... # приятного аппетита... # первая порция бесплатно от шеф-повара #mk_probe u_ila_0 - (probe_0 создается автоматом при создании Ila_* ) add2probe u_ila_0 [get_nets -hier -filter {NAME =~ i_pc720_sys/pcie_7x_0/pl_ltssm_state*}] add2probe u_ila_0 [get_nets -hier -filter {NAME =~ i_pc720_sys/pcie_7x_0/pl_phy_lnk_up}] # вторая и остальные порции за деньги mk_probe u_ila_0 add2probe u_ila_0 [get_nets -hier -filter {NAME =~ i_pc720_sys/*m_axis_rx_TUSER*}] add2probe u_ila_0 [get_nets -hier -filter {NAME =~ i_pc720_sys/*m_axis_rx_TLAST*}] add2probe u_ila_0 [get_nets -hier -filter {NAME =~ i_pc720_sys/*m_axis_rx_TVALID*}] add2probe u_ila_0 [get_nets -hier -filter {NAME =~ i_pc720_sys/*m_axis_rx_TREADY*}] # третья - выбираем только самое вкусное mk_probe u_ila_0 DATA add2probe u_ila_0 [get_nets -hier -filter {NAME =~ i_pc720_sys/*m_axis_rx_TDATA*}] #... оффициант ! повторите все для свежего топора ila_1 create_debug_core u_ila_1 ila .... Причем кушать все это можно как на бегу (в командном строке) так и сидя в зале (project_mode GUI) Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба меня вполне устроит сбор всех wire в RTL промаркированных как MARK_DEBUG, для этого я так понимаю достаточно: но что-то не нравится вивадо в этой строчке: ## set probe_obj [create_debug_port u_ila_0 probe] ## set width_of_probe 223 ## set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports $probe_obj] ## set_property PORT_WIDTH $width_of_probe [get_debug_ports $probe_obj] WARNING: [Vivado 12-1023] No nets matched for command 'get_nets -hierarchical -filter MARK_DEBUG==true'. ## connect_debug_port $probe_obj [get_nets -hierarchical -filter {MARK_DEBUG==true}] ERROR: [Common 17-162] Invalid option value specified for '-nets'. версия вивадо: Vivado v2015.3 (64-bit Linux) до этого были проблемы с get_nets: -hier не понимал, пришлось писать -hierarchical В качестве гипотезы - может MARK_DEBUG в одинаковом регистре должен быть в RTL и tcl? ЗЫЖ вставляю ILA сразу после synth_design ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба Приветствую! Регистр вроде не имеет значения для названий опций. У меня (win/64 2015.4) находит все помеченное и в нижнем и в верхнем регистре MARK_DEBUG Можно открыть .dcp файл после синтеза и проверить команды в консоли tcl. Успехов! Rob . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба разобрался! RTL правил не в той ветке, в которой пускал синтез) теперь валится на opt_design : opt_design failed ERROR: [Chipscope 16-213] The debug port 'u_ila_0/probe0' has 1 unconnected channels (bits). This will cause errors during implementation. как же так? ...сигналы в RTL маркированные MARK_DEBUG ведь находит... вот лог: ## create_debug_core u_ila_0 ila ## set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0] ## set_property ALL_PROBE_SAME_MU_CNT 4 [get_debug_cores u_ila_0] ## set_property C_ADV_TRIGGER true [get_debug_cores u_ila_0] ## set_property C_DATA_DEPTH 8192 [get_debug_cores u_ila_0] ## set_property C_EN_STRG_QUAL true [get_debug_cores u_ila_0] ## set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_0] ## set_property C_TRIGIN_EN false [get_debug_cores u_ila_0] ## set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0] ## set_property port_width 1 [get_debug_ports u_ila_0/clk] ## connect_debug_port u_ila_0/clk [get_pins PLLE2_U0/CLKOUT0] ## set probe_obj [create_debug_port u_ila_0 probe] ## set width_of_probe 223 ## set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports $probe_obj] ## set_property PORT_WIDTH $width_of_probe [get_debug_ports $probe_obj] ## connect_debug_port $probe_obj [get_nets -hierarchical -filter {MARK_DEBUG==true}] ## implement_debug_core INFO: [IP_Flow 19-234] Refreshing IP repositories INFO: [IP_Flow 19-1704] No user IP repositories specified INFO: [IP_Flow 19-2313] Loaded Vivado IP repository '/soft/Vivado/2015.3/data/ip'. INFO: [IP_Flow 19-3806] Processing IP xilinx.com:ip:xsdbm:1.1 for cell dbg_hub_CV. INFO: [Chipscope 16-78] labtools_xsdbm_v1 netlist file is '.Xil/Vivado-3346-syn64-2/dbg_hub_CV.0/out/dcp/dbg_hub_CV_0.edf'. INFO: [IP_Flow 19-3806] Processing IP xilinx.com:ip:ila:6.0 for cell u_ila_0_CV. INFO: [Chipscope 16-78] labtools_ila_v6 netlist file is '.Xil/Vivado-3346-syn64-2/u_ila_0_CV.0/out/dcp/u_ila_0_CV_1.edf'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба Приветствую! А вот так :rolleyes: Если вам нужен только один probe команда set probe_obj [create_debug_port u_ila_0 probe] не нужна так как probe_0 создается автоматом при создании ila А тут еще раз создается probe и потом Вы все подключаете на этот probe_1 а probe_0 остается неподключенный. Поэтому надо просто получить ссылку на этот probe set probe_obj [get_debug_port u_ila_0/probe_0] Успехов! Rob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба RobFPGA, спасибо.. тоже дошёл до этого опытным путём (когда тоже самое начало писать для порта probe1) Нашёл-таки документ правильный: ug908-vivado-programming-debugging.pdf там как раз есть мой случай - Debug Core Insertion in Non-Project Mode изучаю... =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 28 апреля, 2016 Опубликовано 28 апреля, 2016 · Жалоба Приветствую! Вишенка на торт: добавив свой атрибут например DEBUG_GROUP ... (* MARK_DEBUG="true", DEBUG_GROUP="grp_1" *) wire net_1; (* MARK_DEBUG="true", DEBUG_GROUP="grp_2" *) wire net_2; ... Соответственно затем при выборе цепей для подключения к ILA можем выбирать какой набор сигналов мы конкретно хотим видеть сейчас и на какой порт их цеплять. ... connect_debug_port $probe_obj [get_nets -hier -filter {MARK_DEBUG==true && DEBUG_GROUP=="grp_1"}] ... Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 29 апреля, 2016 Опубликовано 29 апреля, 2016 · Жалоба Вишенка на торт: добавив свой атрибут например DEBUG_GROUP о, ну это вообще предел мечтаний... уже думал через 'define &`ifdef прикручивать группы сигналов))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 3 декабря, 2019 Опубликовано 3 декабря, 2019 · Жалоба В 28.04.2016 в 18:54, RobFPGA сказал: Естественно ваяя сотни строк такой писанины скучно и с голоду можно помереть поэтому можно и нужно все это оформить в виде такого "комплексного_обеда.tcl" А как вы эту красоту подключаете к проекту? В констрейнах? Или ещё как? В констрейнах оно на 2018.2 выдаёт маловразумительное: [Common 17-1548] Command failed: ERROR: unknown error occurred ["...xdc/ila_dpc.tcl":6] что ссылается на строку: create_debug_core u_ila_0 ila И куча подобных ошибок на все остальные строки (set_property и прочие). Такое впечатление, что в принципе не понимает, что он неё хотят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 3 декабря, 2019 Опубликовано 3 декабря, 2019 · Жалоба Приветствую! 2 hours ago, dxp said: А как вы эту красоту подключаете к проекту? В констрейнах? Или ещё как? В констрейнах оно на 2018.2 выдаёт маловразумительное: Странно - у меня так работает начиная с 2016 какой то версии. Тут надо смотреть как вы подключили это файл, может не указали тип TCL для этого файла? Вообще подключать это (да и любые свои TCL) можно по разному: глобально - через hook в Vivado_ini.tcl загружать любые сервисные TCL модули с требуемыми proc. Локально - добавив в constains проекта (первым по списку, implementation only) файл dbg_utils.tcl содержащий в себе все сервисные процедуры mk_probe, add_probe, .... После этого последними в списке constains могут быть несколько "debug_some_probe.tcl" только с командами создания ILA и подключения требуемых контрольных точек (тоже implementation only). Которые легко переключать через disble_file. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 3 декабря, 2019 Опубликовано 3 декабря, 2019 · Жалоба 1 час назад, RobFPGA сказал: implementation only О, а я к синтезу добавлял. Причём, из консоли всё прекрасно работает (открыт синтезированный дизайн), а при запуске на синтез вот такие ошибки валяться. Попробовал назначить на имплементацию, сработало. :) Т.е. идеологически правильно всё-таки на этапе P&R подключать сигналы на логизатор? Это несколько странно, имхо - ведь даже настройка дебага через GUI делается на синтезированном дизайне. Или имеется в виду, что по сути это делается после синтеза перед или во время P&R? В пользу этого говорит тот факт, что из консоли после синтеза тоже всё успешно применяется. Кажется немного странным то, что ведь это можно делать и на этапе синтеза в самом конце. Это, имхо, было бы самым логичным решением. Ещё вопрос: а сколько сигналов можно цеплять на один пробник? Вообще, вы как делаете - предпочитаете по максимуму на один пробник накидывать сигналов или каждую группу лучше на отдельный пробник? Вообще, в чём смысл этого разбиения на пробники? В альтеровском сигналтапе я вообще никаких пробников не помню. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться