«Работать добросовестно — значит: работать, повышая свою квалификацию, проявляя инициативу в совершенствовании продукции, технологий, организации работ, оказывая не предусмотренную должностными инструкциями помощь другим сотрудникам (включая и руководителей) в общей им всем работе.
Потемкин И.С. Функциональные узлы цифровой автоматики. – 1988, 320 с.
Слайд: Граф состояний и переходов
Кодирование выходов
Состояние выхода
Значение y[1:0]
y1
00
y2
10
y3
11
Кодирование состояний
Состояние
Код
Q1
0001
Q2
0010
Q3
0100
Q4
1000
Слайд: Выбор состояний для выходов и кодирование состояний
Для сохранения значения текущего состояния автомата используется 4-х разрядный регистр со сбросом в "0001" (код состояния Q1), который реализуется с помощью 4-х D-триггеров с асинхронными сбросом и установкой.
таблица переходов представляет собой альтернативную запись исходного графа
Текущее состояние state
Входы автомата
Следующее состояние next_state
Код
Имя
x[2]
x[1]
Код
Имя
"0001"
Q1
–
'1'
"0010"
Q2
"0001"
Q1
–
'0'
"0001"
Q1
"0010"
Q2
'1'
'0'
"0100"
Q3
"0010"
Q2
–
'1'
"1000"
Q4
"0010"
Q2
–
'0'
"0010"
Q2
"1000"
Q4
–
'1'
"0001"
Q1
"1000"
Q4
–
'0'
"1000"
Q4
"0100"
Q3
–
–
"0100"
Q3
Обозначения в таблице:
знак '–' - значение лог. '0' либо '1'
Слайд: Таблица истинности выходной логики G
Состояние State[3:0]
Выход y[1:0]
Q1: "0001"
y1: "00"
Q2: "0010"
y2: "10"
Q3: "0100"
y1: "00"
Q4: "1000"
y3: "11"
Слайд: VHDL-модель автомата
Вариант 1
Вариант 2
Вариант 3
libraryieee;useieee.std_logic_1164.all;entity automat isport(
x :instd_logic_vector(2downto1);
rst :instd_logic;
clk :instd_logic;
y :outstd_logic_vector(1downto0));end automat;architecture beh of automat issignal state :std_logic_vector(3downto0);signal next_state :std_logic_vector(3downto0);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(2downto1)="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";-- Задание выходной логики (G)
y <="00"when state="0001"else"10"when state="0010"else"00"when state="0100"else"11"when state="1000"else"00";-- регистр, хранящий текущее состояние
p1:process(clk, rst)begin-- process p1if rst = '1' then
state <="0001";elsif clk'eventand clk = '1' then
state <= next_state;endif;endprocess p1;end beh;
architecture beh2 of automat istype state_type is(Q1, Q2, Q3, Q4);signal state : state_type;signal next_state : state_type;begin-- beh
c1:process(state, x)isbegin-- process c1case state iswhen Q1 =>
y <="00";if x(1)='1' then
next_state <= Q2;else
next_state <= Q1;endif;when Q2 =>
y <="10";if x ="10"then
next_state <= Q3;elsif x(1)= '1' then
next_state <= Q4;else
next_state <= Q2;endif;when Q3 =>
y <="00";
next_state <= Q3;when Q4 =>
y <="11";if x(1)= '1' then
next_state <= Q1;else
next_state <= Q4;endif;whenothers=>null;endcase;endprocess c1;-- регистр, хранящий текущее состояние
p1:process(clk, rst)begin-- process p1if rst = '1' then
state <= Q1;elsif clk'eventand clk = '1' then
state <= next_state;endif;endprocess p1;end beh2;
libraryieee;useieee.std_logic_1164.all;architecture beh3 of automat istype state_type is(Q1, Q2, Q3, Q4);signal state : state_type;begin-- beh
p1:process(clk, rst)begin-- process p1if rst = '1' then
state <= Q1;elsif clk'eventand clk = '1' thenif state = Q1 thenif x(1)='1' then
state <= Q2;endif;elsif state = Q2 thenif x ="10"then
state <= Q3;elsif x(1)= '1' then
state <= Q4;endif;elsif state = Q3 thenelsif state = Q4 thenif x(1)= '1' then
state <= Q1;endif;else-- защита от сбоя
state <= Q1;endif;endif;endprocess p1;-- Задание выходной логики (G)
y <="00"when state = Q1 else"10"when state = Q2 else"00"when state = Q3 else"11"when state = Q4 else"00";end beh3;
Слайд: Последовательный оператор CASE
Последовательный — значит может использоваться только в process
type State_type IS (stateA, stateB, stateC);
signal State : State_type;
. . .
State <= stateB
Примеры предопределенных перечислимых типов:
TYPE SEVERITY_LEVEL IS (NOTE, WARNING, ERROR, FAILURE);
TYPE BOOLEAN IS (FALSE, TRUE);
TYPE BIT IS ('0', '1');
TYPE STD_LOGIC IS ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-');
Любой перечислимый тип имеет внутреннюю нумерацию: первый элемент всегда имеет номер 0, второй - номер 1 и т.д. Порядок нумерации соответствует порядку перечисления.
Слайд: VHDL-модель тестбенча
libraryieee;useieee.std_logic_1164.all;entity tb isend tb;architecture beh of tb iscomponent automat
port(
x :instd_logic_vector(2downto1);
rst :instd_logic;
clk :instd_logic;
y :outstd_logic_vector(1downto0));endcomponent;signal x :std_logic_vector(2downto1);signal rst :std_logic;signal clk :std_logic:= '0';signal y :std_logic_vector(1downto0);begin-- beh
automat_1: automat
portmap(
x => x,
rst => rst,
clk => clk,
y => y);
clk <=not clk after10ns;
rst <= '1', '0' after30ns,
'1' after400ns, '0' after405ns;processbegin-- process
x <="00";waitfor55ns;
x <="01";waitfor20ns;
x <="01";waitfor20ns;
x <="01";waitfor20ns;
x <="01";waitfor40ns;
x <="10";waitfor40ns;
x <="11";waitfor40ns;
x <="10";waitfor40ns;
x <="01";wait;endprocess;end beh;
Слайд: Временные диаграммы
Временные диаграммы проверки автоматов
Слайд: Словесное описание автомата
Панель ввода пароля
обеспечить возможность задания нового пароля по нажатию специальной кнопки и ввода старого пароля (пароль по умолчанию 000), а затем ввода нового. При неправильном вводе переходит в начальное состояние (ожидание ввода). При правильном старом пароле включить сигнал "доступ открыт", а после ввода нового пароля отключить сигнал "доступ открыт".
ввод пароля с клавиатуры (3х значное десятичное число от 000 до 999). Предусмотреть кнопку сброса введённого пароля (при неправильный вводе).
после ввода 3 цифр система проверяет введённый пароль с внутренним значением:
если пароли совпадают, то включается светодиод "Доступ открыт" на 3 сек., после чего система переходит в режим ввода пароля
если пароли не совпадают, то включается звуковой сигнал "Доступ закрыт" на 0.5 сек., после чего система переходит в режим ввода пароля
если после ввода 1й или 2й цифры, следующая цифра (т.е. 2-я или 3я соответственно) не введены более чем через 5 секунд, то включается звуковой сигнал "Доступ закрыт" на 0.5 секунды
Слайд: Алгоритм
Слайд: Таблица переходов :step
Элементы системы и управляющие сигналы (входы/выходы)