Story Transcript
Teoría de Diseño lógico
Diseño lógico
EUI – ULPGC
Jose Torres
1 de 45
1. Dispositivos de lógica programable Son circuitos integrados cuyas funciones lógicas se pueden reprogramar, es decir, se puede modificar su diseño sin modificación física.
Diseño lógico
EUI – ULPGC
Jose Torres
2 de 45
Los primeros fueron los PLA (Programable Logic Array), una estructura de 2 niveles de AND y OR con conexiones programables
Diseño lógico
EUI – ULPGC
Jose Torres
3 de 45
Actualmente, PLD (Devices), que son los “MSI” 2 enfoques para aumentar la complejidad de los PLDs: CPLD (Complex): varios PLDs y una estructura de interconexión también programable
Diseño lógico
EUI – ULPGC
Jose Torres
4 de 45
FPGA (Field Programable Gate Array): mayor número de bloques lógicos (más simples) interconectados.
Diseño lógico
EUI – ULPGC
Jose Torres
5 de 45
Ahorro de tiempo de diseño con las FPGA
El mayor fabricante de PLDs, Xilinx Inc., fabrica los 2 tipos
Diseño lógico
EUI – ULPGC
Jose Torres
6 de 45
Lenguajes de descripción de hardware: VHDL y ABEL Avance, reducción del tiempo de comercialización Herramientas software permiten que un diseño sea: - compilado - sintetizado - descargado en un PLD en pocos minutos
Diseño lógico
EUI – ULPGC
Jose Torres
7 de 45
2. El lenguaje de descripción de hardware VHDL Mediados de los 80 Departamento de defensa de USA e IEEE patrocinan su desarrollo. VHDL = VHSIC Hardware Description Language VHSIC = Very High Speed Integrated Circuit
Diseño lógico
EUI – ULPGC
Jose Torres
8 de 45
Características: x Descomposición jerárquica de los diseños x Cada elemento de diseño se compone de: - interfaz, para conectarlo a otros - especificación del comportamiento mediante la estructura o mediante algoritmo x Modela señales de reloj: concurrencia y temporización x Permite simulación lógica y temporal
Diseño lógico
EUI – ULPGC
Jose Torres
9 de 45
Existen herramientas de síntesis VHDL para crear el circuito a partir de la descripción VHDL Con VHDL se puede diseñar, simular y sintetizar desde un circuito combinacional simple hasta un sistema microprocesador completo en un chip Primer estándar IEEE: VHDL-87; extendido: VHDL-93
Diseño lógico
EUI – ULPGC
Jose Torres
10 de 45
Otro lenguaje: Verilog Apareció al mismo tiempo, presentado en 1984 por Gateway Design Automation Actualmente ambos uso generalizado 50% cada uno Verilog raíces sintácticas en C y VHDL más parecido a Ada Ambos lenguajes son fáciles de aprender y difíciles de dominar
Diseño lógico
EUI – ULPGC
Jose Torres
11 de 45
2.1. Flujo de diseño Pasos en un proceso de diseño en VHDL:
Diseño lógico
EUI – ULPGC
Jose Torres
12 de 45
Pasos del modelado (front-end): 1. Jerarquía / diagrama de bloques: definir los módulos y sus interfaces 2. Codificación: escribir el código VHDL mediante un editor especializado: resalta palabras clave, sangría automática, plantillas de estructuras, verificación de sintaxis. 3. Compilación: el compilador analiza la sintaxis, verifica la compatibilidad con otros módulos y genera información interna para el simulador
Diseño lógico
EUI – ULPGC
Jose Torres
13 de 45
4. Simulación /verificación : Simulación: permite definir y aplicar entradas y observar salidas (sin construir el circuito) Proyectos pequeños ´manualmente´. Proyectos grandes: bancos de prueba (automáticamente aplican entradas y comparan las salidas con las esperadas) Verificación (de que funciona; definir los casos de prueba): funcional : funcionamiento lógico de temporización: incluyendo retardos estimados Faltarían los pasos para descargar el diseño en el PLD
Diseño lógico
EUI – ULPGC
Jose Torres
14 de 45
2.2. Estructura de programa VHDL diseñado con principios de programación estructurada (Pascal y Ada) Idea clave: definir la interfaz de un módulo hw ocultando sus detalles internos Una entidad es simplemente una declaración de las entradas y salidas de un módulo Una arquitectura es una detallada descripción del comportamiento o estructura interna del mismo
Diseño lógico
EUI – ULPGC
Jose Torres
15 de 45
La siguiente figura ilustra el concepto:
Una declaración de entidad es una ´envoltura´ para la arquitectura: oculta los detalles de ésta y proporciona los conectores para que otros módulos la usen
Diseño lógico
EUI – ULPGC
Jose Torres
16 de 45
Esto es el fundamento del diseño jerárquico: la arquitectura de una entidad de un nivel ‘medio’ puede utilizar (instanciar) otras entidades ocultando los detalles de arquitectura de entidades de nivel más bajo a las de nivel más alto como se muestra en la siguiente figura:
Diseño lógico
EUI – ULPGC
Jose Torres
17 de 45
Diseño lógico
EUI – ULPGC
Jose Torres
18 de 45
En el archivo de texto de un programa VHDL, la declaración de entidad y la definición de arquitectura están separadas Un ejemplo de programa VHDL (puerta ´inhibitoria´ con 2 entradas):
Diseño lógico
EUI – ULPGC
Jose Torres
19 de 45
VHDL ignora espacios en blanco y saltos de línea Los comentarios comienzan con 2 guiones (--) y finalizan con el final de línea Palabras clave , en el ejemplo : entity , port , is , in , out , end , architecture , begin , when , else y not
Diseño lógico
EUI – ULPGC
Jose Torres
20 de 45
Los identificadores definidos por el usuario, comienzan con una letra y contienen letras, dígitos y guiones bajos (no seguidos ni como último carácter) En el ejemplo: Inhibit, X, Y, BIT, Z e inhibit_arch “BIT” es un identificador integrado para un tipo predefinido no se considera palabra reservada porque puede ser redefinida No hay diferencia entre mayúsculas y minúsculas
Diseño lógico
EUI – ULPGC
Jose Torres
21 de 45
Esta sería la sintaxis de una declaración de entidad: entity nombre-entidad is port ( nombres-señal : modo tipo-señal; nombres-señal : modo tipo-señal; ... nombres-señal : modo tipo-señal); end nombre-entidad; cuyo propósito es: - dar nombre a la entidad - definir sus señales de interfaz (con otros módulos) o puertos Diseño lógico
EUI – ULPGC
Jose Torres
22 de 45
Además de las palabras clave (en negrita) esta declaración tiene los siguientes elementos: nombre-entidad: un identificador de usuario para nombrar la entidad nombres-señal: lista de identificadores de usuario separados por comas para nombrar los puertos
Diseño lógico
EUI – ULPGC
Jose Torres
23 de 45
modo: un palabra clave especificando la dirección de la señal: in : entrada a la entidad out: salida de la entidad. Su valor no puede ser ´leído´ dentro de la arquitectura de la entidad, solo por otras entidades que la utilicen buffer: salida de la entidad, pero su valor puede ser leído dentro de la arquitectura inout : entrada o salida; utilizado para terminales triestado tipo-señal: predefinido o definido por el usuario
Diseño lógico
EUI – ULPGC
Jose Torres
24 de 45
Ejemplos: entity processor is port (clock : in bit; address : out integer; data : inout word_32; control : out proc_control; ready : in bit); end processor; entity ROM is port (enable : in bit; address : in bit_vector(depth–1 downto 0); data : out bit_vector(width–1 downto 0) ); end ROM; Diseño lógico
EUI – ULPGC
Jose Torres
25 de 45
El funcionamiento de la entidad se especifica en su definición de arquitectura, cuya sintaxis es: architecture nombre-arquitectura of nombre-entidad is declaraciones de tipo declaraciones de señal declaraciones de constante definiciones de función definiciones de procedimiento declaraciones de componente begin sentencia-concurrente ... sentencia-concurrente end nombre-arquitectura; Diseño lógico
EUI – ULPGC
Jose Torres
26 de 45
Donde: - nombre-arquitectura : identificador usuario - nombre-entidad : a la que se refiere Los puertos se heredan de la entidad Una arquitectura puede incluir señales y otras declaraciones locales Las declaraciones comunes a varias entidades se pueden agrupar en un ´paquete´ por separado Las declaraciones de objetos locales pueden aparecer en cualquier orden Diseño lógico
EUI – ULPGC
Jose Torres
27 de 45
Para empezar hablaremos de la declaración de señal Misma información que declaración de puerto , excepto el modo: signal nombre-señal : tipo-señal; Las señales se corresponden con los ´hilos´ en un diagrama lógico Pueden leerse o escribirse sólo dentro de la definición de la arquitectura
Diseño lógico
EUI – ULPGC
Jose Torres
28 de 45
Las variables VHDL son semejantes a las señales excepto que no tienen significación física en un circuito No se declaran en una arquitectura Las variables se utilizan en funciones , procedimientos y procesos , donde la declaración de variable será : variable nombres-variable : tipo-variable ;
Diseño lógico
EUI – ULPGC
Jose Torres
29 de 45
2.3. Tipos y constantes Señales, variables y constantes tienen un tipo asociado Especifica el conjunto o intervalo de valores que puede tomar Tiene asociado un conjunto de operadores (suma, AND,…)
Diseño lógico
EUI – ULPGC
Jose Torres
30 de 45
VHDL es ´fuertemente tipeado´ El compilador no permite asignar un valor a una señal o variable a menos que el tipo del valor coincida con el declarado del objeto Esto es bueno y malo a la vez: - los programas son más fiables y fáciles de depurar - puede ser exasperante, p.e. para volver a interpretar una señal de 2 bits como un entero, puede requerir una llamada a una función de conversión de tipo explícitamente
Diseño lógico
EUI – ULPGC
Jose Torres
31 de 45
VHDL tiene tipos predefinidos: bit bit_vector boolean
character integer real
severity_level string time
Los más usados son:
boolean = {true , false} character = cto. caracteres ISO de 8 bits integer = [-231+1 , +231-1] bit ={‘0’, ‘1’} bit_vector’: habrá que indicar el rango del índice según se explica más adelante en el tipo ‘array’
Diseño lógico
EUI – ULPGC
Jose Torres
32 de 45
Los operadores integrados para los integer y boolean son : Operadores integer + suma resta * multiplicación / división mod módulo división rem módulo residuo abs valor absoluto ** exponenciación
Operadores boolean and AND or OR nand NAND nor NOR xor OR Exclusivo xnor NOR Exclusivo not complementación
Los operadores booleanos están también definidos para el tipo bit y bit_vector Diseño lógico
EUI – ULPGC
Jose Torres
33 de 45
Asignación de un valor a una señal: Z '0',16=>'0',24=>'0',others=>'1'); donde w es de tipo word. Diseño lógico
EUI – ULPGC
Jose Torres
43 de 45
Para literales de array de std_logic usar cadena de caracteres (secuencia entre “”) , ya que es un array de caracteres . Para los ejemplos anteriores : B := "11111111"; W := "11111110111111101111111011111110";
Porción de un array: especificando los índices inicio y final Ejemplo: M(6 to 9), B(3 downto 0), W(15 downto 8), R(0,7 downto 0), R(1 to 2), S(stop to go) donde la dirección de la porción es la misma que la del array original Diseño lógico
EUI – ULPGC
Jose Torres
44 de 45
Operador de concatenación (&) de arrays y elementos de array Ejemplo: ‘0’ & ‘1’ & “1Z” = “011Z” B(6 downto 0) & B(7) produce un desplazamiento circular a la izquierda del array B de 8 bits Array más usado (definido en el paquete 1164 de la IEEE) type STD_LOGIC_VECTOR is array ( natural range ) of STD_LOGIC; que es un array no restringido ; el intervalo del índice se concreta cuando se declara una señal o variable de este tipo Diseño lógico
EUI – ULPGC
Jose Torres
45 de 45