1.22k likes | 1.66k Views
En este curso-taller se aborda uno de los ms extendidos lenguajes de descripcin de hardware, el VHDL, sus utilidades y aplicaciones y las herramientas y metodologas para sintetizar sistemas digitales en FPGAs, que son los dispositivos programables ms ampliamente usados para generar tanto prototi
E N D
7. Lenguajes de descripción de hardware (HDLs) Estos lenguajes fueron desarrollados para hacer frente a la creciente complejidad de los diseños.
Se puede hacer una analogía con los que se pueden llamar lenguajes de descripción de software.
Los HDLs son usados para modelar la arquitectura y comportamiento de sistemas electrónicos discretos.
Se utilizan en la fase de diseño
Necesidad de Simulador lógico
Herramienta necesaria para reproducir el comportamiento del sistema modelado
Permite la verificación del sistema diseñado.
Actualmente existen herramientas software que permiten pasar de dichas descripciones a diseños a nivel de compuertas: SÍNTESIS
8. Dominios descriptivos y niveles de abstracción Dominios descriptivos:
Comportamiento
Se realiza la función sin información de cómo se hace
Estructural
Los bloques se conectan mediante interconexiones (netlist o esquemas)
Físico
Localización y propiedades físicas reales
9. Dominios descriptivos y niveles de abstracción Niveles de abstracción:
Circuito
Valores continuos, todo es electrónica, tiempo continuo
Lógico
Valores lógicos (T,F), sólo computación, tiempo continuo
RT (RegisterTransfer)
Palabras con valores discretos, control y procesamiento, tiempo discreto
Algorítmico
Estructuras abstractas, dependencias en lugar de tiempo
Sistema
Relaciones entre subsistemas, síncronos y protocolos
10. Dominios descriptivos y niveles de abstracción Medidas:
Circuito
Tiempo de subida y bajada, consumos área
Lógico
Tiempo de conmutación, skew, área equivalente
RT
Tiempo de ciclo, márgenes, compuertas equivalentes
Algorítmico
Latencia, cadencia de datos, número de módulos
Sistema
Ancho de banda, MIPS.
11. Dominios descriptivos y niveles de abstracción Transiciones:
Síntesis/Análisis
Comportamiento ? estructural
Optimización
Mejora de una descripción sin variar el nivel de abstracción
Generación/Extracción
Estructural ? físico
Refinamiento/Abstracción
Bajar/Subir el nivel de abstracción en el mismo dominio
12. Niveles de diseño y dominios de representación
VHDL: VHSIC, Hardware Description Language
VHSIC: Very High Speed Integrated Circuits
13. Lenguajes de descripción de hardware (HDLs). Síntesis lógica Síntesis lógica:
Convierte una descripción de un sistema digital mediante un HDL en una implementación tecnologíca.
Descripción HDL:
library ieee;
use ieee.std_logic_1164.all;
entity puertas is
port ( A, B, C : in std_logic;
Y: out std_logic
);
end puertas;
ARCHITECTURE a of puertas is
begin
Y <= (A and B) or C;
end a;
14. Ventajas del uso de HLDs Soportan tres estilos de descripción básicos:
DESCRIPCIÓN COMPORTAMENTAL (behavioral)
DESCRIPCIÓN DE FLUJO DE DATOS (data-flow)
DESCRIPCIÓN ESTRUCTURAL (estructural)
Un diseño puede ser descrito con una combinación de los tres estilos.
El lenguaje es independiente de la tecnología:
El mismo modelo puede ser sintetizado en librerías de distintos vendedores.
Reducción de la dependencia con el fabricante de ASICs, ya que la portabilidad a otra tecnología es mucho más rápida.
Reutilizar el diseño en componentes tan distintos como ASICs o FPGAs con un esfuerzo mínimo.
15. Ventajas del uso de HLDs Se puede verificar la funcionalidad del diseño muy pronto en el proceso de diseño.
La simulación del diseño a tan alto nivel, antes de la implementación a nivel de compuertas, permite probar la arquitectura y rectificar decisiones en las primeras fases de diseño, con un esfuerzo mucho menor que si se realizase en fases posteriores.
Sencillez
Como la descripción se centra más en la funcionalidad que en la implementación, resulta más sencillo para una persona comprender qué función realiza el diseño a partir de una descripción HDL que a partir de un esquemático de interconexión de compuertas
Ahorro de tiempo
Facilita las correcciones en el diseño debidas a fallos de diseño o cambio de especificaciones.
La existencia de herramientas comerciales automáticas (sintetizadores RTL) que permiten crear descripciones gate-level a partir de los modelos a nivel RTL
begin
Y <= (A and B) or C;
end a;
16. Ventajas del uso de HLDs Los HDL tienen elementos que permiten el diseño a gran escala, de forma fácil; por ejemplo, componentes, funciones, procedimientos, paquetes.
El lenguaje soporta metodologías de diseño diferentes: top-down, bottom-up, o mixtas.
La propia descripción en el lenguaje de alto nivel sirve como especificación del comportamiento del sistema a diseñar (tanto a nivel funcional como las restricciones temporales), y la interface con el resto del sistema.
Los modelos descritos con estos lenguajes, pueden ser verificados fácilmente y de forma precisa por simuladores definidos en base a estos HDL.
El lenguaje puede ser usado como un medio de intercambio entre los fabricantes de ASICs y los usuarios de herramientas CAD.
El lenguaje soporta jerarquía
Un sistema digital puede ser modelado como un conjunto de componentes interconectados.
A su vez cada componente puede ser modelado como un conjunto de subcomponentes.
17. Ventajas del uso de HLDs El modelo, a través de los atributos, puede contener información del diseño en sí mismo, no solo de la funcionalidad: por ejemplo, informaciones tales como el área y velocidad.
Soporta modelos de tiempos síncronos y asíncronos.
Posibilidad de implementar distintas técnicas de modelado digital (descripciones de máquinas de estados finitos (FSM), descripciones algorítmicas, redes de Petri, y ecuaciones Booleanas
El lenguaje es público y "not propietary" (especialmente en el caso del VHDL).
Es un estándar ANSI e IEEE; por lo tanto, los modelos descritos en estos lenguajes (VHDL o VERILOG) son totalmente portables.
La capacidad de definir tipos de datos sofisticados, suministra la potencia de describir y simular nuevos diseños a un nivel de abstracción en el cual aún no se barajan detalles de la implementación
Los genéricos y atributos facilitan la descripción de modelos parametrizables.
18. Inconvenientes del uso de HDLs Supone un esfuerzo de aprendizaje, ya que prácticamente se puede considerar como nueva metodología.
Necesaria la adquisición de nuevas herramientas:
Simuladores
Sintetizadores de HDL, teniendo que mantener el resto de las herramientas para otras fases del diseño.
El uso de estos lenguajes hace que involuntariamente se pierda un poco de control sobre el aspecto físico del diseño, dándole una mayor importancia a la funcionalidad de dicho diseño.
19. Lenguajes de Descripción de Hardware. En la actualidad se utilizan fundamentalmente VHDL, Verilog y SystemC . Otro HDL, el UDI/L se utiliza exclusivamente en Japón.
VHDL (Very High Speed Integrated Circuit Hardware Description Language). Nace como proyecto del Departamento de Defensa (DoD) de EEUU (año 82) para disponer de una herramienta estándar, independiente para la especificación (modelado y/o descripción) y documentación de los sistemas electrónicos. El IEEE lo adopta y estandariza.
Verilog: Software de la firma Gateway y posteriormente de Cadence. Estándar industrial hasta que apareció el VHDL como estándar IEEE. En 1990 Cadence lo hace público y el IEEE lo estandariza en 1995.
SystemC: es una extensión del C++, que utiliza unas bibliotecas de clase para describir y simular circuitos digitales. Se publicó en 1.999 .
Diversos grupos de investigadores empiezan a crear y desarrollar los llamados "lenguajes de descripción de hardware" cada uno con sus peculiaridades, buscando una solución a los problemas que presentaba el diseño de los sistemas complejos.
Ejemplos:
IDL desarrollado por IBM ,
TI - HDL de Texas Instruments,
ZEUS de General Electric,
prototipos de universidades
20. En resumen:¿Para qué sirven los HDL?
Sirven para modelar circuitos, para expresar ideas
Los modelos se pueden simular para comprobar que se corresponden con la funcionalidad deseada
21. ¿Para qué sirven los HDL?
Para generar documentación, siempre y cuando los modelos de los circuitos estén bien comentados.
Entity bit8tobcd is
Port( clk: in std_logic;--reloj del sistema, para dividir
rst: in std_logic;
cuenta: out std_logic_vector(1 downto0);--para depurar
bitin: in std_logic_vector(7 downto0); --8 bits de entrada
seg: out std_logic_vector(6 downto0);--tiempo a iluminar
ctrlD: out std_logic_vector(3 downto0; --ctrl de los ánodos
bcd: out std_logic_vector(15 downto0)--para depurar
);
End bit8tobcd;
Para crear bancos de prueba (test- bench), es decir, crear los estímulos y ver los resultados durante la simulación.
22. ¿Para qué sirven los HDL? Los "Test Bench" pueden ser escritos en el mismo lenguaje que con el que han sido modelados los diseños (HDL).
Esto permite un mejor manejo del modelo, ya que se puede asociar el modelo a sus estímulos de simulación.
No limitamos el uso de dichos estímulos a un determinado simulador, pudiendo ser reutilizados dichos estímulos aunque se use un simulador distinto.
Los retardos de propagación y limitaciones temporales, pueden ser descritos con estos HDL
24. Dispositivos Lógicos Programables
Los dispositivos actuales (CPLD y FPGAs) tienen una capacidad lógica de hasta millones de compuertas, incluyen interfaces programables para varios estándares de interface eléctrica y tienen bloques de funciones especiales embebidos entre la lógica programable tales como memoria, multiplicadores o CPUs completas
Esta gran capacidad y variedad de los dispositivos los hace sumamente útiles a la hora de crear prototipos, desarrollo rápido de nuevos productos, para los productos que deben ser reconfigurables por naturaleza o productos que se producen en bajos volúmenes y para los cuales no es económicamente viable crear un integrado a medida.
Los dispositivos lógicos programables son circuitos integrados digitales que no tienen una función predefinida por el fabricante. Su función puede ser definida (o programada) por el usuario.
Debido a la gran capacidad lógica que tienen los dispositivos modernos, sistemas completos pueden desarrollarse sobre un solo circuito integrado.
Esto da lugar a las denominaciones System–on–a-Programmable Chip, o SoPC (sistema sobre un circuito integrado programable) y System-on-a- Reprogammable Chip (SoRC).
25. Evolución de los Primeros Dispositivos Lógicos Programables
Los primeros dispositivos lógicos programables fueron las memorias PROM.
Para ello se utilizan como entradas las líneas de dirección a la memoria. De esta manera la memoria provee una tabla de decodificación completa de las entradas, y puede utilizarse para implementar cualquier función lógica combinacional.
Los primeros dispositivos diseñados específicamente para implementar funciones digitales programables fueron los PLA, introducidos al mercado en la década de 1970 por Philips.
La base teórica de estos dispositivos es que cualquier ecuación lógica puede reducirse a una suma de productos.
El corazón electrónico de estos dispositivos consiste en un bloque que permite negar las entradas y dos niveles de compuertas: un nivel de compuertas AND y un nivel OR. Mediante fusibles pueden programarse las interconexiones entre las entradas y la lógica.
26. PAL
27. GAL Los dispositivos denominados GAL son un poco mas complejos que los PAL mencionados anteriormente.
Incluyen un nivel de lógica AND a la entrada y luego un bloque lógico denominado macrocelda a la salida, en reemplazo del nivel OR.
La denominación GAL fue utilizada en principio por Lattice, y luego licenciada a otros fabricantes.
La macrocelda de estas GAL se denomina OLMC, por "Output Logic Macro Cell".
28. CPLDs
Los CPLDs son dispositivos que combinan varios bloques lógicos similares a las PAL o GAL con una matriz de interconexión programable.
Estos dispositivos se fabrican con distintas capacidades para adaptarlos a las necesidades del usuario. Como ejemplo, la familia MAX7000 de alto rendimiento de Altera se manufactura en versiones desde 32 hasta 512 macroceldas, con 36 a 212 entradas/salidas según el dispositivo y empaquetamiento que se elija.
29. CPLDs Como se de las figura, estos dispositivos incluyen además de las macroceldas, un arreglo de interconexión programable (PIA), una red de distribución de reloj dedicada y bloques de entrada salida que permiten interfaces compatibles con diferentes estándares eléctricos.
Los bloques lógicos AND y OR están ambos incluidos en la macrocelda del dispositivo.
30. FPGAs
La arquitectura de una FPGA consiste en arreglos de bloques lógicos que se comunican entre si a través de canales de conexión verticales y horizontales.
La principal diferencia entre las FPGA y CPLDs es que en general los bloques lógicos de las FPGA no implementan la lógica usando compuertas sino con generadores de funciones.
En la siguiente sección se estudiará en mayor detalle la arquitectura de una FPGA típica.
31. Elementos del FPGA
32. Bloque Lógico Programable Todas las FPGA tienen algún tipo de bloque lógico programable. Este es el corazón de la FPGA, y permite implementar las diferentes funciones lógicas.
Cada CLB esta compuesto por dos bloques iguales denominados “slices”. Cada "slice" contiene dos generadores de funciones y un multiplexor MUXF5. El multiplexor combina los resultados de los generadores de funciones dentro de cada "slice" del CLB.
Las dos "slices" están unidas por un multiplexor MUXF6, que puede seleccionar la salida de una u otra “slice” hacia la salida del CLB. Esto permite implementar cualquier función de 6 entradas, un multiplexor de 8:1 o determinadas funciones lógicas de hasta 19 entradas. Además de poder implementarse lógica combinacional, cada “slice” contiene recursos para implementar circuitos secuenciales y operaciones aritméticas eficientes.
33. CLBs
34. Bloque de Entrada / Salida Las interfaces de entrada-salida son otro de los componentes particulares que tienen las FPGAs. La familia de FPGAs Spartan IIe de Xilinx, por ejemplo, divide las entradas/salidas del integrado en bancos que se pueden configurar para tener una interface con lógica de diferentes estándares eléctricos de manera independiente.
Los bancos se configuran aplicando diferentes tensiones de alimentación a los pines denominados VccO y VREF.
Al utilizar diferentes valores de VccO para los distintos bancos se podrá tener un sistema con interface a diferentes familias lógicas dentro de la misma FPGA. Las entradas de reloj están asociadas a diferentes bancos de entrada-salida, para permitir que haya diferentes dominios de reloj con interfaces eléctricas diferentes.
35. Bloque de Entrada / Salida Además de la tensión VccO, para varios de las interfaces lógicas debe configurarse la tensión de referencia VREF y agregarse resistencias de terminación sobre la plaqueta en las entradas-salidas de la FPGA. Cada bloque de entrada-salida tiene una resistencia de “pull-up” y “pull - down” configurables que permiten fijar el valor lógico mediante programación.
Los bloques de entrada-salida de muchas FPGAs tienen elementos de almacenamiento integrados que permiten controlar mejor los tiempos de propagación entre los pines del integrado y la lógica interna.
Además cada bloque de entrada-salida cuenta con “buffers” programables que pueden configurarse para tres estados y colocar la salidas de la FPGA en alta impedancia (estado ‘Z’).
36. Bloque de Control de Reloj El sistema de control del reloj consiste en bloques de control integrados a la red de distribución de reloj.
La red de distribución de reloj en las FPGA asegura retardos parejos a todos los bloques lógicos de la FPGA.
Cada fabricante utiliza una arquitectura diferente para el control y distribución de reloj.
La familia Spartan IIe de Xilinx tiene bloques específicos para control de reloj denominados DLL (Delay Locked Loop).
Estos bloques sincronizan el reloj interno al reloj externo del sistema, controlan el desplazamiento de fase entre los relojes, sincronizan los diferentes dominios de reloj y aseguran un retardo de distribución del reloj pareja para la lógica interna de la FPGA.
37. Bloque de Control de Reloj
La familia Stratix de Altera tiene los bloques de control de reloj.
Estos bloques (Enhanced PLL) permiten controlar la fase y frecuencia del reloj, el sistema de distribución de reloj y el estándar eléctrico de interface entre otras cosas
38. Memoria Varias familias de FPGA contienen bloques de memoria embebida integrados con la lógica programable.
En general estos bloques básicos de memoria pueden utilizarse en diferentes configuraciones para generar RAMs y ROMs de diferentes tamaños.
Además de memorias embebidas, las FPGAs basadas en memoria SRAM pueden usar las tablas LUT de los bloques lógicos como memoria.
Este bloque se denomina BLOCK RAM y es una memoria de puerto dual (dual-port), que puede leerse y escribirse al mismo tiempo.
Estos bloques de memoria pueden usarse como memorias de puerto dual, puerto simple, RAMs o ROMs. Para entender la versatilidad de estos bloques de memoria, en la siguiente tabla se muestran las opciones de configuración.
39. Memoria
Además de poder configurar cada bloque, varios bloques pueden conectarse utilizando lógica externa para implementar memorias de otros tamaños y colas FIFO o FILO.
La figura muestra un bloque de memoria de Actel, que puede configurarse como memoria de puerto simple, dual o multi-puerto.
40. Bloque de Procesamiento de Señal Varias FPGA contienen bloques específicos que optimizan en hardware ciertas funciones especiales.
Las FPGA de la familia Stratix de Altera, por ejemplo, contienen uno o más módulos de procesamiento de señal entre los bloques de lógica programable de propósito general.
Estos bloques permiten desarrollar ciertas funciones específicas típicas de las aplicaciones de procesamiento de señal de manera muy eficiente.
Pueden configurarse de varias maneras diferentes según las necesidades del usuario. Como muestra la figura, este bloque contiene lógica para implementar operaciones de multiplicación-acumulación que requerirían de muchos recursos y ciclos de reloj si se implementaran utilizando lógica de propósito general.
Al igual que los otros bloques, los bloques específicos pueden interconectarse a los demás bloques utilizando la matriz de interconexión programable de la FPGA.
41. CPUs Embebidas La familia de FPGAs de Xilinx Virtex II-PRO contiene una CPU Power PC 405 de IBM y lógica de interconexión embebida dentro de lógica programable.
Esto permite utilizar toda la potencia de una CPU integrada con la flexibilidad de los periféricos diseñados mediante lógica programable.
Los bloques específicos integrados en el silicio de las FPGAs se denominan "hardcores".
Altera ofrece la FPGA Excalibur que contiene un microcontrolador ARM922T integrado a un costado de lógica programable. La lógica programable del Excalibur puede ser de hasta un millón de compuertas.
El micro es de arquitectura RISC de 32 bits, y puede correr a una frecuencia de reloj de hasta 200 MHz .
Por otro lado también pueden diseñarse microcontroladores o procesadores usando solamente la lógica de configuración de las FPGAs.
42. Matriz de interconexión Para poder implementar circuitos lógicos, los elementos lógicos presentados en las secciones anteriores no solo deben configurarse adecuadamente sino que también deben conectarse entre si.
La estructura de interconexión interna de un PLD consiste en un conjunto de alambres o trazas que pueden conectarse mediante elementos de conexión programables.
Las herramientas de “localización e interconexión” (place and route) son las encargadas de decidir en que elementos lógico se implementará la lógica diseñada por el usuario y como deben programarse las interconexiones para que el diseño funcione según las especificaciones de tiempo y retardos que se han definido.
43. Matriz de interconexión de las FPGA Spartan IIe de Xilinx Estas FPGA tienen dos niveles de interconexión. Por un lado tienen una interconexión de propósito general a través de la matriz de interconexionado general o GRM por sus siglas en inglés.
Por otro lado contienen recursos de interconexión local.
Además de los ya mencionados, las FPGA Spartan IIe contienen recursos de interconexión dedicados a señales de tres estados, de entrada-salida y recursos de interconexión global para la distribución de reloj y señales específicas.
Los recursos de interconexión local, mostrados en la Figura 31, permiten hacer las conexiones entre los elementos internos de un bloque lógico o CLB, como las tablas de búsqueda (LUT), los flip-flop y las realimentaciones dentro del CLB.
44. Matriz de interconexión de las FPGA Spartan IIe
La mayor parte de las señales se conectarán a través de la matriz general de interconexionado (GRM). Los elementos de la GRM se encuentran entre los CLB, en los canales de interconexión horizontales y verticales de la FPGA.
Permiten hacer la interconexión entre las trazas horizontales y verticales y hacia los CLB. A través de ellos se configuran las conexiones entre CLBs no adyacentes y hacia los bloques de entrada/salida.
45. Granularidad de los Dispositivos Lógicos Programables (PLDs) La granularidad de un dispositivo lógico programable está dada por la funcionalidad básica que provee cada bloque de configuración lógica, o la relación entre las celdas lógicas y los recursos de interconexionado.
Algunos parámetros para definir la granularidad de un dispositivo programable son:
• Número de funciones que puede implementar cada celda lógica
• Número de compuertas NAND de dos entradas equivalente por cada celda lógica
• Número total de transistores por celda lógica
• Área total normalizada de lógica configurable (relación de área lógica/área de interconexionado)
• Número de entradas y salidas por celda lógica
Algunos dispositivos tienen arquitecturas con celdas lógicas que pueden implementar funciones lógicas complejas, de varias entradas/salidas. A estas se las denomina de granularidad gruesa. Otras arquitecturas están formadas por celdas básicas que solo permiten implementar lógica muy simple. A estas se las denomina de granularidad fina.
46. Granularidad de los Dispositivos Lógicos Programables (PLDs) La granularidad de un dispositivo lógico influirá en la manera que se implemente una función lógica dada, en su frecuencia máxima de funcionamiento y en la utilización que se hace del dispositivo.
Un bloque lógico grande puede implementar lógica más compleja y por lo tanto se necesitan menos bloques para una función dada. Por otro lado cada bloque consume más área que puede desaprovecharse.
Una arquitectura de granularidad fina será típicamente más densa y tendrá menor retardo de interconexión entre celda y celda. Sin embargo, para una función dada, se deberán conectar un mayor número de celdas.
En general la mejor granularidad dependerá de la aplicación y las restricciones que hay sobre el diseño.
47. Granularidad de los Dispositivos Lógicos Programables (PLDs) Arquitecturas mixtas
• Combinan celdas con granularidad fina y gruesa
• Muchas veces tienen recursos de interconexión dedicados para cada tipo de celda
• Ejemplo: ispXPGA de Lattice Semiconductors
Arquitecturas con granularidad fina
• Celdas implementan funciones lógicas parciales de n entradas
• Relación de entradas a registros por celda muy baja (2/4 a 1)
• Ejemplo: ProAsicPlus de Actel
Arquitecturas con granularidad media
• Celdas implementan funciones completas de n entradas
• Relación de entradas a registros por celda de 6/8 a 1
• Buenas para implementar máquinas de estado y lógica secuencial compleja
• Ejemplo: Xilinx Spartan 3
Arquitecturas con granularidad gruesa
• Celdas estilo PLD de arreglos de términos
• Relación de entradas a registros de 32 a 1
• Buenas para lógica combinacional como decodificación de direcciones, funciones aritméticas,
• Pobres para arquitecturas con colas (pipelines)
• Ejemplo: Altera MAX 3000
48. Tecnología de Configuración de los PLDs La tecnología utilizada para configurar los elementos de un PLD, ya sean los bloques lógicos o las interconexiones, dependen del fabricante y el dispositivo. Entre los dispositivos reprogramables, se destacan las tecnologías EEPROM, SRAM y Flash.
Los dispositivos que solo pueden configurarse una vez en general utilizan tecnologías de antifusible.
Cada tecnología tiene sus ventajas y desventajas respecto a las otras.
49. Tendencias Actuales y Futuras Integración con herramientas y otros software de desarrollo de mayor nivel, como son Matlab y herramientas para el diseño integrado de software y hardware. (HW-SW co-design).
• Integración del manejo de configuración de FPGAs con las herramientas de diseño de circuitos impresos (PCBs), para poder configurar el interconexionado interno del SoPC de manera integral con el conexionado hacia los componentes externos.
• Instrumentos, tales como analizadores lógicos, que permiten observar la lógica de interna de las FPGA en tiempo real al mismo tiempo que se observan otras señales, externas a la FPGA.
• Sistemas con aplicaciones que utilicen la reconfiguración o reprogramación de las FPGAs directamente en el producto final según la necesidad del momento.
• Integración de bloques lógicos programables alrededor de lógica fija en ASICs o integrados estándar.
• Desarrollo de FPGAs con mayor capacidad, más velocidad, menos consumo de potencia y menor costo.
• Integración en hardware sobre las lógicas programables de bloques específicos como ALUs, componentes para procesamiento digital de señal, integración con uP y uC, memorias, etc.
• Integración y mezcla entre FPGAs y circuitos integrados de propósito específico (ASICs). Componentes que pueden pasar directamente de un prototipo sobre una FPGA a un ASIC sin esfuerzo de diseño adicional.
• Cambios en las herramientas de software para tener mayor integración entre los diferentes usuarios y en los distintos pasos del proyecto. Esto incluye el manejo de grupos de trabajo, el manejo de la propiedad intelectual, la documentación de proyectos integrada a las herramientas de diseño, la transferencia de los diseños para FPGAs a ASICs, etc.
51. Historia
Surge a principios de los ’80s del proyecto DARPA (del Departamento de Defensa de los EE.UU.) llamado VHSIC (Very High Speed Integrated Circuits)
Se utiliza como forma de describir circuitos integrados:
Crisis del ciclo de vida del HW: Cada vez los circuitos integrados eran más complejos, y el coste de reponerlos cada vez era mayor, básicamente porque no estaban correctamente documentados. VHDL nació como una manera estándar de documentar circuitos.
El uso de VHDL permitió comprobar que el tiempo de diseño de los circuitos se reducía, porque se podían crear directamente de su descripción: utilidad de la síntesis.
En 1987 el trabajo se cedió a la IEEE, y a partir de ese momento es un estándar abierto.
VHDL: VHSIC Hardware Description Language
VHSIC: Very High Speed Integrated Circuits
52. Evolución 1980: El departamento de defensa de los EEUU funda el proyecto para crear un HDL estándar dentro del programa VHSIC.
1981: Woods Hole Workshop, reunión inicial entre el Gobierno, Universidades e Industria.
1983: Se concedió a Intermetrics, IBM y Texas Instruments el contrato para desarrollar VHDL.
1985: Versión 7.2 de dominio público.
1987: El IEEE lo ratifica como su estándar 1076 (VHDL-87).
1993: El lenguaje VHDL fue revisado y ampliado, pasando a ser estándar 1076 ‘93 (VHDL-93).
2000:Última modificación de VHDL
53. VHDL: Características Generales VHDL: lenguaje orientado a la descripción o modelado de Hardware similar a lenguajes de alto nivel de propósito general (ADA en especial): de ellos hereda:
Concepto de tipo de datos, con posibilidad de definir nuevos tipos
facilita la descripción de circuitos con diversos niveles de abstracción.
Sentencias de control de flujos (if, for while). Junto con la característica anterior
potencia para desarrollar algoritmos.
Capacidad de estructurar el código (subprogramas, funciones o procedimiento), permite afrontar algoritmos complejos.
Posibilidad de utilizar y desarrollar bibliotecas de diseño,
Incorpora conceptos específicos para el modelado del hardware, como concurrencia y ciclo de simulación.
54. Estado actual y alternativa
En la actualidad el diseño mediante esquemas no es una alternativa realista en ningún proyecto, por ejemplo Gforce 4 tiene 65 M transistores y 800.000 líneas de código Verilog.
La alternativa estándar es usar un HDL
Verilog: Costa Oeste de EEUU, para ASICs, menos verboso, más parecido a C, menos expresivo.
VHDL: Costa Este y Europa, para FPGAs, más descriptivo, más parecido a PASCAL y ADA, más expresivo.
El diseño se sintetiza a partir de un HDL, pero gran parte del diseño y la verificación se realiza con lenguajes estándares C y Matlab
VHDL es el estándar para FPGAs en proyectos industriales de moderada complejidad.
55. ¿Futuro? Los lenguajes de descripción de hardware también tienen limitaciones:
Metodología de diseño nueva, exige un cambio de mentalidad con respecto al Software
No permiten re usar código SW para HW.
Poseen enorme reusabilidad intrínseca.
La decisión HW/SW se debe hacer antes de la codificación
La simulación es lenta, siempre hay que recurrir a una simulación algorítmica usando lenguajes SW
Como respuesta a esto, hay varias iniciativas para describir HW usando lenguajes de alto nivel, tipo SW
Handel-C, System-C
Forge (Java)
Superlog
56. Estructura de un diseño en VHDL
57. Elementos de descripción VHDL Bibliotecas (Library)
Almacenan los elementos de diseño: tipo de datos, operadores, componentes, objetos, funciones,...
Esos elementos de diseño se organizan en Paquetes
Packages: son unidades de almacenamiento de elementos y tienen que hacerse “visibles” para poder ser utilizados .
Hay 2 bibliotecas que siempre son visibles por defecto: std (la standard) y work (la de trabajo) y que no es necesario declarar
Entidades (Entity)
Es el modelo de interfaz de un circuito con el exterior mediante unas terminales de entrada y de salida.
Es la caja negra que define las entradas y salidas.
Arquitectura (Architecture)
Describe el funcionamiento del circuito.
58. Puertos de una entidad Cada una de las posibles conexiones se denomina PORT y consta de:
Un nombre, que debe ser único dentro de la entidad.
Una lista de propiedades, como:
la dirección del flujo de datos, entrada, salida, bidireccional y se conoce como modo del puerto.
los valores que puede tomar el puerto: '0’, '1' o (‘Z’), etc ., los valores posibles dependen de lo que se denomina tipo de señal.
Los puertos son una clase especial de señales que además añade el modo al tipo de señal
e0e2e1salida0salida1caja
59. Modos de un Puerto Indican la dirección y si el puerto puede leerse o escribirse dentro de la entidad.
IN: Una señal que entra en la entidad y no sale. La señal puede ser leída pero no escrita.
OUT: Una señal que sale fuera de la señal y no es usada internamente. La señal no puede ser leída dentro de la entidad.
BUFFER: Una señal que sale de la entidad y también es realimentada dentro de la entidad.
INOUT: Una señal que es bidireccional, entrada/salida de la entidad.
60. Estructura de un diseño en VHDL
61. Declaración de entidad
62. Resumen: Entidad y Arquitectura La entidad se utiliza para hacer una descripción "caja negra" del diseño, sólo se detalla su interfaz
Los contenidos del circuito se modelan dentro de la arquitectura
Una entidad puede tener varias arquitecturas
Por ejemplo, la descripción de comportamiento que ha hecho el diseñador y el modelo post- layout obtenido después de implementar el chip
63. Invariancias VHDL presenta ciertas invariancias que conviene conocer antes de su utilización.
Invariante a mayúsculas, es decir, dos expresiones iguales conteniendo mayúsculas y minúsculas son idénticas.
Invariante a los espacios, es decir, dos expresiones iguales conteniendo más o menos espacios son idénticas
Los comentarios van detrás de dos rayas “--”y convienen que sean claros para que las descripciones puedan ser fácilmente utilizadas por otras personas o por ti mismo.
VHDL es relativamente laxo con la utilización de paréntesis, una buena idea es utilizar los paréntesis de manera que una persona la pueda entender con facilidad
Cada asignación termina con “;”
Cada “if” tiene el correspondiente “then“
Cada “if” termina con el correspondiente “endif”
Si se necesita “elseif” se utilizará “elsif”
Cada “case” termina con el correspondiente “end case”
Cada “loop” termina con el correspondiente “end loop”
64. Identificadores Identificadores. Son las palabras que se utilizan para identificar a las funciones, señales, puertos, variables, etc. Es conveniente que dichas palabras proporcionen información suficiente para que la descripción sea fácilmente reutilizable.
El identificador debe dar suficiente información para su uso .
El identificador puede ser tan largo como se quiera, pero un nombre demasiado largo es complicado de utilizar, y demasiado corto quizá proporcione poca información.
El identificador puede contener cualquier combinación de las letras (A-Z y a-z) números (0-9 ) y el sub-guión (“_”)
El identificador debe empezar por un carácter alfabético.
El identificador no puede termina con el sub-guión (“_”)
65. Modelos de descripción Comportamental o algorítmico (behavioral).
Especifica cómo se comportan las salidas con respecto a las entradas.
No proporciona al sintetizador información de cómo será el circuito, siendo éste el que lo determina.
La parte fundamental de este tipo de descripciones es el proceso (process)
Flujo de datos (dataflow).
Especifica el circuito como una representación concurrente del movimiento de los datos a su través, es decir, cómo circula la información
Estructural (structural). Describe la conexión entre distintos módulos descritos previamente
66. Modelos de descripción VHDL
Como hemos visto, la arquitectura (architecture), en VHDL describe la función que realiza una entidad (entity).
La arquitectura se compone de dos partes:
la parte declarativa en la que se encuentran las definiciones de las señales, funciones, tipos, procedimientos, etc.. a utilizar.
y el cuerpo de la descripción, consistente en una sucesión de asignaciones concurrentes y procesos que modelan la entidad.
67. Concurrencia del hardware El hardware es concurrente, es decir, los circuitos coexisten en el tiempo y por lo tanto trabajan al mismo tiempo.
Este chip tiene tres compuertas que funcionan simultáneamente
No se puede modelar con un lenguaje como C:
S1 = A and B;
S2 = C or D;
S3 = C xor D;
Las tres puertas funcional al mismo tiempo ¡no una después de la otra!
La solución al problema anterior es que aunque la ejecución sea secuencial, las asignaciones no tengan tiempo de ejecución:
68. Sentencias concurrentes Características:
Se ejecutan de forma asíncrona unas respecto de las otras en el mismo tiempo de simulación.
El orden en que se escriban es indiferente, no siguen un orden de ejecución predefinido.
–No obstante conviene escribir el código en el orden que mejor se pueda entender y mejor documente el diseño.
Sirven para especificar:
Interconexiones entre componentes.
Estructuras jerárquicas.
Estructuras regulares.
Transferencias entre registros.
69. process: elemento de diseño principal Un proceso describe el comportamiento de un circuito:
Cuyo estado puede variar cuando cambian ciertas señales
Utilizando construcciones muy expresivas: if..then..else, case, bucles for y while, etc…
Y que además puede declarar variables, procedimientos, etc...
70. Procesos Los procesos se “disparan”(su código se ejecuta) cuando cambia alguna de las señales de su lista de sensibilidad.
Un proceso sin lista de sensibilidad es válido, pero se activa con cualquier evento, no se asegura un comportamiento correcto.
Las instrucciones dentro del proceso se ejecutan secuencialmente, una detrás de otra, pero sin dar lugar a que avance el tiempo durante su ejecución.
El tiempo sólo avanza cuando se llega al final del proceso.
Las señales modelan hilos del circuito, y como tales, sólo pueden cambiar de valor si se deja que avance el tiempo.
Una arquitectura puede tener tantos procesos como queramos, y todos se ejecutan en paralelo.
Esta es la manera que tiene VHDL de expresar la concurrencia inherente al hardware
71. La solución VHDL a la concurrencia VHDL (y en general, todos los HDLs) solucionan este problema dando soporte explicito a la concurrencia
En VHDL, una arquitectura puede tener tantos procesos como queramos, y todos se ejecutan concurrentemente
72. sentencias concurrentes
Asignación simple
suma <= ope1 xorope2;
Para Señales y Puertos, el operador es <=, el lado izquierdo es el destino y el lado derecho la fuente.
OJO: fuente y destino tienen que ser del mismo tipo.
Para Variables el operador es :=
acarreo_intermedio:= ope1 and ope2;
WHEN/ELSE
Permite realizar asignaciones condicionales
salida <= a and b when c =‘1’ else a or c;
73. WHEN/ELSE [etiqueta:] señal <= val_1 when condi_1 else
val_2 [whencondi_2] else
… else
val_n;
Ejemplo:
74. WITH/SELECT La asignación condicional (WHEN/ELSE), También se puede hacer mediante la sentencia de asignación selectiva WITH/SELECT
Por su ejecución en paralelo es similar a un CASE
Se pueden dar problemas de memoria implícita si no se pone el último when others.
75. WITH/SELECT
76. Dentro de los procesos: Descripciones secuenciales
77. IF
78. Ejemplo IF
79. CASE Sintaxis:
CASE expresión IS
WHEN caso1=>
secuencia sentencias1;
WHEN caso2 =>
secuencia sentencias2;
WHEN casoN=>
secuencia sentenciasN;
WHEN OTHERS =>
resto de casos;
END CASE;
80. FOR-LOOP Realiza un bucle un número determinado de veces
[etiqueta:] FOR índice IN rango’inf TO rango’sup LOOP
secuencia de sentencias
END LOOP[etiqueta];
81. WHILE-LOOP El bucle se repite mientras la condición que haya después del while sea verdadera
[etiqueta:] WHILE condición LOOP
secuencia de sentencias
END LOOP[etiqueta];
ejemplo:
lazo1:WHILE (i < 10) LOOP
WAIT UNTIL clk'EVENT AND clk='1';
END LOOP lazo1;
82. EXIT Detiene la ejecución en ese instante y sale del bucle.
Si hay varios bucles anidados, sale de donde se encuentre la instrucción o bien del bucle que se especifica en la etiqueta.
Solamente puede aparecer dentro de una sentencia LOOP.
exit [etiqueta] [when condición];
Ejemplo:
--Interrumpe el FOR y sigue por el WHILE
termina: WHILE a< 100 LOOP
---sentencias
sigue: FOR n IN 0 TO 100
---sentencias
EXIT termina WHEN n=a;
END LOOP sigue;
END LOOP termina;
Cuando existen bucles anidados, sale del más interno, o bien, de aquel que tiene la etiqueta que sigue al EXIT.
83. WAIT Espera a que ocurra una condición
WAIT UNTIL condición;
WAIT UNTIL e1=‘1’ and e2=‘0’;
Espera a que cambie alguna señal de la lista de señales
WAIT ON lista_señales;
WAIT ON e1,e2,clk;
Espera un cierto tiempo
WAIT tiempo;
WAIT 25ns;
Espera indefinidamente
WAIT
84. GENERATE Esta sentencia concurrente permite reducir el tamaño del código de aquellas estructuras que se repiten considerablemente.
Sintaxis:
etiqueta: FOR identificador IN range GENERATE
(sentencias concurrentes)
END GENERATE;
etiqueta: IF condición GENERATE
(sentencias concurrentes)
END GENERATE;
85. Paquetes
86. Componentes
87. Atributos Un atributo es una característica asociada a un elemento(tipo de dato, señal, entidad,…) que proporciona información adicional.
Atributo ?Valor
Un objeto tiene un solo valor y puede tener múltiples atributos.
VHDL proporciona una serie de atributos predefinidos.
88. Atributos de rango de vectores.
89. Atributos de rango de vectores Loops
90. Atributos de las señales
DELAYED(t). Valor de la señal retrasada t unidades de tiempo.
STABLE(t), verdadero si la señal permanece invariable durante t unidades de tiempo.
QUIET(t), verdadero si la señal no ha recibido ninguna asignación en t unidades de tiempo.
TRANSACTION, tipo bit, a ‘1’cuando hay una asignación a la señal.
EVENT, verdadero si ocurre un cambio en la señal en el paso de simulación.
ACTIVE, verdadero si ocurre una asignación a la señal en el paso de simulación.
LAST_EVENT, unidades de tiempo desde el último evento.
LAST_ ACTIVE, unidades de tiempo desde la última asignación.
LAST_VALUE, valor anterior de la señal.
DRIVING, verdadero si el proceso actual determina el valor de la señal.
DRIVING_VALUE, valor que toma la señal tras el proceso.
91. Atributos
92. Resumen: Estilos de descripción Independiente del nivel de abstracción, existen tres estilos de descripción de una arquitectura:
Comportamiento (Behavioral)
Transferencia entre registros o flujo de datos (Data Flow)
Estructural (Structural)
En VHDL un sistema puede mezclar diferentes estilos a la hora de describir sus diferentes arquitecturas.
1. Comportamiento (Behavioral).
En este estilo de descripción se modela la funcionalidad por medio de los recursos algorítmicos del lenguaje.
Se describe el algoritmo que refleja el comportamiento de dicho componente.
También se le suele llamar estilo algorítmico o secuencial.
93. Ejemplo de estilos de descripción
Multiplexor de dos entradas de datos de un bit ( e0 y e1 ), una señal de salida ( y ) y señal de control ( sel )
94. Ejemplo de estilos de descripción Descripción de comportamiento o algorítmica (Behavioral)
95. Ejemplo de estilos de descripción 3. Descripción estructural (Structural)
96. Ejemplo de estilos de descripción
98. Modelado combinacional El modelado de sistemas combinacionales es muy sencillo, puesto que en todo momento las salidas sólo dependen del estado actual de las entradas, es decir, el circuito no tiene memoria.
Un circuito combinacional puede tener multitud de entradas y salidas, por lo tanto:
Necesitar miles o millones de términos canónicos para describirlo matemáticamente.
Tablas de verdad que resultan inmanejables.
La clave para el desarrollo de estos sistemas es el pensamiento estructurado
Un sistema complejo se concibe como un conjunto de subsistemas más pequeños, cada uno de los cuales tiene una descripción más sencilla.
Estos bloque combinacionales constituyen las estructuras básicas con las que se construyen los sistemas procesadores
Multiplexores, decodificadores, comparadores, sumadores, etc. …
99. Descripción VHDL de sistemas combinacionales Para describir circuitos combinacionales utilizaremos sentencias de asignación concurrentes y procesos.
Sentencias de asignación concurrentes. Van fuera del proceso. Esto se debe a que en una declaración concurrente no importa el orden en el que se escriban las señales, ya que el resultado para una determinada función sería el mismo. Se utilizarán tres tipos de sentencias de asignación concurrentes:
Sentencias de asignación simples, por ejemplo:
salida1 <= A and B;
Sentencias de asignación condicionales, por ejemplo:
salida2 <= A when S = ‘1’elseB;
Sentencias de selección, por ejemplo:
with S select
salida3 <= ‘1’ when “00”;
‘0’when others;
Siempre hay que evitar la realimentación combinacional, ya que esto modela elementos de memoria asíncronos.
100. Multiplexores Circuitos que tienen n entradas de datos y una salida de datos, por lo tanto necesitan m entradas de selección, donde m es:
Habitualmente también poseen una entrada de habilitación
La función f que describe el comportamiento de un multiplexor de dos entradas (I0, I1) , una salida y una entrada de selección (S), se puede describir mediante la tabla
Aplicando Karnaugh se obtiene:
101. Multiplexores
102. Multiplexores
103. Decodificadores
Es un circuito lógico con n entradas y m salidas, donde m es
Podemos encontrar decodificadores con entrada de habilitación, activos por cero o activos por uno
104. Decodificadores
105. Decodificadores
106. Decodificadores
107. Decodificadores
108. Codificadores
Es un circuito lógico con n entradas y m salidas, donde m es
Habitualmente también poseen una entrada de habilitación, pueden ser activos por cero o por uno
109. Codificadores
110. Codificadores
111. Codificadores
112. Lógica Secuencial Es necesario conocer el tipo de descripción concreto a realizar para que se reconozca un elemento secuencial
Es obligado el uso de procesos (excepto latches), y recomendable que incluyan lista de sensibilidad
Diferencia entre variables y señales
Aconsejable incluir siempre un reset global que aplique un valor de inicialización
entity latch is
port (a, b: in std_logic;
d: out std_logic);
end latch;
architecture l_a of latch is
begin
process (a,b)
begin
if b=’1’ then d <= a; end if;
end process;
end l_a;
113. Inferencia de registros activos por flanco Es el método más habitual de describir sistemas síncronos
Los dispositivos lógicos incluyen registros activos por flanco (generalmente de tipo D)
Existen varias formas de especificar la llegada de un flanco:
Descripción genérica
entity registro is
port (d, reset, preset, reloj: in std_logic;
q: out std_logic);
end registro;
architecture r_a of registro is
begin
process (d, reset, preset, reloj)
begin
if reset = ’1’ then q <= ‘0’;
elsif preset = ‘1’ then q <= ‘1’;
elsif rising_edge(reloj) then q <= d;
end if;
end process;
end r_a;
114. No emplear más condiciones else ó elsif en la misma sentencia if..then..else después de la condición de evaluación del reloj
En la misma evaluación if del reloj no se deben comparar otras señales o variables
La sentencia if del reloj no puede estar dentro de un bucle
La sentencia if del reloj no debe estar anidada, se pueden incluir más if dentro de ella
Sólo se puede incluir una evaluación de flanco por proceso: varios relojes ? varios procesos
En comparaciones múltiples, emplear la sentencia case
No utilizar relojes derivados, alternativamente, emplear habilitación de reloj
r_derivado <= not a and (b or c);
process (d, reset, preset, reloj, r_derivado)
begin
if reset = ’1’ then q <= ‘0’;
elsif preset = ‘1’ then q <= ‘1’;
elsif rising_edge(reloj) then
if r_derivado = ‘1’ then
q <= d;
end if;
end if;
end process;
end r_a;
115. Módulos funcionales específicos En sistemas complejos es necesaria una correcta partición del diseño (Top-Down)
Las descripciones de mayor nivel suelen ser estructurales (componentes y subprogramas)
Aconsejable emplear módulos del fabricante (generadores automáticos, módulos IP, ...)
Consultar documentación del software de síntesis ? Herramientas y atributos especiales
Módulos específicos usuales: Multiplicadores, RAM, ROM, UART, filtro FIR, interface PCI, ...
Necesaria la utilización del tipo std_logic ó std_ulogic que define el estado 'Z‘
Basta con incluir una condición en la que uno de los resultados ('True' o 'False') deja la salida en alta impedancia
116. Para puertos bidireccionales la descripción es similar a los triestado: Tipo inout
entity bidir is
port ( bid : inout std_logic ;
a, b, c, oe : in std_logic;
salida : out std_logic);
end bidir ;
architecture bidir_a of bidir is
signal interna1, interna2 : std_logic ;
begin
bid <= interna1 when oe = '1' else 'Z';
interna2 <= bid;
interna1 <= (a and b) nor c;
salida <= (c xor interna2) when oe='0' else 'Z';
end bidir_a ;
117. Máquinas de estados Es necesaria una descripción específica con definición de un tipo enumerado
Hay que hacer una división de la descripción en dos procesos distintos:
1. Cambio síncrono de estado
2. Evaluación de condiciones para dirigirse a un estado
119. Ejemplo
120. Ejercicio Recordar:
Usar 2 procesos
Definir tipo de dato TYPE
121. Memorias Si el tamaño de la memoria es reducido, ésta puede implementarse mediante recursos lógicos comunes (funciones lógicas y registros)
Habitualmente, existen en hardware estructuras regulares que las implementan y donde se sintetizan si la descripción VHDL es apropiada
122. Memorias En el caso de RAM, es necesario comprobar que el dispositivo
incorpora este
recurso lógico