Я же говорил, что некоторым будет не очевидно. Но давай разберем. Условия задачи таковы: если W6_2 = 1 то триггер сбрасывается (запись 0), если синхронный триггер Str = 1, то устанавливаться. Всего возможно 4 комбинации:
Тут есть нюанс: четвертое состояние никогда не произойдет потому, что синхронный триггер срабатывает после деактивации W6_2. К тому же, у W6_2 есть приоритет: элемент AND стоит ближе к триггеру. Т.е., если использовать логическую функцию, то мы получаем инверсия W6_2 должна AND'иться с функцией Str OR Sgt. Или ~W6_2 & (Srt | Sgt); С другой стороны, если использовать if блок, то будем иметь каскад из двух условий, причем дефолт значение можно не писать, синтезатор сам настроит его на хранение.Код:Str W6_2 Sgt 0 0 Хранение 0 1 0 1 0 1 1 1 Неопределенное состояние
И да, второй пример не совсем функционально аналогичен первому в виду того, что первый if блок имеет приоритет. Т.е., их следует поменять местами:
Вот тут я согласен, спасибо что поправил. Однако в рамках нашей модели будут работать оба варианта, ибо синхронный триггер имеет лог.1 только 1 такт, сразу за деактивацией W6_2, что является результатом цикла записи ядра 6502 на частоте ~1,7МГц и он не успеет сформировать второй, т.к. ядро PPU работает на частоте ~5,2МГц.Код:if (W6_2) Sgt <= 1'b0; else if (Srt) Sgt <= 1'b1;
PS Я не буду поправлять исходный вариант, чтобы данные сообщения имели смысл.




Ответить с цитированием