Xilinx Vivado: комфортный билд в CLI
Как разукрасить проплывающие серые логи EDA?
Преамбула
Наконец дошли руки сделать то, что так не хватало в ежедневном рутинном разглядывании серых логов - разукрашку логов вивадо, работающую в рантайм. Перепробовав некоторое количество вариантов (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, а только плотно работая с тулом приходит понимание чего именно не хватает и что именно нуждается в “подсветке”.