Sesión 5: Unidades de Diseño VHDL

Documentos relacionados
Sesión 4: Sentencias concurrentes y paquetes. S4 1 Laboratorio de Estructura de Computadores Curso 04 / 05

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

VHDL. Carlos Andrés Luna Vázquez. Lección 5. Sentencias concurrentes

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

PRÁCTICA: LENGUAJE VHDL

Introducción al VHDL

Tema 2 Descripción de VHDL (2/2)

Laboratorio de Arquitectura de Computadoras

Sesión 3: Modelo temporal: VHDL concurrente. S3 1 Laboratorio de Estructura de Computadores Curso 04 / 05

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

SINTAXIS BÁSICA DEL VHDL SIMPLIFICADO

Laboratorio de Arquitectura de Computadoras

Tema 2. Funciones Lógicas. Algebra de Conmutación. Minimización de funciones Lógicas. Introducción al VHDL.

Tema 3 - Modelado con HDL a nivel RTL

Practicas tuteladas VHDL (curso 04-05)

4. SUMADORES EN BINARIO PURO (I)

DESCRIPCIÓN DE CIRCUITOS DIGITALES

Sentencias. Contenidos. Secuencia versus Concurrente Sentencias Secuenciales Sentencias Concurrentes Subprogramas. cr.uclm.

9. Dibujar el diagrama de tiempos de las siguientes asignaciones de señales.

DISEÑO DE CIRCUITOS SECUENCIALES

Tema 1 Panorámica del lenguaje de descripción hardware VHDL (1/2)

Práctica 6. Diseño Lógico Digital mediante VHDL

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

El código concurrente esta destinado únicamente para el diseño de circuitos combinacionales.

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

Sistemas Electrónicos Digitales. PRACTICA nº 8

Introducción al VHDL. VHDL orientado a la síntesis de circuitos en Dispositivo Lógicos Programables

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

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

Recursos y Metodologías. Función. Programas

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

Tutorial de ModelSim PE Student Edition

VHDL: Código Secuencial. Arquitectura del Computador 2017

Tema 2. Funciones Lógicas. Algebra de Conmutación. Representación de circuitos digitales. Minimización de funciones lógicas.

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

LABORATORIO DE ARQUITECTURA DE COMPUTADORES. I. T. I. SISTEMAS / GESTIÓN GUÍA DEL ALUMNO

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

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

VHDL. Lenguaje de descripción hardware

Objetos de VHDL.! Un objeto en VHDL es un elemento que contiene. un valor de tipo específico de dato

Sumadores. Tipos de sumadores: Half-adder. Full-Adder. Carry-Look-Ahead. Carry-select.

VHDL Y FPGA LENGUAJE VHDL

TEMA 1 FUNDAMENTOS DEL DISEÑO DEL HARDWARE DIGITAL

Objetos de VHDL. Un objeto en VHDL es un elemento que contiene un valor de tipo específico de dato

SISTEMAS DIGITALES VHDL

VIII. Jerarquías de diseño en VHDL

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

LENGUAJE VHDL. Ing. Wilmer Naranjo 1

Tema 4 - Bloques combinacionales

VI. Especificación del Comportamiento

Operadores y atributos en VHDL [1]

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

A (A3, A2, A1, A0) B (B3, B2, B1, B0) A (A0, A1, A2, A3) B (B0, B1, B2, B3) 0 to 3. 3 downto 0

1. Lenguajes de descripción de hardware. VHDL

Lenguaje de descripción de Hardware VHSIC

8. Multiplexores Digitales

Introducción a los lenguajes de descripción hardware de alto nivel. M. Margarita Pérez Castellanos

Practica No. 5 Diseño de un Multiplicador

Asignatura: Tecnología de Computadores. Bloque 1: Introducción Tema 3: Introducción a los lenguajes de descripción de hardware

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

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

Planificaciones Sistemas Digitales. Docente responsable: ALVAREZ NICOLAS. 1 de 5

Practica No. 5 Diseño de un Multiplicador

TEMA IV: SÍNTESIS HARDWARE

VHDL Niveles de abstraccion de un modelo Caracteristicas de VHDL Entidad y Arquitectura Comportamiento y Estructura Conceptos Basicos del Lenguaje

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

V. Elementos de la Arquitectura

Lenguaje descripción de hardware: VHDL

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

Unidad Aritmético Lógica A.G.O. All Rights Reserved

Índice. VHDL Lección 2.9 Máquinas de Estados Finitos (FSM) 1

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

Práctica 7. Diseño en VHDL de un modulador PPM

ABSTRACCIONES DE UN SISTEMA DIGITAL

Tema 2 Descripción de VHDL (1/2)

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.

INTRODUCCIÓN A LOS VHDL. AUTOR: Cavallero, Rodolfo Antonio.

LABORATORIO DE ARQUITECTURA DE COMPUTADORES. I. T. I. SISTEMAS / GESTIÓN GUÍA DEL ALUMNO

Sistemas Electrónicos Digitales. PRACTICA nº 9

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

Julio. [ Programación en VHDL ] Guía rápida. [ h t t p : / / w w w. o p e n b o x e r m b. c o m / a s i g n a t u r a s / d s d.

SIMULACIÓN EN VHDL CON VERIBEST

Manual de turbo pascal

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

Tipos de datos en VHDL

Introducción a VHDL. Por: Carlos A. Fajardo UIS - Sistemas Digitales

Introducción n al diseño lógico con VHDL

MAQUINA DE ESTADO FINITO (FSM) Autómata finito

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

Diseño Lógico I Facultad de Ciencias Exactas y Tecnología UNT. LENGUAJES DE DESCRIPCIÓN DE HARDWARE

Ejemplo básico de descripción VHDL

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

EL LENGUAJE VHDL CONCEPTOS BÁSICOS

Sistemas Electrónicos Digitales. PRACTICA nº 3

5. Decodificadores. Salida _1= A A A A = m = M ... Electrónica Digital. Tema

Introducción al lenguaje VHDL

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

Ing. Rodrigo A. Melo, Ing. Salvador E. Tropea. 12 de julio de 2010

3. Indicar qué tipo de literal es cada uno y su equivalencia en lenguaje convencional (donde fuera preciso).

Teoría de Diseño lógico

Transcripción:

Sesión 5: Unidades de Diseño VHDL S5 1

S5 2 Unidades de Diseño Las unidades de diseño son las construcciones VHDL que se pueden analizar y compilar de forma independiente. Se guardan en una biblioteca de diseño (WORK por defecto). Una o más unidades de diseño en secuencia constituyen un archivo de diseño. Existen dos clases de unidades de diseño: las primarias, y las secundarias. Las tres unidades de diseño primarias son: declaración de entidad declaración de paquete declaración de configuración Las dos unidades de diseño secundarias son: cuerpo de arquitectura cuerpo de paquete

S5 3 Sintaxis: Declaración de Entidad ENTITY identificador IS cabecera parte_declarativa [ {sentencia_entidad}] END [ identificador] ; elemento_declarativo_entidad ::= declaración_subprograma cuerpo_subprograma dclaración_tipo declaración_subtipo declaración_constante declaración_señal clausula_use cabecera ::= [genéricos_formales] [puertos_formales] genéricos_formales ::= GENERIC (lista_genéricos); sentencia_entidad ::= sentencia_aserto_concurrente llamada_proced._concurrente_pasivo sentencia_proceso_pasivo lista_genéricos ::= genérico {, genérico} genérico ::= [CONSTANT] identificadores : [IN] tipo [:= valor] puertos_formales ::= PORT (lista_puertos); lista_puertos ::= puerto {, puerto} puerto ::= [SIGNAL] identificadores : [modo] tipo [bus] [:= valor] modo ::= IN OUT INOUT parte_declarativa ::= {elemento_declarativo_entidad}

S5 4 En la parte declarativa de la entidad aparecen elementos utilizados exclusivamente en la entidad. Las sentencias concurrentes que se permiten en una declaración de entidad deben ser pasivas, es decir, no deben contener asignaciones de señales. Ejemplos de declaración de entidad: ENTITY ent IS END; ENTITY ent1 IS PORT (s1 : IN BIT; s2 : OUT bit); END ent1; ENTITY ent3 IS GENERIC ( n : IN POSITIVE); PORT (s1 : IN BIT; s2 : OUT BIT_VECTOR(1 TO n)); USE WORK.paquete_tiempo.ALL; -- donde está definida la constante retardo TYPE byte IS ARRAY (1 TO 8) OF BIT; PROCEDURE ini(signal s : byte) IS s <= (OTHERS => '1') AFTER retardo; END ini; ASSERT s1'delayed'stable(5 ns) REPORT "error" SEVERITY ERROR; proc_pasivo(s1, retardo); END ent3; ENTITY ent2 IS GENERIC (n : IN POSITIVE); PORT (s1 : IN BIT; s2 : OUT BIT_VECTOR(1 TO n)); END ent2;

S5 5 Arquitectura de Entidad Sintaxis general de un cuerpo de arquitectura: ARCHITECTURE identificador OF nombre_entidad IS parte_declarativa_arquitectura sentencias_arquitectura END [identificador]; parte_declarativa_arquitectura ::= parte_declar._bloque sentencias_arquitectura ::= {sentencia_concurrente} sentencia_concurrente ::= sentencia_bloque sentencia_instanciación_componentes USE WORK.componentes.ALL; -- para gen_reloj ARCHITECTURE arq OF ent2 IS SIGNAL s : BIT_VECTOR(1 TO n); COMPONENT comp PORT(a : IN BIT; b : OUT BIT); END COMPONENT; s2 <= s AFTER 2 ns; c1 : FOR I IN 2 TO n GENERATE c : comp PORT MAP(s1, s(i)); END GENERATE; c2 : gen_reloj POR MAP (s(s(1)); END arq; Ejemplos: ARCHITECTURE arq OF ent IS END; ARCHITECTURE arq2 OF ent1 IS CONSTANT retardo : TIME := 5 ns; SIGNAL s : bit; s2 <= fbit(s) AFTER 3 ns; s <= s1 AFTER retardo; END arq2; ARQITECTURE arq1 OF ent1 IS SIGNAL s : BIT := '1'; PROCEDURE p(signal a : IN BIT; SIGNAL b : INOUT BIT) IS b <= NOT b WHEN a = '1' ELSE b; END p; p1 : p(s1, s); p2 : s2 <= fbit(s) AFTER 2 ns; p3 : PROCESS(s) VARIABLE v : BIT; v := s; END PROCESS; END arq1;

Paquetes Permiten la declaración de objetos, tipos y subprogramas con la posibilidad de referenciarlos desde muchos puntos fuera del paquete. Un paquete se compone de dos partes: la declaración del paquete, que define la parte pública o visible del mismo, y el cuerpo del paquete, que define la parte oculta, visible solo en el interior. Declaración de Paquete Sintaxis: PACKAGE identificador IS parte_declarativa_paquete END [nombre_simple_paquete]; parte_declarativa_paquete ::= {elemento_declarativo_paquete} elemento_declarativo_paquete ::= declaración_subprograma declaración_tipo declaración_subtipo declaración_constante declaración_señal clausula_use declaración_componente S5 6

S5 7 Ejemplo de declaración de paquete: PACKAGE general IS TYPE bit01xz IS ('0','1','x,'z'); FUNCTION and01xz(x,y : bit01xz) return bit01xz; FUNCTION or01xz(x,y : bit01xz) return bit01xz; FUNCTION not01xz(x : bit01xz) return bit01xz; FUNCTION nand01xz(x,y : bit01xz) return bit01xz; FUNCTION nor01xz(x,y : bit01xz) return bit01xz; FUNCTION xor01xz(x,y : bit01xz) return bit01xz; END general;

S5 8 Cuerpo del Paquete Ejemplo: Sintaxis: PACKAGE BODY nombre_simple_paquete IS parte_declar._cuerpo_paquete END [nombre_simple_paquete]; parte_declar._cuerpo_paquete ::= {elem._declar._cuerpo_paquete} Elem._declar._cuerpo_paquete ::= declaración_subprograma cuepo_subprograma declaración_tipo declaración_subtipo declaración_constante declaración_alias clausula_use PACKAGE BODY general IS FUNCTION and01xz(x,y : bit01xz) return bit01xz IS variable z : bit01xz; IF x = 'x' OR y = 'x' THEN z := 'x'; ELSIF x = '1' and y = '1' THEN z := '1'; ELSE z := '0'; END IF; RETURN z; END and01xz; FUNCTION or01xz(x,y : bit01xz) return bit01xz IS variable z : bit01xz; IF x = '1' OR y = '1' THEN z := '1'; ELSIF x = '0' and y = '0' THEN z := '0'; ELSE z := '1'; END IF; RETURN z; END or01xz;

S5 9 Ejemplo (continuación): FUNCTION not01xz(x : bit01xz) return bit01xz IS variable z : bit01xz; IF x = 'x' THEN z := 'x'; ELSIF x = '1' THEN z := '0'; ELSE z := '1'; END IF; RETURN z; END not01xz; FUNCTION nand01xz(x,y : bit01xz) return bit01xz IS variable z : bit01xz; z := not01xz(and01xz(x,y)); RETURN z; END nand01xz; FUNCTION nor01xz(x,y : bit01xz) return bit01xz IS variable z : bit01xz; z := not01xz(or01xz(x,y)); RETURN z; END nor01xz; FUNCTION xor01xz(x,y : bit01xz) return bit01xz IS variable z : bit01xz; z := or01xz(and01xz(not01xz(x),y),and01xz(x,not01xz(y))); RETURN z; END xor01xz; END general;

S5 10 Referenciación de los Elementos de un Paquete 1. Prefijando sus nombres con el nombre del paquete. Ejemplo: SIGNAL pc : general.bit01xz; 2. Utilizando la clausula USE en la región declarativa correspondiente. Sintaxis general de la clausula USE: USE nombre_seleccionado {, nombre_seleccionado} ; nombre_seleccionado ::= prefijo.sufijo prefijo ::= nombre sufijo ::= identificador ALL Con el prefijo designamos el nombre de la biblioteca y con el sufijo el nombre del Paquete. Si se van a utilizar todos los nombres del paquete, se puede utilizar el sufijo ALL.

S5 11 Eemplo Si en la biblioteca proyecto1 existiese un paquete de nombre utilidad, podriamos referenciarlo con la siguiente declaración: USE proyecto1.utilidad; Si ahora queremos referenciar un objeto del paquete, por ejemplo, la función fun, lo haríamos con la siguiente declaración: USE utilidad.fun; El mismo resultado podemos obtenerlo utilizando la única declaración siguiente: USE proyecto1.utilidad.fun; La diferencia estriba en que en este último caso sólo hacemos visible la función fun del paquete utilidad, mientras que en el primero hacemos visible el paquete utilidad. Si se van a utilizar todos los nombres del paquete, se puede utilizar el sufijo ALL. USE general.all;

Declaración de Configuración S5 12 Cuando se declara un componente en la arquitectura de una entidad lo que realmente se declara es una plantilla del componente que especifica los puertos y genéricos del mismo, pero nada se dice sobre su implementación. La declaración de componente se puede vincular a una entidad específica de una biblioteca por medio de la especificación de configuración que aparece dentro de la misma arquitectura. Un componente puede volver a vincularse a una nueva implementación cambiando la especificación de configuración y recompilando la arquitectura. Esta posibilidad es útil pero requiere la alteración del modelo y su recompilación. Para proporcionar mayor flexibilidad al problema de la configuración de un diseño, VHDL dispone de la unidad de biblioteca denominada declaración de configuración. Un mismo diseño puede disponer de varias declaraciones de configuración que vinculan sus componentes a diferentes entidades. De la misma forma, una determinada entidad puede formar parte de varias declaraciones de configuración correspondientes a varios diseños.

S5 13 Sintáxis CONFIGURATION identificador OF nombre_entidad IS {cláusula_use} configuración_bloque END [identificador]; configuración_bloque ::= FOR especificación_bloque {cláusula_use} {elemento_configuración} END FOR; especificación_bloque ::= nombre_arquitectura rótulo_sentencia_bloque rótulo_sentencia_generación [(especificación_índice)] elemento_configuración ::= configuración_bloque configuración_componente configuración_componente ::= FOR especificación_componente [USE indicación_vinculación;] [configuración_bloque] END FOR;

Posibilidad de las declaraciones de configuración para crear unidades de diseño conformadas con entidades y arquitectura previamente elaboradas y contenidas en bibliotecas de diseño. La entidad_1 tiene definidas tres arquitecturas: entidad_1 arquitectura_1.1 de comportamiento arquitectura_1.2 de flujo de datos arquitectura_1.3 estructural. arquitectura_1.1 comportamiento arquitectura_1.2 fjujo_de_datos arquitectura_1.3 estructural componente componente Cofiguración_1 El primer componente de arquitectura_1.3 se puede instanciar con entidad_2, con un componente en su arquitectura que se puede instanciar con entidad_3. entidad_2 Ejemplode declaración de configuración: Declaración de configuración_1 para entidad_1: arquitectura_2.1 comportamiento arquitectura_2.2 estructural componente Asocia arquitectura_1.3 con entidad_1 Instancia los componentes de dicha arquitectura a entidad_2 y entidad_4 Cofiguración_2 entidad_2 y entidad_4 asociadas respectivamente A arquitectura_2.2 y arquitectura_4.2. El componente de arquitectura_2.2 se instancia a entidad_3 asociada a arquitectura_3.2. entidad_3 arquitectura_3.1 arquitectura_3.2 comportamiento fjujo_de_datos declaracio paquete cuerpo_paquete 1 declaracio paquete Se indica con sombreado la asociación entidadarquitectura, y con flechas las instanciaciones de componentes y especificaciones de configuración. arquitectura_4.1 comportamiento entidad_4 arquitectura_4.2 fjujo_de_datos arquitectura_4.3 estructural cuerpo_paquete 2 S5 14 componente componente

S5 15 Ejemplo de declaración de configuración (código): CONFIGURATION configuracion_1 OF diseño IS FOR estructural FOR componente1 : entidad_2 FOR estructural FOR componente : entidad_3 USE ENTITY WORK.entidad_3(flujo_de_datos); END FOR; END FOR; FOR componente2 : entidad_4 USE ENTITY WORK.entidad_4(flujo_de_datos); END FOR; END FOR; END configuracion_1;

Fases en la ejecución de un programa VHDL S5 16 Programa fuente VHDL ENTITY sistema IS PORT(a, b, c : IN bit; c, d : INOUT bit); END ENTITY; ARCHITECTURE rtl OF sistema IS SIGNAL e, f : bit; e <= a AND b AFTER 4 ns; f <= b AND c AFTER 4 ns; c <= e NAND d AFTER 5 ns; d <= f NAND c AFTER 5 ns; END rtl; Representación interna Analizador VHDL Red de procesos Elaborador VHDL Simulador VHDL

x3 x2 x1 x0 y3 y2 y1 y0 ------------------------------- x3y0 x2y0 x1y0 x0y0 x3y1 x2y1 x1y1 x0y1 x3y2 x2y2 x1y2 x0y2 Ejemplo completo: Multiplicador celular x3y3 x3y2 x3y1 x3y0 ------------------------------------------------------ p6 p5 p4 p3 p2 p1 p0 z3 x3 z2 x2 z1 x1 z0 x0 comp2 y0 t( 0,3 ) t(0,2) y0 y0 t(0,1) y0 t(0,0) y0 w0 x3 v(0,3) x2 v(0,2) x1 v(0,1) x0 comp1 y1 t(1,3) y1 t(1,2) y1 t(1,1) y1 t(1,0) y1 w1 comp5 x3 v(1,3) x2 x1 v(1,2) v(1,1) x0 comp7 comp3 t(2,3) y2 y2 t ( 2, 2) y2 t(2,1) y2 t(2,0) y2 w2 comp4 x3 v(2,3) x2 v(2,2) x1 v(2,1) x0 y3 y3 y3 y3 t(3,2) t(3,1) t(3,0) y3 w3 x3 x2 comp6 x1 x0 p7 p6 p5 p4 S5 17 p3 p2 p1 p0

Declaración de entidad USE WORK.mul_pack.ALL; ENTITY mul_n IS GENERIC(n : integer := 4); PORT(x,y,z,w : IN bit_vector(n-1 DOWNTO 0); p : OUT bit_vector(((2*n)-1) DOWNTO 0)); END mul_n; Diseño de la Celda Básica Entidad cout = xyz + xyw + zw product = xy z w v(i-1,j+1) x(j) Declaración de Entidad y(i) t(i,j) z x y y cout w x product y(i) t(i,j-1) ENTITY IS PORT(x, y, z, w : IN bit; cout, product : OUT bit); END ; x(j) v(i,j) S5 18

Arquitectura de Comportamiento Arquitectura de Flujo de Datos ARCHITECTURE comportamiento OF IS PROCESS(x, y, z, w) VARIABLE n : integer; CONSTANT producto : bit_vector(0 TO 3) := "0101"; CONSTANT arrastre : bit_vector(0 to 3) := "0011"; n := 0; IF x = '1' AND y = '1' THEN n := n+1; END IF; IF z = '1' THEN n := n+1; END IF; IF w = '1' THEN n:= n+1; END IF; product <= producto(n) AFTER 10 ns; cout <= arrastre(n) AFTER 20 ns; END PROCESS; END comportamiento; ARCHITECTURE flujo_de_datos OF IS SIGNAL s : bit; s <= (x AND y) XOR z; product <= s XOR w AFTER 10 ns; cout <= (x AND y AND z) OR (s AND w) AFTER 20 ns; S5 END flujo_de_datos; 19

Celda Básica: Arquitectura Estructural a b sumador co ci completo s a b medio sumador medio co s ci sumador USE work.all; ARCHITECTURE estructural OF IS COMPONENT medio_sum GENERIC(retardo_c, retardo_s : time); PORT(i1, i2 : IN bit; carry, suma : OUT bit); END COMPONENT; COMPONENT and2_c GENERIC(retardo : time); PORT(i1, i2 : IN bit; o : OUT bit); END COMPONENT; COMPONENT or2_c GENERIC(retardo : time); PORT(i1, i2 : IN bit; o : OUT bit); END COMPONENT; FOR ALL : medio_sum USE ENTITY WORK.medio_sumador(generica); FOR ALL : and2_c USE ENTITY WORK.and2(generica); FOR ALL : or2_c USE ENTITY WORK.or2(generica); SIGNAL a, b, c, d : bit; comp1 : and2_c GENERIC MAP(20 ns) PORT MAP(x, y, a); comp2 : medio_sum GENERIC MAP(10 ns, 20 ns) PORT MAP(a, z, b, c); comp3 : or2_c GENERIC MAP(10 ns) PORT MAP(b, d, cout); comp4 : medio_sum GENERIC MAP(10 ns, 20 ns) PORT MAP(c, w, d, product); END estructural; S5 20

S5 21 Entidades Disponibles en la biblioteca WORK ENTITY medio_sumador IS GENERIC(retardo_c, retardo_s : time); PORT(i1, i2 : IN bit; carry, suma : OUT bit); END medio_sumador; ARCHITECTURE generica OF medio_sumador IS carry <= i1 AND i2 AFTER retardo_c; suma <= i1 XOR i2 AFTER retardo_s; END generica; ENTITY and2 IS GENERIC(retardo : time); PORT(i1, i2 : IN bit; o : OUT bit); END and2; ARCHITECTURE generica OF and2 IS o <= i1 AND i2 AFTER retardo; END generica; ENTITY or2 IS GENERIC(retardo : time); PORT(i1, i2 : IN bit; o : OUT bit); END or2; ARCHITECTURE generica OF or2 IS o <= i1 OR i2 AFTER retardo; END generica;

Arquitectura estructural ARCHITECTURE estructural OF mul_n IS COMPONENT PORT(x,y,z,w : IN bit; cout, product : OUT bit); END COMPONENT; FOR ALL : USE ENTITY WORK.(comportamiento); SIGNAL t,v : bit_array(0 TO n-1, 0 TO n-1); comp1 : PORT MAP(x(0),y(0),z(0),w(0),t(0,0),p(0)); fila1 : FOR j IN 1 TO n-1 GENERATE comp2 : PORT MAP(x(j),y(0),z(j),t(0,j-1),t(0,j),v(0,j)); END GENERATE; columna1 : FOR i IN 1 TO n-1 GENERATE comp3 : PORT MAP(x(0),y(i),v(i-1,1),w(i),t(i,0),p(i)); END GENERATE; comp4 : PORT MAP(x(n-1),y(n-1),t(n-2,n-1),t(n-1,n-2),p((2*n)-1),p((2*n)-2)); columnan : FOR i IN 1 TO n-2 GENERATE comp5 : PORT MAP(x(n-1),y(i),t(i-1,n-1),t(i,n-2),t(i,n-1),v(i,n-1)); END GENERATE; filan : FOR j IN 1 TO n-2 GENERATE comp6 : PORT MAP(x(j),y(n-1),v(n-2,j+1),t(n-1,j-1),t(n-1,j),p(n+j-1)); END GENERATE; columnaj : FOR i IN 1 TO n-2 GENERATE filai : FOR j IN 1 TO n-2 GENERATE comp7 : PORT MAP(x(j),y(i),v(i-1,j+1),t(i,j-1),t(i,j),v(i,j)); END GENERATE; END GENERATE; END estructural; S5 22

Test para el caso de 8 bits S5 23 USE WORK.mul_pack.ALL; ENTITY mul_8 IS PORT(a,b : INTEGER := 0); END mul_8; ARCHITECTURE esquema OF mul_8 IS COMPONENT mul_n GENERIC(n : integer); PORT(x,y,z,w : IN bit_vector(n-1 DOWNTO 0); p : OUT bit_vector((2*n)-1 DOWNTO 0)); END COMPONENT; SIGNAL x,y,z,w : bit_vector(7 DOWNTO 0); SIGNAL p : bit_vector(15 DOWNTO 0); SIGNAL ab, p_ent : INTEGER; FOR mult : mul_n USE ENTITY WORK.mul_n(estructural); mult : mul_n GENERIC MAP(8) PORT MAP (x,y,z,w,p); test : PROCESS x <= int_b8(a); y <= int_b8(b); ab <= a*b; WAIT FOR 200 ns; p_ent <= b16_int(p); WAIT ON a,b; END PROCESS; END esquema;

Paquete de tipos y funciones de conversión PACKAGE mul_pack IS TYPE bit_array IS ARRAY(natural RANGE <>, natural RANGE <>) OF bit; SUBTYPE b8 IS bit_vector(7 DOWNTO 0); SUBTYPE b16 IS bit_vector(15 DOWNTO 0); FUNCTION b16_int(a : b16) RETURN INTEGER; FUNCTION int_b8(a : INTEGER) RETURN b8; END mul_pack; PACKAGE BODY mul_pack IS FUNCTION b16_int (a: b16) RETURN INTEGER is VARIABLE int_var : INTEGER := 0; FOR i in 0 to 15 LOOP IF ( a(i) = '1') THEN int_var := int_var + (2**i); END IF; END LOOP; RETURN int_var; END b16_int; FUNCTION int_b8 (a: INTEGER) RETURN b8 is VARIABLE int_var : b8; VARIABLE temp1 : INTEGER := 0; VARIABLE temp2 : INTEGER := 0; temp1 := a; FOR i in 7 downto 0 LOOP temp2 := temp1/(2**i); temp1 := temp1 mod (2**i); IF ( temp2 = 1 ) THEN int_var(i) := '1'; ELSE int_var(i) := '0'; END IF; END LOOP; RETURN int_var; END int_b8; END mul_pack; S5 24

Practica 5: Unidades de diseño VHDL Objetivos 1. Utilización de las unidades de diseño de VHDL, especialmente los paquetes. Práctica a realizar Diseño binario del operador matemático de números naturales diseñado en la práctica 2. 8 bits Binario a natural 8 bits Binario a natural a b Operador Matemático de Números Naturales (práctica 2) d Natural a Binario 16 bits 2 bits c Todos los tipos y funciones definidos en la práctica 2 y todos los necesarios para ésta, deberán definirse dentro de un paquete que se haga visible al principio de la declaración de entidad. Resultados a entregar Documentación del programa en la que conste: 1. Especificación del sistema modelado. 2. Listado VHDL comentado del código del programa. 3. Relación E/S que muestre la respuesta del sistema frente a entradas significativas. S5 25