Ejercicio 4 Una sentencia del tipo: n <= x after t; asigna el valor de x a la señal de destino n, después de un intervalo t. En este tipo de sentencia, dicha de asignación, n tiene que ser una señal, x puede ser una señal, un valor constante, una variable o una expresión y t tiene que ser un tiempo. El tipo de x tiene que ser el mismo de n y el tipo de t tiene que ser time. 1. Describir en VHDL el sumador binario (full adder) esquematizado en Figura 1, aplicando las especificaciones siguientes: ● El nombre del fichero VHDL será fulladder.vhd ● El nombre de la entidad será fulladder ● El nombre de la arquitectura es arbitrario ● El tiempo de propagación de los puertos XOR es 1 ns ● El tiempo de propagación de los puertos AND es 1 ns ● El tiempo de propagación de los puertos OR es 500 ps ● El tiempo de propagación de las pistas de conexión es despreciable Figura 1: Sumador binario 2. Especificar el tipo de descripción utilizada. 3. Compilar el fichero fulladder.vhd para comprobar que no hayan errores de sintaxis. Reportar la línea de comando utilizada. Ejercicio 5 En el ejemplo counter.vhd, se utiliza un constructo típico de los lenguajes de programación software: el bucle for … loop. Este tipo de constructo sólo se puede utilizar en porciones de código secuenciales, tipicamente para descripciones comportamentales. El VHDL proporciona un constructo analogo pero concurriente, útil para descripciones estructurales: el bucle for … generate. En el fichero byteadder.vhd se define a nivel estructural la entidad byteadder, un sumador de 8 bits cuya arquitectura utiliza el bucle for … generate para instanciar 8 sumadores binarios (entidad fulladder, cuya arquitectura se ha definido en el Ejercicio 4) de manera iterativa. Sin embargo en el fichero quedan por definir las conexiones para la propagación del acarreo. entity byteadder is port ( a : in bit_vector(8 downto 1); b : in bit_vector(8 downto 1); ci : in bit; s : out bit_vector(8 downto 1); co : out bit); end; architecture rca_struct of byteadder is component fulladder is port ( a : in bit; b : in bit; ci : in bit; s : out bit; co : out bit); end component; signal ci_vec : bit_vector(8 downto 1); signal co_vec : bit_vector(8 downto 1); begin adder_array : for i in 8 downto 1 generate fulladder_inst : fulladder port map ( a => a(i), b => b(i), ci => ci_vec(i), s => s(i), co => co_vec(i)); end generate; ... end only; Figura 2: Sumador binario ripple-carry 1. Definir las conexiones para la propagación de acarreo en configuración ripple-carry (Figura 2) utilizando el constructo for … generate. 2. Compilar el fichero byteadder.vhd para comprobar que no hayan errores de sintaxis.