Журнал Эмбеддед-Инженера

[opensource]: Мои скрипты для EDA/CAE/CAD

Приведенное ниже — описание к коллекции моих EDA-скриптов для работы с тулами для ASIC и FPGA

Конвертор из UCF в XDC

Конвертирует для ПЛИС Xilinx привязки ножек и стандартов из формата ucf (Xilinx ISE) в новый формат xdc (Xilinx Vivado). Использование:

./ucf-to-xdc.sh FILENAME.ucf

В текущей директории появится файл FILENAME.xdc.

Пример входного ucf-файла

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-файла

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-файла:

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).

Запуск:

./vivado-stat.sh

после чего будет запущен периодический сбор информации и вывод на экран потребляемых ресурсов. В скрипте можно подстроить параметры:

  • CMD — какую конкретно команду отслеживаем (можно сменить на Quartus/Lattice/whatever_you_want)
  • PERIOD — целочисленное значение секунд, определяющее период наблюдения

Пример запуска

Пример вывода скрипта при PERIOD="30s":

$ ./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 ***
$

Скрипты

Добавление в систему  ethX c произвольным MAC

Скрипт создаёт в системе дополнительный (виртуальный) адаптер с произвольным МАС-адресом. Например, в случае если ваш ноутбук не имеет Ethernet-адаптера или в куче других случаев 🙂

Исключительно для справки: Новые версии FLEXLM могут поддерживать несколько HostID одновременно (не только eth0, но и  eth*)

Использование

  1. Измените под собственные нужны переменные $DEV и $MAC в скрипте fake-nic.sh 
  2. Запустите скрипт из под root-пользователя:
    ./fake-nic.sh

    скрипт установит неодостающие пакеты в вашу систему и добавит сетевой адаптер с заданным $DEV (имя) и $MAC (hostid).

Автовыполнение при загрузке

Небрежный способ поднять сетевой адаптер при каждом старте системы — это добавить в /etc/rc.local следующие строки:

  MAC="E4:7D:DE:AD:BE:EF"
  DEV="eth1"
  ip tuntap add ${DEV} mode tap
  ifconfig ${DEV} hw ether ${MAC}
  ifconfig ${DEV} up

Ограничения

Работа скрипта проверена в ОС 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

Использование

Просто набрать в командной строке:

./git-setting.sh /путь/к/будущему/репозитарию

Зависимости

Необходимо установить клиент finger:

yum install -y finger

Планы

Скрипт и файлы

Подбор параметров блока PLL/DCM для Xilinx FPGA

Скрипт печатает таблицу коэффициентов блока ФАПЧ для ПЛИС Xilinx при удовлетворении допуска в % для заданных опорной и выходной частот.

Использование

  1. Задайте необходимые значения переменным $F_input (Гц), $F_desired (Гц) и $precission (%) в скрипте xilinx-pll-calc.php
  2. Выберите необходимое семейство ПЛИС, например: $FPGA = $SPARTAN6;
  3. Запустите скрипт в интерпретаторе:
    php xilinx-pll-calc.php

    и постарайтесь найти зеленую строку в выводе скрипта:

Ограничения

В настоящий момент скрипт поддерживает следующие семейства ПЛИС Xilinx:

  • Xilinx Spartan-6
  • Xilinx Virtex-7
  • [добавьте сюда своё любимое семейство ПЛИС. см.далее]

Добавление нового семейства ПЛИС

Xilinx, Altera, Lattice?…​ Тул может быть адаптирован под любого производителя и семейство!

 Быстрый путь для добавления нового семейства ПЛИС состоит в заполнении ассоциативного массива (диапазоны мин. и макс. значений частот и коэффициентов берутся из даташита соответствующего семейства):
  $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.

                         #######################
  ########################                     #
  #                      #   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

Github

PS: если заметка помогла Вам, поделитесь ей с друзьями или коллегами: