Jump to content

    
Sign in to follow this  
doom13

Запустить TCL script в Vivado

Recommended Posts

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

Возможно ли при открытии проекта в Vivado запустить TCL скрипт.

Хочу, чтоб при при открытии проекта переменная PWD указывала на директорию проекта (без привязки к конкретной директории и ПК).

Share this post


Link to post
Share on other sites

Очень сомневаюсь, хотя хуками может и можно где-то вклинится. Вопрос зачем? Если Вы работаете в IDEшной консоли - то можно единожды перейти куда нужно и никаких проблем. Если же вопрос в запускаемых скриптах, тогда можно вместо абсолютного пути делать что-то подобное:

[get_property directory [current_project]]/переходить_куда_нужно/и_дальше

 

Share this post


Link to post
Share on other sites

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

13 minutes ago, doom13 said:

Возможно ли при открытии проекта в Vivado запустить TCL скрипт.

Когда именно вы хотите запускать скрипт?  При выполнении  какого действия?  

Вы можете  добавить любые свои процедуры и хуки в Vivado_init.tcl и соответственно менять поведение стандартных команд Vivado добавляя блек-джек и шлю...развлечения :biggrin:  - например:

###
proc hook_proc {name hook_name} {
  if {[llength [namespace which {${name}_}]]==0} {
    rename ::${name}    ::${name}_
    rename ${hook_name} ::${name}
  }
}

###
proc hook_open_project args {
  puts "Hook of open_project"

  # processing input options
  for {set i 0} {$i < [llength $args]} {incr i} {
    set option [string trim [lindex $args $i]]
    switch -regexp -- $option {
      "-part"        { incr i }
      "-read_only"   {   }
      "-quiet"       {   }
      "-verbose"     {   }
      default {
        # is incorrect switch specified?
        if { [regexp {^-} $option] } {
          send_msg_id Vivado-projutils-001 ERROR "Unknown option '$option', please type 'open_project -help' for usage info.\n"
          return
        }
        set prj_file [file normalize $option]
      }
    }
  }

  set prj_dir  [file dirname $prj_file]
  set ::env(PWD) $prj_dir
  ...
  uplevel 1 ::open_project_ $args
}
...
  
hook_proc "open_project" "hook_open_project"
...

Успехов! Rob.     

Share this post


Link to post
Share on other sites
4 minutes ago, RobFPGA said:

Когда именно вы хотите запускать скрипт?  При выполнении  какого действия? 

Перед стартом синтеза, скрипт должен сгенерить константы для контроля версии.

4 minutes ago, RobFPGA said:

Вы можете  добавить любые свои процедуры и хуки в Vivado_init.tcl

Я попробовал добавить, но всё не так просто)

cd [get_property directory [current_project]]

Share this post


Link to post
Share on other sites

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

6 minutes ago, doom13 said:

Перед стартом синтеза, скрипт должен сгенерить константы для контроля версии.

Если скрипт часть проекта то лучше привязываться к положению файла скрипта 

# .../PRJ_ROOT/some_soure_dir/tcl/script.tcl
...  
set SCRIPT_DIR [file dirname [info script]]
set PRJ_DIR    [file normalize "${SCRIPT_DIR}/../../.."]
...  

Удачи! Rob.

Share this post


Link to post
Share on other sites

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

Just now, doom13 said:

Оно должно работать? Выдаёт ошибки.

Конечно должно! - я целых пять минут придумывал это :biggrin:

Что за ошибки?  Может что забыл "придумать". 

Удачи! Rob.

Share this post


Link to post
Share on other sites

Форматирование какое-то видно было неправильное, ещё раз скопировал - не ругается.

Но значение pwd не изменилось, на дефолтную директорию ссылается.

Share this post


Link to post
Share on other sites

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

11 minutes ago, doom13 said:

Но значение pwd не изменилось, на дефолтную директорию ссылается.

Вы наверное в другом окне cmd проверяете?  А там другой enviroment  чем тот в котором Vivado запустилась :unknw:

В контексте Vivado  переменная PWD есть так как она добавлена после копирования enviroment  из запускающего процесса.  

посмотрите в TCL консоле -  parray   ::env 

Удачи! Rob.

Share this post


Link to post
Share on other sites
8 minutes ago, doom13 said:

Форматирование какое-то видно было неправильное, ещё раз скопировал - не ругается.

Там есть непечатный символ - я уже попадался на этом скрипте от уважаемого Роба

9 minutes ago, doom13 said:

Но значение pwd не изменилось, на дефолтную директорию ссылается.

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

Share this post


Link to post
Share on other sites
7 minutes ago, Nick_K said:

Там есть непечатный символ - я уже попадался на этом скрипте от уважаемого Роба

Так он же целых пять минут сочинялся)

set_param xicom.use_bitstream_version_check false

puts "Script is processing"


###
proc hook_proc {name hook_name} {
  if {[llength [namespace which {${name}_}]]==0} {
    rename ::${name}    ::${name}_
    rename ${hook_name} ::${name}
  }
}

###
proc hook_open_project args {
  puts "Hook of open_project"

  # processing input options
  for {set i 0} {$i < [llength $args]} {incr i} {
    set option [string trim [lindex $args $i]]
    switch -regexp -- $option {
      "-part"        { incr i }
      "-read_only"   {   }
      "-quiet"       {   }
      "-verbose"     {   }
      default {
        # is incorrect switch specified?
        if { [regexp {^-} $option] } {
          send_msg_id Vivado-projutils-001 ERROR "Unknown option '$option', please type 'open_project -help' for usage info.\n"
          return
        }
        set prj_file [file normalize $option]
      }
    }
  }

  set prj_dir  [file dirname $prj_file]
  set ::env(PWD) $prj_dir

  uplevel 1 ::open_project_ $args

  puts "Script is done!!!"
}
  
hook_proc "open_project" "hook_open_project"

Пытаюсь разобраться, как оно работает, получаю лог

*** Running vivado
    with args -log xczu9eg.vds -m64 -product Vivado -mode batch -messageDb vivado.pb -notrace -source xczu9eg.tcl


****** Vivado v2018.2 (64-bit)
  **** SW Build 2258646 on Thu Jun 14 20:02:38 MDT 2018
  **** IP Build 2256618 on Thu Jun 14 22:10:49 MDT 2018
    ** Copyright 1986-2018 Xilinx, Inc. All Rights Reserved.

Sourcing tcl script '/home/andrei/Programs/Xilinx/Vivado/2018.2/scripts/Vivado_init.tcl'
Script is processing
source xczu9eg.tcl -notrace
WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {11}  -id {[BD 41-1271]}  -suppress '. The existing rule will be replaced.
WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {10}  -id {[BD 41-1306]}  -suppress '. The existing rule will be replaced.
WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {3}  -id {[BD 41-1271]}  -suppress '. The existing rule will be replaced.
WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {4}  -id {[BD 41-1306]}  -suppress '. The existing rule will be replaced.
WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {5}  -id {[BD 41-1271]}  -suppress '. The existing rule will be replaced.
WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {7}  -id {[BD 41-1271]}  -suppress '. The existing rule will be replaced.
WARNING: [Common 17-1361] You have specified a new message control rule that is equivalent to an existing rule with attributes ' -ruleid {6}  -id {[BD 41-1306]}  -suppress '. The existing rule will be replaced.
add_files: Time (s): cpu = 00:00:07 ; elapsed = 00:00:07 . Memory (MB): peak = 2551.223 ; gain = 920.449 ; free physical = 1915 ; free virtual = 11697
Command: synth_design -top xczu9eg -part xczu9eg-ffvb1156-2-i
Starting synth_design
Attempting to get a license for feature 'Synthesis' and/or device 'xczu9eg'
INFO: [Common 17-349] Got license for feature 'Synthesis' and/or device 'xczu9eg'
INFO: Launching helper process for spawning children vivado processes
INFO: Helper process launched with PID 1454 

Что-то не так? hook_proc не вызывался

15 minutes ago, RobFPGA said:

В контексте Vivado  переменная PWD есть так как она добавлена после копирования enviroment  из запускающего процесса.  

посмотрите в TCL консоле -  parray   ::env 

Да, есть такое, спасибо.

Share this post


Link to post
Share on other sites

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

9 minutes ago, Nick_K said:

Там есть непечатный символ

Символ это упакованный архив непечатных слов которые распаковываются пользователем скрипта :ireful3:  Коэффициент сжатия оху... :laugh1:

Удачи! Rob.

Share this post


Link to post
Share on other sites

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

15 minutes ago, doom13 said:

Starting synth_desig

Ну так вы писали про добавление PWD при open_project  а  тут выполняется   synth_design. Это как бы разные команды и разные процессы! Чем Vivado и сбивает с толку. Попробуйте добавить в hook_synth_design 

  ...
  set top_run  [current_run -synthesis]
  set top_fset [get_property SRCSET $top_run ]
  set top_name [get_property TOP    $top_fset]

  puts ">> synth_design: current_project property ..."
  puts "[report_property -return_string [current_project]]\n"
  puts ">> synth_design: current_run property ..."
  puts "[report_property -return_string $top_run]\n"
  puts ">> synth_design: current_fileset property ..."
  puts "[report_property -return_string $top_fset]\n"
  ...

 

2 minutes ago, doom13 said:

Как из настроек проекта теперь достучаться к ::env(PWD), чтоб стартануть свой скрипт из папки проекта?

Проще всего указать скрипт в STEPS.SYNTH_DESIGN.TCL.PRE,  а в самом скрипте привязываться к его же расположению  в дереве проекта как я приводил выше.

Удачи! Rob.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this