2 / 37 · Теория
Сигналы и порты: контракт ширины, направления и времени
Читайте интерфейс и разделяйте критерии проверки комбинационного выхода и выхода состояния.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Читайте список портов как контракт схемы
input logic [7:0] data — порт, передающий 8 бит одновременно, а не восемь значений по очереди. Тип logic сам по себе тоже не создаёт элемент памяти. Аппаратное поведение определяется тем, управляет ли сигналом комбинационное присваивание или последовательностный блок по фронту.
Кроме ширины и направления, выясняйте, когда сигнал действителен, кто им управляет и каково значение после сброса. Без этого даже по отдельности правильные модули могут образовать неверную систему.
У одного MUX могут быть два вида выхода
В практикуме одновременно наблюдаются результат выбора y и сохранённый sampled_y.
Первое выражение задаёт комбинационную функцию, второе — идеальную синхронную модель, сохраняющую устойчивый y непосредственно перед фронтом. Безусловное сравнение обоих выходов с текущими входами ошибочно объявит исправный регистрРегистр хранит многобитное состояние. Синхронные регистры в этом курсе записывают определённый вход на фронте тактового сигнала. Подробнее неисправным.
assign y = sel ? b : a;
always_ff @(posedge clk) sampled_y <= y;В симуляторе события упорядочены даже внутри одной временной отметки. У реального компонента есть setupВремя предустановки (setup) — минимальное время, в течение которого входные данные должны быть стабильны до захватывающего фронта такта. При нарушении результат записи не гарантирован. Подробнее/hold и задержка clock-to-Q. Две формулы не устраняют различий, а служат началом явного определения момента наблюдения при функциональной проверке.
Стрелки показывают зависимости данных. После изменения a, b или sel сначала меняется комбинационный y, но sampled_y сохраняет новое значение только на положительном фронтеПоложительный фронт — момент перехода такта из 0 в 1. Его следует отличать от уровня, означающего весь интервал CLK=1. Подробнее.
- a · b · sel: Одновременно заданные входы
- MUX → y: Вычисление по текущему сигналу выбора
- DFF → sampled_y: Запись y на положительном фронте
Вопросы для проверки
- sel — определённый вход 0/1 или внешний асинхронный сигнал?
- Сравниваете ли вы изменившийся y с sampled_y после следующего допустимого фронта?
- Начальное значение sampled_y задаётся сбросомСброс возвращает состояние к заданному начальному значению. Нужно определить, синхронен он или асинхронен и имеет ли приоритет над другими управляющими сигналами. Подробнее или настройками инициализации инструмента?
Явные начальные значения практикума обеспечивают воспроизводимую модель 0/1. Не следует считать их гарантией поведения реального чипа при включении питания.
Попробуйте сами
Между фронтами такта a меняется с 0 на 1, а sel остаётся 0. Когда меняются y и sampled_y?
Прочитать объяснение
Комбинационный y меняется после вычисления или распространения по комбинационному пути. sampled_y обновляется на следующем положительном фронте, захватывающем значение. Изменение входа около фронта связано с setup/hold реальной схемы, поэтому одной простой модели недостаточно для вывода о безопасности.