Приведенное ниже — описание к коллекции моих EDA-скриптов для работы с тулами для ASIC и FPGA
Конвертор из UCF в XDC
Конвертирует для ПЛИС Xilinx привязки ножек и стандартов из формата ucf (Xilinx ISE) в новый формат xdc (Xilinx Vivado). Использование:
1 | ./ucf-to-xdc.sh FILENAME.ucf |
В текущей директории появится файл FILENAME.xdc
.
Пример входного ucf-файла
1 2 | NET "DDR_DQ[0]" LOC = "AY12" | IOSTANDARD = SSTL15_T_DCI | VCCAUX_IO = NORMAL | SLEW = FAST; NET "DDR_DQ[1]" LOC = "AW12" | IOSTANDARD = SSTL15_T_DCI | VCCAUX_IO = NORMAL | SLEW = FAST; |
Пример сгенеренного утилитой xdc-файла
1 2 3 4 5 6 7 8 9 | set_property PACKAGE_PIN AY12 [get_ports DDR_DQ[0]] set_property IOSTANDARD SSTL15_T_DCI [get_ports DDR_DQ[0]] set_property VCCAUX_IO NORMAL [get_ports DDR_DQ[0]] set_property SLEW FAST [get_ports DDR_DQ[0]] set_property PACKAGE_PIN AW12 [get_ports DDR_DQ[1]] set_property IOSTANDARD SSTL15_T_DCI [get_ports DDR_DQ[1]] set_property VCCAUX_IO NORMAL [get_ports DDR_DQ[1]] set_property SLEW FAST [get_ports DDR_DQ[1]] |
Ограничения
Текущая версия парсера позиционно-зависима от порядка перечисления свойств в файле ucf. Необходимо следовать этому формату для корректной работы утилиты.
Планы
Переписать скрипт на новый однострочный формат xdc-файла:
1 | set_property -dict {PACKAGE_PIN AY12 IOSTANDARD SSTL15_T_DCI VCCAUX_IO NORMAL SLEW FAST} [get_ports DDR_DQ[0]]; |
Скрипт
https://github.com/iDoka/eda-scripts/blob/master/ucf-to-xdc.sh
Мониторинг запущенных на сервере Xilinx Vivado
Скрипт находит запущенные процессы Vivado от юзера (vivado-stat-user.sh
) или все процессы Vivado на сервере (vivado-stat.sh
) и печатает по ним суммарную статистику: утилизацию CPU и ОЗУ. Вешь крайне полезная для ослеживания исчерпания ресурсов (особенно при синтезе под Vitrex-7 2000T).
Запуск:
1 | ./vivado-stat.sh |
после чего будет запущен периодический сбор информации и вывод на экран потребляемых ресурсов. В скрипте можно подстроить параметры:
CMD
— какую конкретно команду отслеживаем (можно сменить на Quartus/Lattice/whatever_you_want)PERIOD
— целочисленное значение секунд, определяющее период наблюдения
Пример запуска
Пример вывода скрипта при PERIOD="30s"
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $ ./vivado-stat.sh 97% 1265M 99% 1459M 98% 1570M 98% 1822M 99% 1948M 99% 2138M 99% 2531M 99% 2821M 103% 2928M 103% 3098M 428% 7092M 477% 8959M 446% 10335M 375% 10408M 435% 11391M 441% 11633M 460% 13799M 420% 13966M 404% 14006M 296% 9994M *** vivado was finished running at 11:11 06.07.2016 *** $ |
Скрипты
- https://github.com/iDoka/eda-scripts/blob/master/vivado-stat.sh
- https://github.com/iDoka/eda-scripts/blob/master/vivado-stat-user.sh
Добавление в систему ethX c произвольным MAC
Скрипт создаёт в системе дополнительный (виртуальный) адаптер с произвольным МАС-адресом. Например, в случае если ваш ноутбук не имеет Ethernet-адаптера или в куче других случаев 🙂
Исключительно для справки: Новые версии FLEXLM могут поддерживать несколько HostID одновременно (не только eth0
, но и eth*
)
Использование
- Измените под собственные нужны переменные
$DEV
и$MAC
в скриптеfake-nic.sh
- Запустите скрипт из под
root
-пользователя:1./fake-nic.shскрипт установит неодостающие пакеты в вашу систему и добавит сетевой адаптер с заданным
$DEV
(имя) и$MAC
(hostid).
Ограничения
Работа скрипта проверена в ОС RHEL/CentOS 6.x/7.x. Внутри скрипта встроена авто-проверка запуска именно в этих системах.
Планы
- Передавать DEV и MAC как аргументы командной строки
- Оформить скрипт для запуска из systemd при каждом старте системы
Скрипт
https://github.com/iDoka/eda-scripts/blob/master/fake-nic.sh
Встраивание номера ревизии в битстрим FPGA
Скрипт впечатывает дату сборки и хэш прошивки в образ битстрима FPGA
Использование
На вход передаётся образ в формате mcs и формат выходного файла (intel либо motorola). В утилите настраиваются адреса, по которым располагать дату и хэшсам: для даты отведено 4 байта (время последней модификации файла прошивки в формате линукс — число секунд, отсчитываемые с эпохи) и 16 байт для результата md5sum от содержимого образа файла прошивки.
Зависимости
Скрипт требует установленного и прописанного в PATH ПО Xilinx Lab Tools и пакета srecord.
Скрипт
https://github.com/iDoka/eda-scripts/blob/master/vergen-fpga.sh
Настройки репозитария git для ASIC/FPGA проектов
Скрипт создает пустой реопзитарий с преднастроенными файлами .gitattributes
и .gitignore
Использование
Просто набрать в командной строке:
1 | ./git-setting.sh /путь/к/будущему/репозитарию |
Зависимости
Необходимо установить клиент finger:
1 | yum install -y finger |
Планы
- Проверка существования
$GIT_DIR
, если не существует — создание - Автоматическое создание типичной для EDA-проектов структуры папок
Скрипт и файлы
- https://github.com/iDoka/eda-scripts/blob/master/git-setting.sh
- https://github.com/iDoka/eda-scripts/tree/master/gitignore
- https://github.com/iDoka/eda-scripts/tree/master/gitattributes
Подбор параметров блока PLL/DCM для Xilinx FPGA
Скрипт печатает таблицу коэффициентов блока ФАПЧ для ПЛИС Xilinx при удовлетворении допуска в % для заданных опорной и выходной частот.
Использование
- Задайте необходимые значения переменным
$F_input
(Гц),$F_desired
(Гц) и$precission
(%) в скриптеxilinx-pll-calc.php
- Выберите необходимое семейство ПЛИС, например:
$FPGA = $SPARTAN6;
- Запустите скрипт в интерпретаторе:1php xilinx-pll-calc.php
и постарайтесь найти зеленую строку в выводе скрипта:
Ограничения
В настоящий момент скрипт поддерживает следующие семейства ПЛИС Xilinx:
- Xilinx Spartan-6
- Xilinx Virtex-7
- [добавьте сюда своё любимое семейство ПЛИС. см.далее]
Добавление нового семейства ПЛИС
Xilinx, Altera, Lattice?… Тул может быть адаптирован под любого производителя и семейство!
1 2 3 4 5 6 7 8 9 10 11 12 13 | $VIRTEX7 = array( "FREQ_INP_MIN" => 19e6, "FREQ_INP_MAX" => 800e6, "FREQ_VCO_MIN" => 800e6, "FREQ_VCO_MAX" => 1600e6, "FREQ_OUT_MIN" => 6.25e6, "FREQ_OUT_MAX" => 800e6, "M_MIN" => 2, "M_MAX" => 64, "D_MIN" => 1, "D_MAX" => 128, "O_MIN" => 1, "O_MAX" => 56); |
Нижеприведенная формула приоткроет завесу тайны относительно смысла таких переменных как: M, D, O, FREQ_INP, FREQ_VCO, FREQ_OUT.
1 2 3 4 5 6 7 8 9 10 11 12 | ####################### ######################## # # # Useful Folmulae # # M # for PLL Equation # # Fvco = Fin * - # # # D ####################### # # # Fvco M # # Fout = ---- or Fout = Fin * ----- # # O D*O # # # ########################################### |
Планы
Реализовать режим сцепки последовательно двух ФАПЧ для реализации недостижимых с помощью одной ФАПЧ условий по выходной частоте.
Скрипт
https://github.com/iDoka/eda-scripts/blob/master/xilinx-pll-calc.php