INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Junio de 2016

Documentos relacionados
INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Septiembre de 2016

INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Junio de 2017

INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Junio de 2014

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2017, Primera Semana

INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Junio de 2012

INGENIERÍA DE COMPUTADORES III. Solución al examen de Septiembre 2014

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 10

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 3

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2013, Segunda Semana

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2015, Segunda Semana

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 6

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 4

INGENIERÍA DE COMPUTADORES 3. Solución al Trabajo Práctico - Junio de 2013

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Septiembre 2016

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 5

INGENIERÍA DE COMPUTADORES III. Solución al examen de Septiembre 2013

INGENIERÍA DE COMPUTADORES 3. Trabajo Práctico - Convocatoria Ordinaria 2012

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2014, Primera Semana

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 8

INGENIERÍA DE COMPUTADORES III. Solución al Ejercicio de Autocomprobación 1

INGENIERÍA DE COMPUTADORES 3. Solución al examen de Junio 2014, Segunda Semana

INGENIERÍA DE COMPUTADORES 3. Trabajo Práctico - Septiembre 2013

INGENIERÍA DE COMPUTADORES 3. Trabajo Práctico - Junio 2018

INGENIERÍA DE COMPUTADORES 3. Trabajo Práctico - Junio 2014

INGENIERÍA DE COMPUTADORES 3. Trabajo Práctico - Junio 2017

INGENIERÍA DE COMPUTADORES 3. Trabajo Práctico - Septiembre 2012

INGENIERÍA DE COMPUTADORES III. Solución al examen de Septiembre 2012

INGENIERÍA DE COMPUTADORES III. Solución al examen de Junio 2012, Primera Semana

INGENIERÍA DE COMPUTADORES III. Solución al examen de Junio 2012, Segunda Semana

INGENIERÍA DE COMPUTADORES 3. Trabajo Práctico - Septiembre 2017

UNIVERSIDAD CARLOS III DE MADRID. Ejercicios de VHDL. Circuitos Integrados y Microelectrónica. Luis Entrena. Celia López.

Diseño de Sistemas Electrónicos Digitales Avanzados

Sistemas Electrónicos Digitales Curso de adaptación al Grado

Simulación avanzada con TestBench en HDL. Ing. Andrés Miguel Airabella. Ing. Facundo Aguilera.

INFORMÁTICA INDUSTRIAL. 3º INGENIERÍA TÉCNICA ELECTRÓNICA TRABAJO TUTORADO DE VHDL. Primer Cuatrimestre Curso 2005/2006.

Practicas tuteladas VHDL (curso 04-05)

VHDL: Código Secuencial. Arquitectura del Computador 2017

Comparador de 1 bit Tabla de verdad y circuito lógico A B A > B A = B A < B

INFORMÁTICA INDUSTRIAL. 3º INGENIERÍA TÉCNICA INDUSTRIAL. ESPECIALIDAD ELECTRÓNICA BOLETÍN 2. CURSO 2003/04

DISEÑO DE CIRCUITOS SECUENCIALES

6. Codificadores. Electrónica Digital. Tema

Sistemas Digitales - Examen temas 1, 2 y 3 - (6 de Abril 2016)

Simulación con un banco de pruebas VHDL - test bench.

Sistemas Digitales - Examen temas 1, 2 y 3 - (6 de Abril 2016)

Recursos y Metodologías. Función. Programas

Estructura de VHDL. Sistemas Digitales Avanzados. Universidad Técnica Particular de Loja Prof: Diego Barragán Guerrero. Oct Feb.

Uso de (don t care) en VHDL

ICTP Latin-American Advanced Course on FPGADesign for Scientific Instrumentation. 19 November - 7 December, 2012

LABORATORIO DE CIRCUITOS DIGITALES (2005-II) CUARTA CLASE DE VHDL

LABORATORIO DE CIRCUITOS DIGITALES (2005-II) SEGUNDA CLASE DE VHDL

PRACTICA 6: CIRCUITOS ARITMETICOS: SUMADORES Y RESTADORES.

INDICE. Definición de codificador Tipos de codificadores. Ejercicios. Referencias. Codificadores sin prioridad Codificadores con prioridad

Los multiplexores son dispositivos de varias entradas que permiten seleccionar la señal que llega a una de éstas y transmitirla a la salida.

Simulación de circuitos descritos en VHDL

DE INGENIERÍA TÉCNICA INDUSTRIAL. ESPECIALIDAD EN ELECTRÓNICA INDUSTRIAL

VHDL. Lenguaje de descripción hardware Estructura Básica de diseño

MAQUINA DE ESTADO FINITO (FSM) Autómata finito

VHDL. Lenguaje de descripción hardware

Practica No. 5 Diseño de un Multiplicador

Código concurrente en VHDL [5]

PRÁCTICA: LENGUAJE VHDL

SINTAXIS BÁSICA DEL VHDL SIMPLIFICADO

Sistemas Electrónicos Digitales. PRACTICA nº 8

Practica No. 5 Diseño de un Multiplicador

SENTENCIA LOOP 1.- Implementar y simular el siguiente circuito que cuenta el número de bits 1 que ingresan

Sesión 1: Introducción al lenguaje VHDL. S1 1 Laboratorio de Estructura de Computadores Curso 04 / 05

ELECTRÓNICA DIGITAL 24-I Determinar el valor decimal de los números expresados en Complemento a 2. (0.25 puntos).

Práctica I Modelado y simulación de una máquina expendedora de refrescos

MICROPROCESADOR (CÓDIGO EN VHDL) TOMADO DEL LIBRO PARDO Y BOLUDA

DISEÑODE SISTEMAS ELECTRÓNICOS DIGITALES AVANZADOS.

Uso de (don t care) en VHDL

INTRODUCCIÓN AL LENGUAJE VHDL PARA CIRCUITOS

PRUEBA DE ENTRADA NOMBRE : FECHA: / /2005 CÓDIGO : LAB. Nº: 4 HORARIO: H-441

SISTEMAS DIGITALES CONTROL 1 (31/3/2014) APELLIDOS DNI: Firma NOMBRE MODELO DE EXAMEN A

VHDL. Carlos Andrés Luna Vázquez. Lección 10 Problemas

Titulación: Ingeniería Informática Asignatura: Fundamentos de Computadores. Bloque 3: Sistemas secuenciales Tema 9: Módulos secuenciales básicos

Tutorial de VHDL: Contadores y Simulación

CONTADORES. Definición. Diseño y analisis de un contador binario hacia arriba de 3 bits con flip-flops JK. Otros contadores típicos.

Tema 3 - Modelado con HDL a nivel RTL

Práctica I.- Introducción a los Sistemas Secuenciales

Tema 4 - Bloques combinacionales

MAQUINA DE ESTADO FINITO (FSM) Autómata finito

Electrónica Digital Departamento de Electrónica VHDL. Bioingeniería Facultad de Ingeniería - UNER

Descripción en VHDL de arquitecturas para implementar el algoritmo CORDIC

2. Escoja la ubicación y el nombre del proyecto. Seleccione la casilla Create project subdirectory.

Diseño VHDL de módulos combinacionales básicos

VHDL. VHDL: VHSIC Hardware Description Language VHSIC: Very High Speed Integrated Circuits

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS FACULTAD DE INGENIERIA ELECTRONICA ESCUELA DE ELECTRONICA

4.3. Lenguaje VHDL Declaración de Packages

2. Sumadores. Diagrama. Donde a y b son los bits a sumar, S el. resultado de la suma y C el acarreo generado. b EB. Circuito. Tabla de verdad.

UNIVERSIDAD DE SEVILLA Dpto. de Ingeniería Electrónica. Introducción a los lenguajes HDL y conceptos. Octubre de 2007

SÍNTESIS DE CIRCUITOS DIGITALES CON VHDL.

PRACTICA 3. Lenguaje de descripción de hardware VHDL.

TEMA 1 FUNDAMENTOS DEL DISEÑO DEL HARDWARE DIGITAL

Sistemas Electrónicos Digitales. PRACTICA nº 3

PARTE I. TÉCNICAS DE DISEÑO ELECTRÓNICO MEDIANTE LENGUAJES DE DESCRIPCIÓN HARDWARE

4. SUMADORES EN BINARIO PURO (I)

Tutorial 2: Pasar de diagrama ASM a un circuito

Transcripción:

Solución al Trabajo Práctico - Junio de 2016 EJERCICIO 1 Se desea diseñar un circuito digital que implemente las funciones F y G cuya tabla de verdad se muestra a continuación, que dependen de las tres variables x, y y z: x y z F G 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 0 0 0 0 1 0 1 0 0 1 1 0 0 1 1 1 1 1 1 1.a) (0.5 puntos) Obtenga las funciones lógicas F y G a partir de la tabla de verdad. Escriba en VHDL la entity del circuito que implemente las dos funciones lógicas. Es decir, que tenga tres entradas x, y y z, y dos salidas F y G. 1.b) (1 punto) Escriba en VHDL la architecture que describa el comportamiento del circuito. 1.c) (1 punto) Dibuje el diagrama de un circuito que implemente estas dos funciones lógicas al nivel de puertas lógicas. No es necesario que el circuito esté simplificado. A continuación, escriba en VHDL la entity y la architecture de cada una de las puertas lógicas que componen el circuito que acaba de dibujar.

1.d) (1 punto) Escriba en VHDL una architecture que describa la estructura del circuito que ha dibujado, instanciando y conectando las puertas lógicas que ha diseñado anteriormente. 1.e) (0.5 puntos) Escriba en VHDL un banco de pruebas que permita visualizar, para todos los posibles valores de las entradas, las salidas de los circuitos diseñados en los Apartados 1.b y 1.d. Compruebe mediante inspección visual que los dos diseños funcionan correctamente. Incluya en la memoria el cronograma obtenido al realizar la simulación del banco de pruebas. Solución al Ejercicio 1 La entity del circuito que implementa las dos funciones lógicas se muestra en Código VHDL 1.1. El Código VHDL 1.2 muestra la architecture del circuito describiendo su comportamiento. entity funcfg is port ( F, G : out std_logic; x, y, z : in std_logic ); end entity funcfg; Código VHDL 1.1: Solución al Apartado 1.a: entity del circuito. architecture Comp of funcfg is F <= y and z; G <= y or (not x and z); end architecture Comp; Código VHDL 1.2: Solución al Apartado 1.b: architecture del circuito describiendo su comportamiento. La Figura 1.1 muestra el diagrama del circuito implementado empleando dos puertas AND de dos entradas, una puerta OR de dos entradas y un inversor. 2 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - JUNIO DE 2016 Figura 1.1: Solución al Apartado 1.c: diagrama al nivel de puertas lógicas. El código VHDL de la entity y la architecture de estas tres puertas lógicas se muestra en Código VHDL 1.3, 1.4 y 1.5, respectivamente. El Código VHDL 1.6 muestra la architecture del circuito describiendo su estructura. entity and2 is x0, x1 : in std_logic ); end entity and2; architecture and2 of and2 is y0 <= x0 and x1; end architecture and2; Código VHDL 1.3: Puerta AND lógica. Dpto. de Informática y Automática, UNED 3

entity or2 is x0, x1 : in std_logic ); end entity or2; architecture or2 of or2 is y0 <= x0 or x1; end architecture or2; Código VHDL 1.4: Puerta OR lógica. entity not1 is x0 : in std_logic ); end entity not1; architecture not1 of not1 is y0 <= not x0; end architecture not1; Código VHDL 1.5: Puerta NOT lógica. 4 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - JUNIO DE 2016 architecture circuito_estruc of funcfg is signal xn: std_logic; signal sa1: std_logic; -- Declaración de las clases de los componentes component and2 is port ( y0 : out std_logic ; x0, x1 : in std_logic); end component and2; component not1 is x0 : in std_logic ); end component not1; component or2 is x0, x1 : in std_logic ); end component or2; -- Instanciación y conexión de los componentes N1 : component not1 port map (xn, x); A1 : component and2 port map (F, y, z); A2 : component and2 port map (sa1, xn, z); O1 : component or2 port map (G, y, sa1); end architecture circuito_estruc; ----------------------------------- Código VHDL 1.6: Solución al Apartado 1.d: architecture del circuito describiendo su estructura. El código VHDL del banco de pruebas del circuito se muestra en Código VHDL 1.7. El cronograma obtenido al simular el banco de pruebas es mostrado en la Figura 1.2. Figura 1.2: Cronograma del Apartado 1.e. Dpto. de Informática y Automática, UNED 5

----------------- -- Banco de pruebas del circuito Ejercicio 1 use IEEE.numeric_std.all; entity bp_funcfg is constant DELAY : time := 20 ns; -- Retardo usado en el test end entity bp_funcfg; architecture bp_funcfg of bp_funcfg is signal F, G : std_logic; signal x, y, z : std_logic; component funcfg is port ( F, G : out std_logic; x, y, z : in std_logic ); end component funcfg; UUT : component funcfg port map (F, G, x, y, z); vec_test : process is variable valor : unsigned (2 downto 0); -- Generar todos los posibles valores de entrada for i in 0 to 7 loop valor := to_unsigned(i,3); x <= std_logic(valor(2)); y <= std_logic(valor(1)); z <= std_logic(valor(0)); wait for DELAY; end loop; wait; -- Final de la simulación end process vec_test; end architecture bp_funcfg; --------------- Código VHDL 1.7: Solución al Apartado 1.e: banco de pruebas del circuito. 6 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - JUNIO DE 2016 EJERCICIO 2 2.a) (1 punto) Se pretende diseñar un codificador de prioridad 4 a 2 empleando únicamente puertas AND de dos entradas, puertas OR de 2 entradas e inversores. El circuito codificador ha de tener una señal de entrada x de 4 bits y dos señales de salida, codigo de 2 bits y activo de 1 bit. El comportamiento del circuito viene descrito por la siguiente tabla de verdad: x(3:0) codigo(1:0) activo 0000 00 0 0001 00 1 001-01 1 01 - - 10 1 1 - - - 11 1 Dibuje el diagrama del circuito codificador al nivel de puertas lógicas. A continuación, escriba en VHDL la entity y la architecture de cada una de las puertas lógicas que componen el circuito que acaba de dibujar. Finalmente, escriba en VHDL una entity y una architecture que describa la estructura del circuito que ha dibujado, instanciando y conectando las puertas lógicas que ha diseñado anteriormente. 2.b) (1 punto) Programe en VHDL un banco de pruebas que testee todas las posibles entradas al circuito codificador diseñado en el apartado anterior. El banco de pruebas debe comparar las salidas de la UUT con las salidas esperadas, mostrando el correspondiente mensaje de error en caso de que las salidas obtenidas de la UUT no correspondan con las esperadas. Emplee este banco de pruebas para comprobar el diseño realizado al contestar el Apartado 2.a. Incluya en la memoria el cronograma obtenido al realizar la simulación del banco de pruebas. 2.c) (3 puntos) Escriba en VHDL la architecture que describe la estructura de un circuito codificador de prioridad de 8 a 3, empleando para ello únicamente codificadores de prioridad 4 a 2 iguales a los diseñados en el Apartado 2.a y puertas lógicas (AND de dos entradas, OR de dos entradas e inversores). Dibuje el diagrama circuital correspondiente a dicho diseño. La tabla de verdad y la entity del circuito codificador de prioridad de 8 a 3 se muestran a continuación. Dpto. de Informática y Automática, UNED 7

x(7:0) codigo(2:0) activo 00000000 000 0 00000001 000 1 0000001-001 1 000001 - - 010 1 00001 - - - 011 1 0001 - - - - 100 1 001 - - - - - 101 1 01 - - - - - - 110 1 1 - - - - - - - 111 1 entity codificadorp8a3 is port ( codigo: out std_logic_vector(2 downto 0); activo: out std_logic; x : in std_logic_vector(7 downto 0) ); end entity codificadorp8a3; 2.d) (1 punto) Programe en VHDL un banco de pruebas que testee todas las posibles entradas al circuito codificador diseñado en el Apartado 2.c. El banco de pruebas debe comparar las salidas de la UUT con las salidas esperadas, mostrando el correspondiente mensaje de error en caso de que las salidas obtenidas de la UUT no correspondan con las esperadas. Emplee este banco de pruebas para comprobar el diseño realizado al contestar el Apartado 2.c. Incluya en la memoria el cronograma obtenido al realizar la simulación del banco de pruebas. 8 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - JUNIO DE 2016 Solución al Ejercicio 2 El diagrama del codificador de prioridad 4 a 2 se muestra en la Figura 1.3. Figura 1.3: Diagrama circuital del codificador de prioridad 4 a 2. El código VHDL de la entity y la architecture de las puertas lógicas se muestra en Código VHDL 1.3, 1.4 y 1.5, respectivamente. El Código VHDL 1.8 muestra el código VHDL del circuito describiendo estructura. El banco de pruebas del codificador de prioridad 4 a 2 se muestra en Código VHDL 1.9 1.10. El cronograma obtenido al simular el banco de pruebas se muestra en la Figura 1.4. Figura 1.4: Cronograma del Apartado 2.b. Dpto. de Informática y Automática, UNED 9

entity codificadorp4a2 is port ( codigo: out std_logic_vector(1 downto 0); activo: out std_logic; x : in std_logic_vector(3 downto 0) ); end entity codificadorp4a2; architecture circuito_estruc of codificadorp4a2 is signal sa1, so1, so3, xn2: std_logic; -- Declaración de las clases de los componentes component and2 is port ( y0 : out std_logic ; x0, x1 : in std_logic); end component and2; component not1 is x0 : in std_logic ); end component not1; component or2 is x0, x1 : in std_logic ); end component or2; -- Instanciación y conexión de los componentes N1 : component not1 port map (xn2, x(2)); A1 : component and2 port map (sa1, xn2, x(1)); O1 : component or2 port map (so1, x(0), x(1)); O2 : component or2 port map (codigo(0), x(3), sa1); O3 : component or2 port map (so3, x(2), x(3)); O4 : component or2 port map (activo, so3, so1); codigo(1)<=so3; end architecture circuito_estruc; ----------------------------------- Código VHDL 1.8: Solución al Apartado 2.a: codificador de prioridad 4 a 2. 10 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - JUNIO DE 2016 ----------------- -- Banco de pruebas del codificador de prioridad 4 a 2 use IEEE.numeric_std.all; entity bp_codificadorp4a2 is constant DELAY : time := 10 ns; -- Retardo usado en el test end entity bp_codificadorp4a2; architecture bp_codificadorp4a2 of bp_codificadorp4a2 is signal codigo : std_logic_vector(1 downto 0); signal activo : std_logic; signal x: std_logic_vector (3 downto 0); component codificadorp4a2 is port ( codigo: out std_logic_vector(1 downto 0); activo: out std_logic; x : in std_logic_vector(3 downto 0) ); end component codificadorp4a2; -- Procedure que calcula la salida y lo compara con el -- valor de salida que se pasa como argumento -- Si ambos valores no coinciden, se muestra un mensaje y se -- incrementa el contador de errores (error_count) procedure check_salida ( x : in std_logic_vector(3 downto 0); codigo : in std_logic_vector(1 downto 0); activo : in std_logic; error_count: inout integer ) is variable codigo_esp: std_logic_vector(1 downto 0); variable activo_esp: std_logic; if std_match (x,"0000") then codigo_esp := "00"; elsif std_match(x,"0001") then codigo_esp := "00"; elsif std_match(x,"001-") then codigo_esp := "01"; elsif std_match(x,"01--") then codigo_esp := "10"; elsif std_match(x,"1---") then codigo_esp := "11"; else codigo_esp := "00"; end if; if (x = "0000") then activo_esp := 0 ; else activo_esp:= 1 ; end if; Código VHDL 1.9: Solución al Apartado 2.b: banco de pruebas del codificador de prioridad 4 a 2. Dpto. de Informática y Automática, UNED 11

assert( codigo = codigo_esp) report "ERROR. Entrada: " & std_logic image(x(3)) & std_logic image(x(2)) & std_logic image(x(1)) & std_logic image(x(0)) &", resultado esperado: " & std_logic image(codigo_esp(1)) & std_logic image(codigo_esp(0)) & ", resultado actual: " & std_logic image(codigo(1)) & std_logic image(codigo(0)) & " en el instante " & time image(now); assert( activo = activo_esp) report "ERROR. Entrada: " & std_logic image(x(3)) & std_logic image(x(2)) & std_logic image(x(1)) & std_logic image(x(0)) & ", resultado esperado: " & std_logic image(activo_esp) & ", resultado actual: " & std_logic image(activo) & " en el instante " & time image(now); if (codigo /= codigo_esp)or (activo /= activo_esp) then error_count := error_count + 1; end if; end procedure check_salida; -- Fin de la definición del procedure UUT : component codificadorp4a2 port map (codigo, activo, x); vec_test : process is variable error_count : integer := 0; report "Comienza la simulación"; -- Generar todos los posibles valores de entrada for i in 0 to 15 loop x <= std_logic_vector(to_unsigned(i,4)); wait for DELAY; check_salida(x, codigo, activo, error_count); end loop; report "Simulación finalizada con " & integer image(error_count) & " errores"; wait; -- Final de la simulación end process vec_test; end architecture bp_codificadorp4a2; --------------- Código VHDL 1.10: Continuación del banco de pruebas del codificador de prioridad 4 a 2. 12 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - JUNIO DE 2016 El diagrama circuital del codificador de prioridad 8 a 3 está en la Figura 1.5. El diseño del codificador de prioridad 8 a 3 siguiendo el diagrama de la anterior figura, se muestra en Código VHDL 1.11. El banco de pruebas de este codificador está en Código VHDL 1.12 1.13. El cronograma obtenido al simular dicho banco de pruebas se puede ver en la Figura 1.6. Figura 1.5: Diagrama circuital del codificador de prioridad de 8 a 3. Dpto. de Informática y Automática, UNED 13

entity codificadorp8a3 is port ( codigo: out std_logic_vector(2 downto 0); activo: out std_logic; x : in std_logic_vector(7 downto 0) ); end entity codificadorp8a3; architecture circuito_estruc of codificadorp8a3 is signal sa2, sa1, activo_d1n: std_logic; signal activo_d1, activo_d0: std_logic; signal codigo_d0, codigo_d1: std_logic_vector(1 downto 0); -- Declaración de las clases de los componentes component codificadorp4a2 is port ( codigo: out std_logic_vector(1 downto 0); activo: out std_logic; x : in std_logic_vector(3 downto 0) ); end component codificadorp4a2; component and2 is port ( y0 : out std_logic ; x0, x1 : in std_logic); end component and2; component not1 is x0 : in std_logic ); end component not1; component or2 is x0, x1 : in std_logic ); end component or2; -- Instanciación y conexión de los componentes D1 : component codificadorp4a2 port map (codigo_d1, activo_d1, x(7 downto 4)); D0 : component codificadorp4a2 port map (codigo_d0, activo_d0, x(3 downto 0)); N1 : component not1 port map (activo_d1n, activo_d1); A2 : component and2 port map (sa2, activo_d1n, codigo_d0(1)); A1 : component and2 port map (sa1, activo_d1n, codigo_d0(0)); O1 : component or2 port map (activo, activo_d1, activo_d0); O2 : component or2 port map (codigo(0), sa1, codigo_d1(0)); O3 : component or2 port map (codigo(1), sa2, codigo_d1(1)); codigo(2)<=activo_d1; end architecture circuito_estruc; ----------------------------------- Código VHDL 1.11: Solución al Apartado 2.c: Diseño del codificador de prioridad 8 a 3. 14 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - JUNIO DE 2016 ----------------- -- Banco de pruebas del codificador de prioridad 8 a 3 use IEEE.numeric_std.all; entity bp_codificadorp8a3 is constant DELAY : time := 10 ns; -- Retardo usado en el test end entity bp_codificadorp8a3; architecture bp_codificadorp8a3 of bp_codificadorp8a3 is signal codigo : std_logic_vector(2 downto 0); signal activo : std_logic; signal x: std_logic_vector (7 downto 0); component codificadorp8a3 is port ( codigo: out std_logic_vector(2 downto 0); activo: out std_logic; x : in std_logic_vector(7 downto 0) ); end component codificadorp8a3; -- Procedure que calcula la salida y lo compara con el -- valor de salida que se pasa como argumento -- Si ambos valores no coinciden, se muestra un mensaje y se -- incrementa el contador de errores (error_count) procedure check_salida ( x : in std_logic_vector(7 downto 0); codigo : in std_logic_vector(2 downto 0); activo : in std_logic; error_count: inout integer ) is variable codigo_esp: std_logic_vector(2 downto 0); variable activo_esp: std_logic; if std_match(x,"00000000" ) then codigo_esp := "000"; elsif std_match(x,"00000001" ) then codigo_esp := "000"; elsif std_match(x,"0000001-" ) then codigo_esp := "001"; elsif std_match(x,"000001--" ) then codigo_esp := "010"; elsif std_match(x,"00001---" ) then codigo_esp := "011"; elsif std_match(x,"0001----" ) then codigo_esp := "100"; elsif std_match(x,"001-----" ) then codigo_esp := "101"; elsif std_match(x,"01------" ) then codigo_esp := "110"; elsif std_match(x,"1-------" ) then codigo_esp := "111"; else codigo_esp := "00"; end if; if (x = "00000000") then activo_esp := 0 ; else activo_esp:= 1 ; end if; Código VHDL 1.12: Solución al Apartado 2.d: banco de pruebas del codificador de prioridad 8 a 3. Dpto. de Informática y Automática, UNED 15

assert( codigo = codigo_esp) report "ERROR. Entrada: " & std_logic image(x(7)) & std_logic image(x(6)) & std_logic image(x(5)) & std_logic image(x(4)) & std_logic image(x(3)) & std_logic image(x(2)) & std_logic image(x(1)) & std_logic image(x(0)) &", resultado esperado: " & std_logic image(codigo_esp(2)) &std_logic image(codigo_esp(0)) & ", resultado actual: " & std_logic image(codigo(2)) & std_logic image(codigo(1)) & std_logic image(codigo(0)) & " en el instante " & time image(now); assert( activo = activo_esp) report "ERROR. Entrada: " & std_logic image(x(7)) & std_logic image(x(6)) & std_logic image(x(5)) & std_logic image(x(4)) & std_logic image(x(3)) & std_logic image(x(2)) & std_logic image(x(1)) & std_logic image(x(0)) & ", resultado esperado: " & std_logic image(activo_esp) & ", resultado actual: " & std_logic image(activo) & " en el instante " & time image(now); if (codigo /= codigo_esp)or (activo /= activo_esp) then error_count := error_count + 1; end if; end procedure check_salida; -- Fin de la definición del procedure UUT : component codificadorp8a3 port map (codigo, activo, x); vec_test : process is variable error_count : integer := 0; report "Comienza la simulación"; -- Generar todos los posibles valores de entrada for i in 0 to 255 loop x <= std_logic_vector(to_unsigned(i,8)); wait for DELAY; check_salida(x, codigo, activo, error_count); end loop; report "Simulación finalizada con " & integer image(error_count) & " errores"; wait; -- Final de la simulación end process vec_test; end architecture bp_codificadorp8a3; --------------- Código VHDL 1.13: Solución al Apartado 2.d: continuación del banco de pruebas del codificador de prioridad 8 a 3. 16 Dpto. de Informática y Automática, UNED

SOLUCIÓN AL TRABAJO PRÁCTICO - JUNIO DE 2016 Figura 1.6: Cronograma del Apartado 2.d. Dpto. de Informática y Automática, UNED 17