- •9 Проектирование устройств на базе операционного и управляющего автоматов
- •9.1 Цель работы
- •9.2 Методические указания по организации самостоятельной работы студентов
- •9.3 Описание лабораторной установки
- •9.4 Порядок выполнения работы и методические указания по ее выполнение
- •9.6 Контрольные вопросы и задачи
9 Проектирование устройств на базе операционного и управляющего автоматов
9.1 Цель работы
Ознакомление с автоматизированным синтезом операционных автоматов на примере устройства сложения в дополнительных кодах.
9.2 Методические указания по организации самостоятельной работы студентов
Прежде чем рассмотреть VHDL-модель операционного автомата, рассмотрим алгоритм сложения целых двоичных чисел A+B=C в дополнительных кодах, как показано на рис. 9.1. ГСА, представленная здесь, размечена по типу автомата Мура. На рис. 9.2 изображена обобщенная схема операционного модуля данного устройства. На рис. 9.3 изображен граф переходов управляющего автомата Мура для данного устройства.
Для сложения используются шестиразрядные модифицированные коды, в которых два левых разряда кодируют знак. В таблице 9.1 приведены варианты знаков, представленных в модифицированном виде.
Таблица 9.1 – Варианты знаков, представленных в модифицированном виде
Знаковые разряды |
Смысл |
Примечание |
00 |
+ |
Положительный знак |
01 |
ПП+ |
Переполнение положительное |
10 |
ПП– |
Переполнение отрицательное |
11 |
– |
Отрицательный знак |
Рисунок 9.1 – ГСА алгоритма сложения целых чисел в дополнительных кодах
В табл. 9.2 представлены примеры сложения двоичных целых чисел для различных случаев переполнения и без переполнения.
Рисунок 9.2 – Операционный модуль сложения целых чисел в дополнительных кодах
A(5:0) и B(5:0)- слагаемые, С(5:0) – результирующая сумма, Done – признак конца вычисления суммы (=1), рр – признак переполнения (=1).
Рисунок 9.3 – Управляющий автомат Мура устройства сложения целых чисел в дополнительных кодах
Таблица 9.2 – Примеры сложения двоичных целых чисел в дополнительных кодах
Десятичные слагаемые |
Слагаемые в прямых кодах |
Слагаемые в обратных кодах |
Сложение в дополнительных кодах |
Результат в прямых кодах |
-8 -9 |
11 1000 11 1001 |
11 0111 11 0110 |
11 1000 + 11 0111 1|10 1111 |
ПП– |
+9 +12 |
00 1001 00 1100 |
00 1001 00 1100 |
00 1001 + 00 1100 01 0101 |
ПП+ |
+7 +3 |
00 0111 00 0011 |
00 0111 00 0011 |
00 0111 + 00 0011 00 1010 |
+10 |
-2 -3 |
11 0010 11 0011 |
11 1101 11 1100 |
11 1110 + 11 1101 1|11 1011 |
11 0100 обр. + 1 11 0101 прям.
-5 |
+5 -8 |
00 0101 11 1000 |
00 0101 11 0111 |
00 0101 + 11 1000 11 1101 |
11 0010 обр. + 1 11 0011 прям. -3 |
В листинге 9.1 приведена VHDL-модель операционного модуля (автомата).
Листинг9.1 – VHDL-модель операционного модуля
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.std_logic_unsigned.all;
entity OA is
port(
Done, y1, y2, y3, y4, y5, y6, CLK: in STD_LOGIC; -- control signals
A : in STD_LOGIC_VECTOR(5 downto 0); -- summand
B : in STD_LOGIC_VECTOR(5 downto 0); -- summand
C : out STD_LOGIC_VECTOR(5 downto 0); -- sum
x1, x2, x3 : out STD_LOGIC; -- informative signals
pp: out STD_LOGIC -- overflow
);
end OA;
--}} End of automatically maintained section
architecture OA of OA is
-- enter your statements here --
signal RG:STD_LOGIC_VECTOR(5 downto 0); -- - register
signal SM:STD_LOGIC_VECTOR(5 downto 0); -- - register-adder
begin
process (CLK, y1, y2, y3, y4, y5, y6)
begin
if (CLK'event and CLK='1')then
If (y1 = '1' and y2 = '1') then
RG <=B;
SM <=A;
elsif (y3 = '1')then
SM <=SM(5 downto 4) & ((not SM(3 downto 0))+1);
elsif (y4 = '1')then
SM <= SM + (RG(5 downto 4) & ((not RG(3 downto 0))+1));
elsif (y5 = '1')then
SM <= SM + RG;
elsif (y6 = '1')then
pp <= '1';
else pp <= '0';
end if;
end if;
end process;
C <= SM when Done = '1' else (others =>'0');
x1<= '1'when SM(5 downto 4)="11" else '0';
x2<= '1'when RG(5 downto 4)="11" else '0';
x3<= '1'when SM(5 downto 4)="01" or SM(5 downto 4)="10" else '0';
end OA;
На рис. 9.4 Приведены временные диаграммы работы операционного автомата.
Рисунок 9.4 – Временные диаграммы работы операционного автомата
В листинге 9.2 приведена VHDL-модель управляющего автомата (рис. 9.3) Мура.
Листинг9.2 – VHDL-модель управляющего автомата Мура
library IEEE;
use IEEE.std_logic_1164.all;
-- Описание интерфейса устройства
entity FSM is
port ( Clk, Reset, Z: in STD_LOGIC;
x1, x2, x3: in STD_LOGIC;
Done, y1, y2, y3, y4,y5, y6: out STD_LOGIC);
end;
-- Описание архитектуры устройства
architecture FSM of FSM is
type State_type is (a1, a2, a3, a4, a5, a6, a7,a8);
signal State, NextState: State_type;
begin
-- Блок для формирования последовательностной части
Sreg0_CurrentState: process (Clk, reset)
begin
if Reset='1' then
State <= a1;
elsif Clk'event and Clk = '0' then
State <= NextState;
end if;
end process;
-- Блок для формирования комбинационной части
-- Описание переходов состояний по условиям
Sreg0_NextState: process (State, x1, x2, x3, Z)
begin
case State is
when a1=> if Z='1' then NextState <= a2;
else NextState <= a1;
end if;
when a2=> if x1='1' then NextState <= a3;
elsif x2='1' then NextState <= a4;
else NextState <= a5;
end if;
when a3=> if x2='1' then NextState <= a4;
else NextState <= a5;
end if;
when a4=> if x1='1' then NextState <= a6;
elsif x3='1' then NextState <= a7;
else NextState <= a8;
end if;
when a5=> if x1='1' then NextState <= a6;
elsif x3='1' then NextState <= a7;
else NextState <= a8;
end if;
when a6=> if x3='1' then NextState <= a7;
else NextState <= a8;
end if;
when a7=> NextState <= a8;
when a8=> NextState <= a1;
when others => NextState <= a1;
end case;
end process;
-- Описание выходных сигналов
y1<='1' when State=a2 else '0';
y2<='1' when State=a2 else '0';
y3<='1' when State=a3 or State=a6 else '0';
y4<='1' when State=a4 else '0';
y5<='1' when State=a5 else '0';
y6<='1' when State=a7 else '0';
Done<='1' when State=a8 else '0';
end;
На рис. 9.5 Приведены временные диаграммы работы управляющего автомата Мура.
Рисунок 9.5 – Временные диаграммы работы управляющего автомата Мура
Общая схема устройства представлена на рис. 9.9.
Рисунок 9.6 – Общая схема устройства сложения с УА Мура
Укрупненная схема устройства представлена на рис. 9.7.
Рисунок 9.7 – Укрупненная схема устройства сложения
В листинге 9.3 приведена VHDL-модель устройства сложения (рис. 9.7, 9.8).
Листинг9.3 – VHDL-модель устройства сложения
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity TOP_OA is
port(
Clk, Reset, Z : in STD_LOGIC;
A , B: in STD_LOGIC_VECTOR(5 downto 0);
C : out STD_LOGIC_VECTOR(5 downto 0);
Done, pp : out STD_LOGIC );
end TOP_OA;
architecture TOP_OA of TOP_OA is
component OA is
port(Done, y1, y2, y3, y4, y5, y6, CLK: in STD_LOGIC; -- control signals
A : in STD_LOGIC_VECTOR(5 downto 0); -- summand
B : in STD_LOGIC_VECTOR(5 downto 0); -- summand
C : out STD_LOGIC_VECTOR(5 downto 0); -- sum
x1, x2, x3 : out STD_LOGIC; -- informative signals
pp: out STD_LOGIC);
end component;
component FSM is
port ( Clk, Reset, Z: in STD_LOGIC;
x1, x2, x3: in STD_LOGIC;
Done, y1, y2, y3, y4,y5, y6: out STD_LOGIC);
end component;
signal x1,x2,x3,y1,y2,y3,y4,y5,y6, Don_int: STD_LOGIC;
begin
U1: OA port map (Done=> Don_int, y1=>y1, y2=>y2, y3=>y3, y4=>y4, y5=>y5,
y6=>y6, CLK=>CLK, A=>A, B=>B, C=>C, x1=>x1, x2=>x2, x3=>x3, pp=>pp);
U2: FSM port map( Clk=> Clk, Reset=>Reset, Z=>Z, x1=>x1, x2=>x2, x3=>x3, Done=> Don_int, y1=>y1, y2=>y2, y3=>y3, y4=>y4, y5=>y5, y6=>y6);
Done <= Don_int;
end TOP_OA;
На рис. 9.8 Приведены временные диаграммы работы устройства сложения.
Рисунок 9.8 – Временные диаграммы работы устройства сложения с УА Мура
В данном примере управляющий автомат работает по заднему фронту, а операционный автомат по переднему. Таким образом, полный цикл взаимодействия УА с ОА происходит за один такт синхросигнала T (рис. 9.9). Когда управляющий автомат работает по заднему фронту, а операционный автомат по переднему это не всегда хорошо, поскольку может снижать частоту синхросигнала.
Рисунок 9.9 – Полный цикл взаимодействия УА с ОА для автомата Мура
Чтобы данное устройство срабатывало по одному фронту, необходимо использовать стробирующий сигнал En, частота которого будет в два раза меньше частоты синхросигнала. Тогда один такт работает УА, а ОА ждет, другой такт наоборот, работает ОА, а УА ждет. Таким образом, полный цикл взаимодействия УА с ОА происходит за два такта синхросигнала рис. 9.10.
Если сигнал En описывается в ОА по 1, то в УА он должен описываться по 0. Т.е в ОА используется конструкция
elsif Clk'event and Clk = '1' then
if En='1' then
в УА используется конструкция
elsif Clk'event and Clk = '1' then
if En='0' then
Рисунок 9.10 – Временные диаграммы при использовании сигнала En
Чтобы полный цикл взаимодействия УА с ОА происходил за один такт синхросигнала, и они оба срабатывали по одному фронту, необходимо в качестве управляющего автомата использовать автомат Мили. На рис. 9.11 представлен граф переходов автомата Мили для устройства сложения в дополнительных кодах (рис. 9.1).
Рисунок 9.11 – Управляющий автомат Мили устройства сложения целых чисел в дополнительных кодах
В листинге 9.4 приведена VHDL-модель управляющего автомата (рис. 9.11) Мили.
Листинг9.4 – VHDL-модель управляющего автомата Мили
library IEEE;
use IEEE.std_logic_1164.all;
-- Описание интерфейса устройства
entity FSM is
port ( Clk, Reset, Z: in STD_LOGIC;
x1, x2, x3: in STD_LOGIC;
Done, y1, y2, y3, y4,y5, y6: out STD_LOGIC);
end;
-- Описание архитектуры устройства
architecture FSM of FSM is
type State_type is (a1, a2, a3, a4, a5, a6);
signal State, NextState: State_type;
begin
-- Блок для формирования последовательностной части
Sreg0_CurrentState: process (Clk, reset)
begin
if Reset='1' then
State <= a1;
elsif Clk'event and Clk = '1' then
State <= NextState;
end if;
end process;
-- Блок для формирования комбинационной части
-- Описание переходов состояний по условиям и выходных сигналов
Sreg0_NextState: process (State, x1, x2, x3, Z)
begin
y1<='0'; y2<='0'; y3<='0'; y4<='0'; y5<='0'; y6<='0'; Done<='0';
case State is
when a1=> if Z='1' then NextState <= a2; y1<='1'; y2<='1';
else NextState <= a1;
end if;
when a2=> if x1='1' then NextState <= a3; y3<='1';
else NextState <= a3;
end if;
when a3=> if x2='1' then NextState <= a4; y4<='1';
else NextState <= a4; y5<='1';
end if;
when a4=> if x1='1' then NextState <= a5; y3<='1';
else NextState <= a5;
end if;
when a5=> if x3='1' then NextState <= a6; y6<='1';
else NextState <= a6;
end if;
when a6=> NextState <= a1; Done<='1';
when others => NextState <= a1;
end case;
end process;
end;
На рис. 9.12 представлены временные диаграммы работы устройства сложения с УА Мили
Рисунок 9.12 – Временные диаграммы работы устройства сложения с УА Мили
Общая схема устройства сложения представлена на рис. 9.13.
Рисунок 9.13 – Общая схема устройства сложения с УА Мили
Полный цикл взаимодействия УА с ОА происходит за один такт синхросигнала, оба автомата срабатывают по переднему фронту.
Рисунок 9.14 – Полный цикл взаимодействия УА с ОА для автомата Мили