Симулятор Verilog
Напишите модуль на Verilog — и он заработает прямо в браузере: входы становятся переключателями и полями ввода, выходы — светодиодами и шинами, а внизу пишется временная диаграмма. Ни установки, ни лицензии, ни регистрации.
Стенд
Входы
Выходы
Как пользоваться
- Выберите пример или напишите свой модуль. Кнопка Собрать (или Ctrl+Enter) разбирает код и строит стенд.
- Входы появляются справа: однобитные — переключателями, шины — полями ввода. Значение можно писать как 13, 0xD, 0b1101 или 4'hD.
- Тактовый вход определяется автоматически по имени clk или по списку чувствительности posedge. Кнопка Пуск начинает его переключать.
- Выходы показываются светодиодами и числами, а внизу рисуется временная диаграмма: однобитные сигналы — меандром, шины — полосой со значением в шестнадцатеричном виде.
Какой Verilog понимает симулятор
| Конструкция | Поддержка |
|---|---|
| Объявление модуля | Оба стиля: module m(input a, output reg [3:0] q); и старый со списком имён и отдельными input/output |
| Типы и разрядность | wire, reg, integer, диапазоны [7:0], parameter и localparam |
| Непрерывные присваивания | assign с любыми выражениями, инициализация при объявлении |
| Процессы | always @(*), always @(posedge clk), always @(posedge clk or posedge rst), initial |
| Операторы | if/else, case с default, begin/end, блокирующее = и неблокирующее <= |
| Выражения | Арифметика, поразрядные и логические операции, сравнения, сдвиги, тернарный оператор, выбор разряда a[3] и среза a[7:4], конкатенация {a, b} и повторитель {4{1'b1}}, приведённые операции &a, |a, ^a |
| Числа | 4'b1010, 8'hFF, 3'd5, десятичные без указания разрядности |
| Прочее | Комментарии обоих видов, директивы вроде `timescale и системные задачи $display пропускаются |
Как устроено моделирование
Шаг моделирования выполняется в три приёма. Сначала устанавливается комбинационная часть: непрерывные присваивания и блоки always @(*) пересчитываются по кругу, пока значения не перестанут меняться. Затем сравниваются значения сигналов из списков чувствительности с прошлым шагом — там, где произошёл фронт, запускаются соответствующие блоки always. Неблокирующие присваивания при этом складываются в отдельный список и применяются все разом, уже после выполнения тела — именно поэтому пара строк
меняет значения местами, а не затирает одно другим. После этого комбинационная часть устанавливается ещё раз, и шаг завершается. Такая модель повторяет то, что делает настоящий симулятор с дельта-циклами, но без указания задержек в наносекундах: время здесь считается в шагах.
Чего здесь нет
Симулятор рассчитан на один модуль и синтезируемое подмножество языка. Не поддерживаются: подключение других модулей (иерархия), task и function, циклы for и generate, задержки #10, память в виде массивов reg [7:0] mem [0:255], состояния x и z с тремя устойчивыми уровнями, знаковая арифметика signed. Разрядность ограничена 32 битами. Для полноценной разработки нужны Icarus Verilog, ModelSim или средства производителя ПЛИС — этот инструмент для другого: быстро проверить идею, разобрать чужой код и показать студенту, как оно работает.
Частые вопросы
Схема не тактируется, «Пуск» ничего не меняет
Проверьте, что тактовый вход опознан: рядом с ним в списке входов написано «такт». Если имя нестандартное, добавьте его в список чувствительности как posedge — симулятор найдёт вход по нему.
Почему счётчик считает через шаг?
Один шаг моделирования — это одно переключение такта, то есть половина периода. Полный период занимает два шага, поэтому за два шага счётчик прибавляет единицу.
Как задать начальное состояние регистра?
Блоком initial — он выполняется один раз при сборке и при сбросе стенда. В реальной ПЛИС начальное состояние задаётся так же, а вот в микросхемах памяти на это полагаться нельзя.
Что показывает диаграмма для шины?
Полосу со значением в шестнадцатеричном виде: сигнал держит значение, пока полоса не «переломится» — это момент смены.
Смотрите также
- Симулятор ПЛИС на VHDL — тот же подход, но для другого языка описания аппаратуры
- Симулятор цифровых схем — та же логика, но собранная из вентилей и триггеров мышью
- Временные диаграммы — редактор осциллограмм для документации
- Карта Карно — минимизация функции перед тем, как писать assign
- Статья: язык Verilog и язык VHDL
- Статья: ПЛИС, FPGA и CPLD — что это за микросхемы и чем отличаются
- Проекты на VHDL и проекты на AHDL — готовые модули с разбором