61
Capítulo 3: Lenguaje de Descripción del Hardware (VHDL) SISTEMAS DIGITALES I

Sd3

  • Upload
    barto

  • View
    1.646

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Sd3

Capítulo 3: Lenguaje de Descripción del Hardware (VHDL)

SISTEMAS DIGITALES I

Page 2: Sd3

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 HighSpeed 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 Std1076-1993 que es la que se encuentra vigente.

Page 3: Sd3

VHDLTrabaja 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.

Page 4: Sd3

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.

Bloque 1

Bloque 3Bloque 2

Bloque 4

arquitectura 1

Arquitectura 3arquitectura 2

arquitectura 4

entidad 1

entidad 2 entidad 3

entidad 4

Page 5: Sd3

Ejemplo de entidad y arquitectura

ENTITY nand2 ISPORT(I1,I2: IN BIT;

O : OUT BIT);END nand2;

ARCHITECTURE C1 OF nand2 ISBEGIN

O<=NOT(I1 AND I2)END C1;

Adicionalmente el archivo de texto creado se graba con extensión vhd. Para nuestro ejemplo: nand2.vhd

BF

A

Page 6: Sd3

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 BidireccionalTipo: BIT, STD_LOGGIC, STD_LOGIC_VECTORDespués se lista la arquitectura.

Page 7: Sd3

Estructura Básica de un programa VHDL.

LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;

ENTITY <nombre_entidad> ISPORT(<nombre_pin>: <modo><tipo>;

<nombre_pin>: <modo><tipo>);END <nombre_entidad>;

ARCHITECTURE <nombre_arquitectura> OF <nombre_entidad> ISBEGIN

<sentencia>; <comentario><sentencia>; <comentario>

END <nombre_arquitectura>;

Page 8: Sd3

Tipos de datos

Page 9: Sd3

Ejemplos de tipos de datosBIT: 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;

Page 10: Sd3

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”

Page 11: Sd3

Estructura de un programa escrito en VHDL

En VHDL una arquitectura tiene dos partes: La región de las declaraciones y el cuerpo de la arquitectura.La región de declaraciones precede la palabra clave BEGIN. Puede ser usada para declarar señales, variables y constantes. También puede ser usada para declarar componentes y especificar atributos.

{Enunciado concurrente}

ARCHITECTURE nombre_arq OF nombre_ent IS

[Declaración de señales][Declaración de tipos][Declaración de variables][Declaración de constantes][Declaración de componentes][Especificación de atributos]

BEGIN

{Instanciación de componentes}

{Enunciado secuencial [Proceso]}

END nombre_arq;

Page 12: Sd3

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).

Page 13: Sd3

Descripción Estructural o lógicaEn la descripción estructural el cuerpo de la arquitectura se transforma en una descripción exacta del esquema lógico.Para la descripción estructural el VHDL se apoya en las declaraciones de componentesLa cantidad de declaraciones de componentes debe de corresponder con 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.

component nombre_componente

port (señales_entrada: modo tipo;

señales_salida: modo tipo);

end component;

Page 14: Sd3

Descripción Estructural o lógica

En la sección de declaraciones de la arquitectura (región ubicada entre la palabra reservada architecture y la palabra begin) puede existir la necesidad de realizar algunas declaraciones de señales internas, las cuales intervienen en la descripción del circuito, pero que no tienen acceso a los terminales externos del diseño (no están declaradas en la entidad.Aparecen en mayúsculas las palabras reservadas del lenguaje VHDL para resaltarlas, pero no es necesario ya que el VHDL no es sensible al tipo de letra

ARCHITECTURE nombre_arq OF nombre_ent IS

[Declaración de tipos][Declaración de señales][Declaración de variables][Declaración de constantes][Declaración de componentes][Especificación de atributos]

BEGIN

Instanciación de componentes

. . . Instanciación de componentes

END nombre_arq;

Page 15: Sd3

Descripción Estructural o lógica

Ej: Realizar la descripción en VHDL de tipo estructural de la operación EXORY = AB + AB

ENTITY XOR ISPORT (A,B: IN BIT;

Y: OUT BIT);END XOR;

A

B Y

Page 16: Sd3

Descripción Estructural o lógicaLa arquitectura puede ser la siguiente:

Architecture XOR1 of XOR is- - declaración de señalessignal AN, BN : bit;signal ANB, ABN : bit;- - declaración de componentescomponent INV

port (I: in bit;O: out bit);

end component;component AND2

port (I1, I2: in bit;O: out bit);

end component;component OR2

port (I1, I2: in bit;O: out bit);

end component;

A

B Y

AN

BN

ANB

ABN

Page 17: Sd3

Descripción Estructural o lógicaEstamos usando 3 tipos de componentes: un inversor (declarado INV), una compuerta AND de dos entradas (declarada AND2) y una compuerta OR de dos entradas (declarada OR2).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.

begin-- instanciación de componentesU1: INV port map (A,AN);U2: INV port map (B,BN);U3: AND2 port map (AN,B,ANB);U4: AND2 port map (A,BN,ABN);U5: OR2 port map (ANB,ABN,Y);end XOR1;

Page 18: Sd3

Descripción Estructural o lógica

En la asociación nominal o explícita se vuelve irrelevante el orden de los parámetros, por cuanto dentro del paréntesis se indican explícitamente las señales que se conectan a los terminales de las componentes, mediante el símbolo => de asignación

component OR2port (I1, I2: in bit;

O: out bit); end component;

begin

. . .- - asociación explícita

U5: OR2 port map(O=>Y, I1=>ANB, I2=>ABN);

end XOR1;

Page 19: Sd3

Descripción Estructural o lógica

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.

ENTITY XOR ISPORT (A, B: IN BIT;

Y: OUT BIT);END XOR;

Architecture XOR1 of XOR is- declaración de señalessignal AN, BN : bit;signal ANB, ABN : bit;- declaración de componentes

component INVport (I: in bit;

O: out bit);end component;

component AND2port (I1, I2: in bit;

O: out bit); end component;component OR2

port (I1, I2: in bit;O: out bit);

end component;begin- instanciación de componentesU1: INV port map(A,AN);U2: INV port map(B,BN);U3: AND2 port map(AN,B,ANB);U4: AND2 port map(A,BN,ABN);U5: OR2 port map(ANB,ABN,Y);end XOR1;

Page 20: Sd3

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.

Page 21: Sd3

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.

Page 22: Sd3

Descripción Estructural o lógica

Lo primero es realizar la declaración de la entidad. La declaración de la arquitectura del decodificador, en su primera parte, corresponde a la declaración de los diferentes tipos de componentes. Se usan dos tipos de componentes: INV, un inversor y NAND3, una compuerta NAND de 3 entradas.

architecture decod_a of decod2x4 is

-- declaración de señalessignal AN(1),AN(0), EN: bit;

-- declaración de componentes

component INVport (I: in bit;

O: out bit);end component;

component NAND3port (I1, I2, I3: in bit;

O: out bit); end component;

Page 23: Sd3

Descripción Estructural o lógica

En el cuerpo de la arquitectura se observa la instanciación de los 7 componentes, los cuales son conectados usando la cláusula port map con asociación implícita.

begin

--instanciación de componentes

U1: INV port map (A(0),AN(0));

U2: INV port map (A(1),AN(1));

U3: INV port map (NEN,EN);

U4: NAND3 port map (EN, AN(1), AN(0), NY(0));

U5: NAND3 port map (EN, AN(1), A(0), NY(1));

U6: NAND3 port map (EN, A(1), AN(0), NY(2));

U7: NAND3 port map (EN, A(1), A(0), NY(3));

end decod_a;

Page 24: Sd3

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 (RegisterTransfer Language).

Page 25: Sd3

Descripción por flujo de datos o RTL

En la aproximación por flujo de datos se utilizan declaraciones de asignación de señales, asícomo operadores lógicos que no se emplean en el estilo de escritura estructural.Los operadores lógicos que tiene el VHDL en sus librerías son: not, and, or, nand, nor, xor y xnor.

Ejemplo: La arquitectura por descripción de flujo de datos de una compuerta XOR de dos entradas es:

architecture XOR2 of XOR is

begin

--asignación de señales

Y <= (not A and B) or (A and not B);

end XOR2;

A

B Y

Page 26: Sd3

Descripción por flujo de datos o RTL

La forma de descripción de la arquitectura mediante la aproximación por flujo de datos simplifica los diseños VHDL, pues los hace más compactos.Después de la palabra clave beginse produce la asignación del flujo de datos de las señales del miembro de la derecha hacia la señal Y, del miembro de la 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.

Ejemplo: La existencia del operador XOR compacta extraordinariamente el cuerpo de la arquitectura de la entity XOR

Architecture XOR3 of XOR is

Begin

- asignación de señales

Y <= A xor B;

End XOR3

Page 27: Sd3

Descripción por flujo de datos o RTL

El VHDL, como otros lenguajes de programación posee un conjunto de operadores que se usan con las señales o con las variables declaradas en sus diseños.

Lógicos: AND, OR, XOR, NOT, NAND,NOR y XNOR

Aritméticos: +, -, * (multiplicación solopor 2)

De relación: =, /=, <, >, <=, >=

De concatenación: &

Page 28: Sd3

Descripción por flujo de datos o RTL

La tabla presentada a continuación contiene una clasificación de los operadores definidos en el lenguaje VHDL, asícomo los tipos de datos sobre los que se pueden operar los mismos.Los operadores lógicos han sido extendidos al uso en cualquier tipo de señal lógica, ya sea bit_vector, std_logic, o std_logic_vector.

Definidos para los tipos

Bit, Boolean, Bit_vector, std_logic y std_logic_vector

Integer, Bit, y Bit_vector

Integer

Bit, Bit_vector y para lascadenas

Lógicos:

De relación:

Aritméticos:

Concatenación:

Operadores

Page 29: Sd3

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. Los valores '0' y '1' son valores constantes y deben estar encerrados entre apóstrofes.

Un ejemplo de operaciones lógicas con el tipo de datos vector es el siguiente:

Cuando el tipo de señal usada es declarada std_logic_vectoro bit_vector, entonces los valores deben estar encerrados entre comillas.

’’01100101’’xor’’10101101’’=’’11001000’’

Page 30: Sd3

Descripción por flujo de datos o RTL

Existe un operador interno del VHDL, que es el signo & y que realiza la concatenación de señales o variables de distinta “longitud”.

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.

Ejemplo: Sean las siguientes declaraciones:

Signal a: bit_vector(1 to 4);

Signal b: bit_vector(1 to 8);

b<=’’0000’’&a;

Page 31: Sd3

Descripción por flujo de datos o RTL

En el cuerpo de la arquitectura de un diseño VHDL por RTL se usan, sentencias concurrentes de asignación de señales, cuyo formato se presenta a continuación.En una descripción RTL, el valor de la expresión del miembro de la derecha de la asignación de señales ( <= ), se lo transfiere al nombre de la señal del miembro de la izquierda.Ambos miembros deben ser del mismo tipo, para que no existan incompatibilidades.

-- asignación de señalesNombre de la señal<=expresion;

-- asignación condicional de señalesNombre de la señal<=expresiónwhen expresión booleana elseNombre de la señal<=expresiónwhen expresión booleana else…Nombre de la señal<=expresiónwhen expresión booleana elseExpresión;

Page 32: Sd3

Descripción por flujo de datos o RTL

Ejemplo 8:Realice una descripción en VHDL de la arquitectura de un comparador de dos entradas, a y b, de 4 bits cada una y una salida E de 1 bit.En esta arquitectura se describe cómo los datos se mueven desde los terminales de entrada, de señal en señal, hasta la salida. Se necesita del conocimiento del circuito lógico del comparador, del cual obtener la función E de salida:

E=(a0⊕b0)(a1⊕b1)(a2⊕b2)(a3⊕b3)

Entity comp isPort (a, b: in bit_vector (3 downto 0);

E: out bit);End comp;

Architecture comparador_1 of comp is

Begin

--asignación de señales

E<= not(a(0)xorb(0))and not(a(1)xorb(1))and not(a(2)xorb(2))and not(a(3)xorb(3))

end comparador_1;

Page 33: Sd3

Descripción por flujo de datos o RTL

Ejemplo 8:Realice una descripción en VHDL de la arquitectura de un comparador de dos entradas, a y b, de 4 bits cada una y una salida E de 1 bit.Otra solución más compacta se puede construir usando la estructura when – else. Esta solución no necesita del conocimiento del circuito lógico del comparador.

Library ieee;Use ieee.std_logic_1164.all;

Entity comp isPort (a, b: in bit_vector(3 downto 0);

E: out bit);End comp;

Architecture comparador_2 of comp isBegin--asignación de señales

E<=‘1’ when (a=b) else ‘0’;

end comparador_2;

Page 34: Sd3

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';

Page 35: Sd3

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 de señal seleccionada, cuya sintaxis se expresa a continuación. Este tipo de declaración de asignación utiliza la estructura with – select – whenEn esta estructura se evalúa la expresión que acompaña a la declaración with y cuando el valor 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.

--asignación de señal seleccionada

with expresión select

señal <= valor1 de la señal when alternativa 1,valor2 de la señal when alternativa 2,

. . .valorn de la señal when alternativa n;

Page 36: Sd3

Descripción por flujo de datos o RTL

Las alternativas contenidas después de la palabra clave when pueden ser varias o una sola. Si son varias, las alternativas deben ser todas distintas y cubrir todos los 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 ( | )

Las barras verticales (|) tienen el mismo significado que la operación OR

Valor de la señal when alternativa1 |

alternativa2 | alternativa3 | …..

| alternativaN,

Page 37: Sd3

Descripción por flujo de datos o RTL

Cuando no se cubren todos los posibles valores de las alternativas, se debe usar la palabra clave de VHDL others, con el último whenen este tipo de asignación de señales.Este tipo de declaración de asignación utiliza la estructura with – select –when others

--asignación de señal seleccionada

with expresión select

señal <= valor1 de la señal when alternativa 1,valor2 de la señal when alternativa 2,

. . .valorn de la señal when others;

Page 38: Sd3

Descripción por flujo de datos o RTL

Ejemplo 9:Escriba en VHDL una descripción de la siguiente función:

T(x,y,z,u,v) = Σ(0,4,18,19,22,23,25,29) + φΣ (14,16,20,24)

Entity circuito is

port (m: in integer range (31 downto 0);

T: out std_logic);

End circuito;

Architecture RTL of circuito is

Begin

-- 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;

Page 39: Sd3

Descripción por flujo de datos o RTL

Ejemplo 10:Escriba en VHDL la descripción de un circuito combinacional, el cual recibe en sus entradas los dígitos del sistema decimal codificados en NBCD y tiene una salida P, que va a ‘1’ cuando se detecta en sus entradas un dígito par.

entity detector isport (N: in integer range (15 downto 0);

P: out std_logic);end detector;

architecture num_par of detector isBegin-- asignación de señal seleccionadawith N selectP <= ‘1’ when 0 | 2 | 4 | 6 | 8,

‘0’ when 1 | 3 | 5 | 7 | 9,‘-’ when others; -- opcionales

end num_par;

Page 40: Sd3

Descripción por flujo de datos o RTL

Ejemplo 11:Realizar la descripción por flujo de datos de un MUX 4 a 1.

Page 41: Sd3

Descripción por flujo de datos o RTL

La arquitectura basada en flujo de datos utilizando operadores lógicos necesita del circuito final de este MUX

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;

Page 42: Sd3

Descripción por flujo de datos o RTL

Ejemplo 12: Otra solución usando with – select.Como se observa, esta descripción de la arquitectura es más simple que la anterior y no necesita del conocimiento de la lógica interna del circuito.

architecture mux2 of mux is

begin

-- asignación de señal seleccionada

with S selectF <= D(0) when “00”,

D(1) when “01”,D(2) when “10”,D(3) when “11”;

end mux2

Page 43: Sd3

Descripción por flujo de datos o RTL

Ejemplo 13: Diseñe un buffer con tercer estado cuyo circuito se muestra.

--file: ejemplo13.vhdlibrary ieee;use ieee.std_logic_1164.all;

entity ejemplo13 isport (EN_L, A: in std_logic;

Y : out std_logic);end ejemplo13;

architecture buffer of ejemplo13 isbeginY <= A when EN_L = ‘1’ else ‘Z’;end buffer;

Page 44: Sd3

Descripción por flujo de datos o RTL

Ejemplo 14: Diseñe un circuito que multiplique dos números enteros positivos de dos bits cada uno. Debe tener además una entrada habilitadora EN_L activa en nivel bajo, tal que la salida esté en un tercer estado de alta impedancia si EN_L = H

--file: ejemplo14.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity ejemplo14 isport (EN_L: in bit;

A, B: in std_logic_vector(1 downto 0); P: out std_logic_vector(3 downto 0));

end ejemplo14;

architecture producto of ejemplo14 isbeginwith EN_L select

P <= A*B when ‘1’,’’ZZZZ’’ when ‘0’;

end producto;

Page 45: Sd3

Descripción por flujo de datos o RTL

Ejemplo 15: Empaquetar el diseño del buffer con tercer estado cuyo circuito se muestra en la figura.

library ieee;use ieee.std_logic_1164.all;

PACKAGE bufferPCK is

component ejemplo13port( EN_L, A: in std_logic;

Y: out std_logic);end component;

end bufferPCK;

File: bufferPCK.vhd

Page 46: Sd3

Sentencias Concurrentes

IntroducciónLas 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:ProcesosAsignaciones concurrentes a señalLlamadas concurrentes o procedimientosInstanciaciones de componentes

Page 47: Sd3

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 elsevalor_2 [when condición_2] [else… ] [elsevalor_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

Page 48: Sd3

Ejemplo de sentencia when - else

Modelo de un sumador de un bit con retención de la sumaentity SUMADOR is:

port(A, B: in bit; ENABLE: in bit ; SUMA: out bit_vector (1 downto 0));

end SUMADOR;architecture CON_WHEN of SUMADOR isbegin

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’) elseunaffected;

end CON_WHEN

Page 49: Sd3

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 conlos valores tras when y se ejecuta la asignación que resulta verdadera.

Page 50: Sd3

Ejemplo de sentencia with-select

El sumador anterior puede ser descrito también del siguiente modo:

architecture CON_WITH_SELECT of SUMADOR isbegin

with (ENABLE & A & B ) selectSUMA <= “00” when “100”,

“01” when “101”,“01” when “110”,“10” when “111”,

unaffected when others;end CON_WITH_SELECT;

Page 51: Sd3

Sentencias Secuenciales

IntroducciónLas 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.

Page 52: Sd3

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.

Page 53: Sd3

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: processbegin

…wait on A,B;

end process PROCESO_2

Page 54: Sd3

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 iswhen 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.

Page 55: Sd3

Ejemplo de Case-When

architecture CON_CASE of SUMADOR isbegin

processvariable X: bit_vector(2 downto 0);

beginX<= 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

Page 56: Sd3

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.

Page 57: Sd3

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 loopsentencias 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.

Page 58: Sd3

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;….

Page 59: Sd3

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 loopsentencias secuenciales

end loop [etiqueta];

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

Page 60: Sd3

Ejemplo While-loop

….I:=0;

while (I>32) loopif SEÑAL (I)=‘1’ then NUMERO_UNOS:= NUMERO_UNOS+1;end ifI:= 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.

Page 61: Sd3

Loop

Ejecuta un bucle infinito y su sintaxis es así:

[etiqueta:] loopsentencias secuenciales

end loop [etiqueta];