Sie sind auf Seite 1von 4

13/09/2012

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.

La principal caracterstica de estas instrucciones es que su orden de


aparicin no afecta el significado del cdigo de VHDL.

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

ESTRUCTURA GENERAL DE UN PROCESO.

INSTRUCCIN IF.
FORMA GENERAL:

[Nombre del proceso]


PROCESS[(nombre de seal {,nombre de seal})]
[VARIABLE declaracin]
BEGIN
[WAIT declaraciones]
[declaracin de asignacin se seal simple]
[declaracin de asignacin de seal seleccionada]
[IF declaracin]
[CASE declaracin]
[LOOP declaracin]
END PROCCES [Nombre del proceso]

IF expresin THEN
declaraciones;
{declaraciones;}
ELSIF expresin THEN
declaraciones;
{declaraciones;}
ELSE
declaraciones;
{declaraciones;}
END IF

Ejemplos de aplicacin de la instruccin IF.

Nota: Las instrucciones IF, CASE y LOOP Pueden usarse


tanto para describir circuitos combinacionales como
secuenciales.

Caso a. Compuerta NAND de dos entradas


Caso b. circuito combinacional f1(a,b,c,d)=(2,3,5,7,10,11,15)
simplificacin f1=bc+abd+cd

13/09/2012

EJEMPLO (CASO A)

SIMULACIN DEL CDIGO ANTERIOR

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;

SIMULACIN DEL CDIGO ANTERIOR.

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;

SIMULACION DEL CODIGO ANTERIOR

UNIDAD ARITMTICO LGICA ALU.


Definicin: Es un circuito lgico que realiza varias operaciones booleanas y
aritmticas con operandos de n bits.

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;

SIMULACIN DEL CDIGO ANTERIOR

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;

Das könnte Ihnen auch gefallen