Jump to content

    

Редактор tcl

On 11/29/2019 at 12:49 PM, RobFPGA said:

Вообще для TCL есть стандартная технология  package  которая позволяет управлять иерархией  проекта на tcl.

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

Share this post


Link to post
Share on other sites

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

36 minutes ago, Nick_K said:

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

Основной гайд для Vivado Tcl  это UG835  (Command Reference Guide) и UG894 (Using Tcl Scripting).  Второй как раз и рассказывает как правильно делать скрипты для Vivado. Естественно и   доки по самому TCL. В Vivado tcl позволяет легко дописать и интегрировать свой функционал в инструментарий оболочки.  Тут главное понять основные принципы работы.  Например то что  enviroment при работе в GUI и при запуске процессов Synthesis/P&R из под GUI - разный. Но при этом каждый этот процесс в самом начале грузит Vivado_init.tcl :wink2: Соответственно в Vivado_init можно напихать своих  процедур кастомизации/автоматизации  Vivado. Например навешать  hook-ов на стандартные процедуры (open_project, close_project, ...). У меня например на open_project вешается hook который в папке рядом с файлом открываемого *.xpr ищет дополнительный *.tcl  в котором лежать настройки/хелперы для этого конкретного проекта. Так же и для "глобальных" переменных. Но IMHO лучше делать так чтобы таких, реально глобальных переменных, было как можно меньше. 

Удачи! Rob.

Share this post


Link to post
Share on other sites
1 hour ago, RobFPGA said:

Например то что  enviroment при работе в GUI и при запуске процессов Synthesis/P&R из под GUI - разный

Это я уже понял. И даже когда запускается через скрипт, вход в синтезируемый проект и имплементированый тоже разный с разными возможностями и функционалом.

1 hour ago, RobFPGA said:

Но при этом каждый этот процесс в самом начале грузит Vivado_init.tcl :wink2: Соответственно в Vivado_init можно напихать своих  процедур кастомизации/автоматизации  Vivado.

По вышеуказанными ЮГ я это тоже нашёл. Только возникает вопрос: что делать если проект нужно запустить на "чужой" машине? Руками "пакостить в ихний инит или есть возможность в процессе билда скриптом, задать нужные параметры/указать пути/etc так чтобы и мне было комфортно и потом долго не искать чего не пашет на другом компе.

1 hour ago, RobFPGA said:

Например навешать  hook-ов на стандартные процедуры (open_project, close_project, ...)

Собсттвеноо это мне и интересно. Сначала я думал сделать обёртки для данных процедур и запускать всё через тикль файлы, но теперь вижу, что в этом вопросе я чень много чего не знаю/не понимаю... И прочтение ЮГ сильно ясности не приносят увы.

Share this post


Link to post
Share on other sites

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

3 hours ago, Nick_K said:

... Только возникает вопрос: что делать если проект нужно запустить на "чужой" машине? ...  или есть возможность в процессе билда скриптом, задать нужные параметры/указать пути/etc ...

Для чужой машины это единственный путь (хотя вроде как Vivado_init.tcl локальный для user). Ну и плюс еще статическая конфигурация через enviroment переменные.

Например  стандартная для TCL переменная  TCLLIBPATH. Указываем (или добавляем) в ней путь к своей папке с tcl-наворотами   set TCLLIBPATH=path_to_dsn/dsn/tcl_lib  А в папке tcl_lib   кладем  pkgIndex.tcl  В котором ссылки на свои package  

Spoiler

# pkgIndex.tcl
package ifneeded my_pkg 1.0 [list source -quiet [file join $dir .../my_pkg.tcl]]
...  

# my_pkg.tcl
package provide my_pkg 1.0

namespace eval ::my_pkg {
  namespace export version ...

  variable MY_PKG_VERSION 1.0
  variable REL_PKG_DIR [relative_path [file dirname [info script]] [pwd]]

  ...
}  

proc my_pkg::version {} {
  puts ">> my_pkg version:$my_pkg::MY_PKG_VERSION, path:'$my_pkg::REL_PKG_DIR' relative to '[pwd]'"
}
...

 

И теперь при запуске  Vivado (равно как и любого другого TCL интерпретатора)  командой  package require my_pkg в начале своего скрипта  грузим  процедуры из my_pkg в  рабочую область, хукаем процедуры, добавляем переменные, .... в общем развлекаемся как можем. :preved:

Успехов! Rob.

Share this post


Link to post
Share on other sites

В вивадо каждая стадия имеет в настройка tcl.pre и tcl.post... То есть перед и после синтеза, ининциализацииб оптимизации, повер оптимизации, плейса, пост плейс повер оптимизации, пост плейс физической оптимизации, рутинга пост рут физичесокй оптимизации и записи битстрима можно воткнуть свои скрипты.  Может это как то Вам поможет?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now