Beruflich Dokumente
Kultur Dokumente
DEFINICIONES.
Instrucciones de asignacin concurrentes: Son todas aquellas que
suponen expresiones lgicas, aritmticas, de asignacin seleccionada y de
asignacin condicional.
INSTRUCCIONES DE ASIGNACIN
CONCURRENTE Y SECUENCIAL.
Instrucciones de asignacin secuencial: Son las instrucciones como IFTHEN-ELSE, CASE y las instrucciones LOOP.
La principal caracterstica de estas instrucciones es que su orden de
aparicin si puede afectar el significado del cdigo de VHDL y es obligatorio
que estas instrucciones se coloquen dentro de otro tipo de instruccin
Instrucciones PROCESS
INSTRUCCIN IF.
FORMA GENERAL:
IF expresin THEN
declaraciones;
{declaraciones;}
ELSIF expresin THEN
declaraciones;
{declaraciones;}
ELSE
declaraciones;
{declaraciones;}
END IF
13/09/2012
EJEMPLO (CASO A)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity CASO is
Port ( A,B : in STD_LOGIC;
Y : out STD_LOGIC);
end CASO;
architecture Behavioral of CASO is
begin
PROCESS(A,B)
begin
if (A='1' AND B='1') then
y<='0';
else
y<='1';
end if;
end process;
end Behavioral;
EJEMPLO(CASO B)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity CASO is
Port ( A,B,C,D : in STD_LOGIC;
F1 : out STD_LOGIC);
end CASO;
architecture Behavioral of CASO is
begin
PROCESS(A,B,C,D)
begin
if (B='0' AND C='1') then
F1<='1';
elsif(C='1' AND D='1') then
F1<='1';
elsif(A='0' AND B='1' AND D='1')then
F1<='1';
else
F1<='0';
end if;
end process;
end Behavioral;
13/09/2012
INSTRUCCIN CASE.
Es utilizada para seleccionar una entre varias alternativas de ejecucin de
determinadas acciones en funcin del valor de una expresin.
Su forma general es:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity CASO is
Port ( A: in STD_LOGIC_VECTOR(3 DOWNTO 0);
F1: out STD_LOGIC);
end CASO;
architecture Behavioral of CASO is
CASE expresion IS
WHEN caso_1 =>sentencia;
Caso_2 =>sentencia;
.
WHEN OTHER => sentencia;
END CASE;
begin
PROCESS(A)
begin
case A IS
when "0000"=>F1<='0';
when "0001"=>F1<='0';
when "0010"=>F1<='1';
when "0011"=>F1<='1';
when "0100"=>F1<='0';
when "0101"=>F1<='1';
when "0110"=>F1<='0';
when "0111"=>F1<='1';
when "1000"=>F1<='0';
when "1001"=>F1<='0';
when "1010"=>F1<='1';
when "1011"=>F1<='1';
when "1100"=>F1<='0';
when "1101"=>F1<='0';
when "1110"=>F1<='0';
when others=>F1<='1';
end case;
end process;
end Behavioral;
Operacin Entradas de
seleccin
S3,S2,S1
Salida F
Clear
000
0000
B-A
001
B-A
A-B
010
A-B
PLUS
011
A PLUS B
XOR
100
A XOR B
OR
101
A OR B
AND
011
A AND B
Preset
111
1111
13/09/2012
CDIGO ALU.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity CASO is
Port ( A,B: in STD_LOGIC_VECTOR(3 DOWNTO 0);
S: in STD_LOGIC_VECTOR(2 DOWNTO 0);
F: out STD_LOGIC_VECTOR(4 DOWNTO 0));
end CASO;
architecture Behavioral of CASO is
begin
PROCESS(A,B,S)
begin
case S IS
when "000"=>F<="00000";
when "001"=>F<=('0'&B)-('0'&A);
when "010"=>F<=('0'&A)-('0'&B);
when "011"=>F<=('0'&A)+('0'&B);
when "100"=>F<=('0'&A) XOR ('0'&B);
when "101"=>F<=('0'&A) OR ('0'&B);
when "110"=>F<=('0'&A) AND ('0'&B);
WHEN others=>F<="11111";
end case;
end process;
end Behavioral;