Подключи ISE, Vivado и Quartus к общему итератору версии и HDL-паспорту. Проверяй новый bit/sof до создания manifest, SHA-256 и архива выпуска. Добавь установку локальных команд ISE, инструкции переноса и регрессионные проверки успешных и прерванных сборок.
57 lines
4.1 KiB
Tcl
57 lines
4.1 KiB
Tcl
# Находит общий код независимо от рабочего каталога Vivado.
|
|
source [file join [file dirname [info script]] common.tcl]
|
|
# Объединяет запуск и контроль результата в одну прерываемую при ошибке операцию.
|
|
if {[catch {
|
|
# Принимает project.xpr, config.json, output, top.bit, язык и необязательный python.exe.
|
|
fw::init $argv vivado
|
|
# Открывает проект с его part, top, XDC и настройками реализации.
|
|
open_project $fw::settings(project)
|
|
# Берёт активную реализацию, а не предполагает стандартное имя impl_1.
|
|
set implementation [current_run -implementation]
|
|
# Синтез выбирается по родителю реализации, даже если в GUI активен другой synth run.
|
|
set synthesis [get_property PARENT $implementation]
|
|
# Файловый набор принадлежит именно синтезу выбранной реализации.
|
|
set sources [get_property SRCSET [get_runs $synthesis]]
|
|
# Генерирует паспорт до запуска синтеза; повторное увеличение в hooks проекта не требуется.
|
|
fw::prepare
|
|
# Регистрирует только один вариант HDL в правильном наборе исходников.
|
|
add_files -fileset $sources -norecurse $fw::settings(hdl)
|
|
# Обновляет порядок компиляции для нового модуля или VHDL entity.
|
|
update_compile_order -fileset $sources
|
|
# Сбрасывает реализацию перед синтезом, чтобы не использовать прежнюю размещённую схему.
|
|
reset_run $implementation
|
|
# Полный синтез обязателен при новом паспорте даже в ручном режиме номера версии.
|
|
reset_run $synthesis
|
|
# Запускает синтез с настройками проекта.
|
|
launch_runs $synthesis
|
|
# Ожидает завершения дочернего процесса до проверки результата.
|
|
wait_on_run $synthesis
|
|
# Ожидание само по себе не означает успех; 100% проверяется отдельно.
|
|
if {[get_property PROGRESS [get_runs $synthesis]] ne "100%"} {
|
|
# Не запускает реализацию при отказе синтеза.
|
|
error "Vivado synthesis failed"
|
|
# Заканчивает проверку синтеза.
|
|
}
|
|
# Включает write_bitstream, который обычная реализация по умолчанию не выполняет.
|
|
launch_runs $implementation -to_step write_bitstream
|
|
# Ждёт записи .bit перед вызовом общего post-build.
|
|
wait_on_run $implementation
|
|
# Проверяет завершение полной цепочки генерации файла программирования.
|
|
if {[get_property PROGRESS $implementation] ne "100%"} {
|
|
# Отказ маршрутизации, DRC или BitGen блокирует архивирование.
|
|
error "Vivado implementation/bitstream failed"
|
|
# Завершает проверку реализации.
|
|
}
|
|
# Упаковывает именно ожидаемый .bit после успешной сборки.
|
|
fw::finish
|
|
# Завершает работу с сохранёнными настройками проекта.
|
|
close_project
|
|
# Ошибка любого шага передаётся внешнему вызывающему процессу.
|
|
} message]} {
|
|
# Сохраняет исходное сообщение САПР или общего генератора в журнале.
|
|
puts stderr $message
|
|
# Возвращает отказ внешней сборке или CI.
|
|
exit 1
|
|
# Заканчивает обработку ошибок.
|
|
}
|