Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: tcl на FPGA
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Alexey_Rostov
Добрый день! Кто использует при разработке на FPGA tcl скрипты, поделитесь пожалуйста опытом, какие преимущества можно получить за счет использования tcl. Пока обнаружил только преимущество перед gui в виде автоматизации при переносе проектов с одного кристалла на другой. Если можно конкретные примеры.
one_eight_seven
Цитата(Alexey_Rostov @ Mar 11 2018, 13:07) *
Добрый день! Кто использует при разработке на FPGA tcl скрипты, поделитесь пожалуйста опытом, какие преимущества можно получить за счет использования tcl. Пока обнаружил только преимущество перед gui в виде автоматизации при переносе проектов с одного кристалла на другой. Если можно конкретные примеры.

Ну то, что вы уже описали.
Плюс инструменты функциональной, статической и формальной верификации тоже управляются tcl - скриптами, поэтому можно создать набор целей и провести анализ на эти цели, просто запустив скрипт, в симуляторах gui тоже управляется с помощью tcl, поэтому очень удобно создавать виды осциллограмм, и сохранять их в tcl, а также обрабатывать сигналы, например, группировать их, именовать группы или же сами сигналы (например, разбить регистр на поля), назначать radix'ы, и т.п. Можно также сделать небольшой декодер, например, чтобы вместо 00 отображалось OK, вместо 01 - ERROR.
Leka
Цитата(Alexey_Rostov @ Mar 11 2018, 13:07) *
Пока обнаружил только преимущество перед gui в виде автоматизации при переносе проектов с одного кристалла на другой.

Работаю в Windows, gui использую очень редко (только чтобы посмотреть распределение ЛЕ по модулям),
для синтеза/анализа/прошивки запускаю *.bat файлы, tcl не использую - очень не нравится язык.
yes
vivado принуждает юзеров использовать tcl - через gui в нем некоторые операции отсутствуют, ну или достаточно неудобны (у меня, например, в текстовом редакторе набор каких-то tcl-ных команд, которые я копи-пастю в среду)

для asic-ов tcl стандарт, скрипты только на нем - полагаю по мере роста сложности FPGA-шных проектов, то есть количества людей, работающих над одним проектом, будет все меньше gui, все больше tcl
сами скрипты обычно простые - сложнее foreach редко что нужно, ну и иногда функцией (proc) какие-то повторяющиеся последовательности команд объединяются
RobFPGA
Приветствую!

Tcl почти что стандарт для контроля FPGA-шного софта.
С помощью tcl много чего можно накрутить под себя.

Например в Vivado у меня и автоматизация подключения debug-point для ChipScope, и авто генерация даты/ревизии git/ при компиляции и последующе генерация bit/mcs c правильным именем в нужной папке и с инфо-файлом, и.т.д.
И работа с JTAG-AXI для быстрой отладки периферии без ожидания вечно занятого програмиста.
Для Synplyfy помню извращался с парсингом логов синтеза и автогенерацией xilinx ip корок с требуемыми параметрами.

Поищите я на форуме приводил примеры.

Ну а ModelSim так это сплошной tcl/tk sm.gif например мой скрипт парсит Vivado-вский скрипт для симуляции .bd чтобы компилировалось так как мне надо а не так хочет Vivado. Или например автоматом расставлять сигналы AXI шины на wave чтобы было как в армии все под линейку красиво было sm.gif

Удачи! Rob.
AVR
Цитата(RobFPGA @ Mar 12 2018, 15:12) *
Или например автоматом расставлять сигналы AXI шины на wave чтобы было как в армии все под линейку красиво было sm.gif

Не только расставлять сигналы, но и красить их в разные нескучные цвета (использую https://www.random.org/colors/hex ).
Только ради одной этой функции уже стоит tcl хотя бы минимально изучить, хотя на этом уровне даже языка не видно - обычные команды и аргументы.
RobFPGA
Приветствую!

Я еще хотел эту раставлялку (и не только) внедрить в интерфейс ModelSim чтобы во всплывающей менюшке были мои custom команды. Но лень ковырять tcl так глубоко поборола лень делать это через скрипт ручками laughing.gif .

Удачи! Rob.
Leka
Еще повод для Tcl - использование virtual JTAG вместо UART и тп для самопального терминала.
Но терминал получается ооочень медленным (по сравнению с uart). Зато ног/проводов меньше.
Leka
Цитата(Leka @ Mar 13 2018, 17:32) *
Еще повод для Tcl - использование virtual JTAG вместо UART и тп для самопального терминала.
Но терминал получается ооочень медленным (по сравнению с uart). Зато ног/проводов меньше.

Не хватило usb-uart моста, пришлось доделывать терминал (добавил FIFO в virtual JTAG), чтобы поднять скорость.
Удивляет, что много фирменных китов идут с внешними usb-uart мостами - вместо примеров использования jtag. maniac.gif

Alexey_Rostov
Цитата(Leka @ Mar 22 2018, 23:07) *
Не хватило usb-uart моста, пришлось доделывать терминал (добавил FIFO в virtual JTAG), чтобы поднять скорость.
Удивляет, что много фирменных китов идут с внешними usb-uart мостами - вместо примеров использования jtag. maniac.gif


Вероятно проще поставить драйвер usb-uart для com порта, чем под jtag, если я вас правильно понял. То есть вы используете jtag для информационного обмена ПК-плата? Как FIFO позволяет увеличить скорость, это же просто буфер?
GriXa
В своих проектах использую tcl скрипты для автоматического добавления номера версии и времени компиляции проекта.

К примеру, в регистре сохраняется версия прошивки и дата-время компиляции. Для golden и working версии она может быть разная.
Пример такого файла на vhdl
Цитата
-- created at 07/Dec/2017-13:15:15
-- DO NOT EDIT THIS FILE
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package compile_time_pkg is

constant VER_VALUE : string := "30";
constant COMPILE_TIME : integer := 1512648915;

end package compile_time_pkg;


Скрипт создает этот файл, потом запускает компиляцию. При каждой последующей компиляции увеличивает, к примеру, счетчик версий и изменяет время на текущее. После успешной компиляции - копирует текущую прошивку в отдельную папку с названием, соответствующим данной прошивке. Что-то типа name_working_v12.bit

Leka
Цитата(Alexey_Rostov @ Mar 23 2018, 06:24) *
То есть вы используете jtag для информационного обмена ПК-плата? Как FIFO позволяет увеличить скорость, это же просто буфер?

ПК используется как текстовый терминал. Бодовая скорость большая, средняя - маленькая. FIFO позволяет снять ограничение на бодовую скорость.

AnatolySh
Цитата(Alexey_Rostov @ Mar 11 2018, 13:07) *
Если можно конкретные примеры.
Мой пример в виде проекта для Modelsim-a (проверял на 10.1d Altera Starter Edition) - в скрепке.
cd_ARINC_freq_divider_Modelsim.tcl кладём в корень Modelsim-a (у меня d:\altera\13.0sp1\modelsim_ase\win32aloem)
Из той же папки стартуем Modelsim (d:\altera\13.0sp1\modelsim_ase\win32aloem\modelsim.exe).
После выдачи приглашения Modelsim> запускаем этот скрипт:
набираем do cd_ARINC_freq_divider_Modelsim.tcl (переходим в папку проекта).
(если скрипт cd_* поместили правильно, то уже после набора do cd Modelsim в строке выше сам покажет имя скрипта).
Выполнили скрипт (перешли в папку проекта).
А там уже выполняем Modelsim> do ARINC_freq_divider_simulate.tcl
Примечание скрипт conf_wave_window.tcl использует переменную окружения ... сами найдёте и создадите.
И подкорректируете всё и вся под себя.

Вопросы и замечания по проекту очень сильно приветствуются.
AnatolySh
Вот ещё статья по теме: Использование TCL в разработке на FPGA
Kuzmi4
В догонку от того же товарища на гитхабе:
TCL scripts for FPGA (Xilinx)
AnatolySh
Кстати, у Альтеры есть презентация по теме: Quartus II Software Tcl Scripting (ODSW1190)
И прямая ссылка на материалы для тех, кто не хочет регистрироваться.
Tpeck
Цитата(Kuzmi4 @ Apr 5 2018, 10:53) *
В догонку от того же товарища на гитхабе:
TCL scripts for FPGA (Xilinx)

А можно запустить скрипт без помощи Vivado (tool->Run tcl script), с помощью батника например?
Спасибо за помощь.
RobFPGA
Приветствую!

Цитата(Tpeck @ May 8 2018, 15:46) *
А можно запустить скрипт без помощи Vivado (tool->Run tcl script), с помощью батника например?
Спасибо за помощь.
Скрит для Vivado?
Код
vivado -help
vivado -mode tcl     -source  script.tcl  [-tclargs  arg1 arg2]
vivado -mode batch  -source  script.tcl   [-tclargs  arg1 arg2]


Удачи! Rob.
Tpeck
Цитата(RobFPGA @ May 8 2018, 15:59) *
Приветствую!

Скрит для Vivado?
Код
vivado -help
vivado -mode tcl     -source  script.tcl  [-tclargs  arg1 arg2]
vivado -mode batch  -source  script.tcl   [-tclargs  arg1 arg2]


Удачи! Rob.


Да. Спасибо. Получилось.
А зачем нужны аргументы arg1 и arg2?
RobFPGA
Приветствую!
Цитата(Tpeck @ May 8 2018, 17:04) *
Да. Спасибо. Получилось.
А зачем нужны аргументы arg1 и arg2?

А чтобы было ... sm.gif ... в качестве параметров при запуске script.tcl

Удачи! Rob.
Marat Zuev
И, вроде, вот это ещё не упоминали: Quartus Prime and Quartus II Software Scripting Support )
Alexey_Rostov
Использую tcl в системе контроля версий для сборки проекта из исходников репозитория, скопированных в локальную папку.

В локальную папку из репозитория залил write_project.tcl файл, полученный из vivado, и набор исходников в папке .../project_1/project_1.src/source_1/new/

Запуск tcl скрипта должен привести к сборке проекта с исходниками в папке project_1/project_1.src/source_1/new/

Но после запуска появляется ошибка

CODE
ERROR: [Common 17-53] User Exception: Project already exists on disk, please use '-force' option to overwrite:
D:/example_1v/project_1/project_1.srcs


если добавлю -force, то папка project_1/project_1.src/source_1/new/ с исходниками удаляется.

В скрипте добавление файлов прописано

CODE
# Set 'sources_1' fileset object
set obj [get_filesets sources_1]
set files [list \
"[file normalize "$origin_dir/project_1/project_1.srcs/sources_1/new/BRAM_Memory_24x24.v"]"\
"[file normalize "$origin_dir/project_1/project_1.srcs/sources_1/new/kernel_3x3.v"]"\
]

add_files -norecurse -fileset $obj $files


Если исходники вынесу по адресу $origin_dir/project_1.srcs/sources_1/new/ , т.е. за пределы папки project_1 и отредактирую пути в скрипте, то новым проектом файлы подхватываются, но каталог project_1.srcs будет находится за пределами папки project_1.

Как отредактировать tcl файл, чтобы происходила сборка проекта в требуемом каталоге с исходниками на своих местах?
tcl файл прилагаю.


Shivers
Так а в чем проблема? Файл D:/example_1v/project_1/project_1.srcs действительно уже есть на диске, и попытка его перезаписи приводит к ошибке? Ну так удаляйте его каждый раз прямо в теле скрипта
rm -f D:/example_1v/project_1/project_1.srcs
Alexey_Rostov
Цитата(Shivers @ May 13 2018, 21:43) *
Так а в чем проблема? Файл D:/example_1v/project_1/project_1.srcs действительно уже есть на диске, и попытка его перезаписи приводит к ошибке? Ну так удаляйте его каждый раз прямо в теле скрипта
rm -f D:/example_1v/project_1/project_1.srcs


Хотелось бы:
1. Получить из репозитория в локальную папку example_1v файлы : project_1/project_1.src/... и write_prj.tcl.
2. Запустить write_prj.tcl и получить готовый проект в каталоге project_1 со всеми остальными папками .src, .sim и т.д., и подхваченными исходниками без лишних манипуляций с файлами исходниками.

По первому пункту вопросов нет, по второму - требуются дополнительные манипуляции с файлами исходниками в tcl файле и локальной папке example_1v.
Opex
Папка project_1/project_1.src управляется средой, поэтому при создании проекта из скрипта перезаписывается. Исходники можно перенести в другую папку, при создании файла write_prj.tcl будут ссылки на файлы в ней, руками править не нужно.


Alexey_Rostov
Цитата(Opex @ May 14 2018, 09:33) *
Папка project_1/project_1.src управляется средой, поэтому при создании проекта из скрипта перезаписывается. Исходники можно перенести в другую папку, при создании файла write_prj.tcl будут ссылки на файлы в ней, руками править не нужно.


Хорошо, перенес я например исходники в папку project_1/verilog, в скрипте указал, что исходники находятся в данной папке, после запуска скрипта получил проект со скопированными исходниками в папке project_1.src. В процессе работы начинаются правки исходников в папке project_1.src. Делаю commit текущих исходников, в репозитории они сохранятся в project_1/project_1.src. Потом при клонировании репозитория необходимо будет опять переносить исходники в папку project_1/verilog, запускать скрипт для создания проекта.
Можно ли обойтись без данных манипуляций с переносом в папку project_1/verilog?
RobFPGA
Приветствую!
Цитата(Alexey_Rostov @ May 14 2018, 12:24) *
Хорошо, перенес я например исходники в папку project_1/verilog, в скрипте указал, что исходники находятся в данной папке, после запуска скрипта получил проект со скопированными исходниками в папке project_1.src.
...
Если Вы в скрипте делаете add_files ... а не import_files ... то исходники остаются там где и были и не переносятся в project_1.src. В проекте в таком случае будут линки на project_1/verilog/file...

Удачи! Rob.
Alexey_Rostov
Цитата(RobFPGA @ May 14 2018, 12:33) *
Приветствую!
Если Вы в скрипте делаете add_files ... а не import_files ... то исходники остаются там где и были и не переносятся в project_1.src. В проекте в таком случае будут линки на project_1/verilog/file...

Удачи! Rob.


Спасибо! уже догадался: команды из GUI для tcl, когда импортируем файлы без копирования!
R6L-025
Использую tcl для парсинга verilog кода. Удобно из кода получать готовые сишные хедеры со всеми смещениями внутри SystemVerilog'ских структур, именованными константами размеров массивов, смещений шин в памяти и пр.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.