INTRODUCCIÓN AL LENGUAJE VHDL LDD 2007-08 1
Introducción. ÍNDICE. 1. Conceptos básicos del lenguaje y Aplicaciones. 2. Tipos de datos y Señales. 3. Sentencias concurrentes y secuenciales. 4. Registros y máquinas de estados finitos. LDD 2007-08 2
Bibliografía: - VHDL Lenguaje estándar de diseño electrónico. Lluís Terés, Yago Torroja, Serafín Olcoz, Eugenio Villar. Ed, Mc Graw-Hill, 1998 - VHDL Modeling for Digital Design Synthesis Yu-Chin Hsu, Kevin F. Tsai, Jessie T. Liu, Eric S.Lin. Ed, Kluwer Academic Publishers, 1995 - Hardware Design and Simulation in VAL / VHDL. Larry M. Augustin, David C. Luckham, beniot A. Gennart, Youmth Huh, Alec G. Stanculescu. Ed, Kluwer Academic Publishers, 1991. - VHDL Designers Reference. Jean Michel Bergé, Alain Fonkova, Serge Maginot, Jacques Rovillard. Kluwer Academic Publishers, 1992 LDD 2007-08 3
PROCESO BÁSICO DE DISEÑO Requisitos y especificaciones Altera Diseño modelo VHDL Modelado y Síntesis Diseño Funcional Diseño Arquitectural (RTL) Diseño Lógico (puertas) Compilación Simulación Análisis de Timing Diseño Físico (transistores-layout) Configuración del PLD Fabricación y Test Programación del PLD y Test LDD 2007-08 4
Estas etapas son función de las distintas alternativas de diseño. Por analogía PROGRAMACIÓN se busca SÍNTESIS DE ALTO NIVEL Chip desde una descripción de alto nivel Imprescindible los lenguajes HDL-- VHDL LDD 2007-08 5
BREVE HISTORIA: EL LENGUAJE VHDL VHDL: (Very HIGH Speed Integrated Circuit Hardware Description Language) proyecto del departamento de defensa de los E.E.U.U. para desarrollar C.I. de 0,5m de muy altas prestaciones. Objetivo: disponer de una herramienta estándar e independiente para la especificación y documentación de sistemas electrónicos. LDD 2007-08 6
PROPIEDADES BÁSICAS. Permite modelar, y simular sistemas desde un alto nivel de abstracción hasta el nivel más bajo (puertas, biestables). Básicamente permite 3 niveles de descripción: Comportamental o algorítmico Flujo de datos o RTL Estructural Inicialmente desarrollado para modelado y simulación lógica de sistemas digitales. Actualmente se usa también para síntesis. LDD 2007-08 7
Ventajas del uso de VHDL Es un lenguaje normalizado compatible con la mayoría de las herramientas de diseño (Std IEEE 1076-1987) Permite la comunicación entre distintos diseñadores minimizando errores y problemas de compatibilidad. Admite diseño jerárquico. Los sistemas de prueba (test) pueden escribirse en el mismo lenguaje y usarse para comprobar distintos modelos. Permite al diseñador concentrase en la funcionalidad del diseño sin tener que preocuparse en otros factores como: retardos, área,... LDD 2007-08 8
Otras Ventajas Reducción del Tiempo de Diseño. Mejora de la Calidad del Diseño. Posibilidad de Explorar el Espacio de Diseño. Tecnología VLSI/diseño electrónico abierta a un mayor número de usuarios con poca experiencia. LDD 2007-08 9
Síntesis de hardware descripción n funcional process begin for I in 0 to 10 loop ::: end loop; end process; Síntesis descripción n estructural Proceso de Transformación de una descripción funcional de un circuito en una descripción estructural: Nivel de Transferencias entre registros. Layout (Caso Ideal) LDD 2007-08 10
Ejemplo de Descripción: Proceso de Síntesis function Paridad (Inp:std_logic_vector(2 downto 0)) return bit is variable Par:bit; begin Par := 1 ; for I in 1 to 3 loop if Inp(I) = 1 then Par := not Par; endif; end loop; return Par; end Paridad; Inp 3 Paridad Par LDD 2007-08 11
Sintesis de Alto Nivel process begin for I in 0 to 10 loop ::: end loop; end process; Función Objetivo Restricciones Síntesis Función Objetivo: Una función de : Estimación del área. Retardos del Circuito Restricciones: Condiciones que debe cumplir el circuito. (p.e. Area estimada < X. Retardo < Y...) LDD 2007-08 12
1.Aplication and language Introduction - What is VHDL? - Aplication areas - Limitations of VHDL - VHDL styles - Main laguages concepts - Entity - Architecture - Hierarchy - Declaration - Processes and types - Packages LDD 2007-08 13
What is VHDL? LDD 2007-08 14
Limitations LDD 2007-08 15
LDD 2007-08 16
VHDL Styles LDD 2007-08 17
LDD 2007-08 18
LDD 2007-08 19
LDD 2007-08 20
LDD 2007-08 21
Entity LDD 2007-08 22
Architecture LDD 2007-08 23
LDD 2007-08 24
LDD 2007-08 25
LDD 2007-08 26
LDD 2007-08 27
LDD 2007-08 28
LDD 2007-08 29
LDD 2007-08 30
Processes LDD 2007-08 31
LDD 2007-08 32
Types LDD 2007-08 33
The package LDD 2007-08 34
LDD 2007-08 35
2. Signals and Data Types - The concept of a type - Standard data types - Assignments to signals - Type definition - Multi valued logic - Standard Logic - Using Standard Logic VHDL Operators - Logical Operators - Relational Operators - Arithmetic Operators LDD 2007-08 36
Type definition LDD 2007-08 37
Type definition LDD 2007-08 38
Type concept and specification LDD 2007-08 39
LDD 2007-08 40
LDD 2007-08 41
LDD 2007-08 42
LDD 2007-08 43
Type std_logic is ( U, Uninitiliced X Unknown 0 Logic 0 1 logic 1 Z high impedance W Unknown L logic 0 H logic 1 _ Don t care Strong drive Weak drive LDD 2007-08 44
LDD 2007-08 45
LDD 2007-08 46
Using Standard Logic library IEEE; use IEEE.Std_logic_1164.all; entity MULS is port ( A, B, : in std_logic ; Z : out std_logic ); end MULS; LDD 2007-08 47
OPERADORES EN VHDL Existen 3 tipos predefinidos: Operadores lógicos Operadores matemáticos Operadores relacionales Por defecto, cada operador puede usarse con cierto tipo de datos. El usuario puede definir funciones si precisa usar otros tipos. LDD 2007-08 48
OPERADORES LÓGICOS Son los siguientes: AND, NAND, OR, NOR XOR, XNOR NOT Además de desplazamientos lógicos/aritméticos izda/dcha y rotaciones: SLL, SRL, SLA, SRA, ROL, ROR. Todos misma prioridad (de izda a dcha) salvo NOT que es siempre prioritaria. LDD 2007-08 49
OPERADORES LÓGICOS Tipos para los que están definidos: LDD 2007-08 50
library IEEE; use IEEE.Std_logic_1164.all; entity MULS is port ( A, B, : in std_logic ; Z : out std_logic ); end MULS; architecture EX of MULS is begin z <= A and not (B or C ); end EX; LDD 2007-08 51
Signal A_BUS, B_BUS, Z_BUS: std_logic_vector ( 3 downto 0 ); Z_BUS <= A_BUS and B_BUS; Equivalente a ZBUS(3) <= A_BUS(3) and B_BUS(3); ZBUS(2) <= A_BUS(2) and B_BUS(2); ZBUS(1) <= A_BUS(1) and B_BUS(1); ZBUS(0) <= A_BUS(0) and B_BUS(0); LDD 2007-08 52
OPERADORES RELACIONALES Son los siguientes: igual (=), distinto (/=) mayor(>), mayor o igual (>=) menor(>), menor o igual (>=) Los operandos pueden ser de cualquier tipo. El resultado es de tipo boolean. LDD 2007-08 53
LDD 2007-08 54
LDD 2007-08 55
OPERADORES ARITMÉTICOS Son los siguientes y para los tipos de datos indicados: suma (+), resta (-) --- cualquier tipo numérico producto (*), división (/) --- entero/real potencias (**) --- entero/real (exponente entero) módulo (mod), resto (rem) --- enteros valor absoluto (abs) --- entero/real LDD 2007-08 56
CONSTANTES Es un objeto que almacena un único valor durante toda la simulación Ejemplos: constant E:real:=2.7172; constant V37:bit_vector (7 downto 0):= 0100110 ; constant delay:time:=2ns; LDD 2007-08 57
Arrays... LDD 2007-08 58
LDD 2007-08 59
LDD 2007-08 60
c z 1 2 3 4 3 2 1 0 LDD 2007-08 61
LDD 2007-08 62
Concatenation and aggregates LDD 2007-08 63
LDD 2007-08 64
LDD 2007-08 65
LDD 2007-08 66
LDD 2007-08 67
LDD 2007-08 68
LDD 2007-08 69
3. Concurrent and secuential Statements - Concurrent Assignment Statements - The Process - Process execution - Sensitivity lists - The if statement - The case statement -The for loop -Variables LDD 2007-08 70
LDD 2007-08 71
LDD 2007-08 72
LDD 2007-08 73
LDD 2007-08 74
SENTENCIA WHEN... SELECT Es una sentencia concurrente que permite realizar asignaciones condicionales de valores, expresiones u objetos a señales. Sintáxis : [etiqueta:]señal<= valor1 when condición1 else valor2 when condición2 else valorn when condiciónn else unaffected; LDD 2007-08 75
SENTENCIA WITH... SELECT Es una sentencia concurrente que permite realizar asignaciones condicionales de valores, expresiones u objetos a señales (análoga a WHEN..SELECT). Sintáxis : [etiqueta:]with expresión select señal<= valor1 when resultado1 else valor2 when resultado2 else valorn when resultadon else unaffected when others; LDD 2007-08 76
LDD 2007-08 77
LDD 2007-08 78
LDD 2007-08 79
LDD 2007-08 80
LDD 2007-08 81
LDD 2007-08 82
LDD 2007-08 83
Process execution LDD 2007-08 84
LDD 2007-08 85
Sensitivity Lists LDD 2007-08 86
LDD 2007-08 87
LDD 2007-08 88
LDD 2007-08 89
The If Statement LDD 2007-08 90
Executes first true branch LDD 2007-08 91
The Case Statement LDD 2007-08 92
LDD 2007-08 93
The For Loop LDD 2007-08 94
LDD 2007-08 95
Variable usage LDD 2007-08 96
A ( 3 downto 0 ) 4 ODD Process (A) variable TMP : std_logic; begin TMP:= 0 ; for I in A low to A high loop TMP := TMP xor A(I); end loop; ODD <= TMP; end process; LDD 2007-08 97
LDD 2007-08 98
LDD 2007-08 99
LDD 2007-08 100
ARQUITECTURA ESTILOS DE DESCRIPCIÓN La arquitectura define la funcionalidad de la entidad. Estilos de descripción: Algorítmico: mediante un conjunto de instrucciones que se ejecutan secuencialmente (proceso) Flujo de datos: mediante funciones u operadores. Estructural: conjunto de componentes interconectados LDD 2007-08 101
Tema 4: Synthesis Issues - Specifying registers in VHDL - Detecting a rising clock - Controling transparent latches - Finite State Machines LDD 2007-08 102
Specifying registers in VHDL LDD 2007-08 103
Entiti Flop is port (D, Clk : in std_logic; Q : out st_logic); end Flop; architecture A of Flop is begin process begin wait until Clk event and Clk = 1 ; Q <= D; end process; end A; LDD 2007-08 104
LDD 2007-08 105
LDD 2007-08 106
LDD 2007-08 107
entity incomp_if is port (EN, D : in std_logic; Q : out st_logic); end incomp_if; architecture A of incomp_if is begin process (EN, D ) begin if ( EN = 1 ) then ; Q <= D; end if ; end process; end A; LDD 2007-08 108
Controling Transparent Latches LDD 2007-08 109
LDD 2007-08 110
LDD 2007-08 111
LDD 2007-08 112
FINITE STATE MACHINES LDD 2007-08 113
EJEMPLO E0 Reset* E2 E1 S2 1 0 X S1 0 Y E3 1 S1,S0 X 1 0 LDD 2007-08 114
LDD 2007-08 115
Architecture una of UC is signal EST_PRES,EST_SIG: integer range 0 to 3; begin... EST_SIG EST_PRE S LDD 2007-08 116
SEC: process (EST_PRES, X,Y) --- inicialización case EST_PRES is when 0 => if X= 0 then EST_SIG<=1; else EST_SIG <=2; end if; when 1 => EST_SIG<=3; when 2 => if Y= 1 then EST_SIG<=3; else EST_SIG <=2; end if; when 3 => if X= 0 then EST_SIG<=1; else EST_SIG <=0; end if; end case; end process SEC; LDD 2007-08 117
REG: process (clk, Reset) begin if Reset= 0 then EST_PRES <= 0; if clk event and clk= 1 then EST_PRES <= EST_SIG; end if; end process REG; LDD 2007-08 118
outputs S2 <= 1 when EST_PRES=2 else 0; S1 <= 1 when (EST_PRES=1 or (EST_PRES=2 AND Y= 1 )) else 0; S0 <= 1 when (EST_PRES=2 AND Y= 1 ) else 0; ESTADO <= EST_PRES; LDD 2007-08 119
DESCRIPCIÓN COMPLETA: architecture una of UC is signal EST_PRES,EST_SIG: integer range 0 to 3; begin SEC: process (EST_PRES, X,Y) --- inicialización case EST_PRES is when 0 => if X= 0 then EST_SIG<=1; else EST_SIG <=2; end if; when 1 => EST_SIG<=3; when 2 => if Y= 1 then EST_SIG<=3; else EST_SIG <=2; end if; when 3 => if X= 0 then EST_SIG<=1; else EST_SIG <=0; end if; end case; end process SEC; REG: process (clk, Reset) begin if Reset= 0 then EST_PRES <= 0; if clk event and clk= 1 then EST_PRES <= EST_SIG; end if; end process REG; S2 <= 1 when EST_PRE else 0; S1 <= 1 when (EST_PRES=1 or (EST_PRES=2 AND Y= 1 )) else 0; S0 <= 1 when (EST_PRES=2 AND Y= 1 ) else 0; end una; ESTADO <= EST_PRES; LDD 2007-08 120
Lógica combinacional Entradas Generar estado siguiente Generar señales de salida Estado siguiente Clk Registro Señale s salida Estado presente LDD 2007-08 121
EJEMPLO: E0 (00) RESET* (borrar registro y overflow) borrar sumar 1 0 E3(11) 1 OVF<--0 CLR SUM + INIC 0 INIC 0 0 SUM 1 LDR Cout 1 OVF<--1 E1(01) (cargar el registro) (activar overflow) E2(10) (borrar registro y overflow) OVF<--0 CLR 1 INIC 0 LDD 2007-08 122
Descripción en VHDL: library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity p1_ucv is port( CLK,RESETL : in std_logic; INIC, SUM, COUT : in std_logic; CLRL, LDRL, OVF1, OVF0L: out std_logic; ESTADO : out integer range 0 to 3); end p1_ucv; LDD 2007-08 123
Descripción en VHDL: architecture UC of p1_ucv is signal EST_PRES, EST_SIG_EST integer range 0 to 3; begin ES: process (EST_PRES, INIC,SUM,COUT) begin EST_SIG <= EST_PRES; case EST_PRES is LDD 2007-08 124
Descripción en VHDL: case EST_PRES is when E0 => if INIC='1' then EST_SIG <= E3; elsif SUM='1' then EST_SIG <= E1; else EST_SIG <= E0; end if; when E1 => if COUT='1' then EST_SIG <= E2; else EST_SIG <= E3; end if; when E2 => if INIC='0' then EST_SIG <= E2; else EST_SIG <= E3; end if; when E3 => if (INIC or SUM) = '1' then EST_SIG <= E3; else EST_SIG <= E0; end if; end case; end process ES; LDD 2007-08 125
Descripción en VHDL: REG: process (clk, resetl) begin if (resetl='0') then EST_PRES<=E0; elsif (clk'event) and (clk='1') then EST_PRES<=EST_SIG; end if; end process REG; LDD 2007-08 126
Descripción en VHDL: LDRL <= '0' when EST_PRES=E1 else '1'; CLRL <= '0' when (EST_PRES=E1 OR EST_PRES =E0) AND INIC='1' else '1'; OVF1 <= '1' when EST_PRES=E1 AND COUT='1' else '0'; OVF0L <= 0' when (EST_PRES=E2 OR EST_PRES =E0) AND INIC='1' else 1'; ESTADO <= EST_PRES; end UC; LDD 2007-08 127