Doka avatar

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

О микроэлектронике, радиотехнике и хобби

Xilinx Vivado: комфортный билд в CLI

Как разукрасить проплывающие серые логи EDA?

Dmitry Murzinov

2 минут чтения

Преамбула

Наконец дошли руки сделать то, что так не хватало в ежедневном рутинном разглядывании серых логов - разукрашку логов вивадо, работающую в рантайм. Перепробовав некоторое количество вариантов (ccze, awk, multitail), остановился на sed.

Что не позволяли другие инструменты:

  • “блокирование”" StdOut
  • отсутствие прокрутки live-лога во время билда
  • отсутствие возможности раскраски в live-режиме (только постфактум из файла)

Реализация

Цвета раскраски чисто вкусовщина и подбиралась под тему Solarized Light (пример в шапке поста)

  • '/\(^#.*\)/d' - вычищаем всё дублирование команд из лога вивадо
  • "s/\('[\*\/._a-zA-Z0-9]*'\)/\o033[2m\1\o033[22m/g" - подсвечиваем все имена модулей и сигналов (вивадо их помещает в одиночные кавычки)
  • "s/\('[\*\/._a-zA-Z0-9]*\[[0-9]*\]'\)/\o033[2m\1\o033[22m/g" - подсвечиваем имена многоразрядных сигналов (формат сигнал[N])
  • Ужирняем таблицы-репорты:
    • 's/\(^|.*\)/\o033[1m\1\o033[0m/'
    • 's/\(^----.*\)/\o033[1m\1\o033[0m/'
    • 's/\(^====.*\)/\o033[1m\1\o033[0m/'
    • 's/\(^\+.*\)/\o033[1m\1\o033[0m/'
  • Выделяем (инвертированием) все вехи процесса сборки:
    • 's/\(^Phase.*\)/\o033[7m\1\o033[27m/'
    • 's/\(^Start.*\)/\o033[7m\1\o033[27m/'
  • Обработка стандартных типов сообщений Вивадо: INFOs, WARNINGs, CRITICAL WARNINGs, ERRORs
    • 's/\(^INFO.*\)/\o033[92m\1\o033[39m/' - светло-зеленые INFO
    • 's/\(^WARNING.*\)/\o033[34m\1\o033[39m/' - синие WARNING
    • 's/\(.*CRITICAL.*\)/\o033[35m\1\o033[39m/' - малиновые CRITICAL WARNING
    • 's/\(^ERROR.*\)/\o033[31m\1\o033[39m' - красные ERROR
  • 's/\(^WNS.*\)/\o033[36m\1\o033[39m/' - это кастом: использую для выделения сообщений по результатам get_timing_paths -max_paths 1 -nworst 1 ...

Форматирование

  • 1 - полужирный шрифт
  • 2 - приглушённый цвет (например зеленый будет заменён на тёмно-зеленый)
  • 4 - подчеркнутый
  • 5 - мигающий
  • 7 - инверсный: фон и текст меняются цветами

После применения “раскрашивания” в sed конце строки происходит возвращение настроек по умолчанию, например для 2 (приглушённого цвета) применяем в конце строки 22 (с другими свойствами по аналогии прибавлением +20), для глобального сброса всех атрибутов на значение по умолчанию используйте значение 0.

Цвета цветов

Собственно коды цветов можно менять, вот список для референса:

  • 39 - Default foreground color (цвет терминала по умолчанию)
  • 30 - Black
  • 31 - Red
  • 32 - Green
  • 33 - Yellow
  • 34 - Blue
  • 35 - Magenta
  • 36 - Cyan
  • 37 - Light gray
  • 90 - Dark gray
  • 91 - Light red
  • 92 - Light green
  • 93 - Light yellow
  • 94 - Light blue
  • 95 - Light magenta
  • 96 - Light cyan
  • 97 - White

После применения “раскрашивания” в конце строки происходит возвращение к цвету 39 - цвету текста терминала по умолчанию.

Цвета фонов

Создаются из цветов текста прибавлением +10

Обработка дублирования команд из TCL в StdOut

По умолчанию (предпочитаю так) все дубли команд из билд-скрипта удаляются из выходного потока, за это отвечает стока:

sed -e '/\(^#.*\)/d'

Поведение можно заменить (полезно при отладке скриптов), оставив их в выходном потоке, но сделав максимально неконтрастными (для светлого фона терминала):

sed -e 's/\(^#.*\)/\o033[37m\1\o033[39m/'

Исходники

✅ MIT licensed Github/eda-scripts

ToDo

С удовольствием в будущем адаптирую под Кейденс или Альтеру, но в данный момент я работаю только с Xilinx, а только плотно работая с тулом приходит понимание чего именно не хватает и что именно нуждается в “подсветке”.

Последние записи

Разделы