Разработайте учебное задание для студентов: предоставьте некорректную схему цифровой логики (включая мультиплексоры и триггеры), попросите выявить ошибки проектирования и предложить исправления с объяснением временных диаграмм
Задача для студентов (некорректная схема + задание): 1) Описание исходной (умышленно ошибочной) схемы (текстовая схема): - Компоненты: - MUX1: 2:1 мультиплексор с селектором SEL, входы: X (внешний сигнал) и Q1 (выход D‑триггера FF1). - FF1: D‑триггер (положительный фронт), вход D = выход MUX1, выход Q1. - MUX2: 2:1 мультиплексор с селектором SEL_bar (инверсия SEL), входы: Y (внешний сигнал) и Q1, выход = AsynReset (асинхронный сброс FF1). - Источник тактового сигнала CLK одинаков для всех триггеров. - Подключения (ошибочные): - SEL генерируется логикой, зависящей от внешних сигналов и от Q1 (т.е. SEL = f(A, Q1)). - Выход MUX2 прямо подаётся на асинхронный RESET вход FF1 (без фильтрации). - Нет буферов/регистров в путях управления мультиплексорами; MUX1 вход Q1 прямо возвращается в логическую сеть, формирующую SEL (создаётся гладкая обратная связь через комбинационную логику). - Заданные временные параметры (для расчётов): задержка MUX \(t_{pd\_mux} = \(12\ \text{ns}\)\), задержка CLK→Q триггера \(t_{cq} = \(3\ \text{ns}\)\), требуемое время установки (setup) \(t_{su} = \(6\ \text{ns}\)\), требуемое время удержания (hold) \(t_{h} = \(2\ \text{ns}\)\), выбран период такта \(T = \(20\ \text{ns}\)\). 2) Задание для студентов: a) Найдите и подробно опишите все ошибки проектирования в схеме (логические и временные). b) Для каждой найденной ошибки предложите исправление (почему это исправляет проблему). c) Постройте (нарисуйте) временные диаграммы (до и после исправлений) для сигналов: CLK, SEL, D (вход FF1), Q1, AsynReset; покажите и объясните нарушения setup/hold и поведение при асинхронном сбросе. d) Выполните численный анализ временных ограничений — вычислите запас по setup и hold до исправления и после предложенной коррекции; покажите расчёты. 3) Подсказки о типичных ошибках и ожиданиях ответов (что студенты должны указать и почему): - Ошибка 1 — комбинаторная петля / возможная нестабильность: - Пояснение: SEL зависит от Q1, а Q1 зависит от MUX1; MUX1 зависит от SEL через комбинационную логику → образуется петля без регистрации/задержки. Это может дать неопределённость или осцилляции. - Исправление: разорвать комбинаторную петлю — зарегистрировать SEL (ввести регистр для синхронизации SEL к CLK) или вычислять SEL синхронно; либо оставить SEL как синхронный вход, зависящий только от зарегистрированных сигналов. - Ошибка 2 — асинхронный сброс от комбинационной сети (возможны глитчи и непредсказуемые ресеты): - Пояснение: MUX2 управляется теми же нестабильными сигналами и может формировать короткие импульсы RESET, приводящие к непредсказуемому зацеплению триггера. - Исправление: сделать сброс синхронным (подать на D через синхронную логику) или добавить согласующий синхронизатор и фильтр длительности пульса; либо использовать положение MUX2, чтобы RESET формировался только синхронно. - Ошибка 3 — нарушение условий setup/hold при выбранных параметрах: - Расчёт запаса по setup (до исправления): запас = T−(tcq+tpd_mux)−tsuT - (t_{cq} + t_{pd\_mux}) - t_{su}T−(tcq+tpd_mux)−tsu. Подставляем: запас = 20 ns−(3 ns+12 ns)−6 ns=−1 ns\;20\ \text{ns} - (3\ \text{ns} + 12\ \text{ns}) - 6\ \text{ns} = -1\ \text{ns}20ns−(3ns+12ns)−6ns=−1ns. Отрицательный запас ⇒ нарушение setup. - Исправления: увеличить период такта TTT так, чтобы запас ≥ 0, например взять T≥tcq+tpd_mux+tsu+ϵT \ge t_{cq} + t_{pd\_mux} + t_{su} + \epsilonT≥tcq+tpd_mux+tsu+ϵ. Для этих параметров минимальный Tmin=3+12+6=21 nsT_{min} = 3 + 12 + 6 = 21\ \text{ns}Tmin=3+12+6=21ns; предложить T=25 nsT = 25\ \text{ns}T=25ns для запаса; либо уменьшить задержки (быстрый MUX), либо уменьшить логическую глубину в тактовом пути, либо регистрировать промежуточные сигналы (разбить путь на два такта). - Проверка удержания (hold): условие hold: tcq+tcd>tht_{cq} + t_{cd} > t_htcq+tcd>th, где tcdt_{cd}tcd — минимальная задержка пути (предположим tcd_mux=1 nst_{cd\_mux}=1\ \text{ns}tcd_mux=1ns). Тогда запас_hold = tcq+tcd_mux−th=3+1−2=2 nst_{cq} + t_{cd\_mux} - t_h = 3 + 1 - 2 = 2\ \text{ns}tcq+tcd_mux−th=3+1−2=2ns — в примере hold выполняется, но изменение логики может нарушить его. - Ошибка 4 — гонка между фронтами / использование разных тактовых фаз: - Пояснение: если в схеме используются триггеры, ловящие разные фронты CLK (или неконсистентно настроены), возможны гонки Q1→SEL→D в пределах одного такта. - Исправление: использовать один тип фронта для всех триггеров и синхронизировать управляющие сигналы; если нужен двухфазный режим — явно спроектировать двухфазную систему с контролируемыми задержками. - Ошибка 5 — отсутствие защёлки/буфера на управляющих линиях мультиплексоров: - Пояснение: селекторы могут глитчить между изменениями входов, вызывая переходы на выходе MUX в критические моменты. - Исправление: загерметизировать селектор регистром, добавить синхронизацию, или использовать glitch‑free MUX (например, перед регистрацией). 4) Что именно студенты должны нарисовать в временных диаграммах: - Диаграмма «до исправления»: показать CLK, в момент фронта CLK Q1 меняется; через tcqt_{cq}tcq Q1 выходит; SEL (ненадёжный) меняется вслед за Q1 и/или внешним сигналом; MUX задержка tpd_muxt_{pd\_mux}tpd_mux приводит к изменению D уже ближе к следующему фронту → показать, что D может измениться позже, чем tsut_{su}tsu до следующего фронта ⇒ нарушение setup. Показать возможный короткий импульс AsynReset от MUX2, обнуляющий FF1 в непредсказуемый момент. - Диаграмма «после исправления»: показать зарегистрированный SEL (изменение SEL происходит строго после фронта и стабилизируется до требования setup), или увеличенный период CLK; показать положительный запас по setup (numerical), отсутствие коротких асинхронных сбросов и стабильное поведение Q1. 5) Пример ожидаемого численного ответа (коротко): - До: запас_setup = 20−(3+12)−6=−1 ns\;20 - (3 + 12) - 6 = -1\ \text{ns}20−(3+12)−6=−1ns (нарушение). - Исправление A (увеличить период): выбрать T=25 nsT = 25\ \text{ns}T=25ns ⇒ запас_setup = 25−(3+12)−6=4 ns25 - (3 + 12) - 6 = 4\ \text{ns}25−(3+12)−6=4ns. - Исправление B (регистрация SEL): разбить путь на два такта; тогда критический путь короче, можно сохранить T=20 nsT = 20\ \text{ns}T=20ns. - Убрать асинхронный RESET или синхронизировать его — показать, что тогда кратковременные импульсы не приводят к неожиданным ресетам. Коротко: в ответах студентов ожидается идентификация логических (комбинаторная петля, асинхронный сброс, глитчи) и временных (setup/hold, t_cq/t_pd) ошибок, конкретные исправления (регистрация управляющих сигналов, синхронный сброс или фильтрация, увеличение периода или разбиение пути) и две временные диаграммы с расчётом запасов по временам до и после исправления (включая формулы из пункта 3).
1) Описание исходной (умышленно ошибочной) схемы (текстовая схема):
- Компоненты:
- MUX1: 2:1 мультиплексор с селектором SEL, входы: X (внешний сигнал) и Q1 (выход D‑триггера FF1).
- FF1: D‑триггер (положительный фронт), вход D = выход MUX1, выход Q1.
- MUX2: 2:1 мультиплексор с селектором SEL_bar (инверсия SEL), входы: Y (внешний сигнал) и Q1, выход = AsynReset (асинхронный сброс FF1).
- Источник тактового сигнала CLK одинаков для всех триггеров.
- Подключения (ошибочные):
- SEL генерируется логикой, зависящей от внешних сигналов и от Q1 (т.е. SEL = f(A, Q1)).
- Выход MUX2 прямо подаётся на асинхронный RESET вход FF1 (без фильтрации).
- Нет буферов/регистров в путях управления мультиплексорами; MUX1 вход Q1 прямо возвращается в логическую сеть, формирующую SEL (создаётся гладкая обратная связь через комбинационную логику).
- Заданные временные параметры (для расчётов): задержка MUX \(t_{pd\_mux} = \(12\ \text{ns}\)\), задержка CLK→Q триггера \(t_{cq} = \(3\ \text{ns}\)\), требуемое время установки (setup) \(t_{su} = \(6\ \text{ns}\)\), требуемое время удержания (hold) \(t_{h} = \(2\ \text{ns}\)\), выбран период такта \(T = \(20\ \text{ns}\)\).
2) Задание для студентов:
a) Найдите и подробно опишите все ошибки проектирования в схеме (логические и временные).
b) Для каждой найденной ошибки предложите исправление (почему это исправляет проблему).
c) Постройте (нарисуйте) временные диаграммы (до и после исправлений) для сигналов: CLK, SEL, D (вход FF1), Q1, AsynReset; покажите и объясните нарушения setup/hold и поведение при асинхронном сбросе.
d) Выполните численный анализ временных ограничений — вычислите запас по setup и hold до исправления и после предложенной коррекции; покажите расчёты.
3) Подсказки о типичных ошибках и ожиданиях ответов (что студенты должны указать и почему):
- Ошибка 1 — комбинаторная петля / возможная нестабильность:
- Пояснение: SEL зависит от Q1, а Q1 зависит от MUX1; MUX1 зависит от SEL через комбинационную логику → образуется петля без регистрации/задержки. Это может дать неопределённость или осцилляции.
- Исправление: разорвать комбинаторную петлю — зарегистрировать SEL (ввести регистр для синхронизации SEL к CLK) или вычислять SEL синхронно; либо оставить SEL как синхронный вход, зависящий только от зарегистрированных сигналов.
- Ошибка 2 — асинхронный сброс от комбинационной сети (возможны глитчи и непредсказуемые ресеты):
- Пояснение: MUX2 управляется теми же нестабильными сигналами и может формировать короткие импульсы RESET, приводящие к непредсказуемому зацеплению триггера.
- Исправление: сделать сброс синхронным (подать на D через синхронную логику) или добавить согласующий синхронизатор и фильтр длительности пульса; либо использовать положение MUX2, чтобы RESET формировался только синхронно.
- Ошибка 3 — нарушение условий setup/hold при выбранных параметрах:
- Расчёт запаса по setup (до исправления): запас = T−(tcq+tpd_mux)−tsuT - (t_{cq} + t_{pd\_mux}) - t_{su}T−(tcq +tpd_mux )−tsu .
Подставляем: запас = 20 ns−(3 ns+12 ns)−6 ns=−1 ns\;20\ \text{ns} - (3\ \text{ns} + 12\ \text{ns}) - 6\ \text{ns} = -1\ \text{ns}20 ns−(3 ns+12 ns)−6 ns=−1 ns.
Отрицательный запас ⇒ нарушение setup.
- Исправления: увеличить период такта TTT так, чтобы запас ≥ 0, например взять T≥tcq+tpd_mux+tsu+ϵT \ge t_{cq} + t_{pd\_mux} + t_{su} + \epsilonT≥tcq +tpd_mux +tsu +ϵ. Для этих параметров минимальный Tmin=3+12+6=21 nsT_{min} = 3 + 12 + 6 = 21\ \text{ns}Tmin =3+12+6=21 ns; предложить T=25 nsT = 25\ \text{ns}T=25 ns для запаса; либо уменьшить задержки (быстрый MUX), либо уменьшить логическую глубину в тактовом пути, либо регистрировать промежуточные сигналы (разбить путь на два такта).
- Проверка удержания (hold): условие hold: tcq+tcd>tht_{cq} + t_{cd} > t_htcq +tcd >th , где tcdt_{cd}tcd — минимальная задержка пути (предположим tcd_mux=1 nst_{cd\_mux}=1\ \text{ns}tcd_mux =1 ns). Тогда запас_hold = tcq+tcd_mux−th=3+1−2=2 nst_{cq} + t_{cd\_mux} - t_h = 3 + 1 - 2 = 2\ \text{ns}tcq +tcd_mux −th =3+1−2=2 ns — в примере hold выполняется, но изменение логики может нарушить его.
- Ошибка 4 — гонка между фронтами / использование разных тактовых фаз:
- Пояснение: если в схеме используются триггеры, ловящие разные фронты CLK (или неконсистентно настроены), возможны гонки Q1→SEL→D в пределах одного такта.
- Исправление: использовать один тип фронта для всех триггеров и синхронизировать управляющие сигналы; если нужен двухфазный режим — явно спроектировать двухфазную систему с контролируемыми задержками.
- Ошибка 5 — отсутствие защёлки/буфера на управляющих линиях мультиплексоров:
- Пояснение: селекторы могут глитчить между изменениями входов, вызывая переходы на выходе MUX в критические моменты.
- Исправление: загерметизировать селектор регистром, добавить синхронизацию, или использовать glitch‑free MUX (например, перед регистрацией).
4) Что именно студенты должны нарисовать в временных диаграммах:
- Диаграмма «до исправления»: показать CLK, в момент фронта CLK Q1 меняется; через tcqt_{cq}tcq Q1 выходит; SEL (ненадёжный) меняется вслед за Q1 и/или внешним сигналом; MUX задержка tpd_muxt_{pd\_mux}tpd_mux приводит к изменению D уже ближе к следующему фронту → показать, что D может измениться позже, чем tsut_{su}tsu до следующего фронта ⇒ нарушение setup. Показать возможный короткий импульс AsynReset от MUX2, обнуляющий FF1 в непредсказуемый момент.
- Диаграмма «после исправления»: показать зарегистрированный SEL (изменение SEL происходит строго после фронта и стабилизируется до требования setup), или увеличенный период CLK; показать положительный запас по setup (numerical), отсутствие коротких асинхронных сбросов и стабильное поведение Q1.
5) Пример ожидаемого численного ответа (коротко):
- До: запас_setup = 20−(3+12)−6=−1 ns\;20 - (3 + 12) - 6 = -1\ \text{ns}20−(3+12)−6=−1 ns (нарушение).
- Исправление A (увеличить период): выбрать T=25 nsT = 25\ \text{ns}T=25 ns ⇒ запас_setup = 25−(3+12)−6=4 ns25 - (3 + 12) - 6 = 4\ \text{ns}25−(3+12)−6=4 ns.
- Исправление B (регистрация SEL): разбить путь на два такта; тогда критический путь короче, можно сохранить T=20 nsT = 20\ \text{ns}T=20 ns.
- Убрать асинхронный RESET или синхронизировать его — показать, что тогда кратковременные импульсы не приводят к неожиданным ресетам.
Коротко: в ответах студентов ожидается идентификация логических (комбинаторная петля, асинхронный сброс, глитчи) и временных (setup/hold, t_cq/t_pd) ошибок, конкретные исправления (регистрация управляющих сигналов, синхронный сброс или фильтрация, увеличение периода или разбиение пути) и две временные диаграммы с расчётом запасов по временам до и после исправления (включая формулы из пункта 3).