- Bloques combinacionales Eduardo Rodríguez Martínez Departamento de Electrónica División de Ciencias Básicas e Ingeniería Universidad Autónoma Metropolitana Unidad Azcapotzalco Email: erm@correo.azc.uam.mx Sitio Web: http://kali.azc.uam.mx/erm/ 1121037 Diseño Lógico page 1
- Bloques combinacionales - (7.5 hrs.) 1. Diseño de circuitos combinacionales con bloques lógicos. 1.1. 1.2. 1.3. 1.4 Demultiplexores. 1.5 Sumador y unidades lógico aritméticas. 1.6. 2. VHDL para circuitos y bloques combinacionales de mediana complejidad. 2.1 Sentencia process e instructions secuenciales: if... then... else, case, and loop. 2.2 Paquetes aritméticos y operadores sobrecargados: Paquetes IEEE 1164, Numeric. Tipos std logic, std logic vector, signed y unsigned. Funciones de conversión entre tipos. Operador de concatenación. 1121037 Diseño Lógico page 2
- Bloques combinacionales - (7.5 hrs.) 1. Diseño de circuitos combinacionales con bloques lógicos. 1.1. 1.2. 1.3. 1.4 Demultiplexores. 1.5 Sumador y unidades lógico aritméticas. 1.6. 2. VHDL para circuitos y bloques combinacionales de mediana complejidad. 2.1 Sentencia process e instructions secuenciales: if... then... else, case, and loop. 2.2 Paquetes aritméticos y operadores sobrecargados: Paquetes IEEE 1164, Numeric. Tipos std logic, std logic vector, signed y unsigned. Funciones de conversión entre tipos. Operador de concatenación. 1121037 Diseño Lógico page 2
Bloques Lógicos. Multiplexor 2 a 1 Multiplexor 4 a 1 Bloques combinacionales page 3
Bloques Lógicos. Mux 4 a 1 implemetado con Mux 2 a 1 Mux 16 a 1 implementado con Mux 4 a 1 Bloques combinacionales page 4
Bloques Lógicos. OR Exclusiva Implementación de funciones usando multiplexores Operación mayorante u operador mediano Bloques combinacionales page 5
Bloques Lógicos. Ejemplo.- Implemente la función f = x 1 x 2 x 4 +x 1 x 2 x 3 + x 1 x 2 x 4 con un MUX de 8 a 1 (3 variables). f = m(2,3,6,8,11,12) I 0 I 1 I 2 I 3 I 4 I 5 I 6 I 7 x 4 m 0 m 1 m 2 m 3 m 4 m 5 m 6 m 7 x 4 m 8 m 9 m 10 m 11 m 12 m 13 m 14 m 15 f I 0 I 1 I 2 I 3 I 4 I 5 I 6 I 7 x 4 0 0 1 1 0 0 1 0 x 4 1 0 0 1 1 0 0 0 f x 4 0 x 4 1 x 4 0 x 4 0 Bloques combinacionales page 6
Bloques Lógicos. Teorema de expansión de Shannon. Cualquier función booleana f(x 1,...,x n ) puede escribirse en la forma: f(x 1,x 2,...,x n ) = x 1 f(0,x 2,...,x n )+x 1 f(1,x 2,...,x n ) donde el término f(0,x 2,...,x n ) se conoce como cofactor de f con respecto a x 1, y se denota como f x1 ; similarmente, el término f(1,x 2,...,x n ) se conoce como cofactor de f con respecto a x 1 y se denota como f x1. En general si la expansión se realiza con respecto de la variable x i, f xi denota el cofactor f(x 1,...,x i 1,1,x i+1,...,x n ), y la expansión se reduce a: f(x 1,...,x n ) = x i f xi +x i f xi Bloques combinacionales page 7
Bloques Lógicos. Ejemplo.- Considere la función mayorante en su forma de suma de productos: f(x 1,x 2,x 3 ) = x 1 x 2 +x 1 x 3 +x 2 x 3 = x 1 (0 x 2 +0 x 3 +x 2 x 3 )+x 1 (1 x 2 +1 x 3 +x 2 x 3 ) = x 1 (x 2 x 3 )+x 1 (x 2 +x 3 ) Ejemplo.- Considere la función XOR de tres entradas: f = x 1 x 2 x 3 = x 1 (x 2 x 3 )+x 1 (x 2 x 3 ) Bloques combinacionales page 8
Bloques Lógicos. Ejemplo.- Obtenga la implementación con multiplexores de la siguiente función usando la expansión de Shannon para cada una de las variables. f = x 1 x 3 +x 2 x 3 Bloques combinacionales page 9
Bloques Lógicos. Ejemplo.- Obtenga la implementación con multiplexores de la siguiente función usando la expansión de Shannon para cada una de las variables. Usando x 1 : f = x 1 x 3 +x 2 x 3 Usando x 3 : f = x 1 f x1 +x 1 f x1 f = x 3 f x3 +x 3 f x3 = x 3 (x 2 )+x 3 ( x 1 ) Bloques combinacionales page 9
Bloques Lógicos. Ejemplo.- Obtenga la implementación con multiplexores de la siguiente función usando la expansión de Shannon para cada una de las variables. Usando x 1 : f = x 1 x 3 +x 2 x 3 Usando x 3 : f = x 1 f x1 +x 1 f x1 = x 1 (x 3 +x 2 )+x 1 (x 2 x 3 ) f = x 3 f x3 +x 3 f x3 = x 3 (x 2 )+x 3 ( x 1 ) Bloques combinacionales page 9
Bloques Lógicos. Ejemplo.- Obtenga la implementación con multiplexores de la siguiente función usando la expansión de Shannon para cada una de las variables. Usando x 1 : f = x 1 x 3 +x 2 x 3 Usando x 3 : f = x 1 f x1 +x 1 f x1 = x 1 (x 3 +x 2 )+x 1 (x 2 x 3 ) f = x 3 f x3 +x 3 f x3 = x 3 (x 2 )+x 3 ( x 1 ) Usando x 2 : f = x 2 f x2 +x 2 f x2 Bloques combinacionales page 9
Bloques Lógicos. Ejemplo.- Obtenga la implementación con multiplexores de la siguiente función usando la expansión de Shannon para cada una de las variables. Usando x 1 : f = x 1 x 3 +x 2 x 3 Usando x 3 : f = x 1 f x1 +x 1 f x1 = x 1 (x 3 +x 2 )+x 1 (x 2 x 3 ) f = x 3 f x3 +x 3 f x3 = x 3 (x 2 )+x 3 ( x 1 ) Usando x 2 : f = x 2 f x2 +x 2 f x2 = x 2 ( x 1 x 3 )+x 2 ( x 1 + x 3 ) Bloques combinacionales page 9
Bloques Lógicos. Ejemplo.- Obtenga la implementación con multiplexores de la siguiente función usando la expansión de Shannon para cada una de las variables. Usando x 1 : f = x 1 x 3 +x 2 x 3 Usando x 3 : f = x 1 f x1 +x 1 f x1 = x 1 (x 3 +x 2 )+x 1 (x 2 x 3 ) f = x 3 f x3 +x 3 f x3 Usando x 2 : f = x 2 f x2 +x 2 f x2 = x 2 ( x 1 x 3 )+x 2 ( x 1 + x 3 ) Bloques combinacionales page 9
Bloques Lógicos. Ejemplo.- Obtenga la implementación con multiplexores de la siguiente función usando la expansión de Shannon para cada una de las variables. Usando x 1 : f = x 1 x 3 +x 2 x 3 Usando x 3 : f = x 1 f x1 +x 1 f x1 = x 1 (x 3 +x 2 )+x 1 (x 2 x 3 ) f = x 3 f x3 +x 3 f x3 = x 3 (x 2 )+x 3 ( x 1 ) Usando x 2 : f = x 2 f x2 +x 2 f x2 = x 2 ( x 1 x 3 )+x 2 ( x 1 + x 3 ) Bloques combinacionales page 9
Bloques Lógicos. El teorema de expansión de Shannon puede usarse para factorizar mas de una variable al mismo tiempo. Por ejemplo, la expansión para dos variables se escribe como: f(x 1,...,x n ) = x 1 x 2 f(0,0,x 3,...,x n ) + x 1 x 2 f(0,1,x 3,...,x n ) +x 1 x 2 f(1,0,x 3,...,x n ) +x 1 x 2 f(1,1,x 3,...,x n ) Bloques combinacionales page 10
Bloques Lógicos. Símbolo genérico de un decodificador. Bloques combinacionales page 11
Bloques Lógicos. Símbolo genérico de un decodificador. Decodificador 2 a 4. Bloques combinacionales page 11
Bloques Lógicos. Símbolo genérico de un decodificador. Decodificador 2 a 4. Decodificador 3 a 8 implementado con decodificadores 2 a 4. Bloques combinacionales page 11
Bloques Lógicos. Principales aplicaciones de los decodificadores: Selección de una palabra de memoria. Control de un buffer triestado. Decodificador BCD a siete segmentos. Demultiplexor. Bloques combinacionales page 12
Bloques Lógicos. Se usan generalmente para reducir el número de bits con que se representa cierta información. Símbolo para un codificador binario de 2 n a n. Cuando se contempla mas de una entrada activa a la ves, se necesita dar prioridad a las entradas. Codificador binario con prioridad y 0 = i 1 +i 3 y 1 = i 2 +i 3 z = i 0 +i 1 +i 2 +i 3 Bloques combinacionales page 13
Bloques Lógicos. Se usan generalmente para reducir el número de bits con que se representa cierta información. Símbolo para un codificador binario de 2 n a n. Cuando se contempla mas de una entrada activa a la ves, se necesita dar prioridad a las entradas. Codificador binario con prioridad Codificador binario 4 a 2. y 0 = i 1 +i 3 y 1 = i 2 +i 3 z = i 0 +i 1 +i 2 +i 3 Bloques combinacionales page 13
Bloques Lógicos. Se usan generalmente para reducir el número de bits con que se representa cierta información. Símbolo para un codificador binario de 2 n a n. Cuando se contempla mas de una entrada activa a la ves, se necesita dar prioridad a las entradas. Codificador binario con prioridad Codificador binario 4 a 2. y 0 = i 1 +i 3 y 1 = i 2 +i 3 z = i 0 +i 1 +i 2 +i 3 Bloques combinacionales page 13
Bloques Lógicos. Considere dos números binarios A = [a 3 a 2 a 1 a 0 ] y B = [b 3 b 2 b 1 b 0 ] positivos. Diseñe un circuito con tres salidas AeqB, AgtB, y AltB que se activen cuando A = B, A > B, y A < B, respectivamente. Bloques combinacionales page 14
Bloques Lógicos. Considere dos números binarios A = [a 3 a 2 a 1 a 0 ] y B = [b 3 b 2 b 1 b 0 ] positivos. Diseñe un circuito con tres salidas AeqB, AgtB, y AltB que se activen cuando A = B, A > B, y A < B, respectivamente. Definamos un conjunto de señales intermedias i 3, i 2, i 1,e i 0. Bloques combinacionales page 14
Bloques Lógicos. Considere dos números binarios A = [a 3 a 2 a 1 a 0 ] y B = [b 3 b 2 b 1 b 0 ] positivos. Diseñe un circuito con tres salidas AeqB, AgtB, y AltB que se activen cuando A = B, A > B, y A < B, respectivamente. Definamos un conjunto de señales intermedias i 3, i 2, i 1,e i 0. Cada i k = 1 si los bits correspondientes de A y B son iguales (i.e. i k = a k b k. Bloques combinacionales page 14
Bloques Lógicos. Considere dos números binarios A = [a 3 a 2 a 1 a 0 ] y B = [b 3 b 2 b 1 b 0 ] positivos. Diseñe un circuito con tres salidas AeqB, AgtB, y AltB que se activen cuando A = B, A > B, y A < B, respectivamente. Definamos un conjunto de señales intermedias i 3, i 2, i 1,e i 0. Cada i k = 1 si los bits correspondientes de A y B son iguales (i.e. i k = a k b k. La salida AeqB queda definida como AeqB = i 3 i 2 i 1 i 0. Bloques combinacionales page 14
Bloques Lógicos. Considere dos números binarios A = [a 3 a 2 a 1 a 0 ] y B = [b 3 b 2 b 1 b 0 ] positivos. Diseñe un circuito con tres salidas AeqB, AgtB, y AltB que se activen cuando A = B, A > B, y A < B, respectivamente. Definamos un conjunto de señales intermedias i 3, i 2, i 1,e i 0. Cada i k = 1 si los bits correspondientes de A y B son iguales (i.e. i k = a k b k. La salida AeqB queda definida como AeqB = i 3 i 2 i 1 i 0. Comparando los bits de A y B de izquierda a derecha, podemos saber si A > B. Bloques combinacionales page 14
Bloques Lógicos. Considere dos números binarios A = [a 3 a 2 a 1 a 0 ] y B = [b 3 b 2 b 1 b 0 ] positivos. Diseñe un circuito con tres salidas AeqB, AgtB, y AltB que se activen cuando A = B, A > B, y A < B, respectivamente. Definamos un conjunto de señales intermedias i 3, i 2, i 1,e i 0. Cada i k = 1 si los bits correspondientes de A y B son iguales (i.e. i k = a k b k. La salida AeqB queda definida como AeqB = i 3 i 2 i 1 i 0. Comparando los bits de A y B de izquierda a derecha, podemos saber si A > B. La posicion k en la cual los bits a k y b k difieren determina que A > B si a k = 1 y b k = 0. Bloques combinacionales page 14
Bloques Lógicos. Considere dos números binarios A = [a 3 a 2 a 1 a 0 ] y B = [b 3 b 2 b 1 b 0 ] positivos. Diseñe un circuito con tres salidas AeqB, AgtB, y AltB que se activen cuando A = B, A > B, y A < B, respectivamente. Definamos un conjunto de señales intermedias i 3, i 2, i 1,e i 0. Cada i k = 1 si los bits correspondientes de A y B son iguales (i.e. i k = a k b k. La salida AeqB queda definida como AeqB = i 3 i 2 i 1 i 0. Comparando los bits de A y B de izquierda a derecha, podemos saber si A > B. La posicion k en la cual los bits a k y b k difieren determina que A > B si a k = 1 y b k = 0. La salida AgtB queda definida como AgtB = a 3 b3 +i 3 a 2 b2 +i 3 i 2 a 1 b1 +i 3 i 2 i 1 a 0 b0. Bloques combinacionales page 14
Bloques Lógicos. Considere dos números binarios A = [a 3 a 2 a 1 a 0 ] y B = [b 3 b 2 b 1 b 0 ] positivos. Diseñe un circuito con tres salidas AeqB, AgtB, y AltB que se activen cuando A = B, A > B, y A < B, respectivamente. Definamos un conjunto de señales intermedias i 3, i 2, i 1,e i 0. Cada i k = 1 si los bits correspondientes de A y B son iguales (i.e. i k = a k b k. La salida AeqB queda definida como AeqB = i 3 i 2 i 1 i 0. Comparando los bits de A y B de izquierda a derecha, podemos saber si A > B. La posicion k en la cual los bits a k y b k difieren determina que A > B si a k = 1 y b k = 0. La salida AgtB queda definida como AgtB = a 3 b3 +i 3 a 2 b2 +i 3 i 2 a 1 b1 +i 3 i 2 i 1 a 0 b0. La salida AltB queda definida como AltB = AeqB +AgtB. Bloques combinacionales page 14
Bloques Lógicos Sumador y Restador. Sumador- Restador b 3 b 2 b 1 b 0 Signo-Magnitud Complemento Complemento a uno a dos 0111 +7 +7 +7 0110 +6 +6 +6 0101 +5 +5 +5 0100 +4 +4 +4 0011 +3 +3 +3 0010 +2 +2 +2 0001 +1 +1 +1 0000 +0 +0 +0 1000-0 -7-8 1001-1 -6-7 1010-2 -5-6 1011-3 -4-5 1100-4 -3-4 1101-5 -2-3 1110-6 -1-2 1111-7 -0-1 Bloques combinacionales page 15
Bloques Lógicos Sumador y Restador. Sumador- Restador Suma en complemento a uno. 0000 0010 (+5) 0101 ( -5) 1010 +(+2) +0010 +(+2) +0010 (+7) 0111 ( -3) 1100 1101 1000 (+5) 0101 ( -5) 1010 +( -2) +1101 +( -2) +1101 (+3) 10010 ( -7) 10111 1 1 0011 1000 Bloques combinacionales page 16
Bloques Lógicos Sumador y Restador. Sumador- Restador Suma en complemento a dos. 0000 0010 (+5) 0101 ( -5) 1011 +(+2) +0010 +(+2) +0010 (+7) 0111 ( -3) 1101 1100 1110 (+5) 0101 ( -5) 1011 +( -2) +1110 +( -2) +1110 (+3) 10011 ( -7) 11001 ignorar ignorar Bloques combinacionales page 17
Bloques Lógicos Sumador y Restador. Sumador- Restador Resta en complemento a dos. (+5) 0101 0101 (+5) 0101 0101 (+2) 0010 +1110 ( 2) 1110 +0010 (+3) 10011 (+7) 0111 ignorar ( 5) 1011 1011 ( 5) 1011 1011 (+2) 0010 +1110 ( 2) 1110 +0010 ( 7) 11001 ( 3) 1101 ignorar Bloques combinacionales page 18
Bloques Lógicos Sumador y Restador. Sumador- Restador Bloque sumador-restador de n bits Bloques combinacionales page 19
Bloques Lógicos Sumador y Restador. Sumador- Restador Resta decimal usando complemento a 10. Suponga que A = [a n 1,...,a 0 ] y B = [a n 1,...,b 0 ] son dos números decimales de n dígitos. La resta A B tiene las siguientes propiedades: Cuando a i > b i no se requrie de ningun prestamo y la resta de realiza normalmente. Cuando a i < b i se requiere de un prestamo de la columna i+1, lo cual transforma la resta en 10+a i b i. Este prestamo se refleja en el minuendo de la columna i+1 sumandole uno (i.e. b i+1 = b i+1 +1). Bloques combinacionales page 20
Bloques Lógicos Sumador y Restador. Sumador- Restador Existe un algoritmo mas sencillo que no involucra prestamos y se basa en el complemento a 10. El complemento a 10 de B se define como 10 n B, por lo que la resta A B puede expresarse como A B = A+(10 n B) 10 n Si A B, el término A+(10 n B) produce un acarreo que es cancelado con el término 10 n. Pero si A < B, no existe ningun acarreo, y tenemos A B = M 10 n 10 n (B A) = M. El termino M es el complemento a 10 de (B A), y representa el valor negativo obtenido de la resta A B cuando A < B. Bloques combinacionales page 21
Bloques Lógicos Sumador y Restador. Sumador- Restador Ejemplos: 74 36 = 74+(100 36) 100 = 74+(99 36)+1 100 = 74+63+1 100 = 138 100 = 38 Complemento a 9 027 045 = 027+(1000 045) 1000 = 027+(999 045)+1 1000 = 027+954+1 1000 = 982 1000 982 = 1000 (045 027) Complemento a 10 982 = 1000 (018) Bloques combinacionales page 22
Bloques Lógicos Sumador y Restador. Sumador- Restador Ejemplos: 045 027 = 045+(1000 027) 1000 = 045+(999 027)+1 1000 = 045+972+1 1000 = 1018 1000 = 018 955( 45) 973( 27) = 955+(1000 973) 1000 = 955+(999 973)+1 1000 = 955+026+1 1000 = 982 1000 Bloques combinacionales page 23
Bloques Lógicos Sumador y Restador. Sumador- Restador Ejemplos: 973 045 = 973+(1000 045) 1000 = 973+(999 045)+1 1000 = 973+954+1 1000 = 1928 1000 = 928( 72) Bloques combinacionales page 24
Bloques Lógicos Sumador y Restador. Sumador- Restador Bandera de sobreflujo. El resultado de una suma o resta debe de poder ser representado en los n bits destinados para su operación. Cuando esto no es posible, ocurre la condición de sobreflujo. c 4 c 3 c 2 c 1 c 4 c 3 c 2 c 1 0 1 1 0 0 0 0 0 (+7) 0 1 1 1 ( 7) 1 0 0 1 +(+2) + 0 0 1 0 +(+2) + 0 0 1 0 (+9) 1 0 0 1 ( 5) 1 0 1 1 c 4 c 3 c 2 c 1 c 4 c 3 c 2 c 1 1 1 1 0 1 0 0 0 (+7) 0 1 1 1 ( 7) 1 0 0 1 +( 2) + 1 1 1 0 +( 2) + 1 1 1 0 (+5) 1 0 1 0 1 ( 9) 1 0 1 1 1 Bloques combinacionales page 25
Bloques Lógicos Sumador y Restador. Sumador- Restador Bandera de sobreflujo. Para el caso de 4 bits: OV = c 3 c 4 + c 3 c 4 = c 3 c 4 Para n bits: OV = c n 1 c n Bloques combinacionales page 26
Bloques Lógicos Sumador con predicción de acarreos. Sumador- Restador El diagrama del sumador en rizo o sumador con acarreo en cascada es el siguiente de donde podemos inferir la funcion para el acarreo de salida de la i-ésima etapa como c i+1 = x i y i +x i c i +y i c i Bloques combinacionales page 27
Bloques Lógicos Sumador con predicción de acarreos. Sumador- Restador Si factorizamos el acarreo c i de la expresión anterior tenemos c i+1 = x i y i +(x i +y i )c i = g i +p i c i El término g i = x i y i se le conoce como de generación, ya que independientemente del valor del acarreo de entrada c i, generara un acarreo de salida c i+1 cuando ambas x i y y i sean igual a uno. El término p i = x i +y i se le conoce como de propagación, ya que propaga el acarreo de entrada c i cuando cualquiera de las entradas x i o y i sea igual a uno. Bloques combinacionales page 28
Bloques Lógicos Sumador con predicción de acarreos. Sumador- Restador Expandiendo la expresión anterior en terminos de la etapa i 1 tenemos c i+1 = g i +p i (g i 1 +p i 1 c i 1 ) y expandiendo hasta la etapa 0 = g i +p i g i 1 +p i p i 1 c i 1 c i+1 = g i +p i g i 1 +p i p i 1 g i 2 +...+p i p i 1...p 2 p 2 g 0 +p i p i 1...p 1 p 0 c 0 La ultima expresión representa un circuito de dos niveles implementado con compuertas AND y OR. Un sumador implementado de esta manera se conoce como sumador con predicción de acarreos o sumador con acarreo anticipado. Bloques combinacionales page 29
Bloques Lógicos Sumador con predicción de acarreos. Sumador en rizo c i+ 1 = g i +p i c i Retardo crítico de 2n+1 retardos de compuerta Bloques combinacionales page 30
Bloques Lógicos Sumador con predicción de acarreos. Sumador con predicción de acarreos Retardo crítico de 4 retardos de compuerta Su complejidad aumenta al incrementar el numero de bits Bloques combinacionales page 31
Bloques Lógicos Sumador con predicción de acarreos. Sumador- Restador Existen dos alternativas para reducir la complejidad del sumador con predicción de acarreos. Dividir el diseño en partes mas pequeñas y usar sumadores con predicción de acarreos conectados en rizo Bloques combinacionales page 32
Bloques Lógicos Sumador con predicción de acarreos. Sumador- Restador Usar un segundo nivel de predicción de acarreos Bloques combinacionales page 33
Bloques Lógicos Sumador con predicción de acarreos. Sumador- Restador Señales de generación G j y propagación P j. Analizando c 8 tenemos c 8 = g 7 +p 7 g 6 +p 7 p 6 g 5 +p 7 p 6 p 5 g 4 +p 7 p 6 p 5 p 4 g 3 +p 7 p 6 p 5 p 4 p 3 g 2 +p 7 p 6 p 5 p 4 p 3 p 2 g 1 +p 7 p 6 p 5 p 4 p 3 p 2 p 1 g 0 +p 7 p 6 p 5 p 4 p 3 p 2 p 1 p 0 c 0 El último término en la expresión anterior define la propagación del acarreo de entrada c 0 P 0 = p 7 p 6 p 5 p 4 p 3 p 2 p 1 p 0 El resto de los términos definen la señal de generación G 0 = g 7 +p 7 g 6 +p 7 p 6 g 5 +...+p 7 p 6 p 5 p 4 p 3 p 2 p 1 g 0 Por lo que la expresión para el acarreo es c 8 = G 0 +P 0 c 0 Bloques combinacionales page 34
Bloques Lógicos Sumador con predicción de acarreos. Sumador- Restador Expandiendo para las demas señales G j = g 8j+7 +p 8j+7 g 8j+6 +p 8j+7 p 8j+6 g 8j+5 +... +p 8j+7 p 8j+6...p 8j+2 p 8j+1 g 8j P j = p 8j+7 p 8j+6 p 8j+5...p 8j c 8(j+1) = G j +P j c 8j Bloques combinacionales page 35
Estructura. En VHDL existen dos tipos de instrucciones: 1. Instrucciones concurrentes.- El orden en que aparecen en el código no afecta el comportamiento del diseo (i.e. son ejecutadas todas al mismo tiempo). 2. Instrucciones secuenciales.- Son ejecutadas una tras otra en el orden en que se listan (i.e. 3+2 = 1, +1 = 32 ), y solo pueden existir dentro de una estructura. [nombre_proceso:] -- etiqueta opcional [( nombre_se~nal {, nombre_se~nal} )] [declaración de variables] -- variables locales BEGIN [estructura WAIT] [asignación de se~nales] [asignación de variables] [estructura IF] [estructura CASE] [estructura LOOP] END [nombre_proceso]; Bloques combinacionales page 36
Estructuras IF, CASE, y LOOP. IF expresión_lógica THEN instrucción; {instrucción;} ELSEIF expresión_lógica THEN instrucción; {instrucción;} ELSE instrucción; {instrucción;} END IF; IF Sel = 0 THEN f <= x1; ELSE f<= x2; END IF; CASE expresión_lógica IS WHEN valor_constante => instrucción; {instrucción;} WHEN valor_constante => instrucción; {instrucción;} WHEN OTHERS = > instrucción; {instrucción;} END CASE; CASE Sel IS WHEN 0 => f <= x1; WHEN OTHERS => f <= x2; END CASE; Bloques combinacionales page 37
Estructuras IF, CASE, y LOOP. El comportamiento de la estructura LOOP es similar al de la estructura GENERATE. También contiene dos casos: [etiqueta loop:] FOR índice IN rango LOOP instrucción; {instrucción;} END LOOP [etiqueta loop]; [etiqueta loop:] WHILE expresión_lógica LOOP instrucción; {instrucción;} END LOOP [etiqueta loop]; Bloques combinacionales page 38
Estructuras IF, CASE, y LOOP. library ieee; use ieee.std_logic_1164.all; entity numbits is port ( x : in std_logic_vector(1 to 3); -- count : out integer range 0 to 3; count : BUFFER INTEGER RANGE 0 to 3 ); end numbits; architecture comportamiento of numbits is begin ( x ) -- cuenta el numero de unos en x -- variable tmp : integer ; BEGIN Count <= 0; -- tmp := 0; FOR i IN 1 to 3 LOOP IF x(i)= 1 THEN Count <= Count + 1; -- tmp := tmp +1; END IF; END LOOP; -- count <= tmp; EN ; end comportamiento; Bloques combinacionales page 39