Tool questa🔗

Environment variables🔗

Пользовательский скрипт должен предоставить следующие внешние переменные сборочного окружения, необходимые для работы инструмента:

Name Description Default value
MENTOR Путь до директории с устано-
вленными продуктами Mentor
os.environ['MENTOR']
переменная окружения должна
быть определена на используе-
мом хосте
MGLS_LICENSE_FILE Путь до файла лицензии
симулятора
os.path.join(MENTOR, 'license.dat')
QUESTABASE Путь до коренной директории
используемой версии симулятора
os.path.join(MENTOR, QUESTA_TOOL_VERSION, 'questasim')
QUESTABIN Путь до директории с исполня-
емыми файлами симулятора
(vlog, vlib, vmap)
os.path.join(QUESTABASE, 'bin')
QUESTASIM Команда (скрипт) для запуска
симулятора в графическом режи-
ме
os.path.join(QUESTABASE, 'linux_x86_64', 'vsim')
VENDOR_LIB_PATH Путь до директории, содержащей
скомплированные библиотеки
производителя ПЛИС
os.path.join( os.path.dirname(env['QUESTASIM']), 'vendor', 'xlib', 'func')

Переменные QUESTABIN, QUESTASIM проверяются при запуске, и если любая из них не определена, сборочная система завершает работу с ошибкой. Переменная VENDOR_LIB_PATH так же проверяется на наличие, и если не определена, то ей присваивается значение по умолчанию.

Определить переменные удобно в сборочном скрипте, например:

#-------------------------------------------------------------------------------
#
#    Environment
#
envx['ENV']['DISPLAY']            = os.environ['DISPLAY']
envx['ENV']['HOME']               = os.environ['HOME']
envx['ENV']['XILINX']             = env.XILINX
envx['ENV']['MENTOR']             = env.MENTOR
envx['ENV']['MGLS_LICENSE_FILE']  = env.MGLS_LICENSE_FILE
envx['ENV']['XILINX_VIVADO']      = env.XILINX_VIVADO
envx['XILINX_VIVADO']             = env.XILINX_VIVADO
envx['XILINX_HLS']                = env.XILINX_HLS
envx['QUESTABIN']                 = env.QUESTABIN
envx['QUESTASIM']                 = env.QUESTASIM
envx['VENDOR_LIB_PATH']           = env.VENDOR_LIB_PATH

где env — объект с параметрами, получаемый:

env = import_config('env.yml')

а конфигурационный файл env.yml представляет собой нечто подобное:

#
#   env.yml
#
parameters:
    XILINX              : = os.environ['XILINX']
    MENTOR              : = os.environ['MENTOR']

    XILINX_TOOL_VERSION : '2021.2'
    QUESTA_TOOL_VERSION : '2021.1'

    XILINX_VIVADO       : = os.path.join(XILINX, 'Vivado', XILINX_TOOL_VERSION)
    XILINX_HLS          : = os.path.join(XILINX, 'Vitis_HLS', XILINX_TOOL_VERSION)

    MGLS_LICENSE_FILE   : = os.path.join(MENTOR, 'license.dat')
    QUESTABASE          : = os.path.join(MENTOR, QUESTA_TOOL_VERSION, 'questasim')
    QUESTABIN           : = os.path.join(QUESTABASE, 'bin')
    QUESTASIM           : = os.path.join(QUESTABASE, 'linux_x86_64', 'vsim')

    VENDOR_LIB_NAME     : = 'xlib-vv' + XILINX_TOOL_VERSION + '-qs' + QUESTA_TOOL_VERSION
    VENDOR_LIB_PATH     : = os.path.join(MENTOR, 'vendor', VENDOR_LIB_NAME, 'func')

Директория, на которую указывает VENDOR_LIB_PATH, должна содержать следующий перечень библиотек:

.
├── secureip
├── simprims_ver
├── unifast
├── unifast_ver
├── unimacro
├── unimacro_ver
├── unisim
├── unisims_ver
├── xilinx_vip
└── xpmlib
Указанный перечень библиотек, кроме xpmlib может быть создан путём запуска в консоли Vivado команды:

compile_simlib -force -language verilog -language vhdl -dir <path-to-target-dir> -simulator questa -simulator_exec_path <path-to-simulator-bin-dir> -library all -family all -no_ip_compile

xpmlib можно создать с помощью shell скрипта:

#!/bin/sh

MENTOR_QUESTA=<path-to-questa-bin-dir>
XILINX_VIVADO=<path-to-xilinx-home>/Vivado/<version-number>

$MENTOR_QUESTA/vlog -work xpmlib -64 -sv -O5 -mfcu \
$XILINX_VIVADO/data/ip/xpm/xpm_cdc/hdl/xpm_cdc.sv \
$XILINX_VIVADO/data/ip/xpm/xpm_memory/hdl/xpm_memory.sv \
$XILINX_VIVADO/data/ip/xpm/xpm_fifo/hdl/xpm_fifo.sv

Из описанных переменных окружения далее строятся все пути к исполняемым файлам внешних инструментов.

Вспомогательный командный скрипт🔗

Симулятор используется в non-project режиме и управляется из консоли (transcript window). Доступные действия:

  • Compile Work Library, команда консоли 'c';
  • Start simulation, команда консоли 's [cfg]', где cfg — имя конфигурации, которая есть простой do скрипт (Tcl) с перечислением команд, которые требуется запустить после остановки прогона симулятора;
  • Restart simulation, команда консоли 'r' ('rr' со сбросом текущего лога transcript);
  • Show Simulation Results, команда консоли 'show_res <cfg>', где cfg — имя конфигурации(см. выше).

Для поддержки этой функциональности система сборки содержит соответствующий файл questa.tcl. Этот же скрипт используется и для пакетного запуска, при этом симулятору передаётся соответствующая команда ('c', 's').

Переменные общего назначения🔗

Name Description Default value
TESTBENCH_NAME Имя модуля тестбенча 'top_tb'
SIMLIB_NAME Имя директории для
библиотек симуляционных мо-
делей IP ядер, блочных дизайнов
и т.п.
'sim_lib'
SIMLIB_PATH Путь до директории для библи-
отек симуляционных моделей IP
ядер, блочных дизайнов и т.п.
os.path.join(env['BUILD_SYN_PATH'], env['SIMLIB_NAME'])
SIM_WORKLIB_NAME Имя рабочей библиотеки 'wlib'
SIM_INC_PATH Список путей поиска заголовоч-
ных файлов при запуске симуля-
тора
''
BUILD_SIM_PATH Путь, по которому формируется
исполнительное окружение для
выполнения задач моделирова-
ния
os.path.join(env['BUILD_PATH'], 'sim')

Внешние инструменты🔗

Name Description Default value
VLOGCOM компилятор языка
Verilog/SystemVerilog
os.path.join(env['QUESTABIN'], 'vlog')
VCOMCOM компилятор языка VHDL os.path.join(env['QUESTABIN'], 'vcom')
VLIBCOM утилита создания библиотеки os.path.join(env['QUESTABIN'], 'vlib')
VMAPCOM утилита, выполняющая отобра-
жение логического имени библи-
отеки на физический файл
os.path.join(env['QUESTABIN'], 'vmap')
VSIMCOM симулятор os.path.join(env['QUESTABIN'], 'vsim')
VERBOSE управляет печатью команд при
запуске целей на сборку
True
VLOG_FLAGS опции компилятора языков
Verilog/SystemVerilog
' -incr -sv -mfcu'
VCOM_FLAGS опции компилятора языка VHDL ' -64 -93'
VLOG_OPTIMIZATION опции оптимизации компилятора
языков Verilog/SystemVerilog
' -O5'
VOPT_FLAGS опции vopt ''

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

if 'vivado' in env['TOOLS']:
    env['VOPT_FLAGS'] = ' glbl'

Builders🔗

Перечислены билдеры и псевдобилдеры. Билдеры как правило не используются напрямую, т.к. они имеют вполне определённый интерфейс запуска, который далеко не всегда удобен, поэтому в скрипте сборочных сценариев используются как правило псевдобилдеры, которые по сути являются "обёртками" вокруг самих билдеров.


SimLib🔗

True builder

Осуществляет создание симуляционной библиотеки, отображение логического имени на физический файл, компиляцию симуляционных моделей IP ядер, блочных дизайнов и т.п. из скриптов компиляции, созданных с помощью команды export_simulation САПР Vivado.


CompileSimLib🔗

Pseudo-builder

Формирует имя целевой директории симуляционной библиотеки библиотеки. Запускает билдер IpSimLib, который выполняет основную работу.

Пример использования:

IP_Cores   = envx.CreateIps(IP_Create_Scripts)
...
IP_SimLib  = envx.CompileSimLib(IP_Cores)

WorkLib🔗

True builder

Создаёт рабочую библиотеку симулятора (и производит все связанные с этим действия), генерирует файл с параметрами запуска симулятора handoff.do (опции запуска, списки исходных файлов и директорий поиска включаемых файлов, переменные и т.д.) и производит собственно компиляцию библиотеки.


CompileWorkLib🔗

Pseudo-builder

Формирует имя целевой директории рабочей библиотеки симулятора, создаёт эту директорию и запускает билдер WorkLib.

Пример использования:

src_syn = read_sources('src_syn.yml')
src_sim = read_sources('src_sim.yml')
...
WLib    = envx.CompileWorkLib(src_syn + src_sim)

QuestaGui🔗

True builder

Выполняет переход к исполнительному окружению симулятора (env['BUILD_SIM_PATH']) и запускает симулятор в графическом режиме.


LaunchQuestaGui🔗

Pseudo-builder

Вызывает билдер QuestaGui, передавая фиктивную цель, что вынуждает всегда запускать действие билдера.

Пример использования:

LaunchQuestaGui = envx.LaunchQuestaGui()

QuestaRun🔗

True builder

Производит прогон симуляционной сессии в пакетном режиме (в консоли). Для этого сначала делается переход в директорию с исполнительным окружением симулятора, после чего непосредственно запускается симулятор в пакетном режиме.


LaunchQuestaRun🔗

Pseudo-builder

Вызывает билдер QuestaRun, передавая фиктивную цель, что вынуждает всегда запускать действие билдера.

Пример использования:

LaunchQuestaRun    = envx.LaunchQuestaRun()