Симуляция
Симулятор отслеживает время и изменяет значения входных сигналов в соответствии с описанным поведением/структурой модели и блока 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