Upload
barto
View
1.646
Download
2
Tags:
Embed Size (px)
Citation preview
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 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.
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.
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
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
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.
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>;
Tipos de datos
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;
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 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;
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ó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;
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;
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
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
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;
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;
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;
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 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;
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;
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).
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
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
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: &
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
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’’
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;
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;
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;
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;
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 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;
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,
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;
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;
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;
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
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;
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
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;
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;
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
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
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
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
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.
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;
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.
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: processbegin
…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 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.
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
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 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.
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 loopsentencias 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) 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.
Loop
Ejecuta un bucle infinito y su sintaxis es así:
[etiqueta:] loopsentencias secuenciales
end loop [etiqueta];