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;