Tool 'questa' - fpga-lib/site_scons GitHub Wiki
Пользовательский скрипт должен предоставить следующие внешние переменные сборочного окружения, необходимые для работы инструмента:
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'
Перечислены билдеры и псевдобилдеры. Билдеры как правило не используются напрямую, т.к. они имеют вполне определённый интерфейс запуска, который далеко не всегда удобен, поэтому в скрипте сборочных сценариев используются как правило псевдобилдеры, которые по сути являются "обёртками" вокруг самих билдеров.
True builder
Осуществляет создание симуляционной библиотеки, отображение логического имени на физический файл, компиляцию симуляционных моделей IP ядер, блочных дизайнов и т.п. из скриптов компиляции, созданных с помощью команды export_simulation
САПР Vivado
.
Pseudo-builder
Формирует имя целевой директории симуляционной библиотеки библиотеки. Запускает билдер IpSimLib
, который выполняет основную работу.
Пример использования:
IP_Cores = envx.CreateIps(IP_Create_Scripts)
...
IP_SimLib = envx.CompileSimLib(IP_Cores)
True builder
Создаёт рабочую библиотеку симулятора (и производит все связанные с этим действия), генерирует файл с параметрами запуска симулятора handoff.do
(опции запуска, списки исходных файлов и директорий поиска включаемых файлов, переменные и т.д.) и производит собственно компиляцию библиотеки.
Pseudo-builder
Формирует имя целевой директории рабочей библиотеки симулятора, создаёт эту директорию и запускает билдер WorkLib
.
Пример использования:
src_syn = read_sources('src_syn.yml')
src_sim = read_sources('src_sim.yml')
...
WLib = envx.CompileWorkLib(src_syn + src_sim)
True builder
Выполняет переход к исполнительному окружению симулятора (env['BUILD_SIM_PATH']) и запускает симулятор в графическом режиме.
Pseudo-builder
Вызывает билдер QuestaGui
, передавая фиктивную цель, что вынуждает всегда запускать действие билдера.
Пример использования:
LaunchQuestaGui = envx.LaunchQuestaGui()
True builder
Производит прогон симуляционной сессии в пакетном режиме (в консоли). Для этого сначала делается переход в директорию с исполнительным окружением симулятора, после чего непосредственно запускается симулятор в пакетном режиме.
Pseudo-builder
Вызывает билдер QuestaRun
, передавая фиктивную цель, что вынуждает всегда запускать действие билдера.
Пример использования:
LaunchQuestaRun = envx.LaunchQuestaRun()