@Arhin
Студент

Почему такое странное поведение сигналов в симуляции?

имеется следующий код и визуализация симуляции
5eba92cd75532263510230.png
Код в тексте

ENTITY edemo IS
    port(
        S1:inout bit:= '0';
        S2:inout bit:= '0';
        OUT1:out bit;
        OUT2:out bit;
        OUT3:out bit;
        OUT4:out bit
    );
END ENTITY edemo;

ARCHITECTURE ademo OF edemo IS
BEGIN
    p1: PROCESS IS
        begin
        WAIT for 10 ps;
        S1 <= '1'; -- This assignment is the driver for S1
        S2 <= '1'; -- This has no effect because of the assignment later in this process
        OUT1 <= S1; -- Assigns ’1’, the value assigned above
        OUT2 <= S2; -- Assigns ’0’, the value assigned below
        S2 <= '0'; -- This assignment overrides the previous one since it is the last assignment to this signal in this process
        OUT3 <= S1; -- Assigns ’1’, the value assigned above
        OUT4 <= S2; -- Assigns ’0’, the value assigned above

        WAIT ON S1, S2;
    end process;

END ARCHITECTURE ademo;



Теоретически OUT должны принять 1010 в первом цикле, но согласно симуляции принимают на втором. Это видимо из за порядка изменения сигналов после wait? Значит OUT присвоились до того как присвоились S. Но что тогда будет на реальном железе? Неопределенность?
  • Вопрос задан
  • 175 просмотров
Пригласить эксперта
Ответы на вопрос 1
antonsosnitzkij
@antonsosnitzkij
студент, житель санкт-петербурга
1) wait - не синтезируемая конструкция.
2) необходимо познакомиться с понятием дельта-цикл -- это важный термин при моделировании
3) как проходит симуляция по этому коду:
запускается процесс, ожидается 10нс, затем ОДНОВРЕМЕННО/ПАРАЛЛЕЛЬНО в s1 s2 out1 out2 записываются значения. Какие значения? те, которые были в переменных до этого. Если в S1 было '0', то в out1 запишется '0'. и только при следующей итерации process уже выполнится единица.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы