Arhitecturemoore ofsystem is

BEGIN

IF clk=’1’ and clk’event and ena THEN….

END IF;

END PROCESS;

Синхронизация от двух сигналов -ошибка

PROCESS (clk1,clk2)

BEGIN

IF clk1=’1’ and clk1’event THEN

ELSIF clk2=’1’ and clk2’event THEN

Q<=….

END IF;

END PROCESS;

Если вычисление Следующего состояния выполняется в операторе, предшествующем присвоения значения выходу регистра, то это промежуточное значение должно быть отнесено к категории variable

PROCESS (clk)

VIRABLE A:bit:

BEGIN A:= <логическое выражение>;

D<=< логическое выражение, содержащее a>;

END PROCESS;

Регистр — это набор триггеров, объединенных общими цепями управления. Соответственно регистры в программах удобно представлять процессами, список инициализаторов которых включает управляющие сигналы, а в теле процесса находятся операторы присваивания, определяющие состояние триггеров регистра после изменений управляющих сигналов. Логика анализа условий выполнения операторов в теле этого процесса не отличается от такой же логики для одиночных триггеров.

Состояния триггеров отражаются переменными или сигналами. Можно использовать скалярное представление и индивидуальные имена для всех триггеров регистра, однако чаще используется групповое представление.

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY Parallel_to_sequential IS

GENERIC ( n:integer:=8);

PORT (clk,load: IN std_logic;

din:IN std_logic_vector (n-1 DOWNTO 0);

dout:OUT std_logic);

END new_del;

ARCHITECTURE test OF Parallel_to_sequential IS

SIGNAL reg: std_logic_vector (n-1 DOWNTO 0);

BEGIN

dout<=reg(n-1);

PROCESS

VARIABLE i: integer n-1 DOWNTO 0;

BEGIN

WAIT UNTIL load='1';

reg<=din; --загрузка кода

j:=0;

WHILE j<n LOOP -- n сдвигов после загрузки

WAIT UNTIL clk='1' and not clk'stable;

FOR i IN n-1 DOWNTO 1 LOOP

reg (i)<=reg (i-1);

END LOOP;

reg(0)<='0';

j:=j+1;

END LOOP;

END PROCESS;

END test;

Лекция 8

Представление автоматов

В практике используют различные способы задания автоматов: таблицы переходов и выходов, граф переходов, текстовое описание.

Интервалы времени между моментами допустимости изменений состояния будем называть тактами работы и нумеровать целыми числами, начиная от нуля. Состояние автомата в любом такте кроме нулевого определяется состоянием в предыдущем такте и входными сигналами.

Чтобы задать конечный автомат надо определить шестерку[]:

A={ S,X,Y, F, V,s(0)},

где S– множество допустимых состояний;

X – множество возможных входов;

Y -множество выходов;

F –функция переходов автомата;

V- функция выходов автомата;

s(0)-начальное состояние.

Множества S, X, Y –конечные, причем каждый элемент множества имеет собственное имя. В пределах данного параграфа всем элементам множеств будем присваивать одинаковые имена и индексы, соответствующие порядковому номеру их вхождения во множество, то есть

S={ s0,s1,….sp,…….sn};

X={ x0,x1,….xr…….sm}.

Y={ yo,y1,….ys,…….yk};

Функция переходов Fопределяет состояние автомата в N -ном такте работы в зависимости от состояния автомата и входа в N-1- ом такте:

s(N)=F(s(N-1),y(n,N-1)).

Семантика функции выходов зависит от принимаемой при синтезе модели поведения автомата.

В модели Мура выход целиком определяется состоянием автомата в текущий момент времени (рис.а)

y(N)=V(s(N)); (1)

Модель Мили, различные источники интерпретируют по разному. Во избежание разночтений мы введем две модификации модели Мили.

Первая из них – модель Мили с синхронизированным выходом. Предполагается, что выход в каждом такте зависит от состояния и входа в предыдущем такте рис б:

Vy(N)=V(s(N-1),y(N-1)), (2)

Модель Мили с асинхронным выходом предполагает, что выход определяется состоянием автомата и входом в текущем такте (рис в).

y(N)=V(s(N),y(N)). (3)

Пример описания автомата МИЛИ

Таблица переходов Таблица выходов

Вход Исходное состояние   Вход Исходное состояние
  S0 S1 S2 S3     S0 S1 S2 S3
X0 S0 S1 S2 S3   X0 Y0 Y0 Y0 Y0
X1 S1 S2 S3 SO   X1 Y0 Y0 Y0 Y1
X2 S3 S0 S1 S2   X2 Y2 Y0 Y0 Y0
TIPE state IS (S0,S1,S2,S3); TYPE input IS (x0,x1,x2); TYPE output IS (y0,y1,y2); -- ………… SIGNAL x:input; SIGNAL y:output; PROCESS(p_clk, reset) SIGNAL s: state ; BEGIN IF reset=’1’ THEN s<=s0; --определение начального состояния -- Реализация переходов elsIf p_clk=’1 and p_clk’event then CASE s IS WHEN S0 => IF x=x0 THEN s<=S0; ELSIF (x=x1) THEN s<=S1; ELSE s<=S2; END IF; WHEN S1 => IF x =x0 THEN s<=S1; ELSIF x =x1 THEN s<=S2; ELSE s<=S0; END IF;   WHEN S1 => IF x =x0 THEN s<=S1; ELSIF x =x1 THEN s<=S2; ELSE s<=S0; END IF; WHEN S2 => IF x =x0 THEN s<=S2; ELSIF x =x1 THEN s<=S3; ELSE s<=S1; END IF; WHEN S3 => IF x =x0 THEN s<=S3; ELSIF x =x1 THEN s<=S0; ELSE s<=S2; END IF; END CASE; -- Формирование выходов Outp: IF ( s = s3 and x=x1) THEN y<=y1; ELSIF (s =s0 and x=x2) THEN y<=y2; ELSE y<=y0; END IF; End if; END PROCESS;  

Типовая структура описания автомата МУРА: Если логика относительно простая то присвоение выходу можно оформить в виде параллельного присваивания

arhitecturemoore ofsystem is

signal b,c: некоторого типа;

Begin

F1: process(x,S) -- комбинационная логика

Begin

b<=F1(x,S);

end process;

F2: process(S) -- комбинационная логика

Begin

Y<=F2(S);

end process;

MEM: process (clock) --схемапамяти

Begin

S<=b; --можно непосредственно присваивать S<=F1(x,S),

-- исключив процесс F1

end process;

endmoor;

Для автомата Мили с асинхронным выходом список чувствительности процесса, в котором вычисляется выход, должен включать также и входной сигнал

process (clk,reset)

Begin

if reset=’1’ then state<=s0;

elsisclk=’1’ and clk’event then;

Case state is

when s0=> if x=x1 then state<=s1;

elsif x=x2 then state<=s2;

end if;

when s1=> if x=x1 then state<=s0;

elsif x=x2 then state<=s2;

end if;

when s2=> if x=x2 then state<=s1;

end if;

end case;

end process;

process(S) --для Мили с асинх.выходом также Х

Begin

Case state is

when s0|s1=> y<=y0;

when s2=> y<=y1;

end case;

end process;

--y<= y0 when s=s0 or s=s1 else --- а можно и так!!!!!

-- y1;

end moor;


Наши рекомендации