Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПТЦА_лб9_2011.doc
Скачиваний:
9
Добавлен:
31.08.2019
Размер:
759.81 Кб
Скачать

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 – Полный цикл взаимодействия УА с ОА для автомата Мили