SlideShare una empresa de Scribd logo
Capítulo 3: Lenguaje de
Descripción del Hardware (VHDL)

     SISTEMAS DIGITALES I
HDL: Lenguaje de Descripción
del Hardware
 Similar a un lenguaje de computadora excepto que un
 HDL describe Hardware que luego de simulado puede ser
 construido.
 Existen 2 HDL que son estándares IEEE: VHDL (Very High
 Speed Integrated Circuit Hardware Description Lenguage)
 y Verilog HDL.
 El VHDL es más popular pero ambos se usan a nivel
 industrial.
 Inicio en 1980 en el Departamento de Defensa (DoD).
 Luego en 1983 formalmente empezaron el proyecto VHDL
 con: Intermetrics, Texas Instruments e IBM.
 IEEE empezó la estandarización en 1984 que luego se
 aprobó en 1987 con el número 1076.
 En 1994 el IEEE publicó la revisión del estandar IEEE Std
 1076-1993 que es la que se encuentra vigente.
VHDL
Trabaja con diseño jerárquico: top – down o down - top.
Independencia tecnológica que permite diseñar circuitos
cuya descripción no depende de la forma de
implementación física posterior.
Universalidad, es decir compatibilidad con un gran
número de herramientas CAD.
Diferentes tipos de Descripciones: Sistema, algorítmico,
RTL, Lógico, Conmutación, Eléctrico, Físico.
Características: Se declara una caja negra (entity) con
un identificador para el circuito, y sus terminales de
entrada y salida. También se declaran las direcciones de
los terminales (in, out) y el tipo de datos que admiten.
Luego se describe el circuito en sí dentro del cuerpo de
una arquitectura. Esta descripción difiere según el nivel.
Estructura de un programa en
        VHDL
Cuando se utiliza VHDL, un sistema digital se divide en varios bloques para
efectuar el proceso lo más comprensible y que sea fácil de probar y de dar
mantenimiento. En VHDL, cada porción del diseño es considerado un
bloque, que es descrito en el lenguaje, mediante una entidad y una
arquitectura.
La entidad me describe el exterior de mi circuito y la arquitectura su
comportamiento interno.
                                                             entidad 1

               Bloque 1                             arquitectura 1
                                     entidad 2                                  entidad 3

    Bloque 2              Bloque 3     arquitectura 2                    Arquitectura 3

                                                                  entidad 4
               Bloque 4
                                                        arquitectura 4
Ejemplo de entidad y arquitectura
ENTITY nand2 IS                              A
      PORT(I1,I2:      IN BIT;                              F
              O:       OUT BIT);             B
END nand2;

ARCHITECTURE C1 OF nand2 IS
BEGIN
      O<=NOT(I1 AND I2)
END C1;

Adicionalmente el archivo de texto creado se graba con extensión vhd.
   Para nuestro ejemplo: nand2.vhd
Estructura Básica de un programa VHDL.
   Se inicia declarando las bibliotecas que se usarán en el
   programa.
Ej:    LIBRARY ieee;
       USE ieee.std_logic_1164.all;
       USE ieee.std_logic_unsigned.all;
   Luego se indica la entidad con sus entradas, salidas y los
   modos y tipos de datos.
   Modo: IN        OUT       BUFFER              INOUT
       Entrada Salida Salida realimentada Bidireccional
   Tipo: BIT, STD_LOGGIC, STD_LOGIC_VECTOR
   Después se lista la arquitectura.
Estructura Básica de un programa VHDL.
LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;

ENTITY <nombre_entidad> IS
       PORT(<nombre_pin>:   <modo><tipo>;
            <nombre_pin>: <modo><tipo>);
END <nombre_entidad>;

ARCHITECTURE <nombre_arquitectura> OF <nombre_entidad> IS
BEGIN
      <sentencia>; <comentario>
      <sentencia>; <comentario>
END <nombre_arquitectura>;
Tipos de datos
Ejemplos de tipos de datos
   BIT: describe valores binarios. Rango: ‘0’, ‘1’
Ejemplo:
ENTITY nand2 IS
         PORT(A,B:        IN BIT;
                  F:      OUT BIT);
END nand2;
   BIT_VECTOR: describe cadenas de bits. Rango: conjunto de
   bits. Se escribe entre comillas: “1010”
Ejemplo:
ENTITY manejador IS
         PORT (S: IN BIT_VECTOR (3 DOWNTO 0);
                 X: OUT BIT_VECTOR (1 TO 7));
END manejador;
Ejemplos de tipos de datos
      CHARACTER: describe caracteres. Rango:
      son los 256 caracteres del estandar ISO
      8859-1: 1987 los 128 primeros son los
      caracteres ASCII.
‘a’
  STRING: describe cadenas de caracteres.
  Rango: conjunto de caracteres.
“abcde”
Estructura de un programa
      escrito en VHDL
En VHDL una arquitectura        ARCHITECTURE nombre_arq OF nombre_ent IS
tiene dos partes:         La
región de las declaraciones     [Declaración de señales]
                                [Declaración de tipos]
y    el   cuerpo      de   la   [Declaración de variables]
arquitectura.                   [Declaración de constantes]
                                [Declaración de componentes]
La región de declaraciones      [Especificación de atributos]
precede la palabra clave
BEGIN. Puede ser usada          BEGIN

para    declarar     señales,   {Instanciación de componentes}
variables y constantes.         {Enunciado concurrente}
                                {Enunciado secuencial [Proceso]}
También puede ser usada
para declarar componentes       END nombre_arq;
y especificar atributos.
Tipos de descripciones dentro
de la arquitectura
 Estructural o lógica: Descripción exacta
 del esquema lógico que resuelve la
 función objeto del diseño.
 De flujo de datos o RTL.
 Comportamental o algorítmica
 (descripción funcional).
Descripción Estructural o lógica
En la descripción estructural el cuerpo
de la arquitectura se transforma en una    component nombre_componente
descripción exacta del esquema lógico.
Para la descripción estructural el VHDL    port (señales_entrada: modo tipo;
se apoya en las declaraciones de
componentes                                     señales_salida: modo tipo);

La cantidad de declaraciones de
componentes debe de corresponder con       end component;
la cantidad de componentes distintas
que formarán parte del circuito físico
que realiza la función lógica a diseñar.
La declaración component posee una
estructura similar a la de una entidad,
pero no tiene la misma connotación.
Descripción Estructural o lógica
En la sección de declaraciones de la
arquitectura (región ubicada entre la       ARCHITECTURE nombre_arq OF nombre_ent IS

palabra reservada architecture y la         [Declaración de tipos]
palabra begin) puede existir la necesidad   [Declaración de señales]
                                            [Declaración de variables]
de realizar algunas declaraciones de        [Declaración de constantes]
señales internas, las cuales intervienen    [Declaración de componentes]
                                            [Especificación de atributos]
en la descripción del circuito, pero que
no tienen acceso a los terminales           BEGIN
externos del diseño (no están declaradas    Instanciación de componentes
en la entidad.
                                                         ...
Aparecen en mayúsculas las palabras
                                            Instanciación de componentes
reservadas del lenguaje VHDL para
resaltarlas, pero no es necesario ya que    END nombre_arq;
el VHDL no es sensible al tipo de letra
Descripción Estructural o lógica
  Ej: Realizar la
  descripción en VHDL de     A

  tipo estructural de la     B
                                   Y

  operación EXOR
  Y = AB + AB
ENTITY XOR IS
       PORT (A,B: IN BIT;
              Y: OUT BIT);
END XOR;
Descripción Estructural o lógica
La arquitectura puede ser la siguiente:
  Architecture XOR1 of XOR is
  - - declaración de señales
  signal AN, BN : bit;
  signal ANB, ABN : bit;
  - - declaración de componentes
                                           AN
  component INV                       A         ANB
              port (I: in bit;        B
                                                      Y
                   O: out bit);
  end component;
  component AND2
              port (I1, I2: in bit;             ABN
                       O: out bit);       BN
  end component;
  component OR2
              port (I1, I2: in bit;
                       O: out bit);
  end component;
Descripción Estructural o lógica
 Estamos usando 3 tipos      begin
 de    componentes:    un    -- instanciación de componentes
 inversor (declarado INV),   U1: INV port map (A,AN);
 una compuerta AND de        U2: INV port map (B,BN);
 dos entradas (declarada     U3: AND2 port map (AN,B,ANB);
 AND2) y una compuerta       U4: AND2 port map (A,BN,ABN);
 OR de dos entradas          U5: OR2 port map (ANB,ABN,Y);
 (declarada OR2).            end XOR1;
 Para la descripción de la
 función lógica XOR se
 emplearon dos instancias,
 U1 y U2 de INV; dos
 instancias U3 y U4 de
 AND2 y una instancias U5
 de OR2.
Descripción Estructural o lógica
En la asociación nominal o    component OR2
explícita     se     vuelve          port (I1, I2: in bit;
                                               O: out bit);
irrelevante el orden de los   end component;
parámetros, por cuanto
dentro del paréntesis se      begin
indican explícitamente las    ...
señales que se conectan a     - - asociación explícita
los terminales de las
                              U5: OR2 port map(O=>Y, I1=>ANB,
componentes, mediante el      I2=>ABN);
símbolo => de asignación
                              end XOR1;
Descripción Estructural o lógica

     ENTITY XOR IS                   component AND2
          PORT (A, B: IN BIT;                    port (I1, I2: in bit;
                  Y: OUT BIT);                           O: out bit);
     END XOR;                        end component;
                                     component OR2
     Architecture XOR1 of XOR is                 port (I1, I2: in bit;
     - declaración de señales                            O: out bit);
     signal AN, BN : bit;            end component;
     signal ANB, ABN : bit;          begin
     - declaración de componentes    - instanciación de componentes
                                     U1: INV port map(A,AN);
     component INV                   U2: INV port map(B,BN);
             port (I: in bit;        U3: AND2 port map(AN,B,ANB);
                  O: out bit);       U4: AND2 port map(A,BN,ABN);
     end component;                  U5: OR2 port map(ANB,ABN,Y);
                                     end XOR1;

Evidentemente, el estilo estructural de la escritura de una arquitectura
es extenso, incluso para circuitos relativamente pequeños, por lo que si
el circuito es grande su escritura puede ser tediosa y propensa a
cometer errores.
Descripción Estructural o lógica
Uno de los tipos de señales
con que trabaja en VHDL es
el arreglo de señales, tanto
del tipo bit_vector, como del
tipo std_logic_vector. Esto
permite escribir de forma
más compacta los diseños en
VHDL.
Ellos representan un arreglo
de bits y se utilizan con
dispositivos multiterminales.
Descripción Estructural o lógica
Ej:       Realizar     la
descripción VHDL de
tipo estructural de un
decodificador de 2
entradas y 4 salidas,
activadas con el nivel
bajo, y una entrada
de          habilitación,
también activa en el
nivel bajo.
Descripción Estructural o lógica
Lo primero es realizar la        architecture decod_a of decod2x4 is
declaración de la entidad. La    -- declaración de señales
declaración de la arquitectura   signal AN(1),AN(0), EN: bit;
del decodificador, en su
                                 -- declaración de componentes
primera parte, corresponde a
la    declaración     de   los   component INV
                                         port (I: in bit;
diferentes       tipos      de                O: out bit);
componentes. Se usan dos         end component;
tipos de componentes: INV,       component NAND3
un inversor y NAND3, una                 port (I1, I2, I3: in bit;
compuerta     NAND      de   3                         O: out bit);
                                 end component;
entradas.
Descripción Estructural o lógica
                             begin
                             --instanciación de componentes
En el cuerpo de la           U1: INV port map (A(0),AN(0));
arquitectura se observa la   U2: INV port map (A(1),AN(1));
instanciación de los 7       U3: INV port map (NEN,EN);
componentes, los cuales      U4: NAND3 port map (EN, AN(1), AN(0), NY(0));
son conectados usando la     U5: NAND3 port map (EN, AN(1), A(0), NY(1));
cláusula port map con        U6: NAND3 port map (EN, A(1), AN(0), NY(2));
asociación implícita.        U7: NAND3 port map (EN, A(1), A(0), NY(3));
                             end decod_a;
Descripción por flujo de datos
 o RTL
En la descripción por flujo de datos, la
arquitectura describe como fluyen las
señales de entrada por el circuito hacia
los terminales de salida.
Este estilo de escritura de la
arquitectura es llamada descripción de
transferencia de registros RTL (Register
Transfer Language).
Descripción por flujo de datos
    o RTL
                                  Ejemplo: La arquitectura por descripción
En la aproximación por flujo de   de flujo de datos de una compuerta XOR
                                  de dos entradas es:
datos se utilizan declaraciones
                                  architecture XOR2 of XOR is
de asignación de señales, así
                                  begin
como operadores lógicos que
                                  --asignación de señales
no se emplean en el estilo de
                                  Y <= (not A and B) or (A and not B);
escritura estructural.            end XOR2;
Los operadores lógicos que        A
tiene el VHDL en sus librerías    B
                                                                         Y
son: not, and, or, nand, nor,
xor y xnor.
Descripción por flujo de datos
     o RTL
La forma de descripción de la
arquitectura        mediante     la   Ejemplo: La existencia del operador XOR
aproximación por flujo de datos       compacta extraordinariamente el cuerpo
simplifica los diseños VHDL, pues     de la arquitectura de la entity XOR
los hace más compactos.               Architecture XOR3 of XOR is
Después de la palabra clave begin     Begin
se produce la asignación del flujo    - asignación de señales
de datos de las señales del
miembro de la derecha hacia la        Y <= A xor B;
señal Y, del miembro de la            End XOR3
izquierda (salida).
El miembro de la derecha del
operador de asignación <= se le
conoce como expresión, cuyo valor
se obtiene evaluándola completa.
Descripción por flujo de datos
   o RTL
El   VHDL,     como    otros   Lógicos: AND, OR, XOR, NOT, NAND,
lenguajes de programación               NOR y XNOR
posee un conjunto de           Aritméticos: +, -, * (multiplicación solo
operadores que se usan con                           por 2)

las señales o con las          De relación: =, /=, <, >, <=, >=
variables declaradas en sus    De concatenación: &
diseños.
Descripción por flujo de datos
     o RTL
La tabla presentada a          Operadores       Definidos para los tipos
continuación      contiene
una clasificación de los
operadores definidos en                       Bit, Boolean, Bit_vector,
el lenguaje VHDL, así            Lógicos:     std_logic y std_logic_vector
como los tipos de datos
sobre los que se pueden        De relación:   Integer, Bit, y Bit_vector
operar los mismos.             Aritméticos:   Integer
Los operadores lógicos
han sido extendidos al       Concatenación: Bit, Bit_vector y para las
                                            cadenas
uso en cualquier tipo de
señal lógica, ya sea
bit_vector, std_logic, o
std_logic_vector.
Descripción por flujo de datos
   o RTL
Cuando los operadores lógicos
se usan con los tipos de
señales std_logic o bit, ellos
poseen su significado usual.        Un ejemplo de operaciones lógicas con el
                                    tipo de datos vector es el siguiente:
Los valores '0' y '1' son valores
constantes y deben estar            ’’01100101’’xor’’10101101’’=’’11001000’’

encerrados entre apóstrofes.
Cuando el tipo de señal usada
es declarada std_logic_vector
o bit_vector, entonces los
valores deben estar encerrados
entre comillas.
Descripción por flujo de datos
    o RTL
                                   Ejemplo: Sean las siguientes
Existe un operador interno del     declaraciones:
VHDL, que es el signo & y que
                                   Signal a: bit_vector(1 to 4);
realiza la concatenación de
señales o variables de distinta    Signal b: bit_vector(1 to 8);
“longitud”.                        b<=’’0000’’&a;

En el ejemplo para concatenar la señal a, a la mitad de la
derecha del vector b y no tener incongruencias en los
resultados con vectores se realizan las asignaciones
siguientes. El símbolo & añade el vector a (de 4 bits) al
final de una secuencia de 4 ceros “0000” para realizar
exitosamente la asignación al vector b, que fue declarado
como un vector de 8 bits.
Descripción por flujo de datos
      o RTL
En el cuerpo de la arquitectura de un     -- asignación de señales
diseño VHDL por RTL se usan,              Nombre de la señal<=expresion;
sentencias concurrentes de asignación
                                          -- asignación condicional de señales
de señales, cuyo formato se presenta
                                          Nombre de la señal<=expresión
a continuación.                           when expresión booleana else
En una descripción RTL, el valor de la    Nombre de la señal<=expresión
expresión del miembro de la derecha       when expresión booleana else
de la asignación de señales ( <= ), se    …
lo transfiere al nombre de la señal del   Nombre de la señal<=expresión
miembro de la izquierda.                  when expresión booleana else
                                          Expresión;
Ambos miembros deben ser del
mismo tipo, para que no existan
incompatibilidades.
Descripción por flujo de datos
         o RTL
Ejemplo 8:
                                          Entity comp is
   Realice una descripción en VHDL de        Port (a, b: in bit_vector (3 downto 0);
   la arquitectura de un comparador                   E: out bit);
   de dos entradas, a y b, de 4 bits      End comp;
   cada una y una salida E de 1 bit.
                                          Architecture comparador_1 of comp is
   En esta arquitectura se describe
   cómo los datos se mueven desde         Begin
   los terminales de entrada, de señal    --asignación de señales
   en señal, hasta la salida.
                                          E<= not(a(0)xorb(0))
   Se necesita del conocimiento del           and not(a(1)xorb(1))
   circuito lógico del comparador, del        and not(a(2)xorb(2))
   cual obtener la función E de salida:       and not(a(3)xorb(3))
                                          end comparador_1;
  E=(a0⊕b0)(a1⊕b1)(a2⊕b2)(a3⊕b3)
Descripción por flujo de datos
      o RTL
                                     Library ieee;
Ejemplo 8:                                     Use ieee.std_logic_1164.all;
   Realice una descripción en
   VHDL de la arquitectura de        Entity comp is
   un comparador de dos                 Port (a, b: in bit_vector(3 downto 0);
   entradas, a y b, de 4 bits                    E: out bit);
   cada una y una salida E de 1      End comp;
   bit.
                                     Architecture comparador_2 of comp is
   Otra solución más compacta        Begin
   se puede construir usando la      --asignación de señales
   estructura when – else. Esta
   solución no necesita del          E<=‘1’ when (a=b) else ‘0’;
   conocimiento    del    circuito
   lógico del comparador.            end comparador_2;
Descripción por flujo de datos
   o RTL
En VHDL, cuando una señal cambia de valor se dice que
se ha producido un evento. La existencia de eventos da
lugar a otro evento (cambio de valores en las expresiones
en los miembros de la derecha de los operadores de
asignación). De esta manera se actualizan los valores de
las señales.
En el ejemplo anterior, un cambio en las entradas a o b,
o en ambas provocará un cambio en la expresión. Este
cambio es asignado a la señal de salida E, actualizando
su valor.
E <= '1' when (a=b) else '0';
Descripción por flujo de datos
       o RTL
Otro tipo de sentencia de asignación
concurrente usada en la descripción
por flujo de datos es la asignación     --asignación de señal seleccionada
de señal seleccionada, cuya sintaxis
se expresa a continuación. Este tipo    with expresión select
de declaración de asignación utiliza
la estructura with – select – when      señal <= valor1 de la señal when alternativa 1,
En esta estructura se evalúa la                  valor2 de la señal when alternativa 2,
expresión que acompaña a la                                     ...
declaración with y cuando el valor               valorn de la señal when alternativa n;
coincide con una de las alternativas
señaladas después de la palabra
clave when, entonces el valor
correspondiente a esta alternativa se
lo asigna al nombre de la señal.
Descripción por flujo de datos
   o RTL
Las alternativas contenidas      Valor de la señal when alternativa1 |
después de la palabra clave
when pueden ser varias o una     alternativa2 | alternativa3 | …..
sola.     Si son varias, las     | alternativaN,
alternativas deben ser todas
                                 Las barras verticales (|) tienen el
distintas y cubrir todos los
                                 mismo significado que la operación OR
posibles valores de éstas.
Cuando el valor de la señal
para varias alternativas es el
mismo,         pueden      ser
expresadas como una lista de
valores separados por barras
verticales ( | )
Descripción por flujo de datos
    o RTL
Cuando no se cubren todos
los posibles valores de las     --asignación de señal seleccionada
alternativas, se debe usar la
                                with expresión select
palabra clave de VHDL
others, con el último when      señal <= valor1 de la señal when alternativa 1,
en este tipo de asignación               valor2 de la señal when alternativa 2,
                                                        ...
de señales.                              valorn de la señal when others;

Este tipo de declaración de
asignación       utiliza   la
estructura with – select –
when others
Descripción por flujo de datos
     o RTL
Ejemplo 9:                      Entity circuito is

   Escriba en VHDL una              port (m: in integer range (31 downto 0);

   descripción de la                        T: out std_logic);

   siguiente función:           End circuito;
                                Architecture RTL of circuito is
T(x,y,z,u,v) =
   Σ(0,4,18,19,22,23,25,29) +   Begin
   φΣ (14,16,20,24)             -- asignación de señal seleccionada
                                With m select
                                T <= ‘1’ when 0 | 4 | 18 | 19 | 22 | 23 |25 | 29,
                                        ‘-’ when 14 | 16 | 20 | 24, -- opcionales
                                        ‘0’ when others;
                                end RTL;
Descripción por flujo de datos
      o RTL
Ejemplo 10:                          entity detector is
                                          port (N: in integer range (15 downto 0);
   Escriba     en    VHDL       la              P: out std_logic);
                                     end detector;
   descripción de un circuito
   combinacional, el cual recibe     architecture num_par of detector is
                                     Begin
   en sus entradas los dígitos del   -- asignación de señal seleccionada
   sistema decimal codificados       with N select
                                     P <= ‘1’ when 0 | 2 | 4 | 6 | 8,
   en NBCD y tiene una salida P,            ‘0’ when 1 | 3 | 5 | 7 | 9,
   que va a ‘1’ cuando se detecta           ‘-’ when others; -- opcionales
                                     end num_par;
   en sus entradas un dígito par.
Descripción por flujo de datos
     o RTL
Ejemplo 11:
  Realizar la descripción por
  flujo de datos de un MUX
  4 a 1.
Descripción por flujo de datos
  o RTL
                           architecture MUX1 of MUX is

                           signal x: bit_vector(3 downto 0);

                           Begin
                           --asignación de señales

                           X(3)   <=   S(1) and S(0) and D(3);
                           X(2)   <=   S(1) and not S(0) and D(2);
                           X(1)   <=   not S(1) and S(0) and D(1);
                           X(0)   <=   not S(1) and not S(0) and D(0);

                           F <= x(3) or x(2) or x(1) or x(0);

                           end MUX1;

La arquitectura basada en flujo de datos utilizando
operadores lógicos necesita del circuito final de este MUX
Descripción por flujo de datos
        o RTL
Ejemplo 12: Otra solución usando        architecture mux2 of mux is
   with – select.
   Como      se     observa,     esta   begin
   descripción de la arquitectura
                                        -- asignación de señal seleccionada
   es más simple que la anterior y
   no necesita del conocimiento         with S select
   de la lógica interna del circuito.        F <= D(0) when “00”,
                                                   D(1) when “01”,
                                                   D(2) when “10”,
                                                   D(3) when “11”;
                                        end mux2
Descripción por flujo de datos
 o RTL
Ejemplo 13: Diseñe un
buffer con tercer estado
cuyo circuito se           --file: ejemplo13.vhd
muestra.                   library ieee;
                           use ieee.std_logic_1164.all;

                           entity ejemplo13 is
                                port (EN_L, A: in std_logic;
                                           Y : out std_logic);
                           end ejemplo13;

                           architecture buffer of ejemplo13 is
                           begin
                           Y <= A when EN_L = ‘1’ else ‘Z’;
                           end buffer;
Descripción por flujo de datos
    o RTL
Ejemplo 14: Diseñe un        --file: ejemplo14.vhd
                             library ieee;
circuito que multiplique     use ieee.std_logic_1164.all;
dos     números    enteros   use ieee.std_logic_unsigned.all;
positivos de dos bits cada   entity ejemplo14 is
uno. Debe tener además            port (EN_L: in bit;
una entrada habilitadora                A, B: in std_logic_vector(1 downto 0);
                                        P: out std_logic_vector(3 downto 0));
EN_L activa en nivel bajo,   end ejemplo14;
tal que la salida esté en
                             architecture producto of ejemplo14 is
un tercer estado de alta     begin
impedancia si EN_L = H       with EN_L select
                                  P <= A*B       when ‘1’,
                                        ’’ZZZZ’’ when ‘0’;
                             end producto;
Descripción por flujo de datos
o RTL
 Ejemplo               15:    library ieee;
                              use ieee.std_logic_1164.all;
 Empaquetar el diseño
 del buffer con tercer        PACKAGE bufferPCK is
 estado cuyo circuito se      component ejemplo13
                              port( EN_L, A: in std_logic;
 muestra en la figura.
                                     Y: out std_logic);
                              end component;
                              end bufferPCK;


                             File: bufferPCK.vhd
Sentencias Concurrentes

Introducción
  Las sentencias concurrentes son aquellas que se
 ejecutan simultáneamente en la simulación. Se utilizan
 para el modelado del hardware, deben formar parte
 siempre del cuerpo de arquitecturas o de bloques y son
 las siguientes:
 Procesos
 Asignaciones concurrentes a señal
 Llamadas concurrentes o procedimientos
 Instanciaciones de componentes
Sentencia when - else
Permite realizar asignaciones condicionales de valores, expresiones u
objetos o señales. Su sintaxis de declaración es:

[etiqueta:] señal <= valor_1 when condición_1 else
                     valor_2 [when condición_2] [else
                     …                       ] [else
                     valor_n when condición_n] [else unaffected];

La señal recibe una asignación u otra (valor_1…valor_n) en función de
las condiciones que aparecen tras when. Para la opción de no
asignación puede (no cambio en la función) utilizarse la keyword
unaffected
Ejemplo de sentencia when - else
Modelo de un sumador de un bit con retención de la suma
entity SUMADOR is:
   port(A, B: in bit; ENABLE: in bit ;
        SUMA: out bit_vector (1 downto 0));
end SUMADOR;
architecture CON_WHEN of SUMADOR is
begin
   SUMA <=      “00”when (A=‘0’ and B= ‘0’ and ENABLE = ‘1’) else
                “01”when (A=‘1’ and B= ‘0’ and ENABLE = ‘1’) else
                “01”when (A=‘0’ and B= ‘1’ and ENABLE = ‘1’) else
                “10”when (A=‘1’ and B= ‘1’ and ENABLE = ‘1’) else
                unaffected;
end CON_WHEN
Sentencia with-select
Su sintaxis es la siguiente:

[etiqueta:] with expresión select
                señal <= valor_1 when resultado_1[,
                         valor_2 when resultado_2] [,
                         ……..] [,
                         valor_n when resultado_n] [,
                         unaffected when others];

El valor asignado depende de la evaluación de la expresión que aparece
entre las palabras reservadas with y select. El resultado se compara con
los valores tras when y se ejecuta la asignación que resulta verdadera.
Ejemplo de sentencia with-select
El sumador anterior puede ser descrito también del siguiente modo:

architecture CON_WITH_SELECT of SUMADOR is
begin
   with (ENABLE & A & B ) select
   SUMA <=     “00” when “100”,
               “01” when “101”,
               “01” when “110”,
               “10” when “111”,
              unaffected when others;
end CON_WITH_SELECT;
Sentencias Secuenciales

Introducción
  Las sentencias secuenciales son aquellas que
  solamente pueden aparecer dentro de procesos y
  subprogramas. Se ejecutan ordenadamente, de tal
  manera que el simulador finaliza completamente
  una sentencia antes de pasar a la siguiente.
  Todo lo contrario de lo que ocurre en las sentencias
  concurrentes en donde no importa el orden.
Sentencia wait

Es una de las más utilizadas en el modelado de circuitos síncronos,
wait detiene la ejecución de un proceso o un procedimiento en
espera de que se satisfaga una determinada condición. Su sintaxis es
la siguiente:

[etiqueta:] wait [on señal_1, señal_2,…..]
                 [until condición]
                 [for expresión_temporal];

Por tanto puede haber tres tipos de argumentos de ellos, o bien
ninguno. En este último caso el proceso queda detenido hasta el final
de la simulación.
Sentencia Wait on
Wait on produce el mismo efecto que la lista de sensibilidad de un
proceso. Por ejemplo:

PROCESO_1: process(A,B)
begin
     …
end process PROCESO_1;
PROCESO_2: process
begin
     …
     wait on A,B;
end process PROCESO_2
Case - when
La sentencia case-when permite seleccionar una entre varias
alternativas excluyentes entre sí de una expresión determinada, su
sintaxis general es la siguiente:

[etiqueta:] case expresión is
     when caso_1[ caso_2 ……] => sentencias secuenciales
     ....
end case [etiqueta];

De este modo una arquitectura alternativa para el mismo sumador
anterior podría ser como se muestra a continuación.
Ejemplo de Case-When
architecture CON_CASE of SUMADOR is
begin
   process
       variable X: bit_vector(2 downto 0);
   begin
       X<= ENABLE & A & B;
       case X is
               when “100”=> SUMA <=“00”;
               when “101”| “110” => SUMA <=“01”;
               when “111” => SUMA <= “10”;
               when others => null;
       end case;
   end process;
end CON_CASE
Bucles


Para la ejecución de bucles en VHDL se utiliza la palabra reservada
loop. Existen tres formas de definir un bucle:
- Con for-loop siempre se hace referencia a un bucle finito,
-Con while-loop a uno finito o infinito (depende de la condición) y
-Con simplemente loop a uno infinito

A continuación analizaremos estas tres opciones.
For - Loop

Esta sentencia causa la ejecución de un bucle un numero fijo de veces,
su sintaxis es la siguiente:

     [etiqueta:] for indice in rango loop
             sentencias secuenciales
     end loop [etiqueta];

Es necesaria las indicaciones de un índice y un rango. El índice es una
variable discreta, enumerada o entera, que no es preciso declarar y que
cambia su valor en una unidad por cada ejecución del bucle a lo largo
del rango especificado.
Ejemplo For-loop

Contar el numero de unos de una señal binaria de 32 bits.

  ….
  for I in 0 to 31 loop
       if SENAL (I)=‘1’ then NUMERO_UNOS:= NUMERO_UNOS+1;
       end if;
  end loop;
  ….
While - Loop

El siguiente tipo de bucle utiliza la palabra reservada while para
imponer la condición de repetición. Su sintaxis es la siguiente:

[etiqueta:] while condición loop
     sentencias secuenciales
end loop [etiqueta];

El bucle se repite en tanto que la condición que aparece tras while sea
verdadera.
Ejemplo While-loop

….
I:=0;
while (I>32) loop
     if SEÑAL (I)=‘1’ then NUMERO_UNOS:= NUMERO_UNOS+1;
     end if
     I:= I+1;
end loop;
....
Ahora si se nesecita declarar una variable (I) para poder establecer la
condición del bucle, no resulta ventajosa con respecto a for loop.
Loop


Ejecuta un bucle infinito y su sintaxis es así:



   [etiqueta:] loop
        sentencias secuenciales
   end loop [etiqueta];

Más contenido relacionado

La actualidad más candente

Diseño de mapas de memoria
Diseño de mapas de memoriaDiseño de mapas de memoria
Diseño de mapas de memoria
Eduardo Abalo
 
CIRCUITOS SECUENCIALES
CIRCUITOS SECUENCIALESCIRCUITOS SECUENCIALES
CIRCUITOS SECUENCIALES
Luis Zurita
 
Mapa de karnaugh el semáforo
Mapa de karnaugh el semáforoMapa de karnaugh el semáforo
Mapa de karnaugh el semáforo
Marco Antonio
 
Propiedad de linealidad - Principio de Superposición
Propiedad de linealidad - Principio de SuperposiciónPropiedad de linealidad - Principio de Superposición
Propiedad de linealidad - Principio de Superposición
Johan Jair Porras Huamán
 
Seaparat elect pote
Seaparat elect poteSeaparat elect pote
Seaparat elect pote
Luis Sanchez
 
L09 sumador restador-binariode8bits
L09 sumador restador-binariode8bitsL09 sumador restador-binariode8bits
L09 sumador restador-binariode8bits
Christian Acuña
 
Circuito astable com op
Circuito astable com opCircuito astable com op
Circuito astable com op
dormanperez
 

La actualidad más candente (20)

Diseño de mapas de memoria
Diseño de mapas de memoriaDiseño de mapas de memoria
Diseño de mapas de memoria
 
Resistencia estática y dinamica de diodos
Resistencia estática y dinamica de diodosResistencia estática y dinamica de diodos
Resistencia estática y dinamica de diodos
 
3.5. Configuración en Colector Común
3.5. Configuración en Colector Común3.5. Configuración en Colector Común
3.5. Configuración en Colector Común
 
3.4. Configuración en Emisor Común
3.4. Configuración en Emisor Común3.4. Configuración en Emisor Común
3.4. Configuración en Emisor Común
 
REGISTRO DE BANDERAS
REGISTRO DE BANDERASREGISTRO DE BANDERAS
REGISTRO DE BANDERAS
 
Programación PIC16F84A
Programación PIC16F84AProgramación PIC16F84A
Programación PIC16F84A
 
CIRCUITOS SECUENCIALES
CIRCUITOS SECUENCIALESCIRCUITOS SECUENCIALES
CIRCUITOS SECUENCIALES
 
Mapa de karnaugh el semáforo
Mapa de karnaugh el semáforoMapa de karnaugh el semáforo
Mapa de karnaugh el semáforo
 
Propiedad de linealidad - Principio de Superposición
Propiedad de linealidad - Principio de SuperposiciónPropiedad de linealidad - Principio de Superposición
Propiedad de linealidad - Principio de Superposición
 
Diferencias entre circuitos combinacionales y secuenciales
Diferencias entre circuitos combinacionales y secuencialesDiferencias entre circuitos combinacionales y secuenciales
Diferencias entre circuitos combinacionales y secuenciales
 
2.3. Configuraciones en Paralelo y Serie-Paralelo de Diodos
2.3. Configuraciones en Paralelo y Serie-Paralelo de Diodos2.3. Configuraciones en Paralelo y Serie-Paralelo de Diodos
2.3. Configuraciones en Paralelo y Serie-Paralelo de Diodos
 
10 registros
10 registros10 registros
10 registros
 
Seaparat elect pote
Seaparat elect poteSeaparat elect pote
Seaparat elect pote
 
El transistor bjt
El transistor bjtEl transistor bjt
El transistor bjt
 
CONTROL SEAFÓRICO
CONTROL SEAFÓRICOCONTROL SEAFÓRICO
CONTROL SEAFÓRICO
 
L09 sumador restador-binariode8bits
L09 sumador restador-binariode8bitsL09 sumador restador-binariode8bits
L09 sumador restador-binariode8bits
 
Transistores
TransistoresTransistores
Transistores
 
Tiristores Bct
Tiristores BctTiristores Bct
Tiristores Bct
 
Electrónica digital: Codificadores y decodificadores
Electrónica digital: Codificadores y decodificadores Electrónica digital: Codificadores y decodificadores
Electrónica digital: Codificadores y decodificadores
 
Circuito astable com op
Circuito astable com opCircuito astable com op
Circuito astable com op
 

Destacado

Hdl lenguaje descriptivo de hardware
Hdl lenguaje descriptivo de hardwareHdl lenguaje descriptivo de hardware
Hdl lenguaje descriptivo de hardware
lorena
 
Control Temperatura Para Cautin 112
Control Temperatura Para Cautin 112Control Temperatura Para Cautin 112
Control Temperatura Para Cautin 112
frankj1
 
Sistema control temperatura
Sistema control temperaturaSistema control temperatura
Sistema control temperatura
Fernando Untuña
 
Control automatico de temperatura
Control automatico de temperaturaControl automatico de temperatura
Control automatico de temperatura
peche luis
 
Cómo elaborar un marco teórico
Cómo elaborar un marco teóricoCómo elaborar un marco teórico
Cómo elaborar un marco teórico
SasNoizemaker
 

Destacado (18)

Curso de vhdl
Curso de vhdl Curso de vhdl
Curso de vhdl
 
Hardware description languages
Hardware description languagesHardware description languages
Hardware description languages
 
(Digital) flujo de diseño y conceptos basicos
(Digital) flujo de diseño y conceptos basicos(Digital) flujo de diseño y conceptos basicos
(Digital) flujo de diseño y conceptos basicos
 
Hdl lenguaje descriptivo de hardware
Hdl lenguaje descriptivo de hardwareHdl lenguaje descriptivo de hardware
Hdl lenguaje descriptivo de hardware
 
Vhdl organización y arquitectura
Vhdl organización y arquitectura Vhdl organización y arquitectura
Vhdl organización y arquitectura
 
Control Temperatura Para Cautin 112
Control Temperatura Para Cautin 112Control Temperatura Para Cautin 112
Control Temperatura Para Cautin 112
 
vhdl
vhdlvhdl
vhdl
 
system verilog
system verilogsystem verilog
system verilog
 
Hardware Description Language
Hardware Description Language Hardware Description Language
Hardware Description Language
 
Presentación1vhdl
Presentación1vhdlPresentación1vhdl
Presentación1vhdl
 
Sistema control temperatura
Sistema control temperaturaSistema control temperatura
Sistema control temperatura
 
Control de Temperatura Para el Cautín
Control de Temperatura Para el CautínControl de Temperatura Para el Cautín
Control de Temperatura Para el Cautín
 
Control automatico de temperatura
Control automatico de temperaturaControl automatico de temperatura
Control automatico de temperatura
 
Basics of Vhdl
Basics of VhdlBasics of Vhdl
Basics of Vhdl
 
Simplificación de funciones aplicando el Álgebra de Boole
Simplificación de funciones aplicando el Álgebra de BooleSimplificación de funciones aplicando el Álgebra de Boole
Simplificación de funciones aplicando el Álgebra de Boole
 
máquinas electricas
máquinas electricasmáquinas electricas
máquinas electricas
 
Cómo elaborar un marco teórico
Cómo elaborar un marco teóricoCómo elaborar un marco teórico
Cómo elaborar un marco teórico
 
Paso a Paso para construir un marco teórico
 Paso a Paso para construir un marco teórico Paso a Paso para construir un marco teórico
Paso a Paso para construir un marco teórico
 

Similar a Sd3

Conceptos basicos de_vhdl
Conceptos basicos de_vhdlConceptos basicos de_vhdl
Conceptos basicos de_vhdl
Angie Cardenas
 
FaMAF - Clase Vhdl LeccióN 02
FaMAF - Clase Vhdl LeccióN 02FaMAF - Clase Vhdl LeccióN 02
FaMAF - Clase Vhdl LeccióN 02
guest4b46762
 
Fgl029 guiano2arquitecturasvhdl (1)
Fgl029 guiano2arquitecturasvhdl (1)Fgl029 guiano2arquitecturasvhdl (1)
Fgl029 guiano2arquitecturasvhdl (1)
Alveiro2
 
Presentación practica de sistemas digitales
Presentación practica de sistemas digitalesPresentación practica de sistemas digitales
Presentación practica de sistemas digitales
Tuesman Castillo
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
freddymadriz
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 

Similar a Sd3 (20)

Conceptos basicos de_vhdl
Conceptos basicos de_vhdlConceptos basicos de_vhdl
Conceptos basicos de_vhdl
 
FaMAF - Clase Vhdl LeccióN 02
FaMAF - Clase Vhdl LeccióN 02FaMAF - Clase Vhdl LeccióN 02
FaMAF - Clase Vhdl LeccióN 02
 
⭐⭐⭐⭐⭐ PRÁCTICA: RESOLUCIÓN DE CIRCUITOS COMBINATORIALES CON VHDL
⭐⭐⭐⭐⭐ PRÁCTICA: RESOLUCIÓN DE CIRCUITOS COMBINATORIALES CON VHDL⭐⭐⭐⭐⭐ PRÁCTICA: RESOLUCIÓN DE CIRCUITOS COMBINATORIALES CON VHDL
⭐⭐⭐⭐⭐ PRÁCTICA: RESOLUCIÓN DE CIRCUITOS COMBINATORIALES CON VHDL
 
7_vhdl.pdf
7_vhdl.pdf7_vhdl.pdf
7_vhdl.pdf
 
Programacion PLD
Programacion PLDProgramacion PLD
Programacion PLD
 
Electrónica digital: Lógica programable VHDL
Electrónica digital: Lógica programable VHDL Electrónica digital: Lógica programable VHDL
Electrónica digital: Lógica programable VHDL
 
Fgl029 guiano2arquitecturasvhdl (1)
Fgl029 guiano2arquitecturasvhdl (1)Fgl029 guiano2arquitecturasvhdl (1)
Fgl029 guiano2arquitecturasvhdl (1)
 
VHDL - Presentacion Brayan.pptx
VHDL - Presentacion Brayan.pptxVHDL - Presentacion Brayan.pptx
VHDL - Presentacion Brayan.pptx
 
Electrónica digital: lógica programable VHDL parte 2
Electrónica digital: lógica programable VHDL parte 2Electrónica digital: lógica programable VHDL parte 2
Electrónica digital: lógica programable VHDL parte 2
 
Presentación practica de sistemas digitales
Presentación practica de sistemas digitalesPresentación practica de sistemas digitales
Presentación practica de sistemas digitales
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
IDLconVHDL2010.pdf
IDLconVHDL2010.pdfIDLconVHDL2010.pdf
IDLconVHDL2010.pdf
 
Elementos basicos de_programacion
Elementos basicos de_programacionElementos basicos de_programacion
Elementos basicos de_programacion
 
Presentacion power point digitales
Presentacion power point digitalesPresentacion power point digitales
Presentacion power point digitales
 
ELEMENTOS DE PROGRA 30-05.pdf
ELEMENTOS DE PROGRA 30-05.pdfELEMENTOS DE PROGRA 30-05.pdf
ELEMENTOS DE PROGRA 30-05.pdf
 
Introduccción a VHDL por https://vhdl.es
Introduccción a VHDL por https://vhdl.esIntroduccción a VHDL por https://vhdl.es
Introduccción a VHDL por https://vhdl.es
 
Vhdl2
Vhdl2Vhdl2
Vhdl2
 
Arduino: programación básica de Arduino
Arduino: programación básica de ArduinoArduino: programación básica de Arduino
Arduino: programación básica de Arduino
 

Más de Velmuz Buzz

Estructura Organizacional
Estructura OrganizacionalEstructura Organizacional
Estructura Organizacional
Velmuz Buzz
 
Inteligencia artificial sistema experto
Inteligencia artificial sistema expertoInteligencia artificial sistema experto
Inteligencia artificial sistema experto
Velmuz Buzz
 
Electronica transistores
Electronica transistoresElectronica transistores
Electronica transistores
Velmuz Buzz
 
Electronica rectificadores
Electronica rectificadoresElectronica rectificadores
Electronica rectificadores
Velmuz Buzz
 
Electronica polarizacion
Electronica polarizacionElectronica polarizacion
Electronica polarizacion
Velmuz Buzz
 
Electronica polarizacion tipo h
Electronica polarizacion tipo hElectronica polarizacion tipo h
Electronica polarizacion tipo h
Velmuz Buzz
 
Electronica introduccion y repaso
Electronica introduccion y repasoElectronica introduccion y repaso
Electronica introduccion y repaso
Velmuz Buzz
 
Electronica funcion de transferencia
Electronica funcion de transferenciaElectronica funcion de transferencia
Electronica funcion de transferencia
Velmuz Buzz
 
Electronica ejercicios
Electronica ejerciciosElectronica ejercicios
Electronica ejercicios
Velmuz Buzz
 
Electronica aplicaciones de diodos
Electronica aplicaciones de diodosElectronica aplicaciones de diodos
Electronica aplicaciones de diodos
Velmuz Buzz
 
Electronica polarizacion del fet
Electronica  polarizacion del fetElectronica  polarizacion del fet
Electronica polarizacion del fet
Velmuz Buzz
 
Electronica modelaje de transitores bipolares
Electronica  modelaje de transitores bipolaresElectronica  modelaje de transitores bipolares
Electronica modelaje de transitores bipolares
Velmuz Buzz
 
Electronica analisis a pequeña señal fet
Electronica  analisis a pequeña señal fetElectronica  analisis a pequeña señal fet
Electronica analisis a pequeña señal fet
Velmuz Buzz
 

Más de Velmuz Buzz (20)

Ecuaciones Diferenciales de 1er Orden
Ecuaciones Diferenciales de 1er OrdenEcuaciones Diferenciales de 1er Orden
Ecuaciones Diferenciales de 1er Orden
 
Ruby
Ruby Ruby
Ruby
 
Lenguajes de Programacion
Lenguajes de ProgramacionLenguajes de Programacion
Lenguajes de Programacion
 
Capa de Aplicacion
Capa de AplicacionCapa de Aplicacion
Capa de Aplicacion
 
Capa de Transporte
Capa de TransporteCapa de Transporte
Capa de Transporte
 
Capa Red
Capa RedCapa Red
Capa Red
 
Capa Enlace
Capa Enlace Capa Enlace
Capa Enlace
 
Estructura Organizacional
Estructura OrganizacionalEstructura Organizacional
Estructura Organizacional
 
Inteligencia artificial sistema experto
Inteligencia artificial sistema expertoInteligencia artificial sistema experto
Inteligencia artificial sistema experto
 
Electronica transistores
Electronica transistoresElectronica transistores
Electronica transistores
 
Electronica rectificadores
Electronica rectificadoresElectronica rectificadores
Electronica rectificadores
 
Electronica polarizacion
Electronica polarizacionElectronica polarizacion
Electronica polarizacion
 
Electronica polarizacion tipo h
Electronica polarizacion tipo hElectronica polarizacion tipo h
Electronica polarizacion tipo h
 
Electronica introduccion y repaso
Electronica introduccion y repasoElectronica introduccion y repaso
Electronica introduccion y repaso
 
Electronica funcion de transferencia
Electronica funcion de transferenciaElectronica funcion de transferencia
Electronica funcion de transferencia
 
Electronica ejercicios
Electronica ejerciciosElectronica ejercicios
Electronica ejercicios
 
Electronica aplicaciones de diodos
Electronica aplicaciones de diodosElectronica aplicaciones de diodos
Electronica aplicaciones de diodos
 
Electronica polarizacion del fet
Electronica  polarizacion del fetElectronica  polarizacion del fet
Electronica polarizacion del fet
 
Electronica modelaje de transitores bipolares
Electronica  modelaje de transitores bipolaresElectronica  modelaje de transitores bipolares
Electronica modelaje de transitores bipolares
 
Electronica analisis a pequeña señal fet
Electronica  analisis a pequeña señal fetElectronica  analisis a pequeña señal fet
Electronica analisis a pequeña señal fet
 

Sd3

  • 1. Capítulo 3: Lenguaje de Descripción del Hardware (VHDL) SISTEMAS DIGITALES I
  • 2. HDL: Lenguaje de Descripción del Hardware Similar a un lenguaje de computadora excepto que un HDL describe Hardware que luego de simulado puede ser construido. Existen 2 HDL que son estándares IEEE: VHDL (Very High Speed Integrated Circuit Hardware Description Lenguage) y Verilog HDL. El VHDL es más popular pero ambos se usan a nivel industrial. Inicio en 1980 en el Departamento de Defensa (DoD). Luego en 1983 formalmente empezaron el proyecto VHDL con: Intermetrics, Texas Instruments e IBM. IEEE empezó la estandarización en 1984 que luego se aprobó en 1987 con el número 1076. En 1994 el IEEE publicó la revisión del estandar IEEE Std 1076-1993 que es la que se encuentra vigente.
  • 3. VHDL Trabaja con diseño jerárquico: top – down o down - top. Independencia tecnológica que permite diseñar circuitos cuya descripción no depende de la forma de implementación física posterior. Universalidad, es decir compatibilidad con un gran número de herramientas CAD. Diferentes tipos de Descripciones: Sistema, algorítmico, RTL, Lógico, Conmutación, Eléctrico, Físico. Características: Se declara una caja negra (entity) con un identificador para el circuito, y sus terminales de entrada y salida. También se declaran las direcciones de los terminales (in, out) y el tipo de datos que admiten. Luego se describe el circuito en sí dentro del cuerpo de una arquitectura. Esta descripción difiere según el nivel.
  • 4. Estructura de un programa en VHDL Cuando se utiliza VHDL, un sistema digital se divide en varios bloques para efectuar el proceso lo más comprensible y que sea fácil de probar y de dar mantenimiento. En VHDL, cada porción del diseño es considerado un bloque, que es descrito en el lenguaje, mediante una entidad y una arquitectura. La entidad me describe el exterior de mi circuito y la arquitectura su comportamiento interno. entidad 1 Bloque 1 arquitectura 1 entidad 2 entidad 3 Bloque 2 Bloque 3 arquitectura 2 Arquitectura 3 entidad 4 Bloque 4 arquitectura 4
  • 5. Ejemplo de entidad y arquitectura ENTITY nand2 IS A PORT(I1,I2: IN BIT; F O: OUT BIT); B END nand2; ARCHITECTURE C1 OF nand2 IS BEGIN O<=NOT(I1 AND I2) END C1; Adicionalmente el archivo de texto creado se graba con extensión vhd. Para nuestro ejemplo: nand2.vhd
  • 6. Estructura Básica de un programa VHDL. Se inicia declarando las bibliotecas que se usarán en el programa. Ej: LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; Luego se indica la entidad con sus entradas, salidas y los modos y tipos de datos. Modo: IN OUT BUFFER INOUT Entrada Salida Salida realimentada Bidireccional Tipo: BIT, STD_LOGGIC, STD_LOGIC_VECTOR Después se lista la arquitectura.
  • 7. Estructura Básica de un programa VHDL. LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY <nombre_entidad> IS PORT(<nombre_pin>: <modo><tipo>; <nombre_pin>: <modo><tipo>); END <nombre_entidad>; ARCHITECTURE <nombre_arquitectura> OF <nombre_entidad> IS BEGIN <sentencia>; <comentario> <sentencia>; <comentario> END <nombre_arquitectura>;
  • 9. Ejemplos de tipos de datos BIT: describe valores binarios. Rango: ‘0’, ‘1’ Ejemplo: ENTITY nand2 IS PORT(A,B: IN BIT; F: OUT BIT); END nand2; BIT_VECTOR: describe cadenas de bits. Rango: conjunto de bits. Se escribe entre comillas: “1010” Ejemplo: ENTITY manejador IS PORT (S: IN BIT_VECTOR (3 DOWNTO 0); X: OUT BIT_VECTOR (1 TO 7)); END manejador;
  • 10. Ejemplos de tipos de datos CHARACTER: describe caracteres. Rango: son los 256 caracteres del estandar ISO 8859-1: 1987 los 128 primeros son los caracteres ASCII. ‘a’ STRING: describe cadenas de caracteres. Rango: conjunto de caracteres. “abcde”
  • 11. Estructura de un programa escrito en VHDL En VHDL una arquitectura ARCHITECTURE nombre_arq OF nombre_ent IS tiene dos partes: La región de las declaraciones [Declaración de señales] [Declaración de tipos] y el cuerpo de la [Declaración de variables] arquitectura. [Declaración de constantes] [Declaración de componentes] La región de declaraciones [Especificación de atributos] precede la palabra clave BEGIN. Puede ser usada BEGIN para declarar señales, {Instanciación de componentes} variables y constantes. {Enunciado concurrente} {Enunciado secuencial [Proceso]} También puede ser usada para declarar componentes END nombre_arq; y especificar atributos.
  • 12. Tipos de descripciones dentro de la arquitectura Estructural o lógica: Descripción exacta del esquema lógico que resuelve la función objeto del diseño. De flujo de datos o RTL. Comportamental o algorítmica (descripción funcional).
  • 13. Descripción Estructural o lógica En la descripción estructural el cuerpo de la arquitectura se transforma en una component nombre_componente descripción exacta del esquema lógico. Para la descripción estructural el VHDL port (señales_entrada: modo tipo; se apoya en las declaraciones de componentes señales_salida: modo tipo); La cantidad de declaraciones de componentes debe de corresponder con end component; la cantidad de componentes distintas que formarán parte del circuito físico que realiza la función lógica a diseñar. La declaración component posee una estructura similar a la de una entidad, pero no tiene la misma connotación.
  • 14. Descripción Estructural o lógica En la sección de declaraciones de la arquitectura (región ubicada entre la ARCHITECTURE nombre_arq OF nombre_ent IS palabra reservada architecture y la [Declaración de tipos] palabra begin) puede existir la necesidad [Declaración de señales] [Declaración de variables] de realizar algunas declaraciones de [Declaración de constantes] señales internas, las cuales intervienen [Declaración de componentes] [Especificación de atributos] en la descripción del circuito, pero que no tienen acceso a los terminales BEGIN externos del diseño (no están declaradas Instanciación de componentes en la entidad. ... Aparecen en mayúsculas las palabras Instanciación de componentes reservadas del lenguaje VHDL para resaltarlas, pero no es necesario ya que END nombre_arq; el VHDL no es sensible al tipo de letra
  • 15. Descripción Estructural o lógica Ej: Realizar la descripción en VHDL de A tipo estructural de la B Y operación EXOR Y = AB + AB ENTITY XOR IS PORT (A,B: IN BIT; Y: OUT BIT); END XOR;
  • 16. Descripción Estructural o lógica La arquitectura puede ser la siguiente: Architecture XOR1 of XOR is - - declaración de señales signal AN, BN : bit; signal ANB, ABN : bit; - - declaración de componentes AN component INV A ANB port (I: in bit; B Y O: out bit); end component; component AND2 port (I1, I2: in bit; ABN O: out bit); BN end component; component OR2 port (I1, I2: in bit; O: out bit); end component;
  • 17. Descripción Estructural o lógica Estamos usando 3 tipos begin de componentes: un -- instanciación de componentes inversor (declarado INV), U1: INV port map (A,AN); una compuerta AND de U2: INV port map (B,BN); dos entradas (declarada U3: AND2 port map (AN,B,ANB); AND2) y una compuerta U4: AND2 port map (A,BN,ABN); OR de dos entradas U5: OR2 port map (ANB,ABN,Y); (declarada OR2). end XOR1; Para la descripción de la función lógica XOR se emplearon dos instancias, U1 y U2 de INV; dos instancias U3 y U4 de AND2 y una instancias U5 de OR2.
  • 18. Descripción Estructural o lógica En la asociación nominal o component OR2 explícita se vuelve port (I1, I2: in bit; O: out bit); irrelevante el orden de los end component; parámetros, por cuanto dentro del paréntesis se begin indican explícitamente las ... señales que se conectan a - - asociación explícita los terminales de las U5: OR2 port map(O=>Y, I1=>ANB, componentes, mediante el I2=>ABN); símbolo => de asignación end XOR1;
  • 19. Descripción Estructural o lógica ENTITY XOR IS component AND2 PORT (A, B: IN BIT; port (I1, I2: in bit; Y: OUT BIT); O: out bit); END XOR; end component; component OR2 Architecture XOR1 of XOR is port (I1, I2: in bit; - declaración de señales O: out bit); signal AN, BN : bit; end component; signal ANB, ABN : bit; begin - declaración de componentes - instanciación de componentes U1: INV port map(A,AN); component INV U2: INV port map(B,BN); port (I: in bit; U3: AND2 port map(AN,B,ANB); O: out bit); U4: AND2 port map(A,BN,ABN); end component; U5: OR2 port map(ANB,ABN,Y); end XOR1; Evidentemente, el estilo estructural de la escritura de una arquitectura es extenso, incluso para circuitos relativamente pequeños, por lo que si el circuito es grande su escritura puede ser tediosa y propensa a cometer errores.
  • 20. Descripción Estructural o lógica Uno de los tipos de señales con que trabaja en VHDL es el arreglo de señales, tanto del tipo bit_vector, como del tipo std_logic_vector. Esto permite escribir de forma más compacta los diseños en VHDL. Ellos representan un arreglo de bits y se utilizan con dispositivos multiterminales.
  • 21. Descripción Estructural o lógica Ej: Realizar la descripción VHDL de tipo estructural de un decodificador de 2 entradas y 4 salidas, activadas con el nivel bajo, y una entrada de habilitación, también activa en el nivel bajo.
  • 22. Descripción Estructural o lógica Lo primero es realizar la architecture decod_a of decod2x4 is declaración de la entidad. La -- declaración de señales declaración de la arquitectura signal AN(1),AN(0), EN: bit; del decodificador, en su -- declaración de componentes primera parte, corresponde a la declaración de los component INV port (I: in bit; diferentes tipos de O: out bit); componentes. Se usan dos end component; tipos de componentes: INV, component NAND3 un inversor y NAND3, una port (I1, I2, I3: in bit; compuerta NAND de 3 O: out bit); end component; entradas.
  • 23. Descripción Estructural o lógica begin --instanciación de componentes En el cuerpo de la U1: INV port map (A(0),AN(0)); arquitectura se observa la U2: INV port map (A(1),AN(1)); instanciación de los 7 U3: INV port map (NEN,EN); componentes, los cuales U4: NAND3 port map (EN, AN(1), AN(0), NY(0)); son conectados usando la U5: NAND3 port map (EN, AN(1), A(0), NY(1)); cláusula port map con U6: NAND3 port map (EN, A(1), AN(0), NY(2)); asociación implícita. U7: NAND3 port map (EN, A(1), A(0), NY(3)); end decod_a;
  • 24. Descripción por flujo de datos o RTL En la descripción por flujo de datos, la arquitectura describe como fluyen las señales de entrada por el circuito hacia los terminales de salida. Este estilo de escritura de la arquitectura es llamada descripción de transferencia de registros RTL (Register Transfer Language).
  • 25. Descripción por flujo de datos o RTL Ejemplo: La arquitectura por descripción En la aproximación por flujo de de flujo de datos de una compuerta XOR de dos entradas es: datos se utilizan declaraciones architecture XOR2 of XOR is de asignación de señales, así begin como operadores lógicos que --asignación de señales no se emplean en el estilo de Y <= (not A and B) or (A and not B); escritura estructural. end XOR2; Los operadores lógicos que A tiene el VHDL en sus librerías B Y son: not, and, or, nand, nor, xor y xnor.
  • 26. Descripción por flujo de datos o RTL La forma de descripción de la arquitectura mediante la Ejemplo: La existencia del operador XOR aproximación por flujo de datos compacta extraordinariamente el cuerpo simplifica los diseños VHDL, pues de la arquitectura de la entity XOR los hace más compactos. Architecture XOR3 of XOR is Después de la palabra clave begin Begin se produce la asignación del flujo - asignación de señales de datos de las señales del miembro de la derecha hacia la Y <= A xor B; señal Y, del miembro de la End XOR3 izquierda (salida). El miembro de la derecha del operador de asignación <= se le conoce como expresión, cuyo valor se obtiene evaluándola completa.
  • 27. Descripción por flujo de datos o RTL El VHDL, como otros Lógicos: AND, OR, XOR, NOT, NAND, lenguajes de programación NOR y XNOR posee un conjunto de Aritméticos: +, -, * (multiplicación solo operadores que se usan con por 2) las señales o con las De relación: =, /=, <, >, <=, >= variables declaradas en sus De concatenación: & diseños.
  • 28. Descripción por flujo de datos o RTL La tabla presentada a Operadores Definidos para los tipos continuación contiene una clasificación de los operadores definidos en Bit, Boolean, Bit_vector, el lenguaje VHDL, así Lógicos: std_logic y std_logic_vector como los tipos de datos sobre los que se pueden De relación: Integer, Bit, y Bit_vector operar los mismos. Aritméticos: Integer Los operadores lógicos han sido extendidos al Concatenación: Bit, Bit_vector y para las cadenas uso en cualquier tipo de señal lógica, ya sea bit_vector, std_logic, o std_logic_vector.
  • 29. Descripción por flujo de datos o RTL Cuando los operadores lógicos se usan con los tipos de señales std_logic o bit, ellos poseen su significado usual. Un ejemplo de operaciones lógicas con el tipo de datos vector es el siguiente: Los valores '0' y '1' son valores constantes y deben estar ’’01100101’’xor’’10101101’’=’’11001000’’ encerrados entre apóstrofes. Cuando el tipo de señal usada es declarada std_logic_vector o bit_vector, entonces los valores deben estar encerrados entre comillas.
  • 30. Descripción por flujo de datos o RTL Ejemplo: Sean las siguientes Existe un operador interno del declaraciones: VHDL, que es el signo & y que Signal a: bit_vector(1 to 4); realiza la concatenación de señales o variables de distinta Signal b: bit_vector(1 to 8); “longitud”. b<=’’0000’’&a; En el ejemplo para concatenar la señal a, a la mitad de la derecha del vector b y no tener incongruencias en los resultados con vectores se realizan las asignaciones siguientes. El símbolo & añade el vector a (de 4 bits) al final de una secuencia de 4 ceros “0000” para realizar exitosamente la asignación al vector b, que fue declarado como un vector de 8 bits.
  • 31. Descripción por flujo de datos o RTL En el cuerpo de la arquitectura de un -- asignación de señales diseño VHDL por RTL se usan, Nombre de la señal<=expresion; sentencias concurrentes de asignación -- asignación condicional de señales de señales, cuyo formato se presenta Nombre de la señal<=expresión a continuación. when expresión booleana else En una descripción RTL, el valor de la Nombre de la señal<=expresión expresión del miembro de la derecha when expresión booleana else de la asignación de señales ( <= ), se … lo transfiere al nombre de la señal del Nombre de la señal<=expresión miembro de la izquierda. when expresión booleana else Expresión; Ambos miembros deben ser del mismo tipo, para que no existan incompatibilidades.
  • 32. Descripción por flujo de datos o RTL Ejemplo 8: Entity comp is Realice una descripción en VHDL de Port (a, b: in bit_vector (3 downto 0); la arquitectura de un comparador E: out bit); de dos entradas, a y b, de 4 bits End comp; cada una y una salida E de 1 bit. Architecture comparador_1 of comp is En esta arquitectura se describe cómo los datos se mueven desde Begin los terminales de entrada, de señal --asignación de señales en señal, hasta la salida. E<= not(a(0)xorb(0)) Se necesita del conocimiento del and not(a(1)xorb(1)) circuito lógico del comparador, del and not(a(2)xorb(2)) cual obtener la función E de salida: and not(a(3)xorb(3)) end comparador_1; E=(a0⊕b0)(a1⊕b1)(a2⊕b2)(a3⊕b3)
  • 33. Descripción por flujo de datos o RTL Library ieee; Ejemplo 8: Use ieee.std_logic_1164.all; Realice una descripción en VHDL de la arquitectura de Entity comp is un comparador de dos Port (a, b: in bit_vector(3 downto 0); entradas, a y b, de 4 bits E: out bit); cada una y una salida E de 1 End comp; bit. Architecture comparador_2 of comp is Otra solución más compacta Begin se puede construir usando la --asignación de señales estructura when – else. Esta solución no necesita del E<=‘1’ when (a=b) else ‘0’; conocimiento del circuito lógico del comparador. end comparador_2;
  • 34. Descripción por flujo de datos o RTL En VHDL, cuando una señal cambia de valor se dice que se ha producido un evento. La existencia de eventos da lugar a otro evento (cambio de valores en las expresiones en los miembros de la derecha de los operadores de asignación). De esta manera se actualizan los valores de las señales. En el ejemplo anterior, un cambio en las entradas a o b, o en ambas provocará un cambio en la expresión. Este cambio es asignado a la señal de salida E, actualizando su valor. E <= '1' when (a=b) else '0';
  • 35. Descripción por flujo de datos o RTL Otro tipo de sentencia de asignación concurrente usada en la descripción por flujo de datos es la asignación --asignación de señal seleccionada de señal seleccionada, cuya sintaxis se expresa a continuación. Este tipo with expresión select de declaración de asignación utiliza la estructura with – select – when señal <= valor1 de la señal when alternativa 1, En esta estructura se evalúa la valor2 de la señal when alternativa 2, expresión que acompaña a la ... declaración with y cuando el valor valorn de la señal when alternativa n; coincide con una de las alternativas señaladas después de la palabra clave when, entonces el valor correspondiente a esta alternativa se lo asigna al nombre de la señal.
  • 36. Descripción por flujo de datos o RTL Las alternativas contenidas Valor de la señal when alternativa1 | después de la palabra clave when pueden ser varias o una alternativa2 | alternativa3 | ….. sola. Si son varias, las | alternativaN, alternativas deben ser todas Las barras verticales (|) tienen el distintas y cubrir todos los mismo significado que la operación OR posibles valores de éstas. Cuando el valor de la señal para varias alternativas es el mismo, pueden ser expresadas como una lista de valores separados por barras verticales ( | )
  • 37. Descripción por flujo de datos o RTL Cuando no se cubren todos los posibles valores de las --asignación de señal seleccionada alternativas, se debe usar la with expresión select palabra clave de VHDL others, con el último when señal <= valor1 de la señal when alternativa 1, en este tipo de asignación valor2 de la señal when alternativa 2, ... de señales. valorn de la señal when others; Este tipo de declaración de asignación utiliza la estructura with – select – when others
  • 38. Descripción por flujo de datos o RTL Ejemplo 9: Entity circuito is Escriba en VHDL una port (m: in integer range (31 downto 0); descripción de la T: out std_logic); siguiente función: End circuito; Architecture RTL of circuito is T(x,y,z,u,v) = Σ(0,4,18,19,22,23,25,29) + Begin φΣ (14,16,20,24) -- asignación de señal seleccionada With m select T <= ‘1’ when 0 | 4 | 18 | 19 | 22 | 23 |25 | 29, ‘-’ when 14 | 16 | 20 | 24, -- opcionales ‘0’ when others; end RTL;
  • 39. Descripción por flujo de datos o RTL Ejemplo 10: entity detector is port (N: in integer range (15 downto 0); Escriba en VHDL la P: out std_logic); end detector; descripción de un circuito combinacional, el cual recibe architecture num_par of detector is Begin en sus entradas los dígitos del -- asignación de señal seleccionada sistema decimal codificados with N select P <= ‘1’ when 0 | 2 | 4 | 6 | 8, en NBCD y tiene una salida P, ‘0’ when 1 | 3 | 5 | 7 | 9, que va a ‘1’ cuando se detecta ‘-’ when others; -- opcionales end num_par; en sus entradas un dígito par.
  • 40. Descripción por flujo de datos o RTL Ejemplo 11: Realizar la descripción por flujo de datos de un MUX 4 a 1.
  • 41. Descripción por flujo de datos o RTL architecture MUX1 of MUX is signal x: bit_vector(3 downto 0); Begin --asignación de señales X(3) <= S(1) and S(0) and D(3); X(2) <= S(1) and not S(0) and D(2); X(1) <= not S(1) and S(0) and D(1); X(0) <= not S(1) and not S(0) and D(0); F <= x(3) or x(2) or x(1) or x(0); end MUX1; La arquitectura basada en flujo de datos utilizando operadores lógicos necesita del circuito final de este MUX
  • 42. Descripción por flujo de datos o RTL Ejemplo 12: Otra solución usando architecture mux2 of mux is with – select. Como se observa, esta begin descripción de la arquitectura -- asignación de señal seleccionada es más simple que la anterior y no necesita del conocimiento with S select de la lógica interna del circuito. F <= D(0) when “00”, D(1) when “01”, D(2) when “10”, D(3) when “11”; end mux2
  • 43. Descripción por flujo de datos o RTL Ejemplo 13: Diseñe un buffer con tercer estado cuyo circuito se --file: ejemplo13.vhd muestra. library ieee; use ieee.std_logic_1164.all; entity ejemplo13 is port (EN_L, A: in std_logic; Y : out std_logic); end ejemplo13; architecture buffer of ejemplo13 is begin Y <= A when EN_L = ‘1’ else ‘Z’; end buffer;
  • 44. Descripción por flujo de datos o RTL Ejemplo 14: Diseñe un --file: ejemplo14.vhd library ieee; circuito que multiplique use ieee.std_logic_1164.all; dos números enteros use ieee.std_logic_unsigned.all; positivos de dos bits cada entity ejemplo14 is uno. Debe tener además port (EN_L: in bit; una entrada habilitadora A, B: in std_logic_vector(1 downto 0); P: out std_logic_vector(3 downto 0)); EN_L activa en nivel bajo, end ejemplo14; tal que la salida esté en architecture producto of ejemplo14 is un tercer estado de alta begin impedancia si EN_L = H with EN_L select P <= A*B when ‘1’, ’’ZZZZ’’ when ‘0’; end producto;
  • 45. Descripción por flujo de datos o RTL Ejemplo 15: library ieee; use ieee.std_logic_1164.all; Empaquetar el diseño del buffer con tercer PACKAGE bufferPCK is estado cuyo circuito se component ejemplo13 port( EN_L, A: in std_logic; muestra en la figura. Y: out std_logic); end component; end bufferPCK; File: bufferPCK.vhd
  • 46. Sentencias Concurrentes Introducción Las sentencias concurrentes son aquellas que se ejecutan simultáneamente en la simulación. Se utilizan para el modelado del hardware, deben formar parte siempre del cuerpo de arquitecturas o de bloques y son las siguientes: Procesos Asignaciones concurrentes a señal Llamadas concurrentes o procedimientos Instanciaciones de componentes
  • 47. Sentencia when - else Permite realizar asignaciones condicionales de valores, expresiones u objetos o señales. Su sintaxis de declaración es: [etiqueta:] señal <= valor_1 when condición_1 else valor_2 [when condición_2] [else … ] [else valor_n when condición_n] [else unaffected]; La señal recibe una asignación u otra (valor_1…valor_n) en función de las condiciones que aparecen tras when. Para la opción de no asignación puede (no cambio en la función) utilizarse la keyword unaffected
  • 48. Ejemplo de sentencia when - else Modelo de un sumador de un bit con retención de la suma entity SUMADOR is: port(A, B: in bit; ENABLE: in bit ; SUMA: out bit_vector (1 downto 0)); end SUMADOR; architecture CON_WHEN of SUMADOR is begin SUMA <= “00”when (A=‘0’ and B= ‘0’ and ENABLE = ‘1’) else “01”when (A=‘1’ and B= ‘0’ and ENABLE = ‘1’) else “01”when (A=‘0’ and B= ‘1’ and ENABLE = ‘1’) else “10”when (A=‘1’ and B= ‘1’ and ENABLE = ‘1’) else unaffected; end CON_WHEN
  • 49. Sentencia with-select Su sintaxis es la siguiente: [etiqueta:] with expresión select señal <= valor_1 when resultado_1[, valor_2 when resultado_2] [, ……..] [, valor_n when resultado_n] [, unaffected when others]; El valor asignado depende de la evaluación de la expresión que aparece entre las palabras reservadas with y select. El resultado se compara con los valores tras when y se ejecuta la asignación que resulta verdadera.
  • 50. Ejemplo de sentencia with-select El sumador anterior puede ser descrito también del siguiente modo: architecture CON_WITH_SELECT of SUMADOR is begin with (ENABLE & A & B ) select SUMA <= “00” when “100”, “01” when “101”, “01” when “110”, “10” when “111”, unaffected when others; end CON_WITH_SELECT;
  • 51. Sentencias Secuenciales Introducción Las sentencias secuenciales son aquellas que solamente pueden aparecer dentro de procesos y subprogramas. Se ejecutan ordenadamente, de tal manera que el simulador finaliza completamente una sentencia antes de pasar a la siguiente. Todo lo contrario de lo que ocurre en las sentencias concurrentes en donde no importa el orden.
  • 52. Sentencia wait Es una de las más utilizadas en el modelado de circuitos síncronos, wait detiene la ejecución de un proceso o un procedimiento en espera de que se satisfaga una determinada condición. Su sintaxis es la siguiente: [etiqueta:] wait [on señal_1, señal_2,…..] [until condición] [for expresión_temporal]; Por tanto puede haber tres tipos de argumentos de ellos, o bien ninguno. En este último caso el proceso queda detenido hasta el final de la simulación.
  • 53. Sentencia Wait on Wait on produce el mismo efecto que la lista de sensibilidad de un proceso. Por ejemplo: PROCESO_1: process(A,B) begin … end process PROCESO_1; PROCESO_2: process begin … wait on A,B; end process PROCESO_2
  • 54. Case - when La sentencia case-when permite seleccionar una entre varias alternativas excluyentes entre sí de una expresión determinada, su sintaxis general es la siguiente: [etiqueta:] case expresión is when caso_1[ caso_2 ……] => sentencias secuenciales .... end case [etiqueta]; De este modo una arquitectura alternativa para el mismo sumador anterior podría ser como se muestra a continuación.
  • 55. Ejemplo de Case-When architecture CON_CASE of SUMADOR is begin process variable X: bit_vector(2 downto 0); begin X<= ENABLE & A & B; case X is when “100”=> SUMA <=“00”; when “101”| “110” => SUMA <=“01”; when “111” => SUMA <= “10”; when others => null; end case; end process; end CON_CASE
  • 56. Bucles Para la ejecución de bucles en VHDL se utiliza la palabra reservada loop. Existen tres formas de definir un bucle: - Con for-loop siempre se hace referencia a un bucle finito, -Con while-loop a uno finito o infinito (depende de la condición) y -Con simplemente loop a uno infinito A continuación analizaremos estas tres opciones.
  • 57. For - Loop Esta sentencia causa la ejecución de un bucle un numero fijo de veces, su sintaxis es la siguiente: [etiqueta:] for indice in rango loop sentencias secuenciales end loop [etiqueta]; Es necesaria las indicaciones de un índice y un rango. El índice es una variable discreta, enumerada o entera, que no es preciso declarar y que cambia su valor en una unidad por cada ejecución del bucle a lo largo del rango especificado.
  • 58. Ejemplo For-loop Contar el numero de unos de una señal binaria de 32 bits. …. for I in 0 to 31 loop if SENAL (I)=‘1’ then NUMERO_UNOS:= NUMERO_UNOS+1; end if; end loop; ….
  • 59. While - Loop El siguiente tipo de bucle utiliza la palabra reservada while para imponer la condición de repetición. Su sintaxis es la siguiente: [etiqueta:] while condición loop sentencias secuenciales end loop [etiqueta]; El bucle se repite en tanto que la condición que aparece tras while sea verdadera.
  • 60. Ejemplo While-loop …. I:=0; while (I>32) loop if SEÑAL (I)=‘1’ then NUMERO_UNOS:= NUMERO_UNOS+1; end if I:= I+1; end loop; .... Ahora si se nesecita declarar una variable (I) para poder establecer la condición del bucle, no resulta ventajosa con respecto a for loop.
  • 61. Loop Ejecuta un bucle infinito y su sintaxis es así: [etiqueta:] loop sentencias secuenciales end loop [etiqueta];