Está en la página 1de 4

01/10/2018

DEFINICIONES.

Instrucciones de asignación concurrentes: Son todas aquellas que


suponen expresiones lógicas, aritméticas, de asignación seleccionada y de
asignación condicional.

La principal característica de estas instrucciones es que su orden de


INSTRUCCIONESDE ASIGNACIÓN aparición no afecta el significado del código de VHDL.
CONCURRENTE Y SECUENCIAL.

Instrucciones de asignación secuencial: Son las instrucciones como IF-


THEN-ELSE, CASE y las instrucciones LOOP.

La principal característica de estas instrucciones es que su orden de


aparición si puede afectar el significado del código de VHDL y es obligatorio
que estas instrucciones se coloquen dentro de otro tipo de instrucción
“Instrucciones PROCESS”

ESTRUCTURA GENERAL DE UN PROCESO. INSTRUCCIÓN IF.


FORMA GENERAL:
IF expresión THEN
[Nombre del proceso] declaraciones;
PROCESS[(nombre de señal {,nombre de señal})] {declaraciones;}
[VARIABLE declaración] ELSIF expresión THEN
BEGIN declaraciones;
[WAIT declaraciones] {declaraciones;}
[declaración de asignación se señal simple] ELSE
[declaración de asignación de señal seleccionada] declaraciones;
[IF declaración] {declaraciones;}
[CASE declaración] END IF
[LOOP declaración]
END PROCCES [Nombre del proceso]
Ejemplos de aplicación de la instrucción IF.
Nota: Las instrucciones IF, CASE y LOOP Pueden usarse
tanto para describir circuitos combinacionales como Caso a. Compuerta NAND de dos entradas
secuenciales.
Caso b. circuito combinacional f1(a,b,c,d)=Σ(2,3,5,7,10,11,15)
simplificación f1=b’c+a’bd+cd

1
01/10/2018

EJEMPLO (CASO A) SIMULACIÓN DEL CÓDIGO 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) SIMULACIÓN DEL CÓDIGO 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,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;

2
01/10/2018

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
INSTRUCCIÓN CASE. use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

Es utilizada para seleccionar una entre varias alternativas de ejecución de entity CASO is
determinadas acciones en función del valor de una expresión. Port ( A: in STD_LOGIC_VECTOR(3 DOWNTO 0);
F1: out STD_LOGIC);

Su forma general es: end CASO;

architecture Behavioral of CASO is

begin
CASE expresion IS PROCESS(A)
WHEN caso_1 =>sentencia; begin
case A IS
Caso_2 =>sentencia; when "0000"=>F1<='0';
……. when "0001"=>F1<='0';
when "0010"=>F1<='1';
WHEN OTHER => sentencia; when "0011"=>F1<='1';
END CASE; 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 ARITMÉTICO LÓGICA ALU.

Definición: Es un circuito lógico que realiza varias operaciones booleanas y


aritméticas con operandos de n bits.

Operación Entradas de Salida F


selección
S3,S2,S1
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

3
01/10/2018

CÓDIGO ALU.
library IEEE;

SIMULACIÓN DEL CÓDIGO ANTERIOR


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;

También podría gustarte