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

Тактирование Debug Hub в Xilinx Vivado

6 часов назад, RobFPGA сказал:

Я когда то приводил тут на форме свой подход подключения debug через  скрипты. 

Вот: 

Классный подход. Так жизнь облегчил! Ещё раз спасибо уважаемому @RobFPGA.

 

 

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


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

10 hours ago, Longiel said:

Просто при вытаскивании сигналов через отладчик синтезировать проект заново не потребуется. А если трогаешь исходники - попадаешь на синтез. Синтез обычно идёт меньше разводки и размещения, но... на крупных проектах терять по 40-50 минут тоже не хочется.

 

 

Если названия сигналов не меняются, в принципе без разницы, как их добавлять - через скрипт или GUI. А если они поменялись, то через GUI тоже проблематично добавлять после синтеза. Был data_ack, а стал data_ack_1. Вроде похоже, но не факт, что повторяет поведение исходного сигнала. Поэтому по хорошему в любом случае нужно закреплять сигналы чере mark_debug, независимо от способа их подключения.

Если сидеть и ждать, пока проект синтезируется и разведется, то конечно 40-50 минут - это ощутимо. Но для больших проектов как правило синтез и имплементация проходят "в фоне" на специально выделенных серверах. Запустил на ночь проект на сборку и пошел домой. Плюс минус 1-2 часа мало кого интересует. Ну или даже если днем запустил на сборку - все равно на время сборки проекта занимаешься другими делами и время не теряется.

10 hours ago, Longiel said:

Я просто понять пытаюсь как это у вас выглядит. Настроечные данные для скриптов это: название сигнала, путь к модулю, путь к дебагу... наверное этого достаточно?

Вот например скрипт создания ila, которым я пользуюсь:

 

 

В процессе создания скрипта конечно пришлось приложить некоторые усилия, чтобы он работал корректно. Но сейчас я задаю клоки, список интересующих сигналов, и все. Скрипт обладает некоторым интеллектом. Например, ширину шины определяет автоматически (в отличие от задания шины через GUI), если вдруг какой-то сигнал (кроме первого в списке) соптимизировался после синтеза, скрипт скажет об этом в лог-файле и продолжит работу (а если такое произойдет при создании ila через GUI - это ошибка).

Этот скрипт подгружается другим скриптом, который у меня разворачивает проект и запускает все процессы. Поэтому я могу сделать несколько tcl с ila, и для каждого ila соберется своя имплементация. Это необходимо, когда все сигналы сразу не вмещаются в отладчик. Делаем один impl_run с о одним набором сигналов, а потом другой impl_run - с другим набором сигналов, и т.д.

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

Spoiler

# Generalized script to create ila  v2.21
#
# Set clock for debug_hub
set dbg_hub_clk "clk_mgmt/inst/clk_out1"
# Setup parameters of debug core
set dbg_core_name u_ila_0
set dbg_core_clk "clk_mgmt/inst/clk_out1"    

# List all signals must be listed one signal per line,  started and ended by ""
# At list one name must exist in in data_lst_obj
#
set ila_name "ila_gen_v22"

set data_lst_obj  "sopc/data1_buf[*]
                   sopc/mod1/data2_buf[*]
                   sopc/mod2/reg3
                   "
#
# Open log file in current dir
set TclPath  [file dirname [file normalize [info script]]]
set logLoc [string range ${TclPath} 0 [string last / ${TclPath}]-1]

set ilaPath ${logLoc}/ila_log.txt
set fp [open ${ilaPath} a+]
puts ${fp} "----------------------${ila_name}--------------------------"

create_debug_core ${dbg_core_name} ila
set_property ALL_PROBE_SAME_MU true [get_debug_cores ${dbg_core_name}]
set_property ALL_PROBE_SAME_MU_CNT 4 [get_debug_cores ${dbg_core_name}]
set_property C_ADV_TRIGGER true [get_debug_cores ${dbg_core_name}]
set_property C_DATA_DEPTH 1024 [get_debug_cores ${dbg_core_name}]
set_property C_EN_STRG_QUAL true [get_debug_cores ${dbg_core_name}]
set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores ${dbg_core_name}]
set_property C_TRIGIN_EN false [get_debug_cores ${dbg_core_name}]
set_property C_TRIGOUT_EN false [get_debug_cores ${dbg_core_name}]
set_property port_width 1 [get_debug_ports ${dbg_core_name}/clk]
connect_debug_port ${dbg_core_name}/clk [get_nets

  1. ]

set obj_len [llength ${data_lst_obj}]
set data_obj [lindex ${data_lst_obj} 0]

#probe0 always exists
set probe_obj "${dbg_core_name}/probe0"
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports ${probe_obj}]
set_property port_width [llength [get_nets

  1. ]] [get_debug_ports ${probe_obj}]
    connect_debug_port ${probe_obj} [lsort -dictionary [get_nets
    1. ]]
      # First item created, count it
      set obj_len [expr ${obj_len} - 1]
      set probe_idx 1
      set data_idx 1

while {${obj_len} > 0} {
  set data_obj [lindex ${data_lst_obj} ${data_idx}]
 
  if {[llength [get_nets

  1. ]] == 0} {
        puts ${fp} "Data object ${data_obj} does not exist"
      } else {            
     
      create_debug_port ${dbg_core_name} probe
      set probe_obj "${dbg_core_name}/probe${probe_idx}"
      set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports ${probe_obj}]        
      set_property port_width [llength [get_nets
    1. ]] [get_debug_ports ${probe_obj}]
        connect_debug_port ${probe_obj} [lsort -dictionary [get_nets
      1. ]]
          set probe_idx [expr ${probe_idx} + 1]
          }
          set data_idx [expr ${data_idx} + 1]
          set obj_len [expr ${obj_len} - 1]
        }

# Close log file
close ${fp}

# -------------------------Dbg hub settings---------------------------
set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
connect_debug_port dbg_hub/clk [get_nets list ${dbg_hub_clk}]]

 

 

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


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

Благодарю за примеры скриптов и ссылки. Есть в какую сторону модернизировать свой набор bat-файлов для пересборки проекта)

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


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

13 hours ago, Longiel said:

Если разрядность входного порта в Debug.v параметризировать, то получится удобно подключать. А внутри что - всё по ИЛИ в дебаг пин?

В сам отладчик какие сигналы подключаете - внутренние регистры в Debug.v? Минус правда сразу вылазит - потом сигналы надо переименовать в отладчике, если их много, конечно.

 

нет. ничего не параметризируется. У меня ЦОС - мне хватает и такой отладки для ускорения.

в отладчике debDATA1,debDATA2,debDATA3

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


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

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

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

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

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

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

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

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

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

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