Altifigence Academy

29 / 37 · Теория

Итоговый проект: детектор перекрывающейся последовательности 101

Объедините минимизацию состояний, действительность входа, зарегистрированный выход и независимую эталонную проверку.

Сначала зафиксируйте требования

На положительном фронтеПоложительный фронт — момент перехода такта из 0 в 1. Его следует отличать от уровня, означающего весь интервал CLK=1. Подробнее с valid=1 принимается один bit_in. Если конец принятых битов — 101, hit становится 1 на цикл после этого фронта. Перекрытия разрешены: у 10101 hit должен появиться на третьем и пятом битах. При valid=0 состояние хранится, hit=0; reset инициализирует состояние и hit.

Храните только необходимую историю

S0 означает отсутствие совпадающего префикса, S1 — окончание на 1, S10 — окончание на 10. После завершения 101 последняя 1 может начать следующий шаблон, поэтому возвращаемся в S1.

Текущее состояниеПринят бит 0Принят бит 1
S0S0, hit=0S1, hit=0
S1S10, hit=0S1, hit=0
S10S0, hit=0S1, hit=1

Каждый столбец — запись наблюдения одного положительного фронтаПоложительный фронт — момент перехода такта из 0 в 1. Его следует отличать от уровня, означающего весь интервал CLK=1. Подробнее. Входы показаны непосредственно перед фронтом, состояния со словом «после» в имени — сразу после обновления. Выравнивание столбцов обозначает порядок выборок, а не физическую задержку распространенияЗадержка распространения — время от изменения входа до установления правильного выхода. Логическая эквивалентность выражений и их временные характеристики — разные вопросы. Подробнее.
После reset начинаем в S0, valid=1 во всех столбцах. Обнаружение на третьем бите оставляет S1, позволяя обнаружить и пятый.

Два перекрывающихся обнаружения в 10101
Показать данные диаграммы
Данные диаграммы: каждый символ — один интервал; точка сохраняет предыдущее состояние; p — один тактовый цикл.
СигналДиаграммаЗначения шины
принятый бит10101
state после23452S1 → S10 → S1 → S10 → S1
hit после0.101

Реализация зарегистрированного обнаружения

SystemVerilog
module pattern_101 (
  input logic clk, rst, valid, bit_in,
  output logic hit
);
  typedef enum logic [1:0] {S0, S1, S10} state_t;
  state_t state;
  always_ff @(posedge clk) begin
    if (rst) begin
      state <= S0;
      hit <= 1'b0;
    end else begin
      hit <= 1'b0;
      if (valid) begin
        case (state)
          S0: state <= bit_in ? S1 : S0;
          S1: state <= bit_in ? S1 : S10;
          S10: begin
            state <= bit_in ? S1 : S0;
            hit <= bit_in;
          end
          default: state <= S0;
        endcase
      end
    end
  end
endmodule

Hit сохраняет в регистреРегистр хранит многобитное состояние. Синхронные регистры в этом курсе записывают определённый вход на фронте тактового сигнала. Подробнее результат, вычисленный из состояния и принятого на этом фронте входа. В отличие от чисто комбинационного выхода Мили он не реагирует немедленно на bit_in между фронтами. Это пример общего SystemVerilog; поддержку синтаксиса и доказательство выполнения в предоставленном однотактовом учебном движке нужно проверять отдельно.

Независимый расчёт критериев приёмки

Собирайте в строку только принятые биты; при длине минимум три сравнивайте последние три символа с 101. Для такого эталона не нужно копировать кодировку состояния FSMКонечный автомат определяет следующее состояние и выходы по сохранённому состоянию и входам. Правила переходов, выходов и сброса задают совместно. Подробнее.

  • 101 → hit на позиции 3.
  • 10101 → hit на позициях 3, 5.
  • 11101 → hit на позиции 5.
  • 1001 → без обнаружения.
  • 1,0, затем reset и 1 → без обнаружения.
  • Вставка valid=0 между или после 1,0 → тот же результат по номерам принятых входов.

Интерактивное упражнение с битовой строкой ниже проверяет функцию для непрерывных действительных входов. Не считайте это проверкой reset, остановок valid или физического времени.

Измените входы

Попробуйте сами

Если после обнаружения 101 возвращать код в S0, какая самая короткая входная последовательность отличит его от исходной спецификации?

Прочитать объяснение
  1. Правильная схема обнаруживает 3-й и 5-й входы. Возврат в S0 не позволяет использовать последнюю 1 первого совпадения как начало следующего, поэтому обнаружение на 5-м пропускается.

Выбор действует в этом браузере. Его можно изменить внизу страницы.