Ejercicio 4

Anuncio
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.
Descargar