ПЦУСБ/Лекция 4 — различия между версиями
Материал из Wiki
< ПЦУСБ
ANA (обсуждение | вклад) м (→Слайд: Тоже самое в виде графа) |
ANA (обсуждение | вклад) м (→Слайд: Граф состояний и переходов) |
||
| Строка 32: | Строка 32: | ||
== Слайд: Граф состояний и переходов == | == Слайд: Граф состояний и переходов == | ||
| + | |||
| + | {| | ||
| + | | | ||
<graph> | <graph> | ||
| + | |||
digraph G { | digraph G { | ||
| − | node[color="red",shape="rectangle",style="rounded",fontsize= | + | node[color="red",shape="rectangle",style="rounded",fontsize=12]; |
| + | edge[fontsize=10, style="bold"]; | ||
| − | + | { rank=source Q1 [label="Q1\n y1"] } | |
| − | + | ||
| − | + | ||
| − | + | Q1 -> Q2 [label="x1=1", constraint=false] | |
| + | Q2 -> Q3 [label="x1=1, x2=1", constraint=false] | ||
| + | Q2 -> Q4 [label="x1=1"] | ||
| + | Q4 -> Q1 [label="x1=1", constraint=false] | ||
| + | |||
| + | |||
| + | edge [color="blue", style="dashed", fontsize=10]; | ||
| + | |||
| + | Q2 -> Q1 [label="RST=1"] | ||
| + | Q3 -> Q1 [label="RST=1"] | ||
| + | Q4 -> Q1 [label="RST=1"] | ||
| + | |||
| + | Q2 [label="Q2\n y2"] | ||
| + | Q3 [label="Q3\n y1"] | ||
| + | Q4 [label="Q4\n y3"] | ||
} | } | ||
</graph> | </graph> | ||
| + | | | ||
| + | {| class=standard align=center | ||
| + | |+ Кодирование выходов | ||
| + | ! Состояние выхода || Значение y[1:0] | ||
| + | |- | ||
| + | | y1 || 00 | ||
| + | |- | ||
| + | | y2 || 10 | ||
| + | |- | ||
| + | | y3 || 11 | ||
| + | |} | ||
| + | |||
| + | |||
| + | {| class=standard align=center | ||
| + | |+ Кодирование состояний | ||
| + | ! Состояние || Код | ||
| + | |- | ||
| + | | Q1 || 0001 | ||
| + | |- | ||
| + | | Q2 || 0010 | ||
| + | |- | ||
| + | | Q3 || 0100 | ||
| + | |- | ||
| + | | Q4 || 1000 | ||
| + | |} | ||
| + | |} | ||
| + | |||
| + | |||
| + | == Слайд: Выбор состояний для выходов и кодирование состояний == | ||
| + | |||
| + | <html><img src="https://docs.google.com/drawings/d/1ihtCm4nSz_DzSkTY3GN5mXHUEA6U95vSyryTTofTIIw/pub?w=907&h=296"></html> | ||
| + | |||
| + | |||
| + | == Слайд: Таблица переходов == | ||
| + | |||
| + | {| class=standard align=center | ||
| + | ! Текущее состояние <br /> state || Входы || Следующее состояние<br />next_state | ||
| + | |- | ||
| + | | "0001" (Q1) || x(1)='1' || "0010" (Q2) | ||
| + | |- | ||
| + | | "0001" (Q1) || x(1)='0' || "0001" (Q1) | ||
| + | |- | ||
| + | | "0010" (Q2) || x(2) = '1', x(1)='0' || "0100" (Q3) | ||
| + | |- | ||
| + | | "0010" (Q2) || x(1)='1' || "1000" (Q4) | ||
| + | |- | ||
| + | | "0010" (Q2) || x(1)='0' || "0010" (Q2) | ||
| + | |- | ||
| + | | "1000" (Q4) || x(1)='1' || "0001" (Q1) | ||
| + | |- | ||
| + | | "1000" (Q4) || x(1)='0' || "1000" (Q4) | ||
| + | |- | ||
| + | | "0100" (Q3) || - || "0100" (Q3) | ||
| + | |- | ||
| + | |} | ||
| + | |||
| + | |||
| + | == Слайд: Таблица истинности выходной логики == | ||
| + | |||
| + | {| class=standard align=center | ||
| + | ! Состояние || Выход y[1:0] | ||
| + | |- | ||
| + | | Q1: "0001" || y1: "00" | ||
| + | |- | ||
| + | | Q2: "0010" || y2: "10" | ||
| + | |- | ||
| + | | Q3: "0100" || y1: "00" | ||
| + | |- | ||
| + | | Q4: "1000" || y3: "11" | ||
| + | |- | ||
| + | |} | ||
| + | |||
| + | |||
| + | == Слайд: VHDL-модель == | ||
| + | |||
| + | <source lang="vhdl"> | ||
| + | library ieee; | ||
| + | use ieee.std_logic_1164.all; | ||
| + | |||
| + | entity automat is | ||
| + | |||
| + | port ( | ||
| + | x : in std_logic_vector(2 downto 1); | ||
| + | rst : in std_logic; | ||
| + | clk : in std_logic; | ||
| + | y : out std_logic_vector(1 downto 0)); | ||
| + | |||
| + | end automat; | ||
| + | |||
| + | architecture beh of automat is | ||
| + | |||
| + | signal state : std_logic_vector(3 downto 0); | ||
| + | signal next_state : std_logic_vector(3 downto 0); | ||
| + | |||
| + | begin -- beh | ||
| + | |||
| + | -- Задание логики переходов (F) | ||
| + | next_state <= | ||
| + | "0010" when state="0001" and x(1)='1' else | ||
| + | "0001" when state="0001" else | ||
| + | "0100" when state="0010" and x(2 downto 1) = "10" else | ||
| + | "1000" when state="0010" and x(1)='1' else | ||
| + | "0010" when state="0010" else | ||
| + | "0001" when state="1000" and x(1)='1' else | ||
| + | "1000" when state="1000" else | ||
| + | "0100" when state="0100" else | ||
| + | "0000"; | ||
| + | |||
| + | -- регистр, хранящий текущее состояние | ||
| + | p1: process (clk, rst) | ||
| + | begin -- process p1 | ||
| + | if rst = '1' then | ||
| + | state <= "0001"; | ||
| + | elsif clk'event and clk = '1' then | ||
| + | state <= next_state; | ||
| + | end if; | ||
| + | end process p1; | ||
| + | |||
| + | -- Задание выходной логики (G) | ||
| + | y <= | ||
| + | "00" when state="0001" else | ||
| + | "10" when state="0010" else | ||
| + | "00" when state="0100" else | ||
| + | "11" when state="1000" else | ||
| + | "00"; | ||
| + | end beh; | ||
| + | </source> | ||
== Слайд: Словесное описание автомата == | == Слайд: Словесное описание автомата == | ||
Версия 14:21, 13 октября 2013
- Заголовок
- Цифровые автоматы
- Автор
- Авдеев Н.А.
- Нижний колонтитул
- ПЦУСБ/Лекция 4
- Дополнительный нижний колонтитул
- Авдеев Н.А., 18:44, 25 марта 2014
Слайд: Провести анализ схемы (1)
Слайд: Провести анализ схемы (2)
Слайд: Автомат Мили
- Следующее состояние = F (текущее состояние, вход)
- Выход = G (текущее состояние, вход)
Слайд: Автомат Мура
- Следующее состояние = F (текущее состояние, вход)
- Выход = G (текущее состояние)
Слайд: Граф состояний и переходов
|
|
|
Слайд: Выбор состояний для выходов и кодирование состояний
Слайд: Таблица переходов
| Текущее состояние state |
Входы | Следующее состояние next_state |
|---|---|---|
| "0001" (Q1) | x(1)='1' | "0010" (Q2) |
| "0001" (Q1) | x(1)='0' | "0001" (Q1) |
| "0010" (Q2) | x(2) = '1', x(1)='0' | "0100" (Q3) |
| "0010" (Q2) | x(1)='1' | "1000" (Q4) |
| "0010" (Q2) | x(1)='0' | "0010" (Q2) |
| "1000" (Q4) | x(1)='1' | "0001" (Q1) |
| "1000" (Q4) | x(1)='0' | "1000" (Q4) |
| "0100" (Q3) | - | "0100" (Q3) |
Слайд: Таблица истинности выходной логики
| Состояние | Выход y[1:0] |
|---|---|
| Q1: "0001" | y1: "00" |
| Q2: "0010" | y2: "10" |
| Q3: "0100" | y1: "00" |
| Q4: "1000" | y3: "11" |
Слайд: VHDL-модель
library ieee; use ieee.std_logic_1164.all; entity automat is port ( x : in std_logic_vector(2 downto 1); rst : in std_logic; clk : in std_logic; y : out std_logic_vector(1 downto 0)); end automat; architecture beh of automat is signal state : std_logic_vector(3 downto 0); signal next_state : std_logic_vector(3 downto 0); begin -- beh -- Задание логики переходов (F) next_state <= "0010" when state="0001" and x(1)='1' else "0001" when state="0001" else "0100" when state="0010" and x(2 downto 1) = "10" else "1000" when state="0010" and x(1)='1' else "0010" when state="0010" else "0001" when state="1000" and x(1)='1' else "1000" when state="1000" else "0100" when state="0100" else "0000"; -- регистр, хранящий текущее состояние p1: process (clk, rst) begin -- process p1 if rst = '1' then state <= "0001"; elsif clk'event and clk = '1' then state <= next_state; end if; end process p1; -- Задание выходной логики (G) y <= "00" when state="0001" else "10" when state="0010" else "00" when state="0100" else "11" when state="1000" else "00"; end beh;
Слайд: Словесное описание автомата
Панель ввода пароля
- обеспечить возможность задания нового пароля по нажатию специальной кнопки и ввода старого пароля (пароль по умолчанию 000), а затем ввода нового. При неправильном вводе переходит в начальное состояние (ожидание ввода). При правильном старом пароле включить сигнал "доступ открыт", а после ввода нового пароля отключить сигнал "доступ открыт".
- ввод пароля с клавиатуры (3х значное десятичное число от 000 до 999). Предусмотреть кнопку сброса введённого пароля (при неправильный вводе).
- после ввода 3 цифр система проверяет введённый пароль с внутренним значением:
- если пароли совпадают, то включается светодиод "Доступ открыт" на 3 сек., после чего система переходит в режим ввода пароля
- если пароли не совпадают, то включается звуковой сигнал "Доступ закрыт" на 0.5 сек., после чего система переходит в режим ввода пароля
- если после ввода 1й или 2й цифры, следующая цифра (т.е. 2-я или 3я соответственно) не введены более чем через 5 секунд, то включается звуковой сигнал "Доступ закрыт" на 0.5 секунды
Слайд: Алгоритм
Слайд: Таблица переходов :step
Элементы системы и управляющие сигналы (входы/выходы)
- Входы
- кнопка ввода пароля - сигнал SetPassword
- цифровые кнопки 0-9 - сигналы DigitalKey[8 downto 0]
- кнопка отмены ввода - сигнал Esc
- сигналы (со счетчика) отсчитывающие 0.5, 3, 5 с - Dalay05s, Dalay3s, Dalay5s
- сигнал синхронизации - clk (активный положительный фронт)
- асинхронный сброс - RST
- Выходы
- управление трехразрядным семисегментным индикатором - Digits2[6:0], Digits1[6:0], Digits0[6:0] (реально Digits[6:0] и Index[2:0])
- светодиод "Доступ открыт" - сигнал Open
- Динамик - сигнал Speaker
- Сигнал запуск отсчета паузы - StartCount
Слайд: Таблица переходов
| Текущее состояние | Событие (входы) | Следующее состояние |
|---|---|---|
| Любое | RST = 1 | Начальное состояние (ожидание ввода) |
| Начальное состояние | Нажата кнопка ввода пароля | Режим смены пароля: ввод старого пароля |
| Начальное состояние | Нажата цифровая кнопка | Режим ввода пароля (для доступа) (1) |
| Начальное состояние | Нажата кнопка Esc | Начальное состояние |
| Режим смены пароля: ввод старого пароля (0) | Ввод первой цифры | Режим смены пароля: ввод старого пароля (1), отобразить введённую цифру |
| Режим смены пароля: ввод старого пароля (0) | Прошло 5 с | Начальное состояние |
| Режим смены пароля: ввод старого пароля (1) | Ввод второй цифры | Режим смены пароля: ввод старого пароля (2), отобразить введённую цифру |
| Режим смены пароля: ввод старого пароля (1) | Прошло 5 с | Начальное состояние |
| Режим смены пароля: ввод старого пароля (2) | Ввод третьей цифры | Режим смены пароля:
|
| Режим смены пароля: ввод старого пароля (0-2) | Нажата кнопка Esc | Начальное состояние |
Слайд: Таблица переходов (2)
| Текущее состояние | Событие (входы) | Следующее состояние |
|---|---|---|
| Режим ввода пароля (для доступа) (1) | Ввод второй цифры | Режим ввода пароля (для доступа) (2) |
| Режим ввода пароля (для доступа) (2) | Ввод третьей цифры | Переход в состояние:
|
| Режим ввода пароля (для доступа) (1 или 2) | Прошло 5 с | Начальное состояние |
| доступ открыт | Прошло 3 с | Начальное состояние |
| Доступ закрыт | Прошло 0.5 с | Начальное состояние |
Слайд: Тоже самое в виде графа




