Абстрактные автоматы
Создание поведенческой модели автомата МИЛИ
Заданы таблицы переходов и выходов автомата МИЛИ (вариант № 44)
Таблица 2.1
Таблица переходов
?(s?x)>s
Таблица 2.2
Таблица выходов
?(s?x)>y
x={x_1,x_2,x_3,x_4 }
S={S_1,S_2,S_3,S_4}
y={y_2,y_4,y_5,y_6}
Построим граф переходов автомата МИЛИ, используя таблицу выходов и переходов (табл. 2.1 и табл. 2.2).
Рисунок 2.3 Граф переходов исходного автомата МИЛИ
Создадим поведенческую модель автомата на языке VHDL. Описание входного, выходного алфавитов автомата целесообразно представить в пакете pack. В последующем этот пакет будет использован для описания эквивалентного автомата мура. Описание алфавита состояний автомата мили содержится в пакете mili_pack.
package mili_pack is
type state_s is (s1,s2,s3,s4); -- Алфавит состояний
end package mili_pack;
package pack is -- Декларация пакета
type in_x is (x1, x2, x3, x4); -- Входной алфавит
type out_y is (y2, y4, y5, y6); -- Выходной алфавит
end package pack; -- Окончание пакета
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; -- Пакет, содержащий определение
--преобразований данных в многозначном алфавите
use IEEE.STD_LOGIC_ARITH.ALL; -- Пакеты, содержащие функции
--преобразования форматов из битового вектора в эквивалентное число и наоборот
use IEEE.STD_LOGIC_UNSIGNED.ALL;
library work;
use work.mili_pack.all; -- Подключение созданных пакетов
use work.pack.all;
entity Mealy is -- Описание интерфейса абстрактного автомата МИЛИ
port
(
x: in in_x; -- Вход автомата
y: out out_y; -- Выход автомата
clk: in bit; -- Сигнал синхронизации автомата
set: in bit -- Сигнал установки в начальное состояние
);
end Mealy;
architecture ArchMealy of Mealy is -- Описание архитектурного тела
signal s: state_s; -- Текущее состояние
signal NEXT_s: state_s; -- Следующее состояние автомата
begin
N_state: process(x,s)
-- Процесс формирования следующего состояния и выходного сигнала автомата
begin
case s is
-- Формирование состояний и выходов автомата в состоянии s1
when s1=>
if (x=x1 or x=x3) then
NEXT_S<=s4; y<=y5;
elsif (x=x2) then
NEXT_S<=s2; y<=y2;
end if;
-- Формирование состояний и выходов автомата в состоянии s2
when s2=>
if (x=x2) then NEXT_S<=s3; y<=y4;
elsif (x=x3) then NEXT_S<=s1; y<=y6;
elsif (x=x4) then NEXT_S<=s4; y<=y6;
end if;
-- Формирование состояний и выходов автомата в состоянии s3
when s3=>
if (x=x2) then NEXT_s<=s2; y<=y2;
elsif (x=x3) then NEXT_s<=s2; y<=y5;
elsif (x=x4) then NEXT_s<=s4; y<=y2;
end if;
-- Формирование состояний и выходов автомата в состоянии s4
when s4=>
if (x=x1) then NEXT_s<=s4; y<=y6;
elsif (x=x2) then NEXT_s<=s2; y<=y4;
elsif (x=x4) then NEXT_s<=s2; y<=y5;
end if;
end case;
end process N_state;
Абстрактные автоматы
Создание поведенческой модели автомата МИЛИ
Заданы таблицы переходов и выходов автомата МИЛИ (вариант № 44)
Таблица 2.1
Таблица переходов
?(s?x)>s
Таблица 2.2
Таблица выходов
?(s?x)>y
x={x_1,x_2,x_3,x_4 }
S={S_1,S_2,S_3,S_4}
y={y_2,y_4,y_5,y_6}
Построим граф переходов автомата МИЛИ, используя таблицу выходов и переходов (табл. 2.1 и табл. 2.2).
Рисунок 2.3 Граф переходов исходного автомата МИЛИ
Создадим поведенческую модель автомата на языке VHDL. Описание входного, выходного алфавитов автомата целесообразно представить в пакете pack. В последующем этот пакет будет использован для описания эквивалентного автомата мура. Описание алфавита состояний автомата мили содержится в пакете mili_pack.
package mili_pack is
type state_s is (s1,s2,s3,s4); -- Алфавит состояний
end package mili_pack;
package pack is -- Декларация пакета
type in_x is (x1, x2, x3, x4); -- Входной алфавит
type out_y is (y2, y4, y5, y6); -- Выходной алфавит
end package pack; -- Окончание пакета
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; -- Пакет, содержащий определение
--преобразований данных в многозначном алфавите
use IEEE.STD_LOGIC_ARITH.ALL; -- Пакеты, содержащие функции
--преобразования форматов из битового вектора в эквивалентное число и наоборот
use IEEE.STD_LOGIC_UNSIGNED.ALL;
library work;
use work.mili_pack.all; -- Подключение созданных пакетов
use work.pack.all;
entity Mealy is -- Описание интерфейса абстрактного автомата МИЛИ
port
(
x: in in_x; -- Вход автомата
y: out out_y; -- Выход автомата
clk: in bit; -- Сигнал синхронизации автомата
set: in bit -- Сигнал установки в начальное состояние
);
end Mealy;
architecture ArchMealy of Mealy is -- Описание архитектурного тела
signal s: state_s; -- Текущее состояние
signal NEXT_s: state_s; -- Следующее состояние автомата
begin
N_state: process(x,s)
-- Процесс формирования следующего состояния и выходного сигнала автомата
begin
case s is
-- Формирование состояний и выходов автомата в состоянии s1
when s1=>
if (x=x1 or x=x3) then
NEXT_S<=s4; y<=y5;
elsif (x=x2) then
NEXT_S<=s2; y<=y2;
end if;
-- Формирование состояний и выходов автомата в состоянии s2
when s2=>
if (x=x2) then NEXT_S<=s3; y<=y4;
elsif (x=x3) then NEXT_S<=s1; y<=y6;
elsif (x=x4) then NEXT_S<=s4; y<=y6;
end if;
-- Формирование состояний и выходов автомата в состоянии s3
when s3=>
if (x=x2) then NEXT_s<=s2; y<=y2;
elsif (x=x3) then NEXT_s<=s2; y<=y5;
elsif (x=x4) then NEXT_s<=s4; y<=y2;
end if;
-- Формирование состояний и выходов автомата в состоянии s4
when s4=>
if (x=x1) then NEXT_s<=s4; y<=y6;
elsif (x=x2) then NEXT_s<=s2; y<=y4;
elsif (x=x4) then NEXT_s<=s2; y<=y5;
end if;
end case;
end process N_state;