Diseño electrónico con hardware reconfigurable Modelos de descripción © 2007 A.G.O. All Rights Reserved Modelos de descripción Existen tres formas diferentes de describir el funcionamiento de una entidad a través de la arquitectura: Comportamiento o algorítmico (behavioral). Especifica cómo se comportan las salidas con respecto a las entradas. No proporciona al sintetizador información de cómo será el circuito, siendo éste el que lo determina. La parte fundamental de este tipo de descripciones es el proceso (process) Flujo de datos (dataflow). Especifica el circuito como una representación concurrente del movimiento de los datos a su través, es decir, cómo circula la información Estructural (structural). Describe la conexión entre distintos módulos descritos previamente S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 2 de 53 Modelos de descripción VHDL Como hemos visto, la architecture, en VHDL describe la función que realiza una entity. La arquitectura se compone de dos partes: la parte declarativa en la que se encuentran las definiciones de las señales, funciones, tipos, procedimientos, etc .. a utilizar. y el cuerpo de la descripción, consistente en una sucesión de asignaciones concurrentes y procesos que modelan la entidad. S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 3 de 53 Estructura de un diseño en VHDL LIBRARY ieee; USE ieee.std_LOGIC_1164.all; ENTITY nombre_entidad IS [GENERIC( )]; PORT( declaraciones de puertos parte declarativa de la arquitectura cuerpo de la arquitectura ); END nombre_entidad; Nombre de la entidad ARCHITECTURE nombre_arquitectura OF nombre_entidad IS Definición de las señales a usar Definición de los tipos y subtipos a utilizar BEGIN Se modela el comportamiento del circuito Nombre de la arquitectura con asignaciones, instanciaciones y PROCESOS END nombre_arquitectura; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 4 de 53 Concurrencia del hardware El hardware es concurrente, es decir, los circuitos coexisten en el tiempo y por lo tanto trabajan al mismo tiempo. No se puede modelar con un lenguaje como C: S1 = A and B; S2 = C or D; S3 = C xor D; Las tres puertas funcional al mismo tiempo ¡no una después de la otra! Este chip tiene tres puertas que funcionan simultáneamente S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 5 de 53 Concurrencia: una posible solución La solución al problema anterior es que aunque la ejecución sea secuencial, las asignaciones no tengan tiempo de ejecución: S1 <= A and B; S2 <= C or D; S3 <= C xor D; De esta manera aunque una asignación se ejecuta después de la otra, como las dos se evalúan en el mismo instante, desde el punto de vista de la modelización del circuito, ambas puertas están funcionando simultáneamente Esta es la solución por la que opta VHDL (y Verilog) S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 6 de 53 Necesidad de la concurrencia Qué ocurre cuando el circuito es del tipo AyB AyB <= A and B; S <= AyB xor C; El valor de S será el correcto una vez que se hayan propagado los tiempos de retardo de las puertas No hay que olvidar que se trata de modelar circuitos reales, no virtuales, y las señales necesitan que transcurra el tiempo para tomar un valor S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 7 de 53 Sentencias concurrentes Características: Se ejecutan de forma asíncrona unas respecto de las otras en el mismo tiempo de simulación. El orden en que se escriban es indiferente, no siguen un orden de ejecución predefinido. – No obstante conviene escribir el código en el orden que mejor se pueda entender y mejor documente el diseño. Sirven para especificar: Interconexiones entre componentes. Estructuras jerárquicas. Estructuras regulares. Transferencias entre registros. S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 8 de 53 process: elemento de diseño principal Un proceso describe el comportamiento de un circuito: Cuyo estado puede variar cuando cambian ciertas señales Utilizando construcciones muy expresivas: if..then..else, case, bucles for y while, etc… Y que además puede declarar variables, procedimientos, etc... process(lista de señales) ... parte declarativa (variables, procedimientos, tipos, etc…) ... begin ... sentencias que describen el comportamiento ... end process; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 9 de 53 Procesos: Resumen Los procesos se “disparan” (su código se ejecuta) cuando cambia alguna de las señales de su lista de sensibilidad Un proceso sin lista de sensibilidad es válido, pero se activa con cualquier evento, no se asegura un comportamiento correcto. Las instrucciones dentro del proceso se ejecutan secuencialmente, una detrás de otra, pero sin dar lugar a que avance el tiempo durante su ejecución El tiempo sólo avanza cuando se llega al final del proceso Las señales modelan hilos del circuito, y como tales, sólo pueden cambiar de valor si se deja que avance el tiempo Una arquitectura puede tener tantos procesos como queramos, y todos se ejecutan en paralelo Esta es la manera que tiene VHDL de expresar la concurrencia inherente al hardware S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 10 de 53 La solución VHDL a la concurrencia VHDL (y en general, todos los HDLs) solucionan este problema dando soporte explicito a la concurrencia En VHDL, una arquitectura puede tener tantos procesos como queramos, y todos se ejecutan concurrentemente architecture ... ... begin process(...) ... end process; Los procesos se ejecutan process(...) concurrentemente ... end process; end ...; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 11 de 53 sentencias concurrentes Asignación simple suma <= ope1 xor ope2; Para SEÑALES y PUERTOS, el operador es <=, el lado izquierdo es el destino y el lado derecho la fuente. OJO: fuente y destino tienen que ser del mismo tipo Para VARIABLES el operador es := acarreo_intermedio := ope1 and ope2; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 12 de 53 Sentencias concurrentes. WHEN/ELSE Permite realizar asignaciones condicionales salida <= a and b when c =‘1’ else a or c; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 13 de 53 Sentencias concurrentes. WHEN/ELSE [etiqueta:] señal <= val_1 when condi_1 else val_2 [when condi_2] else … else val_n ; Ejemplo: entity sumador is port (op1, ope2 : in std_logic; enable : in std_logic; salida : out std_logic_vector(1 downto 0)); -- salida(1) acarreo -- salida(0) la suma end sumador; architecture con_when_else of sumador is begin salida <= “00” when (enable=‘1’, and op2=‘0’ and op1=‘0’) else “01” when (enable=‘1’ and op2=‘0’ and op1=‘1’) else “01” when (enable=‘1’ and op2=‘1’ and op1=‘0’) else “10” when (enable=‘1’ and op2=‘1’ and op1=‘1’) else “ZZ” ; end con_when_else; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 14 de 53 sentencias concurrentes. WITH/SELECT La asignación condicional (WHEN/ELSE), También se puede hacer mediante la sentencia de asignación selectiva WHIT/SELECT WHIT cont SELECT salida <= a b c d when when when when “00”, “01”, “10”, others; a b 0 c 2 d 3 1 salida cont[1:0] Por su ejecución en paralelo (balanceada) es similar a un CASE Se pueden dar problemas de memoria implícita si no se pone el último when others S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 15 de 53 Sentencias concurrentes. WITH/SELECT [etiqueta:] with expresión select señal <= val_1 when result_1 [, val_2 when result_2 ] [, …] [, val_n when result_n] [, val_cuando_otros when others]; Ejemplo: símbolo para asignar el mismo valor a varios resultados entity sumador is port (op1, ope2 : in std_logic; enable : in std_logic; salida : out std_logic_vector(1 downto 0)); -- salida(1) acarreo -- salida(0) la suma end sumador; architecture con_with_select of sumador is begin with (enable&ope2&op1) select salida <= “00” when “100”, “01” when “101”, -- puede ser también “01” when “101” | “110” “01” when “110”, -- este se quitaría “10” when “111”, “ZZ” when others; end con_with_select; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 16 de 53 Dentro de los procesos: Descripciones secuenciales IF <condición> THEN <acción> ELSE <acción> END IF; CASE <condición> IS WHEN <valor> => <acción>; WHEN <valor> => <acción>; WHEN others => <acción>; END CASE; FOR <rango> LOOP <acción> END LOOP; WHILE <condición> LOOP <acción> END LOOP; WAIT ON <señal> UNTIL <expresión>; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 17 de 53 IF IF condición_1 THEN Si se da la condición Sentencias secuenciales END IF; IF condición_1 THEN Si se da la condición Grupo 1 de sentencias secuenciales ELSE Grupo 2 de sentencias secuenciales END IF; ... y si no se da la condición IF condición_1 THEN Grupo 1 de sentencias secuenciales ELSIF condición_2 THEN Grupo 2 de sentencias secuenciales Si se da alguna Condición se ejecuta su grupo ELSIF condición_n THEN Grupo n de sentencias secuenciales END IF; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 18 de 53 IF library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;entity CONTA is generic (Nbits:integer:=8); Port ( CLOCK : in std_logic; RESET : in std_logic; COUNT : inout std_logic_vector(Nbits-1 downto 0)); end CONTA; architecture Behavioral of CONTA is begin process (CLOCK, RESET) begin if RESET='1' then COUNT <= (others =>'0'); elsif (CLOCK='1' and CLOCK'event) then COUNT <= COUNT + 1; end if; end process; end Behavioral; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 19 de 53 CASE Sintaxis: CASE expresión IS WHEN caso1=> secuencia sentencias1; WHEN caso2 => secuencia sentencias2; WHEN casoN => secuencia sentenciasN; WHEN OTHERS => resto de casos; END CASE; … S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 20 de 53 CASE (Ejemplo) library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ALU is Port ( A : in STD_LOGIC_VECTOR (7 downto 0); B : in STD_LOGIC_VECTOR (7 downto 0); OPE : in STD_LOGIC_VECTOR (1 downto 0); RESULTADO : out STD_LOGIC_VECTOR (7 downto 0)); end ALU; architecture COMPORTA of ALU is begin process(A, B, OPE) is begin case OPE is when "00" => RESULTADO <= A + B; when "01" => RESULTADO <= A - B; when "10" => RESULTADO <= A and B; when "11" => RESULTADO <= A or B; when others => RESULTADO <= (others =>'Z'); end case; end process; end COMPORTA; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 21 de 53 Bucles Hay tres formas de realizar bucles: FOR-LOOP. Siempre es un bucle finito. WHILE-LOOP. Puede ser finito o no, depende de la condición. LOOP. Siempre es infinito. S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 22 de 53 FOR-LOOP Realiza un bucle un número determinado de veces [etiqueta:]FOR índice IN rango’inf TO rango’sup LOOP secuencia de sentencias END LOOP [etiqueta]; ejemplo: bucle: FOR i IN 0 TO 5 LOOP x(i) <= enable AND w(i+2); y(0, i) <= w(i); END LOOP bucle; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 23 de 53 FOR (Ejemplo) library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity MI_EJEMPLO_FOR is Port ( A : in STD_LOGIC_VECTOR (2 downto 0); S : out STD_LOGIC_VECTOR (7 downto 0)); end MI_EJEMPLO_FOR; architecture EJEMPLO of MI_EJEMPLO_FOR is begin process(A) is begin for i in 0 to 7 loop if i=conv_integer(A) then -- SE ENCUENTRA EN STD_LOGIC__1164 S(i) <= '1'; else S(i) <='0'; end if; end loop; end process; end architecture; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 24 de 53 WHILE-LOOP El bucle se repite mientras la condición que haya después del while sea verdadera [etiqueta:]WHILE condición LOOP secuencia de sentencias END LOOP [etiqueta]; ejemplo: lazo1:WHILE (i < 10) LOOP WAIT UNTIL clk'EVENT AND clk='1'; END LOOP lazo1; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 25 de 53 LOOP El bucle se repite infinatamente [etiqueta:]LOOP secuencia de sentencias END LOOP [etiqueta]; ejemplo: lazo1: LOOP a <= c and b; END LOOP lazo1; La única sentencia que deja romper el bucle es EXIT S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 26 de 53 EXIT Detiene la ejecución en ese instante y sale del bucle. Si hay varios bucles anidados, sale de donde se encuentre la instrucción o bien del bucle que se especifica en la etiqueta. Solamente puede aparecer dentro de una sentencia LOOP. exit [etiqueta] [when condición]; Ejemplo: -- Interrumpe el FOR y sigue por el WHILE termina: WHILE a< 100 LOOP --- sentencias sigue: FOR n IN 0 TO 100 --- sentencias EXIT termina WHEN n=a; END LOOP sigue; END LOOP termina; Cuando existen bucles anidados, sale del más interno, o bien, de aquel que tiene la etiqueta que sigue al EXIT. S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 27 de 53 NEXT En VHDL se pueden crear bucles infinitos [etiqueta] loop secuencia de sentencias end loop [etiqueta]; Los bucles pueden tener una condición de salida. next [etiqueta] [when condición]; Ejemplo: -- Interrumpe el FOR y sigue por el WHILE termina: WHILE a< 100 LOOP --- sentencias sigue: FOR n IN 0 TO 100 --- sentencias NEXT termina WHEN n=a; END LOOP sigue; END LOOP termina; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 28 de 53 WAIT Espera a que ocurra una condición WAIT UNTIL condición; WAIT UNTIL e1=‘1’ and e2=‘0’; Espera a que cambie alguna señal de la lista de señales WAIT ON lista_señales; WAIT ON e1,e2,clk; Espera un cierto tiempo WAIT tiempo; WAIT 25ns; Espera indefinidamente WAIT S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 29 de 53 NULL No realiza función alguna. Pasa la ejecución a la siguiente sentencia secuencial. Útil en sentencias CASE cuando no se quiere realizar ninguna acción para alguna de las elecciones. Sintaxis: [etiqueta:] NULL; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 30 de 53 GENERATE Esta sentencia concurrente permite reducir el tamaño del código de aquellas estructuras que se repiten considerablemente. Sintaxis: etiqueta: FOR identificador IN range GENERATE (sentencias concurrentes) END GENERATE; etiqueta: IF condición GENERATE (sentencias concurrentes) END GENERATE; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 31 de 53 GENERATE SIGNAL x: BIT_VECTOR (7 DOWNTO 0); SIGNAL y: BIT_VECTOR (15 DOWNTO 0); SIGNAL z: BIT_VECTOR (7 DOWNTO 0); ... G1: FOR i IN x'RANGE GENERATE z(i) <= x(i) AND y(i+8); END GENERATE; X(0) y(8) z(0) X(7) y(15) z(7) Ejemplo: Sumador de acarreo propagado S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 32 de 53 Paquetes Son unidades de diseño en las que se declaran y describen tipos, objetos, funciones, componentes, etc. Para ser usados en cualquier descripción y modelo. NO olvidar delante LIBRARY Sintaxis: y USE package nombre_paquete is -- zona de dclaraciones -- tipos, subtipos, constantes -- atributos end package nombre_paquete; [package body nombre_paquete is -- descripción de FUNCTION y PROCEDURE end package nombre_paquete;] La primera parte es obligatoria y la segunda solo es necesaria cuando uno o mas subprogramas (FUNCTION O PROCEDURE) sean declarados S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 33 de 53 Component Un componente es una descripción simple, es decir, (LIBRARY + ENTITY + ARCHITECTURE) sin embargo bajo la declaración de COMPONET puede ser utilizado por cualquier otro circuito, permitiendo de esta manera el diseño jerárquico Declaración: COMPONENT nombre_componente IS PORT(locales); END COMPONENT; Instanciación ó llamada: Se puede hacer de dos formas Etiqueta: nombre_componente PORT MAP (lista_puertos); La lista_puertos es posicional; Lista de puertos por asignación; nombre_puerto_compo => señal_o_puerto_asig Etiqueta: nombre_componente GENERIC MAP (lista_parametros) PORT MAP (lista_puertos); Mediante lista_parametros se pasan parámetros genéricos al componente. S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 34 de 53 Ejemplo de paquete Ver un ejemplo sencillo S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 35 de 53 Atributos Un atributo es una característica asociada a un elemento (tipo de dato, señal, entidad,…) que proporciona información adicional. Atributo ≠ Valor Un objeto tiene un solo valor y puede tener múltiples atributos. VHDL proporciona una serie de atributos predefinidos. Nombre_elemento’Nombre_atributo Byte_a’range Signal_a’event S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 36 de 53 Atributos de rango vectores Nombre del atributo Significado LEFT Identifica el valor definido a la izquierda del intervalo de índices RIGTH Identifica el valor definido a la derecha del intervalo de índices HIGH Identifica el valor máximo del intervalo de índices LOW Identifica el valor mínimo del intervalo de índices LENGTH Identifica el valor total del intervalo de índices RANGE Copia el intervalo de índices REVERSE_RANGE intervalo de índices pero en sentido inverso. S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 37 de 53 Atributos de rango de vectores. Ejemplo Signal Mi_senal: std_logic_vector(7 downto 2); Nombre del atributo LEFT Ejemplo Mi_senal’left toma el valor 7 RIGTH Mi_senal’rigth toma el valor 2 HIGH Mi_senal’high toma el valor 7 LOW Mi_senal’low toma el valor 2 LENGTH Mi_senal’length toma el valor 6 RANGE Mi_senal’range toma el valor 7 downto 2 REVERSE_RANGE Permite la descripción de modelos más generales que facilitan la reutilización del código Mi_senal’reverse_range toma el valor 2 to 7 S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 38 de 53 Atributos de rango de vectores. Loops Signal Mi_senal: std_logic_vector(7 downto 2); Bucles en VHDL for i in Mi_senal’range loop Mi_senal(i) <= ’0’ end loop; for i in Mi_senal’high to 1 loop Pone un vector de tamaño conocido a cero Desplaza a la izquierda Mi_senal(i) <= Mi_senal(i-1) end loop; i no es ni señal ni variable, los bucles son siempre estaticos S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 39 de 53 Atributos de las señales DELAYED(t). Valor de la señal retrasada t unidades de tiempo. STABLE(t), verdadero si la señal permanece invariable durante t unidades de tiempo. QUIET(t), verdadero si la señal no ha recibido ninguna asignación en t unidades de tiempo. TRANSACTION, tipo bit, a ‘1’ cuando hay una asignación a la señal. EVENT, verdadero si ocurre un cambio en la señal en el paso de simulación. ACTIVE, verdadero si ocurre una asignación a la señal en el paso de simulación. LAST_EVENT, unidades de tiempo desde el último evento. LAST_ ACTIVE, unidades de tiempo desde la última asignación. LAST_VALUE, valor anterior de la señal. DRIVING, verdadero si el proceso actual determina el valor de la señal. DRIVING_VALUE, valor que toma la señal tras el proceso. S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 40 de 53 Atributos Un atributo es una característica (función, tipo, rango, señal o constante), que puede ser asociada (atribuida) a ciertos elementos del modelo VHDL. Dos posibilidades: Atributos definidos por el usuario. Predefinidos. Atributos predefinidos para señales. Dan información sobre las señales o definen nuevas señales implícitas derivadas de las señales declaradas explícitamente. S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 41 de 53 Atributos S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 42 de 53 Atributos Nota: para detectar flancos de señales del tipo std_logic_vector es mejor emplear las funciones rising_edge(S) y falling_edge(S). S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 43 de 53 Resumen: estilos de descripción Independiente del nivel de abstracción, existen tres estilos de descripción de una arquitectura Comportamiento (Behavioral) Transferencia entre registros o flujo de datos (Data Flow) Estructural (Structural) En VHDL un sistema puede mezclar diferentes estilos a la hora de describir sus diferentes arquitecturas. S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 44 de 53 Resumen: estilos de descripción 1. Comportamiento (Behavioral). En este estilo de descripción se modela la funcionalidad por medio de los recursos algorítmicos del lenguaje. Se describe el algoritmo que refleja el comportamiento de dicho componente. También se le suele llamar estilo algorítmico o secuencial. S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 45 de 53 Resumen: estilos de descripción 2. Transferencia entre registros (RTL) o flujo de datos (Data Flow). En este estilo de descripción se especifican los flujos de datos del sistema y la interconexión entre sus componentes. El proceso de descripción se realiza por medio de funciones lógicas, que se ejecutarán de forma concurrente S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 46 de 53 Resumen: estilos de descripción 3. Estructural (Structural). En este estilo de descripción se definen o instancian todas las partes del sistema y sus interconexiones. Resulta muy útil cuando se quiere aprovechar diseños compilados con anterioridad y que se encuentran almacenados en bibliotecas de componentes. La instrucción concurrente fundamental utilizada dentro de una arquitectura RTL es la de COMPONENT COMPONENT nombre_componente PORT ( nombre_puerto : tipo_puerto tipo_dato; nombre_puerto : tipo_puerto tipo_dato; ... ); END COMPONENT; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 47 de 53 Ejemplo de estilos de descripción Multiplexor de dos entradas de datos de un bit (e0 y e1), una señal de salida (y) y señal de control (sel) S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 48 de 53 Ejemplo de estilos de descripción Declaración de la entidad (entity) -- los comentarios empiezan con dos guiones ENTITY mx IS PORT ( e0: IN STD_LOGIC; e1: IN STD_LOGIC; sel: IN STD_LOGIC; y: OUT STD_LOGIC ); END mx; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 49 de 53 Ejemplo de estilos de descripción 1. Descripción de comportamiento o algorítmica (Behavioral)) ARCHITECTURE comportamiento OF mx IS BEGIN PROCESS (e0,e1,sel) BEGIN IF (sel=’0’) THEN y<= e0; END IF; END PROCESS; END comportamiento; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 50 de 53 Ejemplo de estilos de descripción 2. Descripción transferencia entre registros o flujo de datos (Data Flow) ARCHITECTURE FLUJO_DATOS1 OF mx IS BEGIN y<= (e0 AND (NOT sel)) OR (e1 AND sel); END FLUJO_DATOS1; ARCHITECTURE FLUJO_DATOS2 OF mx IS SIGNAL not_sel, ax, bx : STD_LOGIC BEGIN not_sel <= NOT sel; ax <= e0 AND not_sel; bx <= e1 AND sel; y <= ax OR bx; END FLUJO_DATOS2 ; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 51 de 53 Ejemplo de estilos de descripción 3. Descripción estructural (Structural) ARCHITECTURE estructural OF mx IS COMPONENT mi_inv PORT (e: IN STD_LOGIC; y: OUT STD_LOGIC); END COMPONENT; COMPONENT mi_and2 PORT (e1,e2: IN STD_LOGIC; y: OUT STD_LOGIC); END COMPONENT; COMPONENT mi_or2 PORT (e1,e2: IN STD_LOGIC; y: OUT STD_LOGIC); END COMPONENT; SIGNAL ax,bx,not_sel: STD_LOGIC BEGIN U0: mi_inv PORT MAP (e =>sel, sal=>not_sel); U1: mi_and2 PORT MAP (e1=>e0, e2=>not_sel, sal=>ax); U2: mi_and2 PORT MAP (e1=>e1, e2=>sel, sal=>bx); U3: mi_or2 PORT MAP (e1=>ax, e2=>bx, sal=>y); END estructural; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 52 de 53 Ejemplo de estilos de descripción ENTITY mi_inv IS PORT ( e : IN STD_LOGIC; OUT STD_LOGIC sal : ); END mi_inv; ENTITY mi_or2 IS PORT (e1, e2 : sal : ARCHITECTURE transfe OF mi_inv IS BEGIN sal <= NOT (e1); END transf; ENTITY mi_and2 IS PORT ( e1, e2 : IN sal : OUT STD_LOGIC; STD_LOGIC IN OUT STD_LOGIC; STD_LOGIC ); END mi_or2 ; ARCHITECTURE transfe OF mi_or2 IS BEGIN sal <= e1 OR e2; END transf; ); END mi_and2 ; ARCHITECTURE transfe OF mi_and2 IS BEGIN sal <= e1 AND e2; END transf; S2_3. Modelos de descripción hardware © 2007 A.G.O. All Rights Reserved 53 de 53