Скачиваний:
45
Добавлен:
01.05.2014
Размер:
183.3 Кб
Скачать

Variable stim_vector: std_logic_vector(2 downto 0);

begin

stim_vector := to_vector(stim_integer,3);

z <= stim_vector(0);

END process;

logic_unit_new:process(stim_integer)

Variable stim_vector: std_logic_vector(2 downto 0);

begin

stim_vector := to_vector(stim_integer,3);

case stim_vector is

when "001"=> z1<='1';

when "011"=> z1<='1';

when "101"=> z1<='1';

when "111"=> z1<='1';

when OTHERS => z1<='0';

end case;

END process;

logic_unit_new2:process(stim_integer) -- тот же процесс, что и в пред. пункте

-- только с использованием case

Variable stim_vector: std_logic_vector(2 downto 0);

VARIABLE x0,x1,x2: std_logic;

begin

stim_vector := to_vector(stim_integer,3);

x0 := stim_vector(0);

x1 := stim_vector(1);

x2 := stim_vector(2);

case x0 is

when '0'=> z2<= '0';

when '1'=> z2<= '1';

when OTHERS => z2 <= '0';

end case;

END process;

Временные диаграммы:

7. Вызовем к работе файл, созданный по пункту 1. Преобразуем фрагмент программы, обеспечивающей описание функции в форме логических уравнений, в двухуровневую последовательность И-ИЛИ форму, определив выходы логических элементов «И» как сигналы.

Текст модифицированной программы:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE work.util_1164.all;

USE STD.textio.ALL;

ENTITY lab1 IS

END lab1;

ARCHITECTURE test1 OF lab1 IS

SIGNAL stim_integer: integer;

SIGNAL z,y1,y2,y3,y4,x0,x1,x2: std_logic;

BEGIN

logic_unit:process(x0,x1,x2) -- процесс, отвечающий за описание функции

-- в форме логических уравнений, в двухуровневую

-- последовательную И-ИЛИ форму

begin

-- z<=(x0 and x1 and x2) or

-- (x0 and y1 and (not x2));

y1<= (not x2) and (not x1) and x0;

y2<= (not x2) and x1 and x0;

y3<= x2 and (not x1) and x0;

y4<= x2 and x1 and x0;

z<= y1 or y2 or y3 or y4;

END process;

Stimulator: PROCESS

Variable I:integer;

Variable stim_vector: std_logic_vector(2 downto 0);

BEGIN

FOR i IN 0 TO 15 LOOP

stim_integer <=i;

stim_vector :=to_vector(i,3);

x0<= stim_vector(0);

x1<= stim_vector(1);

x2<= stim_vector(2);

WAIT for 50 ns;

END LOOP;

ASSERT false REPORT "End of Stimulation !"

SEVERITY note;

WAIT;

END PROCESS;

END test1;

Временные диаграммы:

Как видно из временных диаграмм, результат отличается от полученного ранее в 1 пункте данной работы. Это обусловлено тем, что присвоение значений используемым в процессе сигналам происходит сразу после завершения процесса, а не во время его выполнения.

8. В программе, представленной в предыдущем пункте, оператор вычисления Z оформим как параллельное присваивание.

Для этого перенесем этот оператор в общую операторную часть архитектурного тела.

Получится след. текст программы:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE work.util_1164.all;

USE STD.textio.ALL;

ENTITY lab1_15 IS

END lab1_15;

ARCHITECTURE test1 OF lab1_15 IS

SIGNAL stim_integer: integer;

SIGNAL z,y1,y2,y3,x0,x1,x2: std_logic;

BEGIN

logic_unit:process(x0,x1,x2)

begin

y1<= (not x2) and (not x1) and x0;

y2<= (not x2) and x1 and x0;

y3<= x2 and (not x1) and x0;

y4<= x2 and x1 and x0;

END process;

z <= y1 or y2 or y3 or y4; -- перенесенный оператор вычисления Z

Stimulator: PROCESS