Руководство новичка по ModelSim для симуляции FPGA и ASIC
Учебник — Использование ModelSim для симуляции, для начинающих
ModelSim — программа от Mentor Graphics для симуляции VHDL и Verilog проектов. Наиболее широко используемый симулятор в бизнесе и образовании. Учебник объясняет, почему симуляция важна, и показывает, как бесплатно получить ModelSim Student Edition для личного использования.
Симуляция — критически важный этап проектирования FPGA и ASIC. Она позволяет стимулировать проект и наблюдать реакцию написанного кода. Качественная симуляция прогоняет все возможные состояния дизайна, гарантируя корректную обработку любых входных сценариев. Забыли if? Не рассмотрели все case? Такие ошибки легко допустить без симуляции. Начнем.
Есть ли у вас установленный ModelSim? Скачайте здесь. Установите с параметрами по умолчанию. Вам понадобится лицензия от Mentor Graphics. В конце установки выберите Finish — откроется браузер с формой запроса лицензии. Прямые ссылки на запрос лицензии из закладок или веба не работают.
Код для симуляции — VHDL-проект ниже. Сам код не важен, если вы изучаете Verilog — тоже подойдет! VHDL не обязателен для этого урока. Код создает элемент И и подает на него сигналы через тестбенч. Скопируйте код в and_gate.vhd и тестбенч в and_gate_tb.vhd.
and_gate.vhd:
library ieee; use ieee.std_logic_1164.all; entity and_gate is port ( input_1 : in std_logic; input_2 : in std_logic; and_result : out std_logic ); end and_gate; architecture rtl of and_gate is signal and_gate : std_logic; begin and_gate <= input_1 and input_2; and_result <= and_gate; end rtl;
and_gate_tb.vhd:
library ieee; use ieee.std_logic_1164.all; entity and_gate_tb is end and_gate_tb; architecture behave of and_gate_tb is signal r_SIG1 : std_logic := '0'; signal r_SIG2 : std_logic := '0'; signal w_RESULT : std_logic; component and_gate is port ( input_1 : in std_logic; input_2 : in std_logic; and_result : out std_logic); end component and_gate; begin and_gate_INST : and_gate port map ( input_1 => r_SIG1, input_2 => r_SIG2, and_result => w_RESULT ); process is begin r_SIG1 <= '0'; r_SIG2 <= '0'; wait for 10 ns; r_SIG1 <= '0'; r_SIG2 <= '1'; wait for 10 ns; r_SIG1 <= '1'; r_SIG2 <= '0'; wait for 10 ns; r_SIG1 <= '1'; r_SIG2 <= '1'; wait for 10 ns; end process; end behave;
Запускаем ModelSim. Откроется главное окно.
Главное окно ModelSim
Для симуляции создайте проект: File → New → Project. Выберите папку, назовите проект and_gate. Расширение .prj. Остальное по умолчанию (компиляция в библиотеку «work»).
Нажмите Add Existing File (как на скриншоте справа). Найдите скачанные and_gate.vhd и and_gate_tb.vhd, добавьте оба. Остальные настройки по умолчанию. OK.
Окно проекта ModelSim — файлы добавлены
Обратите внимание на два синих вопросительных знака — файлы еще не скомпилированы. Скомпилируйте: правый клик на and_gate.vhd → Compile → Compile All. В консоли появятся зеленые сообщения об успешной компиляции.
Результат успешной компиляции
Запуск симуляции: Simulate → Start Simulation. Откроется окно. Раскройте плюсик рядом с work, затем рядом с and_gate_tb. Выберите and_gate_tb (не and_gate!) — симулируем на уровне тестбенча. OK.
Окно симуляции ModelSim — готово к запуску
Почти готово! Больше всего времени вы будете смотреть на Waveform (форму волны). Он показывает сигналы (бинарные 0/1, hex, перечислимые типы) и реакцию модуля на стимулы. Сначала добавьте сигналы для мониторинга. В примере — все сигналы тестбенча. Правый клик на and_gate_tb в окне sim → Add Wave. Можно перетаскивать сигналы из других окон.
Вот ваш Waveform. Все сигналы тестбенча добавлены. Для запуска нажмите иконку с листом и стрелкой вниз рядом с 100 ns. Симуляция пробежит 100 наносекунд. Наблюдайте за изменением сигналов! Поздравляем — первая симуляция в ModelSim готова!
Учебник показал: создание проекта, добавление файлов, компиляцию, запуск симуляции, просмотр волн. Вы готовы исследовать все примеры на сайте и запускать их симуляции. Используйте боковую панель для навигации.
VHDL
- Улучшение верификации оборудования с помощью интерактивного тестбенча на Tcl
- Что такое VHDL? Практическое руководство по языку описания аппаратуры
- Реализация PWM-контроллера в VHDL: проектирование, симуляция и FPGA-демо
- Освоение std_logic_vector: создание сигнальных векторов в VHDL
- Освоение условной логики в VHDL: конструкция If-Then-Elsif-Else
- Реализация динамического связного списка в VHDL с защищенными типами и указателями доступа
- Продвинутый тест по владению VHDL — Часть 3
- Продвинутый тест по VHDL — Часть 2: проверьте свою экспертизу в HDL
- Пошаговое руководство: создание мигающего светодиода на FPGA (VHDL/Verilog)
- Корректное завершение симуляции VHDL-тестбенча