Tool 'questa' - fpga-lib/site_scons GitHub Wiki

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 ', где arg — имя конфигурации (см. выше).

Для поддержки этой функциональности система сборки содержит соответствующий файл 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(root_dir, 'build', os.path.basename(cfg_name), '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'
env['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()

⚠️ **GitHub.com Fallback** ⚠️