Как установить modelsim на windows 10
Starting with Intel® Quartus® Prime version 21.3, the ModelSim*-Intel® FPGA edition software has been discontinued and replaced by the Questa*-Intel® FPGA Edition software. Refer to this customer advisory for details.
Watch this video to find out how easy it is to migrate to Questa*-Intel FPGA Edition.
Also, review the Quick Start Guide for instructions on how to get started.
The ModelSim*-Intel® FPGA edition software is a version of the ModelSim* software targeted for Intel® FPGAs devices. The software supports Intel gate-level libraries and includes behavioral simulation, HDL testbenches, and Tcl scripting.
ModelSim*-Intel® FPGA Edition Software
- Recommended for simulating all Intel® FPGA designs (Intel® Arria® FPGA, Intel® Cyclone® FPGA, and Intel® Stratix® FPGA designs, and Intel® MAX® CPLDs)
- 33 percent faster simulation performance than ModelSim*-Intel® FPGA starter edition software
- No line limitations
- Buy today for $1,995
- Mixed language support
ModelSim*-Intel® FPGA Starter Edition Software
- Support for simulating small Intel® FPGA designs
- 10,000 executable line limitations
- Free no license required
- Mixed language support
Benefits
Shorten your Intel® FPGA verification time by using the ModelSim*-Intel® FPGA software in your Intel® FPGA design flow. ModelSim*-Intel® FPGA software supports behavioral and gate-level simulations, including VHDL or Verilog testbenches for all Intel® FPGA devices.
ModelSim*-Intel® FPGA Edition Software Features and Benefits
Intel licenses Mentor Graphics ModelSim*-Intel® FPGA simulation software to customers with Intel® Quartus® Prime Design Software. Both ModelSim*-Intel® FPGA edition and ModelSim*-Intel® FPGA starter edition are available for lite edition, standard edition and pro edition software users.
$1,995 includes software updates for one year
$1,695 for renewal
Note: The ModelSim*-Intel® FPGA edition software requires a valid license. The ModelSim*-Intel® FPGA edition software license expires 12 months after the date of purchase. Every 12 months you must regenerate your license file in the Self-Service Licensing Center to renew your license for the specific ModelSim*-Intel® FPGA edition software version that you purchased.
All Intel® FPGA devices
(Including Intel® MAX® CPLDs, Intel® Arria®, Intel® Cyclone®, and Intel® Stratix® series Intel® FPGAs)
All Intel® FPGA devices
(Including Intel® MAX® CPLDs, Intel® Arria®, Intel® Cyclone®, and Intel® Stratix® series Intel® FPGAs)
10,000 executable line limit
Frequently Asked Questions
Is the ModelSim*-Intel® FPGA edition software the same as the ModelSim* PE/DE software?
No. ModelSim*-Intel® FPGA edition software only supports our gate-level libraries. The ModelSim*-Intel® FPGA edition software includes the base features of ModelSim* PE, including behavioral simulation, HDL testbenches, and Tcl scripting. However, ModelSim* PE optional features are not supported in the ModelSim*-Intel® FPGA edition software and the simulation performance of the ModelSim*-Intel® FPGA edition software is slower than that of the ModelSim* PE/DE software.
Does ModelSim*-Intel® FPGA edition software support dual-language simulation?
Yes. Starting with Intel® Quartus® Prime Software v15.0, the ModelSim*-Intel® FPGA edition software supports dual-language simulation. This includes designs that are written in a combination of Verilog, System Verilog, and VHDL languages, also known as mixed HDL.
How do I upgrade my version of ModelSim*-Intel® FPGA software?
Contact your local Mentor Graphics sales office to upgrade your ModelSim*-Intel® FPGA software to ModelSim* PE/DE software or Questa* advanced simulator. Contact information is available on the Mentor Graphics website.
Начало работы с ModelSim и написание Testbench - разумное использование моделирования - король
Начните сейчас, чтобы шаг за шагом приступить к работе с ModelSim и реализовать моделирование, легко подключившись к Quartus. В этой статье используется ModelSim10.0c + QuartusII 10.0, другие версии в основном такие же, пожалуйста, исследуйте сами.
Если вы не видите картинку, нажмите, чтобы увидеть большую картину!
1. Установите сторонний инструмент EDA.
Задайте путь установки ModelSim в Инструменты -> Параметры и обратите внимание на папку win32 (64-битное программное обеспечение соответствует win64).
Создайте проект (все же на примере сумматора). Установите инструмент моделирования на ModelSim в Assignments -> Settings. Таким образом, Quartus может беспрепятственно вызывать ModelSim.
Конечно, вы также можете настроить инструмент моделирования при создании проекта.
2. Написание Testbench
Говоря о Testbench, вы можете называть его Testbench или Testbenches, но не Test Скамья. Кстати, даже Quartus не обратил внимания на эту проблему, о причинах читайте в статье Общие ошибки в технических текстах. В статье также перечислены некоторые другие неправильные слова, в том числе Flip-flop не может быть записан как Flipflop и т. Д. Ссылка на статью:
Мы можем автоматически сгенерировать шаблон Testbench через Quartus, выберите Processing -> Start -> Start TestBench Template Writer, дождитесь завершения и откройте только что сгенерированный тестовый стенд. По умолчанию он сохраняется в моделирование \modelsimФайл в формате .vt в папке. Чтобы
После открытия файла vt мы видим, что Quartus выполнил для нас некоторую базовую работу, включая часть кода порта и объявление переменных интерфейса. Что нам нужно сделать, так это добавить тестовый код, который нам нужен, в готовую форму. .
Базовый тестовый стенд состоит из трех частей: определения сигнала, интерфейса модуля и кода функции.
«Шкала времени 1 нс / 1 сек. Означает, что единичное время моделирования составляет 1 нс, а точность - 1 пс. Если вы хотите выполнить моделирование, вы должны сначала указать единицу времени, и лучше указать единицу времени в Testbench, а не определять ее в инженерном коде, потому что разные модули могут вызвать некоторые проблемы при моделировании, если время единица измерения отличается, и сама шкала времени верна. Синтез означает, что реальная схема не имеет никакого эффекта.
Фактически, сам Testbench можно рассматривать как модуль или устройство (имя модуля в этом примере - add_vlg_tst), которое взаимодействует с модулем, который вы пишете. Используйте модуль Testbench, чтобы вывести сигнал на тестируемый модуль в качестве стимула, и в то же время получить выходной сигнал от тестируемого модуля для просмотра результатов. Следовательно, сигнал типа reg в тестируемом модуле становится проводным в Testbench, а сигнал типа провода в тестируемом модуле соответствует типу reg в Testbench. Итак, что делать с inout, сигнал inout должен быть настроен на провод, а сигнал reg должен использоваться в качестве выходного регистра, и должен быть установлен вентиль с тремя состояниями, который управляется сигналом включения, например: назначить inout_sig = out_en? 'bz;
После обработки интерфейса и объявления вам необходимо самостоятельно установить некоторые сигналы возбуждения.Содержимое сигнала возбуждения - это форма волны, которая будет вводиться в тестируемый модуль. Напишем простую тестовую программу ниже.
Во-первых, нужен сигнал сброса:
Второй - это часы, которые выполняются с помощью модуля always:
Код в модуле always будет выполняться многократно.Пользуясь преимуществом этой функции, mclk переворачивается каждые 10 нс, но этого недостаточно, и необходимо указать начальное значение для mclk, которое является начальным утверждением выше. Таким образом, прямоугольный сигнал с периодом 20 нс и частотой 50 МГц может быть сгенерирован в качестве системных часов в этом примере.
Конечно, эти часы можно реализовать и через начальный модуль. Просто добавьте while (1) - бесконечный цикл.
Многие операции в Testbench не интегрированы, и его стиль может быть более случайным.
После установки часов и сброса необходимо установить входной сигнал:
Обратите внимание, что здесь a_in = 1 и b_in = 3 происходят одновременно, то есть параллельно, после чего задержка составляет 200 нс, a_in = 2 и b_in = 0, как упоминалось выше, если вы хотите добиться последовательной работы, вам нужно для использования задержки. Между двумя операторами нет задержки, что означает, что они выполняются одновременно. Другой момент заключается в том, что этот начальный блок операторов и начальный блок операторов, ответственный за сброс, также параллельны, и оба начинаются в момент времени 0. Другими словами, после сброса rst_n 100 нс после 0 времени, а затем после 100 нс (с момента 0) выполняется a_in = 2.
На этом тестовая программа тоже завершена, приступим к моделированию.
3. Настройте Quartus и вызовите инструмент моделирования.
Перед запуском моделирования вам необходимо настроить его. Настройте параметры моделирования на вкладке «Моделирование», вы можете настроить язык моделирования, формат времени моделирования и выходной каталог. Выберите тестовый стенд mpile, нажмите Test Benches, чтобы открыть диалоговое окно Test Benches.
Нажмите New, чтобы создать новый TestBenchSetting, введите имя модуля Testbench (здесь add_vlg_tst) и установите время работы симуляции соответствующим образом (здесь установлено 800 нс, просто время для автоматического выполнения симуляции после входа в ModelSim, а не установить или произвольно установить), и добавить только что написанный Testbench.
После того, как все в порядке, выберите Инструменты -> Запустить инструменты моделирования EDA, есть два варианта, Моделирование RTL - это моделирование поведения RTL, оно только проверяет правильность функции, это не имеет никакого отношения к тому, на каком чипе оно работает. Необходимо выполнить анализ и синтез хотя бы один раз перед симуляцией; имитация на уровне логических элементов - это моделирование на уровне логических элементов, включающее определенные микросхемы, и проект необходимо скомпилировать перед симуляцией. размещение и маршрутизация в форме волны.При тестировании конкретного инженерного модуля вы должны сначала выполнить моделирование RTL, а затем выполнить моделирование на уровне ворот.
4. Основные операции инструмента ModelSim
Запустите RTL Simulation, чтобы войти в интерфейс ModelSim. Вот еще несколько важных частей.
В меню просмотра вы можете отображать и скрывать различные окна инструментов. В окне «Структура» отображается структура тестового модуля и тестируемого модуля:
Щелкните другой модуль, вы можете просмотреть сигналы в выбранном модуле в окне «Объекты», поскольку помимо портов существует множество внутренних сигналов, которые по умолчанию не отображают формы сигналов. Перетаскивая нужный сигнал в окно «Волна», вы может отображать.
На панели инструментовЧасть его используется для управления запуском симуляции. Красное поле слева сбрасывается. Установите время выполнения в текстовом поле и нажмите кнопку в красном поле справа, чтобы выполнить. Для других, пожалуйста, исследуйте самостоятельно или обратитесь к файлу справки.
Если вы чувствуете головокружение при столкновении с большим количеством 0101, вы можете выбрать сигнал в списке сигналов, щелкнуть правой кнопкой мыши и выбрать формат данных для отображения.
В нижнем левом углу окна Wave есть несколько маленьких кнопок, которые используются для установки курсора.Путем добавления курсора вы можете измерить соответствующее время, а также вы можете настроить здесь формат шкалы времени.
На графике осциллограммы вы можете использовать колесо прокрутки и правую кнопку мыши, чтобы легко увеличить или выбрать область сигнала. На рисунке ниже показан график осциллограммы этого полного проекта сумматора. После сброса значение c_out равно сумма a_in и b_in, и отображается в выходном сигнале нарастающего фронта.
Небольшой мануал по настройке симулятора ModelSim для новичков в освоении ПЛИС, симулятор очень поможет как в ожидании заказанной ПЛИСы\отладочной платы (т. к. можно тренироваться и наращивать свой скилл без реального железа), так и в отладке уже реального проекта под конкретное железо (т. к. процесс компиляции, синтеза, размещения и прошивки крайне не быстр), а также далеко не всё можно посмотреть логическим анализатором или осциллографом, поэтому освоение симулятора HDL крайне важно и необходимо.
Запуск из Quartus Prime
Идём в настройки проекта:
И переходим в раздел EDA Tool Settings -> Simulation:
Для запуска простой симуляции нас интересуют здесь следующие вещи, отмеченные на скриншоте выше:
Вот вроде бы и всё, можно жмакать на старт:
Переходим во вкладку General -> EDA Tool Options:
И в самом низу, собственно, прописываем путь к ModelSim.
Примечание: важно прописать путь не к корню, а к вложенной папке win32aloem и в конце поставить бэкслэш .
Вот и всё, теперь можно запускать симуляцию! Нажимаем опять RTL Simulation и с некоторым запозданием появляется окно ModelSim:
Автоматически запустится процесс симуляции и все (или почти все) сигналы test bench будут добавлены в Wave окно (на скрине выше сигналов особо и нету, да, модуль самописно-кривой и ещё не готов).
Более подробно об интерфейсе и окнах ниже в разделе с общими сведениями.
Самостоятельная работа в ModelSim
Создаём новый проект:
Перед нами открывается окно создания проекта:
Здесь задаём имя проекта и корневую папку (где лежат Verilog файлы), название библиотеки и копирование настроек можно не трогать. Клацаем ОК, далее открывается диалог создания\добавления существующих файлов HDL, создания папок и, собственно, файла настроек симуляции.
Я выбрал добавление в проект существующих файлов:
Выбрал сразу оба и не менял настройку копирования файлов, т. к. они и так лежат в корне папки проекта. На этом можно закрыть диалог. Должно получиться следующее:
Если ошибок в них нет и всё прошло успешно, то статус изменится на зеленые галочки, в противном случае смотрим в консоли возникшие ошибки и исправляем причину их возникновения:
Теперь можно добавить файл настроек симуляции:
В появившемся диалоге выбираем из библиотеки work (ранее задавали такое имя при создании проекта) необходимые файлы и test bench для проведения симуляции (у меня их всего 2, выбираю оба):
Настройки пока не трогаю, для общего понимания процесса все можно оставить по умолчанию. Нажимаем Save, файл настроек должен появится в проекте:
Практически всё. Кликаем двойным ЛКМ на файле Simulation 1:
Подгрузились дополнительные окна с файлами проекта, цепями, окном осциллограммы работы, процессами и консолью (на скриншоте выше я уже выбрал все цепи и перетащил на окно Wave для отображения их работы после симуляции).
Вот и всё, нажимаем на кнопку Countine Run для запуска симуляции до стоп-команды в test bench или Run для запуска симуляции кратно выбранному временному отрезку (у меня указан 100 нс) и можно видеть результаты работы:
Всё не так уж и сложно было. ;)
Общие сведения о работе в ModelSim
Тестовые файлы
Сигналы и формат состояния сигнала
Во вкладке Sim находятся все модули, а также их процессы. При выделении любого из модулей или процесса, к нему относящегося, все сигналы модуля появятся во вкладке Objects. Активные процессы также отображаются в отдельной вкладке Processes (Active), и выделение любого из них меняет отображаемые сигналы из вкладки Objects. К примеру, выбираем экземпляр DUT из test bench:
Далее выделяем все сигналы из вкладки Objects и переносим их, зажимая ЛКМ, на вкладку Wave (для наглядности на скриншоте ниже уже проведено несколько шагов симуляции, чтобы отобразились формы сигналов):
Пример установки формата отображения для всей шины сигналов data как беззнаковый тип числа:
Пример установки формата отображения для битов шины сигналов data как бинарный тип числа:
После применения формата отображения для шины сигналов можно видеть, как для продолжительных состояний отображается их значение, что довольно удобно и наглядно:
Управление симуляцией, отладка
Последовательно по названиям элементы управления на скриншоте выше:
Последовательно по названиям элементы управления на скриншоте выше:
Вот так выглядит выполнение по шагам:
Появляется синяя стрелочка (слева, около номеров строк), отображающая текущий шаг выполнения HDL кода. При нажатии на любой номер кода можно ставить Break Point, как в обычном IDE при написании обычных программ или прошивок для микроконтроллеров.
Курсоры
За добавление\удаление курсоров, их привязку отвечает следующая панель:
Последовательно по названиям элементы управления на скриншоте выше:
Также, добавив несколько курсоров, можно увидеть дельту времени между их значениями:
Управляется каждый курсор по выделению необходимого, а также внизу слева есть дополнительные колонки со всеми курсорами, в которых можно назначить имя, время, цвет, заблокировать курсор, удалить его или добавить новый.
И отчасти относящаяся к курсорам панель с кнопками приближения\отдаления, приведу её уже как дополнение:
Последовательно по названиям элементы управления на скриншоте выше (в скобках указаны хоткеи):
Изменение и перекомпиляция файлов в ModelSim
Итак, для редактирования файлов, как тестируемого модуля, так и файла test bench, необходимо вначале завершить симуляцию:
Для проверки внесённых изменений я раскомментировал блок, который выставляет данные на шину wdata и устанавливает сигнал wr. Нажимаем Ctrl + S и видим, что статус изменённого файла изменился (опять появился вопрос):
Просто компилируем его (ну или всё сразу):
И опять нажимаем двойным ЛКМ на файл симуляции, проверяем изменения:
Всё заработало! И теперь установка данных на шине wdata и сигнала wr влияет на выходную шину data. Всё это можете самостоятельно проверить, скопировав код файлов выше. ;)
Примечание: изменения файлов вносятся в оригинальные файлы только при закрытии ModelSim! Для симуляции создаётся их копия, а во время работы в ModelSim вы работаете с копией, и только при выходе из программы изменения вносятся в оригинальные файлы.
Предположим, что по каждому тактовому сигналу вставляется только одна монета. Автомат имеет выходы: налить газировку, вернуть 1 рубль, вернуть 2 рубля, вернуть 2 по 2 рубля. Как только в автомате набирается 5 рублей (или больше), он выставляет сигнал «НАЛИТЬ ГАЗИРОВКУ», а также сигналы, возврата соответствующей сдачи. Затем автомат должен быть готов опять принимать монеты.
Конечные автоматы или finite state machine (FSM) относятся к классу синхронных последовательных схем, которые представляют подавляющее большинство схем цифровой схемотехники. Именно таким образом следует реализовывать свои проекты (по крайней мере на первых порах). Такой способ обеспечивает повторяемость и верифицированость схемы и не зависит от отношений задержек различных элементов схемы. Правила построения синхронных последовательных схем гласят, что схема является синхронной последовательной схемой, если ее элементы удовлетворяют следующим условиям:
- Каждый элемент схемы является либо регистром, либо комбинационной схемой.
- Как минимум один элемент схемы является регистром.
- Все регистры тактируются единственным тактовым сигналом.
- В каждом циклическом пути присутствует как минимум один регистр.
Условное обозначение | Описание |
---|---|
S0 | Начальное состояние, накопленная сумма 0 руб. |
S1 | Накопленная сумма 1 руб. |
S2 | Накоплено 2 руб. |
S3 | Накоплено 3 руб. |
S4 | Накоплено 4 руб. |
В качестве входного сигнала, будет выступать двухбитная шина, со следующим кодированием номинала монеты:
Условное обозначение | Значение | Описание |
---|---|---|
I1 | 01 | 1 руб. |
I2 | 10 | 2 руб. |
I5 | 11 | 5 руб. |
Нарисуем диаграмму состояний нашего автомата (на диаграммах состояния автомата Мили, необходимо указывать выходные сигналы на стрелках перехода состояния, я этого делать не буду, чтобы не загромождать диаграмму, все выходные сигнала будут расписаны в таблице ниже):
Распишем таблицу изменения состояний и выходных сигналов:
Установка Quartus Prime
Создание проекта
Для создания нового проекта выберем File -> New Project Wizard. . Первое окно Wizard'а информационное, жмем Next, на втором окне выбираем где будет располагаться проект, его название «soda_machine» и элемент дизайна верхнего уровня «soda_machine», как на рисунке:
В следующем окне выбираем «Empty project». Окно добавление файлов «Add files», ничего не добавляем. Окно выбора устройства «Family, Devices & Board Settings», для реального проекта очень важное, но так как, наш проект учебный и до реального ему далеко, здесь оставляем настройки по умолчанию, как на рисунке:
Окно выбора настроек других инструментов «EDA Tool Settings», выбираем для симуляции проекта использовать «ModelSim-Altera» и формат «System Verilog HDL» как на рисунке:
Последнее окно информационное «Summary», жмем Finish.
Написание исходного кода
У нас будет два основных файла с исходным кодом, это собственно модуль soda_machine и его test bench, оба эти файла будут использовать тип данных insert_type, который описывает как мы кодируем номиналы монет и его логично выделить в отдельный файл. Но есть некоторые трудности, связанные с особенностями компиляции Quartus и ModelSim. Quartus компилирует все файлы с исходным кодом за один проход, а ModelSim каждый файл компилирует отдельно, для того, что бы при компиляции Quartus'ом не возникало переопределения типа insert_type, я использовал технику из C/C++ include guard, основанную на директивах макропроцессора. Кроме того, что бы ModelSim был уверен что тип insert_type, используемый в модуле soda_machine и в test bench'е, один и тот же, поместил его описание внутри пакета soda_machine_types. С учетом этих требований файл soda_machine_types.sv выглядит следующим образом:
Теперь собственно модуль soda_machine, находится в файле soda_machine.sv:
Каким образом будут производится кодирование состояний конечного автомата, я оставил на усмотрение Quartus. Для того что бы указать, как именно следует производить кодирование, используется атрибут (* syn_encoding = «default» *), другие варианты кодирования можно увидеть здесь.
Для добавления файлов в проект используется File -> New «SystemVerilog HDL File» и при сохранении дать соответствующее имя. После добавления этих двух файлов, проект можно скомпилировать Processing -> Start Compilation. После успешной компиляции можно посмотреть полученную схему Tools -> Netlist Viewers -> RTL Viewer:
Для просмотра диаграммы состояний конечного автомата Tools -> Netlist Viewers -> State Machine Viewer
На вкладке Encoding видно, что Quartus применил схему кодирования «one-hot», это когда для каждого состояния используется отдельный D-триггер, причем состояние S0 кодируется 0, а не 1 как для других состояний, делается это для упрощения схемы сброса в начальное состояние. Можно заметить, что RTL Viewer показывает не совсем принципиальную схему, это скорее концепт. Для просмотра принципиальной схемы использовать Tools -> Netlist Viewrs -> Technology Map Viewer (Post-Fitting)
Симуляция
В принципе на текущий момент у нас есть схема автомата по продаже газированной воды, но необходимо убедится, что она работает правильно, для этого напишем test bench и разместим его в файле soda_machine_tb.sv:
Для удобства работы с ModelSim добавим файл soda_machine_run_simulation.do следующего содержания:
Он запустит нашу симуляцию и выведет графики сигналов в ModelSim. Файл soda_machine_run_simulation.do добавляется в проект File -> New «Tcl script File»
Теперь настроим проект, что бы автоматически запускалась симуляция. Выбираем пункт меню Assignments -> Settings, выбираем категорию EDA Tool Settings -> Simulation. В настройках NativeLink settings выбираем Compile test bench: и нажимаем кнопку Test Benches. в открывшемся окне Test Benches нажимаем кнопку New. В открывшемся окне New Test Bench Settings заполняем поле Test bench name: soda_machine_tb и нажимаем кнопку выбора файла . в нижней части окна, выбираем наш файл soda_machine_tb.sv и нажимаем кнопку Add. Должно получиться как на рисунке:
В окне New Test Bench Settings нажимаем OK. Окно Test Benches должно получить следующий вид:
В окне Test Benches нажимаем OK. В NativeLink settings устанавливаем галочку Use script to set up simulation и выбираем файл soda_machine_run_simulation.do. Окно Settings
должно иметь вид:
В окне Settings нажимаем OK, производим компиляцию проекта Processing -> Start Compilation, производим запуск симуляции Tools -> Run Simulation Tool -> RTL Simulation. Должен запустится ModelSim и произойти симуляция проекта. Внешний вид вкладки Transcript:
Красной рамкой выделен вывод нашего test bench'а о количестве выполненных тестов и обнаруженных ошибках. Внешний вид вкладки Wave:
Читайте также: