Анализ фрагмента Tcl-скрипта Innovus (этапы
1–4)
Листинг 3: Фрагмент Tcl-скрипта Cadence Innovus, выполняющий первоначальную настройку путей и
переменных окружения, а также подготовку входных данных.
#1
set lib_project "/home/st16/Temaid/Syn_iscas"
set lib_gverilog "$lib_project/Output_genus"
set lib_name $::env(LIB_TEST)
set lib_name_suff $::env(LIB_TEST_SUF)
set lib_tech "$lib_project/lib/
6T_BEOL1_24_30_24_24_64_64_64_64_64_64_64_64_720_720.tech.lef"
set lib_lef "$lib_project/lib/gdslefgen"
set lib_tap_lef "$lib_project/lib/taplefgen"
set input_dir [file normalize "../ISCAS85"]
#2
set lib_name_suf [file rootname [file tail $lib_name_suff]]
puts "========================================"
puts "Processing Library: $lib_name"
puts "========================================"
#3
set output_dir [file normalize "../Output_innovus/$lib_name"]
file mkdir $output_dir
set log_dir [file join "$lib_project/Output_innovus" "log_file"]
file mkdir [file join "$lib_project/Output_innovus" "log_file"]
cd $log_dir
#4
set design [glob -nocomplain -directory $input_dir *.v]
puts $design
Этап 1: Определение основных директорий и переменных
окружения
В первой части скрипта устанавливаются ключевые переменные и пути, необходимые для
последующих этапов синтеза и физического дизайна. Переменной lib_project присваивается
1
строка "/home/st16/Temaid/Syn_iscas" , обозначающая базовый каталог проекта. На её основе
формируется путь к каталогу с результатами этапа Genus:
получает значение
lib_gverilog
"$lib_project/Output_genus" . Далее командами set lib_name $::env(LIB_TEST) и set
lib_name_suff
$::env(LIB_TEST_SUF)
LIB_TEST_SUF
записываются
из системных переменных окружения
значения
в
Tcl-переменные
lib_name
и
LIB_TEST
и
lib_name_suff
соответственно 1 . Таким образом задаются имя обрабатываемой библиотеки и её суффикс,
которые будут использоваться при последующей компоновке.
Переменная lib_tech получает путь к файлу технологии в формате LEF (Library Exchange Format) –
это
.tech.lef
файл, содержащий описание слоёв и размеров элементов используемого
технологического процесса. Аналогично задаются переменные lib_lef и lib_tap_lef : первая
указывает на директорию LEF-файлов стандартных ячеек, а вторая – на директорию LEF-файлов так
называемых «tap»-ячейок (элементов для заполнения и выравнивания топологии). Обе эти
переменные формируются на основе lib_project . В завершение этапа переменная input_dir
задаётся с помощью команды
[file normalize "../ISCAS85"] . Команда
file normalize
преобразует относительный путь ../ISCAS85 в канонический абсолютный путь к каталогу, где
хранятся исходные Verilog-файлы проекта
2
.
Этап 2: Обработка имени библиотеки и вывод статуса
Во втором этапе осуществляется «очистка» и форматирование имени библиотеки перед началом её
обработки. Сначала выполняется команда file tail $lib_name_suff , которая возвращает
конечную часть пути (имя файла) из переменной lib_name_suff , а затем file rootname удаляет
из этого имени расширение файла. Результат этих операций записывается в переменную
lib_name_suf . Данный приём позволяет получить базовое имя библиотеки без расширения и
лишних суффиксов. После этого выполняется вывод информационных сообщений: последовательно
вызываются команды puts , которые печатают разделительную строку и сообщение вида
«Processing Library: $lib_name». Таким образом в консоль выводится уведомление о начале обработки
заданной библиотеки и отображается её имя. Команды puts в Tcl предназначены для вывода текста
на стандартный вывод скрипта, что обеспечивает удобство мониторинга хода выполнения скрипта.
Этап 3: Настройка директорий вывода и логирования
На третьем этапе настраиваются каталоги для сохранения результатов работы скрипта и лог-файлов.
Переменной
output_dir
присваивается абсолютный путь
[file
normalize
"../
Output_innovus/$lib_name"] ,
который
указывает
на
директорию
имя_библиотеки . Затем команда
file mkdir $output_dir
Output_innovus/
создаёт этот каталог в файловой
системе (если он ещё не существовал). Аналогичным образом определяется переменная log_dir : с
помощью
file
join
"$lib_project/Output_innovus"
"log_file"
подкаталогу Output_innovus/log_file внутри базового проекта
2
формируется путь к
. После этого file mkdir
создаёт каталог для логов. Эти операции гарантируют, что будут созданы нужные директории для
хранения результатов и логов.
Затем выполняется cd $log_dir , переключая текущий рабочий каталог скрипта на созданную
директорию логов 3 . Это позволяет направлять все последующие команды вывода (в том числе
puts и операции записи в файлы) именно в этот каталог. Таким образом, после выполнения
2
третьего этапа создаётся организация пространства для выходных данных и лог-файлов, и скрипт
готов к работе в новом текущем каталоге.
Этап 4: Формирование списка входных файлов дизайна
На четвёртом этапе скрипт собирает список исходных Verilog-файлов проекта. С помощью команды
glob -nocomplain -directory $input_dir *.v осуществляется поиск во входном каталоге
$input_dir всех файлов с расширением .v . Результатом выполнения glob все найденные
имена файлов (если таковые имеются) автоматически собираются в переменную design . Опция nocomplain предотвращает появление ошибки, если совпадений не найдено. После этого команда
puts $design выводит полученный список файлов на консоль, позволяя убедиться, какие именно
файлы будут обрабатываться. Применение шаблона *.v и механизма glob делает поиск гибким и
автоматическим
: символ * соответствует любой последовательности символов в имени файла,
4
благодаря чему в список попадают все файлы Verilog с расширением
.v . В результате этапа
формируется полный перечень исходных модулей дизайна для дальнейшей работы.
Таким образом, описанный фрагмент скрипта выполняет подготовку окружения: задаёт базовые пути
к проекту и библиотекам, считывает названия библиотеки из окружения, создаёт необходимые
каталоги для вывода и логов, а также собирает список исходных файлов дизайна. После завершения
этих настроек следующими командами скрипта будет произведена непосредственная
инициализация дизайна и формирование его первоначального плана размещения (floorplan), что
будет рассмотрено в следующем разделе.
Источники: документация Cadence по Tcl-командам для работы с файлами (например,
normalize , file join , glob и cd )
переменных Tcl
1
1
2
4
3
.
How to pass arguments from cmd to tcl script of ModelSim - Stack Overflow
https://stackoverflow.com/questions/42923362/how-to-pass-arguments-from-cmd-to-tcl-script-of-modelsim
2
3
4
Tempus Adv TCL | PDF
https://www.scribd.com/document/449331281/TempusAdvTCL
3
file
, а также примеры использования системных