La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Integración de entidades en VHDL

Presentaciones similares


Presentación del tema: "Integración de entidades en VHDL"— Transcripción de la presentación:

1 Integración de entidades en VHDL
Ing. Diego Barragán Guerrero

2 Introducción Una de las fortalezas de VHDL es la facilidad de integrar “sistemas digitales” que contienen una gran cantidad de subsistemas electrónicos con el fin de minimizar el tamaño de la aplicación. La integración de entidades puede realizarse mediante el diseño individual de cada bloque lógico a través de varios procesos internos que posteriormente pueden unirse mediante un programa común. Otra posibilidad es observar y analizar de manera global todo el sistema evaluando su comportamiento solo a través de sus entradas y salidas.

3 Programación de entidades individuales: Contador y decodificador

4 Reporte de uso de recursos.

5 Contador y decodificador: usando señales.

6 Teclado, codificador, registro, decodificador

7 Teclado, codificador, registro, decodificador: TEST BENCH

8 Teclado, codificador, registro, decodificador: uso de SEÑALES.

9 Teclado, codificador, registro, decodificador: TEST BENCH.

10 SIGNAL y VARIABLES VHDL provee con dos objetos para trabajar con valores de datos no estáticos: señales y variables. Constantes y señales pueden ser globales (usadas en tipos de código concurrente o secuencial). Una variable es local, usada solo en códigos secuenciales: procesos. SIGNAL Una señal sirve para pasar valores de entrada o salida de un circuito, así como entre sus unidades internas. Todos los puertos de una entidad son señales por defecto. Sintaxis: SIGNAL name : type [range] [:= initial_value]; Ejemplos: SIGNAL control: BIT := '0'; SIGNAL count: INTEGER RANGE 0 TO 100; SIGNAL y: STD_LOGIC_VECTOR (7 DOWNTO 0); Una señal puede modificar su valor mediante la sentencia de asignación de señales, que es <= (ejm: count<=35;) Un aspecto muy importante de las señales, cuando se usa en un sección secuencial de código (proceso), es que su actualización no es inmediata, sino que se realiza una vez acaben los procesos activos.

11 SIGNAL Contador de unos (1)
Otro aspecto a tener en cuenta en las señales es la asignación múltiple hecha a una señal. El compilador puede indicar un aviso o bien no completar el chequeo de sintaxis, o inferir un circuito erróneo (considerando solo la última asignación, por ejemplo). Contador de unos (1) El código tiene múltiples asignaciones a la misma señal - temp- (temp <= 0; y temp <= temp + 1;). Sin embargo, debido a que el valor de una señal no se actualiza de inmediato, ambas asignaciones entran en conflicto, ya que el valor de la primera asignación no se cumple sino hasta el final del proceso, de tal modo que un valor erróneo se asigna en la segunda asignación.

12 VARIABLES Contrario a un señal o constante, una variable representa solo información local. Solo puede usarse dentro de un proceso (código secuencial) y su valor no puede transferirse de forma directa. Su actualización es inmediata, así el nuevo valor puede ser usado inmediatamente en la siguiente línea del código. Para declarar una variable se usa la siguiente sintaxis: VARIABLE name : type [range] [:= init_value]; Ejemplos: VARIABLE control: BIT := '0'; VARIABLE count: INTEGER RANGE 0 TO 100; VARIABLE y: STD_LOGIC_VECTOR (7 DOWNTO 0) := " "; Debido a que una variable solo puede usarse en código secuencial, debe colocarse en la parte declarativa del proceso.

13 VARIABLES Contador de unos (1)
Debido a que la actualización de una variable es inmediata, el valor inicial se establece correctamente y no hay conflicto de asignaciones múltiples.

14 SIGNAL versus VARIABLE
Asignación <= := Utilidad Representa interconexión de circuitos (cableado) Representa información local Visión Global Local (visible solo dentro del proceso) Entorno En código secuencial, la actualización no es inmediata (el nuevo valor por lo general solo es disponible a la finalización del proceso). Actualización inmediata (el nuevo valor puede ser usado en la siguiente línea del código) Uso En Paquetes, entidades, arquitecturas. En una entidad, todos los puertos son señales por defecto. Solo en código secuencial (dentro de un proceso, en su parte declarativa)

15 SIGNAL versus VARIABLE
Recordar: la asignación a una variable es inmediata, lo que no es el caso de un señal. En general, el nuevo valor de una señal será solo disponible al finalizar del proceso. Por lo general, solo una asignación a señal es permitida dentro de un proceso. Un error común al usar señales es olvidar que se necesita una cierta cantidad de tiempo para actualizar la señal. Así, la asignación sel<=sel+1 en el código resultará en 1 más cualquier valor que haya sido previamente propagado a sel, ya que la asignación sel<=0 no ha tenido el suficiente tiempo de actualización.

16 SIGNAL versus VARIABLE
Recordar: la asignación a una variable es inmediata, lo que no es el caso de un señal. En general, el nuevo valor de una señal será solo disponible al finalizar del proceso. Por lo general, solo una asignación a señal es permitida dentro de un proceso. Cuando se usa variables, la asignación de variables es siempre inmediata.

17 Asignación a SIGNAL Recordar que un puerto es una señal por defecto.
La asignación q<=d y qbar<=NOT q son ambas síncronas, de tal modo que sus nuevos valores serán disponibles solo al finalizar el proceso. Esto es un problema para qbar, debido a que el nuevo valor de q no se ha propagado todavía. Por lo tanto, qbar tomará el valor anterior a q, de tal modo que el valor de qbar estará un ciclo de reloj retardado. Resultando en un mal funcionamiento del circuito.

18 Asignación a SIGNAL DFF
En este ejemplo, se coloca la asignación qbar<=NOT q fuera del proceso, de tal forma que opera como una expresión concurrente.

19 Divisor de frecuencia: uso de señales y variables.
Circuito que divide la frecuencia de reloj por 6.

20 Divisor de frecuencia: uso de señales
La declaración generic es una herramienta muy útil cuando se necesita varios valores de prueba en una entidad. La línea GENERIC(N : INTEGER := 5);define una variable entera N igual a 5, que determina la división de frecuencia del reloj por 6 (N+1, debido al conteo del 0). De este modo, para cambiar la división de frecuencia a otro valor, solo es necesario cambiar N. Reset Asíncrono

21 Número de registros Una señal genera un FF siempre que una asignación se hace en la transición de otra señal, esto es, cuando ocurre una asignación síncrona. Tal asignación, siendo síncrona, solo puede suceder dentro de un proceso (usualmente luego de la declaración "IF signal'EVENT..." o "WAIT UNTIL"). Una variable, por otro lado, no necesariamente generará un FF si su valor nunca deja un proceso. Sin embargo, si el valor es asignado a una variable en la transición de otra señal, y tal valor es eventualmente pasado a un señal (la cual deja el proceso), se inferirán FF. Una variable genera también un registro cuando se usa antes de un valor que ha sido asignado a ella.

22 Número de registros Ejemplos:
En el precedente proceso, tanto output1 como output2 son almacenadas (esto es, infieren un FF), debido a que a ambas se les asigna valores a la transición de otra señal (clk).

23 Número de registros Ejemplo 2:
En el ejemplo precedente, solo output1 se almacenará (output2 hará uso de compuertas lógicas).

24 Número de registros: DFF con q and qbar
Ambas soluciones funcionan adecuadamente. La diferencia entre ellas reside en el número de FF necesarios en cada caso.

25 Referencias: Volnei A. Pedroni Circuit Design with VHDL. MIT Press, Cambridge, MA, USA. Maxinez, D.G., Alcalá, J VHDL: el arte de programar sistemas digitales. Compañía Editorial Continental.


Descargar ppt "Integración de entidades en VHDL"

Presentaciones similares


Anuncios Google