AFON // радиотехник affonya@mail.ru
← все инструменты

Симулятор Verilog

Напишите модуль на Verilog — и он заработает прямо в браузере: входы становятся переключателями и полями ввода, выходы — светодиодами и шинами, а внизу пишется временная диаграмма. Ни установки, ни лицензии, ни регистрации.

Ctrl+Enter — собрать

Стенд

шаг 0

Входы

Выходы

Как пользоваться

  1. Выберите пример или напишите свой модуль. Кнопка Собрать (или Ctrl+Enter) разбирает код и строит стенд.
  2. Входы появляются справа: однобитные — переключателями, шины — полями ввода. Значение можно писать как 13, 0xD, 0b1101 или 4'hD.
  3. Тактовый вход определяется автоматически по имени clk или по списку чувствительности posedge. Кнопка Пуск начинает его переключать.
  4. Выходы показываются светодиодами и числами, а внизу рисуется временная диаграмма: однобитные сигналы — меандром, шины — полосой со значением в шестнадцатеричном виде.

Какой 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. Неблокирующие присваивания при этом складываются в отдельный список и применяются все разом, уже после выполнения тела — именно поэтому пара строк

a <= b; b <= a;

меняет значения местами, а не затирает одно другим. После этого комбинационная часть устанавливается ещё раз, и шаг завершается. Такая модель повторяет то, что делает настоящий симулятор с дельта-циклами, но без указания задержек в наносекундах: время здесь считается в шагах.

Чего здесь нет

Симулятор рассчитан на один модуль и синтезируемое подмножество языка. Не поддерживаются: подключение других модулей (иерархия), task и function, циклы for и generate, задержки #10, память в виде массивов reg [7:0] mem [0:255], состояния x и z с тремя устойчивыми уровнями, знаковая арифметика signed. Разрядность ограничена 32 битами. Для полноценной разработки нужны Icarus Verilog, ModelSim или средства производителя ПЛИС — этот инструмент для другого: быстро проверить идею, разобрать чужой код и показать студенту, как оно работает.

Частые вопросы

Схема не тактируется, «Пуск» ничего не меняет

Проверьте, что тактовый вход опознан: рядом с ним в списке входов написано «такт». Если имя нестандартное, добавьте его в список чувствительности как posedge — симулятор найдёт вход по нему.

Почему счётчик считает через шаг?

Один шаг моделирования — это одно переключение такта, то есть половина периода. Полный период занимает два шага, поэтому за два шага счётчик прибавляет единицу.

Как задать начальное состояние регистра?

Блоком initial — он выполняется один раз при сборке и при сбросе стенда. В реальной ПЛИС начальное состояние задаётся так же, а вот в микросхемах памяти на это полагаться нельзя.

Что показывает диаграмма для шины?

Полосу со значением в шестнадцатеричном виде: сигнал держит значение, пока полоса не «переломится» — это момент смены.

Смотрите также

Реклама Ремонт компьютеров и ноутбуков в Москве — help-user.ru: диагностика, чистка, апгрейд, восстановление данных.