Jump to content

    

tcl на FPGA

Добрый день! Кто использует при разработке на FPGA tcl скрипты, поделитесь пожалуйста опытом, какие преимущества можно получить за счет использования tcl. Пока обнаружил только преимущество перед gui в виде автоматизации при переносе проектов с одного кристалла на другой. Если можно конкретные примеры.

Share this post


Link to post
Share on other sites
Добрый день! Кто использует при разработке на FPGA tcl скрипты, поделитесь пожалуйста опытом, какие преимущества можно получить за счет использования tcl. Пока обнаружил только преимущество перед gui в виде автоматизации при переносе проектов с одного кристалла на другой. Если можно конкретные примеры.

Ну то, что вы уже описали.

Плюс инструменты функциональной, статической и формальной верификации тоже управляются tcl - скриптами, поэтому можно создать набор целей и провести анализ на эти цели, просто запустив скрипт, в симуляторах gui тоже управляется с помощью tcl, поэтому очень удобно создавать виды осциллограмм, и сохранять их в tcl, а также обрабатывать сигналы, например, группировать их, именовать группы или же сами сигналы (например, разбить регистр на поля), назначать radix'ы, и т.п. Можно также сделать небольшой декодер, например, чтобы вместо 00 отображалось OK, вместо 01 - ERROR.

Edited by one_eight_seven

Share this post


Link to post
Share on other sites
Пока обнаружил только преимущество перед gui в виде автоматизации при переносе проектов с одного кристалла на другой.

Работаю в Windows, gui использую очень редко (только чтобы посмотреть распределение ЛЕ по модулям),

для синтеза/анализа/прошивки запускаю *.bat файлы, tcl не использую - очень не нравится язык.

 

Share this post


Link to post
Share on other sites

vivado принуждает юзеров использовать tcl - через gui в нем некоторые операции отсутствуют, ну или достаточно неудобны (у меня, например, в текстовом редакторе набор каких-то tcl-ных команд, которые я копи-пастю в среду)

 

для asic-ов tcl стандарт, скрипты только на нем - полагаю по мере роста сложности FPGA-шных проектов, то есть количества людей, работающих над одним проектом, будет все меньше gui, все больше tcl

сами скрипты обычно простые - сложнее foreach редко что нужно, ну и иногда функцией (proc) какие-то повторяющиеся последовательности команд объединяются

 

Share this post


Link to post
Share on other sites

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

 

Tcl почти что стандарт для контроля FPGA-шного софта.

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

 

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

И работа с JTAG-AXI для быстрой отладки периферии без ожидания вечно занятого програмиста.

Для Synplyfy помню извращался с парсингом логов синтеза и автогенерацией xilinx ip корок с требуемыми параметрами.

 

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

 

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
Или например автоматом расставлять сигналы AXI шины на wave чтобы было как в армии все под линейку красиво было :)

Не только расставлять сигналы, но и красить их в разные нескучные цвета (использую https://www.random.org/colors/hex ).

Только ради одной этой функции уже стоит tcl хотя бы минимально изучить, хотя на этом уровне даже языка не видно - обычные команды и аргументы.

Share this post


Link to post
Share on other sites

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

 

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

Еще повод для Tcl - использование virtual JTAG вместо UART и тп для самопального терминала.

Но терминал получается ооочень медленным (по сравнению с uart). Зато ног/проводов меньше.

 

Share this post


Link to post
Share on other sites
Еще повод для Tcl - использование virtual JTAG вместо UART и тп для самопального терминала.

Но терминал получается ооочень медленным (по сравнению с uart). Зато ног/проводов меньше.

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

Удивляет, что много фирменных китов идут с внешними usb-uart мостами - вместо примеров использования jtag. :maniac:

 

 

Share this post


Link to post
Share on other sites
Не хватило usb-uart моста, пришлось доделывать терминал (добавил FIFO в virtual JTAG), чтобы поднять скорость.

Удивляет, что много фирменных китов идут с внешними usb-uart мостами - вместо примеров использования jtag. :maniac:

 

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

Share this post


Link to post
Share on other sites

В своих проектах использую 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

 

 

Share this post


Link to post
Share on other sites
То есть вы используете jtag для информационного обмена ПК-плата? Как FIFO позволяет увеличить скорость, это же просто буфер?

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

 

 

Share this post


Link to post
Share on other sites
Если можно конкретные примеры.
Мой пример в виде проекта для 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 использует переменную окружения ... сами найдёте и создадите.

И подкорректируете всё и вся под себя.

 

Вопросы и замечания по проекту очень сильно приветствуются.

ARINC_freq_divider.zip

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