Симуляция

Симулятор отслеживает время и изменяет значения входных сигналов в соответствии с описанным поведением/структурой модели и блока initial с задержками.

Время в симуляторе называется виртуальным. Виртуальное время не совпадает с реальным временем. Виртуальное время симулятора может быть ускорено или замедлено, чтобы ускорить или замедлить процесс симуляции. Виртуальное время симулятора может быть установлено в 0, чтобы начать симуляцию заново.

Изменение значения переменной в определённый момент времени называется событием обновления. Симулятор хранит события обновления в упорядоченном по времени их возникновения списке. Когда симулятор достигает момента времени, когда должно произойти событие обновления, он обновляет внутреннее состояние модели, распространяет новое состояние и удаляет событие из списка. Симулятор продолжает обновлять состояние модели, пока в списке есть события обновления.

В момент запуска симулятора обнуляется время и всем переменным присваивается неопределённое значение x. Затем выбираются события обновления, запланированные на текущий момент времени, и выполняются (обновляется состояние модели и распространяются новые состояния). После чего симулятор исполняет модели и проверяет выходы на изменение. Если выходы изменились, то симулятор запланирует событие обновления в конец списка событий текущего такта. Если выходы не изменились, то симулятор просто переходит к следующему такту. И так далее, пока не будут выполнены все события обновления.

Для примера протестируем схему mux следующим модулем:

module mux_tb;
    reg  a, sel, b;
    wire y;
    mux mux1(y, a, sel, b);
    initial begin
        a = 0; b = 0; sel = 0;
        #12; a = 1;
        #6; $finish;
    end
endmodule

В терминах цикла симуляции выполнение вышеуказанного кода описывается следующим образом:

Время
Конец цикла симуляции
Список событий в конце цикла симуляции

1

Начало симуляции

-

Время 0: блок initial

2

0

1

Время 0: n_s = 1 Время 2: w_and_a = 0, w_and_b = 0 Время 12: возобновление initial, строка 6

3

0

2

Время 2: w_and_a = 0, w_and_b = 0 Время 12: возобновление initial, строка 6

4

2

1

Время 4: or_res = 0 Время 12: возобновление initial, строка 6

5

4

1

Время 12: возобновление initial, строка 6

6

12

1

Время 14: w_and_a = 1 Время 18: возобновление initial, строка 7

7

14

1

Время 16: or_res = 1 Время 18: возобновление initial, строка 7

8

16

1

Время 18: возобновление initial, строка 7

В Logisim часть состояний можно проследить, моделируя пошагово.

Состояние
Описание

№1.Синие провода обозначают неопределённое состояние x.

№2.Тёмно-зелёные провода – значение логического 0, красные - неопределённое значение.

№4.Светло-зелёные провода – значение логической 1.

№5.Распространение сигнала до выходного контакта.

№6.На a подаётся значение 1.

№7.Распространение сигнала.

№8.Распространение сигнала до выходного контакта.

Last updated