
Интеграция Quartus Prime и ModelSim – ключевой этап верификации проектов на ПЛИС от Intel (ранее Altera). Без корректной настройки взаимодействия между синтезатором и симулятором невозможно добиться точной отладки HDL-кода, особенно в сложных проектах с тактовыми доменами, FIFO или пользовательскими IP-ядрами. В этом руководстве рассмотрены конкретные шаги: от генерации файлов для симуляции до запуска временного анализа в ModelSim с учетом специфики Quartus 20.1 и новее.
Quartus генерирует файлы .vo (Verilog Output) и .vho (VHDL Output), содержащие синтезированную логику, но их недостаточно для полноценной симуляции. Необходимо подключить библиотеки примитивов (altera_mf, 220model) и сгенерировать testbench с учетом временных параметров проекта. Ошибки на этом этапе – например, отсутствие файла simulation/modelsim/modelsim.ini – приводят к некорректному отображению сигналов или падению симуляции.
ModelSim требует явного указания путей к библиотекам и файлам проекта. В Quartus это реализуется через Tools → Options → EDA Tool Options, где прописывается путь к исполняемому файлу vsim. Для автоматизации процесса используйте Tcl-скрипты: команда quartus_eda —simulation генерирует все необходимые файлы, включая .do-файл для ModelSim. Игнорирование этого шага – частая причина расхождений между поведением в симуляторе и на реальном устройстве.
Временная симуляция (timing simulation) критически важна для проектов с высокими тактовыми частотами или строгими требованиями к задержкам. Quartus экспортирует SDF-файл (Standard Delay Format) с задержками межсоединений, который подключается в ModelSim через директиву vsim -sdftyp. Без этого анализа невозможно выявить гонки сигналов или нарушения временных ограничений, особенно в проектах с использованием PLL или DDR-интерфейсов.
Совмещаем Quartus и ModelSim: пошаговое руководство

Для интеграции Quartus Prime и ModelSim начните с установки совместимых версий. Quartus 21.1 поддерживает ModelSim-Intel FPGA Starter Edition 2021.1 без дополнительных настроек. Если используете коммерческую версию ModelSim (например, SE или PE), убедитесь, что путь к исполняемому файлу `vsim` прописан в переменных среды Windows или Linux. В Quartus откройте Tools → Options → EDA Tool Options и укажите путь к ModelSim в поле «ModelSim directory». Это позволит автоматически генерировать Tcl-скрипты для симуляции.
Создайте проект в Quartus с Verilog или VHDL-файлами. После компиляции выберите Assignments → Settings → EDA Tool Settings → Simulation. В разделе «Tool name» выберите ModelSim, а в «Format for output netlist» – «Verilog» или «VHDL» в зависимости от языка проекта. Установите флажок «Run gate-level simulation» только для проверки синтезированной схемы. Нажмите «Generate HDL» – Quartus создаст файлы `.vo` (Verilog) или `.vho` (VHDL) и Tcl-скрипт `simulation/modelsim/
Запустите ModelSim из Quartus через Tools → Run Simulation Tool → RTL Simulation. Если ModelSim не открывается, выполните скрипт вручную: перейдите в папку `simulation/modelsim` и введите в командной строке `vsim -do
Настройте временные параметры симуляции. В ModelSim откройте Simulate → Runtime Options и установите «Default Radix» в «Hexadecimal» для удобства чтения шин. Для проверки задержек используйте SDF-файл: в Quartus сгенерируйте его через Processing → Start → Start EDA Netlist Writer, затем загрузите в ModelSim командой `vsim -sdftyp /top=output_files/
Автоматизируйте процесс с помощью скриптов. Создайте файл `run_sim.tcl` в папке `simulation/modelsim` с командами:
vlib work vlog -work work ../../*.v vlog -work work *.vo vsim -t 1ps -L altera_ver -L lpm_ver work.do wave.do run 100us
Запускайте его из командной строки: `vsim -c -do run_sim.tcl`. Для пакетной обработки используйте `vsim -batch` – это ускорит симуляцию на серверах без GUI. Сохраняйте результаты в формате `.wlf` для последующего анализа: `write format wave -window .main_pane.wave.interior.cs.body.pw.wf waveform.wlf`.
Установка и настройка Quartus Prime для совместной работы с ModelSim

Скачайте дистрибутив Quartus Prime с официального сайта Intel. Для интеграции с ModelSim выбирайте версию Quartus Prime Pro или Quartus Prime Standard – Lite-версия не поддерживает сторонние симуляторы. Убедитесь, что версия совместима с вашей ОС: Windows 10/11 (64-бит) или Linux (RHEL/CentOS 7/8). Минимальные системные требования: 8 ГБ ОЗУ, 50 ГБ свободного дискового пространства и процессор с поддержкой SSE4.2.
Во время установки активируйте опцию ModelSim-Intel FPGA Edition в разделе «Select Components». Если она отсутствует, установите ModelSim отдельно – Quartus Prime автоматически обнаружит его при первом запуске, если путь к исполняемому файлу (vsim.exe для Windows или vsim для Linux) прописан в переменной окружения PATH. Для ручной настройки укажите путь в Quartus: Tools → Options → EDA Tool Options → ModelSim.
После установки настройте лицензию. Для Quartus Prime требуется файл лицензии (.dat), полученный через Intel FPGA License Center. Поместите его в директорию C:\intelFPGA\<версия>\licenses (Windows) или /opt/intelFPGA/<версия>/licenses (Linux). В ModelSim лицензия настраивается отдельно: укажите путь к тому же файлу в Help → License Setup. Без валидной лицензии симуляция завершится с ошибкой # ** Error: (vsim-3170).
Настройте рабочую среду для совместной работы. В Quartus Prime создайте новый проект (File → New Project Wizard) и выберите семейство ПЛИС (например, Cyclone V или Arria 10). В разделе EDA Tool Settings укажите ModelSim как симулятор по умолчанию для всех этапов: Simulation, Timing Analysis и Power Analysis. Для каждого этапа выберите язык: Verilog, VHDL или SystemVerilog.
Проверьте интеграцию на тестовом проекте. Создайте простой модуль, например, сумматор на Verilog:
- Создайте файл
adder.vс кодом:
module adder (input [3:0] a, b, output [4:0] sum);
assign sum = a + b;
endmodule
- Запустите симуляцию через Tools → Run Simulation Tool → RTL Simulation. Quartus сгенерирует Tcl-скрипт для ModelSim и откроет его интерфейс.
- Если ModelSim не запускается, проверьте лог Quartus (
output_files/<проект>.sim.log) на наличие ошибок пути или лицензии.
Оптимизируйте настройки для ускорения симуляции. В Quartus Prime включите опцию Optimize for simulation speed в Assignments → Settings → Simulation. Для ModelSim используйте ключи командной строки: -novopt (отключает оптимизацию для отладки) или -voptargs="+acc" (включает доступ к внутренним сигналам). Для больших проектов увеличьте размер кэша в ModelSim: Tools → Options → Simulation → Cache Size (рекомендуется 2048 МБ).
Автоматизируйте процесс с помощью скриптов. Создайте Tcl-скрипт для ModelSim, например, simulate.tcl:
vlib work
vlog adder.v
vsim -novopt adder
add wave -position insertpoint sim:/adder/*
run -all
Запускайте его из Quartus через Tools → Tcl Scripts или командой в терминале: vsim -c -do simulate.tcl. Для Linux добавьте в .bashrc алиас:
alias quartus_sim='cd /путь/к/проекту && vsim -c -do simulate.tcl'
Подключение ModelSim к проекту в Quartus: выбор симулятора и параметров

В Quartus Prime откройте окно Settings через меню Assignments → Settings. Перейдите в раздел EDA Tool Settings → Simulation. В поле Tool name выберите ModelSim или ModelSim-Altera (зависит от установленной версии). Для корректной работы с Altera-библиотеками укажите путь к исполняемому файлу симулятора: C:\intelFPGA\22.1\modelsim_ase\win32aloem\vsim.exe (пример для Quartus 22.1). Если путь не задан, Quartus не сможет автоматически генерировать Tcl-скрипты для запуска симуляции.
Настройте параметры симуляции в таблице ниже. Эти значения критичны для совместимости с проектом и производительности:
| Параметр | Рекомендуемое значение | Назначение |
|---|---|---|
Format for output netlist |
Verilog HDL |
Обеспечивает совместимость с ModelSim при работе с Verilog-проектами |
Time scale |
1 ps / 1 ps |
Минимальный шаг симуляции для точного моделирования задержек в FPGA |
Simulation mode |
Timing или Functional |
Timing – для анализа временных характеристик, Functional – для проверки логики без задержек |
Compile test bench |
Enable |
Автоматическая компиляция тестбенча в ModelSim |
В разделе NativeLink settings активируйте опцию Run gate-level simulation automatically after compilation, если требуется симуляция на уровне вентилей. Для проектов с IP-ядрами (например, PLL или FIFO) добавьте в поле More EDA Netlist Writer Settings флаг +define+ALTERA_RESERVED_QIS – это предотвратит ошибки компиляции в ModelSim из-за неопределенных макросов. При использовании VHDL убедитесь, что в VHDL Output Version выбрана версия VHDL 2008, иначе возможны проблемы с совместимостью синтаксиса.
После сохранения настроек выполните Processing → Start → Start EDA Netlist Writer. Quartus сгенерирует файлы .vo (Verilog) или .vho (VHDL) и Tcl-скрипт simulation/modelsim/<имя_проекта>_run_msim_rtl_verilog.do. Запустите симуляцию из командной строки ModelSim командой do <имя_скрипта>.do или через интерфейс Quartus: Tools → Run Simulation Tool → RTL Simulation. Если ModelSim не запускается, проверьте переменные среды: QUARTUS_ROOTDIR и MODELSIM должны указывать на корректные директории установки.
Создание тестового окружения в ModelSim для верификации HDL-кода
Настройте симуляцию через командную строку ModelSim: выполните `vlog -work work testbench.v dut.v` (для Verilog) или `vcom -work work testbench.vhd dut.vhd` (для VHDL), затем запустите симуляцию командой `vsim -c -do «run -all; quit» work.testbench`. Для отладки используйте `add wave -r /*` для отображения всех сигналов в окне Wave, а при необходимости анализа временных задержек – `force` для принудительного задания значений (например, `force clk 0 0ns, 1 5ns -repeat 10ns`). Оптимизируйте процесс, сохраняя часто используемые команды в Tcl-скрипте (например, `sim.do`) и запуская его через `-do sim.do`.
Генерация файлов для симуляции: компиляция и подготовка исходников
Перед запуском симуляции в ModelSim необходимо сгенерировать файлы, содержащие синтезированную логику проекта. В Quartus Prime откройте меню Processing → Start → Start Analysis & Synthesis. Этот этап проверяет синтаксис Verilog/VHDL-кода, строит иерархию модулей и генерирует промежуточные файлы в формате .vo (Verilog Output) или .vho (VHDL Output). Убедитесь, что в настройках проекта (Assignments → Settings → EDA Tool Settings → Simulation) выбран инструмент ModelSim и указан корректный путь к исполняемому файлу vsim.
Для корректной симуляции требуется не только синтезированный код, но и тестбенч. Если тестбенч написан на Verilog, добавьте его в проект через Project → Add/Remove Files in Project. При использовании VHDL убедитесь, что тестбенч объявлен как entity без портов и помечен атрибутом -- pragma translate_off в начале файла, чтобы исключить его из синтеза. Quartus игнорирует такие конструкции, но ModelSim их обрабатывает.
После успешной компиляции перейдите в Tools → Run EDA Simulation Tool → EDA RTL Simulation. Quartus автоматически создаст Tcl-скрипт для ModelSim с командами компиляции и запуска симуляции. Скрипт сохраняется в директории simulation/modelsim проекта и содержит:
- Пути к исходным файлам (
vlogдля Verilog,vcomдля VHDL). - Команды загрузки тестбенча (
vsim -t 1ps work.testbench). - Опции оптимизации (
-novoptдля отключения оптимизаций, если требуется отладка).
Если проект использует IP-ядра (например, PLL или FIFO), Quartus генерирует их симуляционные модели в формате .vo или .vhd. Эти файлы автоматически включаются в Tcl-скрипт, но их необходимо предварительно скомпилировать. Для этого в ModelSim выполните команду vlog -work work <путь_к_файлу> или vcom -work work <путь_к_файлу> вручную, если автоматическая компиляция не сработала.
При работе с большими проектами разделите исходники на библиотеки. В ModelSim создайте отдельные рабочие пространства для разных модулей:
- Запустите ModelSim и выполните
vlib <имя_библиотеки>. - Скомпилируйте файлы в соответствующую библиотеку:
vlog -work <имя_библиотеки> <файл>. - В Tcl-скрипте Quartus укажите библиотеку при загрузке модуля:
vsim -L <имя_библиотеки> work.testbench.
Это ускоряет повторную компиляцию и упрощает отладку.
Для проверки временных характеристик используйте SDF-файлы (.sdo), которые Quartus генерирует на этапе Timing Analysis. В ModelSim загрузите их командой vsim -sdftyp /testbench/uut=<путь_к_sdf> work.testbench. Убедитесь, что в настройках симуляции (Assignments → Settings → EDA Tool Settings → Simulation → More EDA Netlist Writer Settings) включена опция Generate SDF Output File и выбран режим Slow 1200mV 85C Model для анализа наихудшего случая.
После генерации всех файлов запустите симуляцию из Quartus или вручную в ModelSim. В последнем случае выполните Tcl-скрипт командой do <путь_к_скрипту>.tcl. Если симуляция завершается ошибкой компиляции, проверьте:
- Совместимость версий Quartus и ModelSim (например, Quartus 21.1 требует ModelSim 2021.1 или новее).
- Наличие всех зависимостей в
simulation/modelsim(файлы.vo,.vho,.sdo). - Корректность путей в Tcl-скрипте (используйте относительные пути от корня проекта).
Запуск симуляции из Quartus: передача управления ModelSim

Для запуска симуляции в ModelSim непосредственно из Quartus Prime требуется предварительная настройка проекта. Откройте окно *Settings* через меню *Assignments* → *Settings*, выберите категорию *EDA Tool Settings* → *Simulation*. В поле *Tool name* укажите *ModelSim* или *ModelSim-Altera*, в зависимости от установленной версии. Убедитесь, что путь к исполняемому файлу ModelSim прописан корректно в *EDA Tool Options*: например, C:\intelFPGA\20.1\modelsim_ase\win32aloem\vsim.exe для версии 20.1.
В разделе *Simulation* задайте параметры генерации файлов. Включите опцию *Generate netlist for functional simulation* для создания файла .vo или .vho (для VHDL). Для временной симуляции активируйте *Generate SDF output file* и укажите путь к файлу задержек .sdo. Quartus автоматически сформирует Tcl-скрипт simulation/modelsim/<имя_проекта>_run_msim_rtl_vhdl.do (или _verilog.do), который ModelSim выполнит при запуске.
Перед передачей управления ModelSim убедитесь, что в проекте Quartus выполнена компиляция. Нажмите *Processing* → *Start* → *Start Analysis & Synthesis*, затем *Start* → *Start Fitter* (для временной симуляции). Откройте окно *Tools* → *Run Simulation Tool* → *RTL Simulation* или *Gate Level Simulation*. Quartus сгенерирует необходимые файлы и вызовет ModelSim с заранее подготовленным скриптом. Если ModelSim не запускается, проверьте переменные окружения: QUARTUS_ROOTDIR и MODELSIM должны указывать на корректные директории.
При первом запуске ModelSim из Quartus может потребоваться ручная настройка рабочей библиотеки. В окне ModelSim выполните команду vlib work и перекомпилируйте исходники: vcom -work work <путь_к_файлу.vhd> или vlog -work work <путь_к_файлу.v>. Для автоматической загрузки библиотек добавьте эти команды в начало сгенерированного Tcl-скрипта. Если используете IP-ядра, убедитесь, что их библиотеки подключены через vmap (например, vmap altera_mf altera_mf).
Для передачи аргументов симуляции в ModelSim отредактируйте Tcl-скрипт вручную. Добавьте параметры запуска, например: run -all для автоматического выполнения до конца или run 100 ns для ограничения времени симуляции. Чтобы включить отображение сигналов, используйте add wave -r /* перед командой run. Сохраните изменения в скрипте – при следующем запуске из Quartus они применятся автоматически.
Если симуляция завершается с ошибкой «No design unit found», проверьте порядок компиляции файлов в скрипте. VHDL-файлы должны компилироваться в порядке зависимостей: сначала пакеты (.vhd с package), затем архитектуры. Для Verilog используйте ключ -sv при компиляции SystemVerilog-файлов. В Quartus убедитесь, что все исходники добавлены в проект и имеют корректный тип файла (*Design Files* для RTL, *Simulation Files* для тестбенчей).
Для ускорения повторных запусков создайте ярлык на рабочем столе с командой: "C:\intelFPGA\20.1\quartus\bin64\quartus_sh" --flow compile <путь_к_проекту.qpf> && quartus_eda --simulation=rtl <имя_проекта>. Это позволит избежать ручного выбора опций в GUI. Для отладки используйте лог-файл ModelSim (transcript), где фиксируются все команды и ошибки. При проблемах с совместимостью версий (например, Quartus 20.1 и ModelSim 10.6) обновите ModelSim до версии, рекомендованной в документации Intel FPGA.
Анализ результатов симуляции: работа с временными диаграммами и логами

Логи симуляции записываются в файл transcript или vsim.log. Для поиска ошибок используйте комбинацию Ctrl+F с ключевыми словами: Error, Warning, UVM_ERROR или специфичными для вашего проекта идентификаторами. В логах ModelSim фиксирует время возникновения события, например: # Time: 125000 ps Scope: tb_top.dut. Сопоставляйте эти метки с временными диаграммами, чтобы локализовать проблему.
Для сравнения ожидаемых и фактических значений сигналов добавьте в диаграмму виртуальные сигналы через Add → Wave → Virtual Signals. Используйте выражения на языке Tcl, например: examine -value {/tb_top/dut_out == 4'b1010}, чтобы создать булевый сигнал, отображающий совпадение. Это упрощает визуальную верификацию сложных условий без ручного анализа.
При работе с многоразрядными шинами разверните их в двоичном, шестнадцатеричном или десятичном формате. Щелкните правой кнопкой на шине и выберите Radix → Binary/Hex/Unsigned. Для шин шириной более 32 бит используйте Hex – это сокращает объем данных на экране и ускоряет анализ. Если требуется отследить конкретный бит, выделите его отдельно через Add → Wave → Selected Signals.
ModelSim поддерживает маркеры времени для измерения задержек между событиями. Установите первый маркер на фронте сигнала (Ctrl+M), второй – на следующем событии. В панели Measure отобразится разница во времени. Для точных расчетов используйте команду Tcl: measure time {/tb_top/clk'event and /tb_top/clk = '1'} {/tb_top/data_valid = '1'}, которая выведет задержку в тактах или наносекундах.
При анализе логов обращайте внимание на сообщения о неинициализированных сигналах (X) или высокоимпедансных состояниях (Z). Эти состояния часто приводят к некорректной работе схемы. В диаграммах они отображаются красным цветом. Чтобы исключить их, добавьте в тестбенч принудительную инициализацию сигналов или проверьте подключение портов в Quartus перед симуляцией.
Для документирования результатов экспортируйте диаграммы в формат .wlf или .png. Файлы .wlf сохраняют все настройки и позволяют продолжить анализ позже. При экспорте в изображение выберите разрешение не менее 300 DPI и включите легенду сигналов. Логи сохраняйте в текстовый файл с временными метками для последующего парсинга скриптами на Python или Perl.
Если симуляция завершилась с ошибкой, но диаграммы не дают явной причины, проверьте файл vsim.wlf в каталоге проекта. Он содержит полную историю симуляции, включая внутренние сигналы, которые не были добавлены в диаграмму. Откройте его через File → Open → Waveform и проанализируйте поведение схемы на уровне отдельных вентилей или регистров.