Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lenguaje de programacin
El
(VHDL)
significado de las siglas VHDL es VHSIC (Very High SpeedIntegratedCircuit) Hardware Description Language, es decir, lenguaje de descripcin hardware de circuitos integrados de muy alta velocidad
de subsistemas electrnicos con el fin de minimizar el tamao de la aplicacin. Ya sea en un solo CI y si el problema es complejo, a travs de una serie sucesiva de circuitos programables como CPLD (Dispositivo Lgico Programable complejo o FPGA (Arreglo de Compuertas Programables en campo).
bloques de alto nivel, analizarlos (simularlos) y refinar la funcionalidad en alto nivel requerida antes de llegar a niveles ms bajos de abstraccin de la implementacin del diseo.
Modularidad: VHDL permite dividir o descomponer un diseo hardware y su descripcin
Muchas veces la descripcin Comportamental se divide a su vez en dos: 1. flujo de datos 2. algortmica
PROGRAMACION DE SISTEMAS DIGITALES CON VHDL 4
ENTITY mux IS PORT (a: IN bit; b: IN bit; selec: IN bit; salida: OUT bit) ; END mux:
ARCHITECTURE comportamental OF mux IS BEGIN PROCESS (a, b, selec) BEGIN IF(selec ='0') THEN salida <=a; ELSE salida <=b, END IF; END PROCESS; END comportamental;
PROGRAMACION DE SISTEMAS DIGITALES CON VHDL 6
ARCHITECTURE flujo1 OF mux IS SIGNAL nosel, ax, bx: bit; BEGIN Nosel <= NOT selec; ax <= a AND nosel; bx <= b AND selec; salida <= ax OR bx; ENDflujo1; ARCHITECTURE flujo2 OF mux IS BEGIN Salida <=a WHEN selec='0' ELSE b; END flujo2;
MODO ESTRUCTURAL
ARCHITECTURE estructura OF mux IS SIGNAL ax, bx, nosel: bit; BEGIN u0: ENTITY inv PORT MAP (e=>selec, y=> nosel); u1: ENTITY and2 PORT MAP(e1=>a, e2=>nosel, y=>ax); u2: ENTITY and2 PORT MAP(b, selec, bx); u3: ENTITY or2 PORT MAP(e1=>ax,e2=>bx, y=>salida); END estructura;
OPERADORES
Operadores aritmticos **(exponencial). ABSS () . * (Multiplicacin). / (Divisin). MOD (mdulo). REM (resto). + (suma y signo positivo). - (resta y signo negativo).
Operadores de desplazamiento SLL, SRL (desplazamiento lgico a izquierda y a derecha). SLA, SRA (desplazamiento aritmtico a izquierda y derecha). ROL, ROR (rotacin a izquierda y a derecha). Operadores relacionales =, /= (igualdad). <. <=, >, >= (menor mayor). Operadores lgicos NOT, AND, NAND, OR, NOR, XOR y en el VHDL'93 se aadi XNOR
10
configuration
package declaration package body
Una unidad es secundaria porque depende de una unidad primaria. Las dos primeras unidades Entity declaration y architecture son
11
ENTIDAD Entity
Es el bloque elemental de diseo en VHDL donde se identifica con
compuertas,
flip
flops,
memorias,
12
13
Librerias y Paquetes
Los modulos VHDL utilizan elementos definidos en paquetes contenidos en librerias. Las libreras o paquetes permiten declarar y almacenar estructuras lgicas seccionadas o complejas que facilitan el diseo. LIBRARY (LIBRERA) Una librera o biblioteca es un lugar al que se tiene acceso para utilizar unidades de diseo predeterminadas por el fabricante de la herramienta. En VHDL para sintesis, se usan libreras de fiabilidad probada como las llamadas ieee y work as:
-
Librerias y Paquetes
Para un diseo VHDL el compilador crea automticamente y utiliza una
librera work
Una librera permite tambin almacenar resultados de la compilacin de
que el usuario va generando. Comprende las unidades de diseo del proyecto activo.
Esta librera (work) se encuentra siempre presente en la compilacin de un
Librerias y Paquetes
PACKAGES (PAQUETES)
Un paquete VHDL es un archivo que contiene definiciones de objetos que pueden ser utilizados en otros programas. La clase de objetos que pueden ser puestos en un paquete incluye declaraciones de seal, tipo, constantes, funcin, procedimiento y componentes. Es una unidad de diseo que permite desarrollar un programa en VHDL de una forma gil, debido a que contiene algoritmos preestablecidos (sumadores, restadores, contadores, etc.) que ya tienen optimizado su comportamiento. Cuando en el diseo se utiliza un paquete es necesario llamar a la librera que lo contiene, para esto se utiliza la siguiente declaracin library ieee; El paquete std_logic_1164 contiene todos los tipos de datos que suelen emplearse en VHDL ( std_logic_vector, std_logic), entre otros.
Librerias y Paquetes
El acceso a la informacin contenida en un paquete se hace por medio de la sentencia use as:
17
Librerias y Paquetes
Ejemplo: 1. Circuito multiplicador de dos nmeros de dos bits. -- Declaracin de entidad circuito multiplicador library ieee; use ieee.std_logic_1164.all; entity multiplica is port (X0 X1 ,Y0 ,Y1: in std_logic; Z0 Z1 Z2 Z3: out std-logic); end multiplica; 2. Circuito comparador de dos nmeros de dos bits. library ieee; use ieee.std_logic_1164.all; entity comp is port (X ,Y: in bit_vector (1 downto 0); C: out bit); end comp;
PROGRAMACION DE SISTEMAS DIGITALES CON VHDL 18
Librerias y Paquetes
Literales. Datos de determinado tipo, sin nombre asociado. Puede ser un entero o real, expresado en cualquier base entre 2 y 16. Si no se especifica la base, se entiende que esta expresado en base 10. Si no aparece el punto decimal se trata de un entero. Ejemplo: 8#63.5#E-1 = 6.35 base 8. Constantes. Se declaran de dos formas . GENERIC se definen constantes caracteristicas de la entidad y por tanto de alcance global. CONSTANT se declaran constantes locales. Se define en laparte declarativa de las arquitecturas su rango de validez es el de la arquitectura. Si se define dentro de un proceso, su alcance se reduce a este. Variables. Solo deben ser declaradas dentro de los procesos, especificando el nombre y tipo. Cambian su valor inmediatamente despues de una sentencia de asignacin. Utiliza el simbolo :=. La operacion entre objetos siempre deben ser del mismo tipo de objetos a ambos lados del operador asignado. Seales. Se utilizan en el intercambio de informacin digital. Detallan las conexiones entre diferentes bloques funcionales internos y con el exterior. Las seales pueden aparecer en cualquier entorno de ejecucin, serie o concurrente y son de caracter global, es decir pueden ser leidas por cualquier componente , bloque o proceso integrado en la arquitectura. Utiliza el simbolo <= no actualiza su valor inmediatamente despus, sino despus de finalizar la ejecucion concurrente en curso.
19
Librerias y Paquetes
TIPOS Y ATRIBUTOS.
TIPOS ESCALARES:
Enteros. Se hace indicando el dominio de definicin, con la sintasis: IS RANGE__TO__. Ej: TYPE ent1 IS RANGE 1 TO 64: (define un tipo entero ent1con rango comprendido en el intervalo [1,64] Enumerados. Tomen valores que pertenecen a un conjunto finito, se define simplemente el conjunto de valores posibles: TYPE estado IS (inicio, lee, escribe, triestado); cualquier seal o variable declarado como tipo estado recibir de uno de los cuatro valores indicados en la definicion del tipo. Por ejemplo: SIGNAL S1: estado; - - S1 de tipo estado. .. S1 <= lee valor lee a S1. Matrices: conjuntos de datos de un mismo tipo y se declara con la palabra clave ARRAY El numero de indices especifica la dimensin.
TIPOS VECTORIALES:
Una vez declarada una matriz, se puede acceder individualmente a cada elemento especificando el indice entre perentesis. TYPE string IS ARRAY (positive RANGE <>) OF character; TYPE bit_vector IS ARRAY (natural RANGE <>) OF bit;
20
Librerias y Paquetes
ATRIBUTOS. Los tipos, objetos denominados seales poseen un conjunto de atributos a traves de los cuales se accede a la informacion relativa a ellos.
El atributo predefinido ms usado es EVENT que permite detectar transiciones en
el estado de las seales. Ejemplo: IF rel=O EVENT THEN El procedimiento incluye siempre una declaracin y una asignacin. ATTRIBUTE id_atrib:_atributo; - - declaracion ATTRIBUTE id_atrib OF id_elem: clase_elemento IS valor; asignacin.
Clases:
Predefinidos.
En una libreria estandard del lenguaje. En una libreria especifica del compilador.
21
Librerias y Paquetes
OPERADORES Y EXPRESIONES
AND, OR, NAND, NOR, XOR, XNOR, NOT. +(signo), -(signo), +, -, *, /, **, MOD, REM, ABS. =, /=, <, <=, >, >=
Concatenacin: para datos de un nico tipo para construir u vector del mismo tipo. &.
NOTA: La asignacion de un valor a una seal utiliza el mismo simbolo que un operador relacionl.
Expresionnes. Los operadores que se encuentran en una misma fila tienen la misma prioridad, y se evaluan de izquierda a derecha en la expresin excepto cuando los parntesis expecifican otro orden. Mayor: **, ABS, NOT, *, /, MOD, REM
Menor: =(signo), -(signo), +, -, & =, /=, <, <=, >= AND, OR, NAND, NOR, XOR, XNOR
PROGRAMACION DE SISTEMAS DIGITALES CON VHDL
22
ENTIDAD Entity
Puertos De Entrada Salida Port port (signal-names: mode, signal-type); Se refiere a cada una de las seales de entrada y salida, el cual equivale a un pin de un smbolo esquemtico. signal-names (identificador): se utiliza como una forma de llamar un puerto.
leda dentro de la arquitectura de la entidad, solamente por otras entidades que la utilicen. tpicamente utilizado para terminales de entrada/salida de tres estados en un PLD.
Inout: La seal se puede emplear como una entrada o una salida. Este modo es
Buffer: La seal es una salida de la entidad y su valor puede ser ledo dentro de la
arquitectura de la entidad. Retroalimentaciones internas declaradas se comporta como una terminal de salida.
23
ENTIDAD Entity
signal-type: clase de informacin que se transmite por el puerto. Se
expresin.
Bit_vector (vectores de bits) conjunto de bits para cada variable de entrada o salida. Integer (numero entero) que representa un numero entero std_logic para definir puertos escalares asociados a lineas individuales. std_logic_vector para los puertos vectoriales, asociados a buses de varias lineas.
24
ENTIDAD Entity
Ejemplo de una Entidad para un sumador de un bit.
25
ENTIDAD Entity
Especificaciones o reglas para identificadores
(nombre)
4suma
S4_bits
Resta_4_
Clear_8_
PROGRAMACION DE SISTEMAS DIGITALES CON VHDL 26
ENTIDAD Entity
Las palabras binarias se conocen como vectores de bits, los cuales se consideran un grupo y no como bits individuales. Ejemplo: Sumador de dos nmeros de 4 bits. Los tres vectores A, B, SUMA se definen con cuatro componentes distribuidos en orden descendente por medio del comando: 3 downto 0 (3 hacia 0) Indica el orden de aparicin en sentido descendente 0 to 3 (0 hasta 3) Indica el orden de aparicin en sentido ascendente. Los cuales se agruparan de la siguiente manera: Vector_A(3) = A3 Vector_A(2) = A2 Vector_A(1) = A1 Vector_A(0) = A0 Vector_B(3) = B3 Vector_B(2) = B2 Vector_B(2) = B1 Vector_B(0) = B0 Vector_SUMA(3) = S3 Vector_SUMA(2) = S2 Vector_SUMA(1) = S1 Vector_SUMA(0) = S
Una vez se ha establecido el orden en que aparecern los bits enunciados en cada vector, no se puede modificar a menos que se utilice el comando to.
27
ENTIDAD Entity
Luego la declaracin ser:
-- Declaracin de la entidad circuito sumador entity sumador is port (A,B: in bit_vector (3 downto 0); Cin: in bit; Cout: in bit; SUMA: out bit_vector (3 downto 0); end sumador;
28
ARQUITECTURA (architecture)
En la arquitectura es donde se define el funcionamiento del mdulo
definido en la entidad.
Una arquitectura siempre est referida a una entidad concreta, por lo
momento de la simulacin, o la sntesis, cuando se especifica qu arquitectura concreta se quiere simular o sintetizar.
La declaracin de la arquitectura se realiza con la palabra clave
29
ARQUITECTURA (architecture)
En la arquitectura es donde se define el funcionamiento del mdulo definido en la Una arquitectura siempre est referida a una entidad concreta, por lo que no tiene
La declaracin de la arquitectura se realiza con la palabra clave ARCHITECTURE, y su sintaxis completa es:
ARCHITECTURE nombre OF nombre entidad IS [declaraciones] BEGIN [sentencias concurrentes] END [ARCHITECTURE] (nombre);
30
ARQUITECTURA (architecture)
El VHDL permite mediante un algoritmo de programacin describir los diseos desde el nivel de compuertas hasta sistemas complejos.
Sintaxis de una definicin de arquitectura VHDL.
Architecture architecture-name of entity-name is type declarations signal declarations constant declarations function definitions procedure definitions component declarations begin concurrent-statement . concurrent-statement end architecture-name
31
ARQUITECTURA (architecture)
Su Arquitectura funcional ser: -- Declaracin de entidad circuito comparador library ieee; use ieee.std_logic_1164.all; entity comp is port (A,B: in bit_vector (1 downto 0); C: out bit); end comp; architecture functional of comp is begin compara: process (A,B) begin if A = B then C = 1; else C = 0; end if; end process compara; end functional;
PROGRAMACION DE SISTEMAS DIGITALES CON VHDL 32
ARQUITECTURA (architecture)
Ejemplo 2: Describa mediante declaraciones del tipo if~then~else el funcionamiento de una compuerta OR con base a la tabla de verdad.
-- Declaracin de funcional compuerta OR library ieee; use ieee.std_logic_1164.all; entity com_or is port (A,B: in std_logic; C: out std_logic); end com_or; architecture functional of com_or is begin process (A,B) begin if (A = 0 and B = 0) then C <= 0; else C <= 1; end if; end process; end functional;
33
ARQUITECTURA (architecture)
Donde:
begin: Seala el inicio de la seccin donde se comienza a declarar el
El process se une con la lista sensitiva (A,B, etc) que hace referencia a las
34
ARQUITECTURA (architecture)
Descripcin Estilo flujo de datos. Varias instrucciones concurrentes adicionales permiten a VHDL, describir un circuito en trminos de flujo de datos y operaciones activadas dentro del circuito. Indica la forma en que los datos se pueden transferir de una seal a otra sin necesidad de declaraciones secuenciales if then - else. Este tipo de descripcin puede utilizar dos formatos: Mediante instrucciones when - else o with - select Mediante ecuaciones booleanas La forma de flujo de datos en cualquiera de sus representaciones describe el camino que los datos siguen al ser transferidos de las operaciones efectuadas entre las seales de entrada y las seales de salida.
PROGRAMACION DE SISTEMAS DIGITALES CON VHDL 35
ARQUITECTURA (architecture)
Mediante instrucciones when - else.
En este caso se elimina el proceso y las declaraciones secuenciales if then - else. Tomando el ejemplo del comparador, la arquitectura por flujo de datos ser:
-- Declaracin de entidad circuito comparador library ieee; use ieee.std_logic_1164.all; entity comp is port (A,B: in bit_vector (3 downto 0); C: out bit); end comp; architecture f_datos of comp is begin C = 1 when (A = B) else 0; end f_datos;
PROGRAMACION DE SISTEMAS DIGITALES CON VHDL 36
ARQUITECTURA (architecture)
Para el caso de la compuerta OR ser: -- Declaracin de funcional compuerta OR library ieee; use ieee.std_logic_1164.all; entity com_or is port (A,B: in std_logic; C: out std_logic); end com_or; architecture compuerta of com_or is begin f <= 0 when (A = 0 and B = 0) else 1; end compuerta; NOTA: En el caso anterior se tiene una declaracin secuencial donde su ejecucin debe seguir un orden para evitar la prdida de la lgica descrita. En este caso se tiene una declaracin concurrente donde no importa el orden que se ejecuta.
PROGRAMACION DE SISTEMAS DIGITALES CON VHDL 37
ARQUITECTURA (architecture)
Mediante ecuaciones booleanas.
Este estilo considera las ecuaciones booleanas del circuito digital de acuerdo a su organizacin interna. Si tomamos el comparador de dos bits, se puede representar por medio de compuertas lgicas bsicas y su ecuacin booleana ser: F = (A(1) xnor B(1)) (A(0) xnor B(0)) -- Declaracin de entidad circuito comparador library ieee; use ieee.std_logic_1164.all; entity comp is port (A,B: in bit_vector(1 downto 0); C: out bit); end comp; architecture booleana of comp is begin C <= (A(1) xnor B(1) and A(0) xnor B(0); end booleana;
PROGRAMACION DE SISTEMAS DIGITALES CON VHDL 38
ARQUITECTURA (architecture)
Mediante ecuaciones booleanas. Este estilo considera las ecuaciones booleanas del circuito digital de acuerdo a su organizacin interna. F = A or B Para la compuerta OR -- Declaracin de funcional compuerta OR library ieee; use ieee.std_logic_1164.all; entity com_or is port (A,B: in std_logic; C: out std_logic); end com_or; architecture compuerta of com_or is begin f <= ( A or B); end compuerta;
39
ARQUITECTURA (architecture)
Descripcin Estilo estructural.
Para iniciar la programacin de una entidad de manera estructural es necesario la descomposicin lgica del diseo en pequeos submodulos (jerarquizada), los cuales permiten analizar de manera practica el circuito ya que la funcin de entrada / salida es conocida.
En VHDL es importante aclarar que una jerarqua se refiere al procedimiento de dividir en bloques y no a que un bloque tenga mayor jerarqua que otro. La salida de cada uno de los bloques se maneja como una seal, las cuales se declaran dentro de la arquitectura y no en la entidad, debido a que no representan a una terminal (pin) y solo se utilizan para conectar bloques de manera interna a la entidad. En el caso del comparador cada compuerta se encuentra dentro de un paquete gatesspkg,6 del cual se toman la estructura del diseo. Este tipo de arquitecturas estndares se conoce como componentes. En VHDL conectividad se conoce como netlist7 o listado de componentes.
40
ARQUITECTURA (architecture)
Instruccin component es la mas fundamental de las instrucciones concurrentes y tiene la siguiente sintaxis: label: component-name port map (signal1, signal2,..,signaln); label: component-name port map (port1=>signal1, port1=>signal2,.., port1=>signaln); component component-name port (signal-name : mode signal-type ; signal-name : mode signal-type ; signal-name : mode signal-type) ; end component ; Las palabras clave port map introducen una lista que asocia los puertos de la entidad nombrada con seales en la arquitectura actual. La lista puede escribirse en dos estilos diferentes:
41
ARQUITECTURA (architecture)
El siguiente listado muestra la descripcin estructural del comparador .
-- Declaracin de entidad circuito comparador library ieee; use ieee.std_logic_1164.all; entity comp is port (A,B: in bit_vector(0 to 1); C: out bit); end comp; use work.compuerta.all;
architecture estructural of comp is signal X: bit_vector (0 to 1); begin U0: xnor2 port map (A(0), B(0), X(0); U1: xnor2 port map (A(1), B(1), X(1); U2: and2 port map (X(0), X(1), C); end estructural;
42
ARQUITECTURA (architecture)
-- Declaracin de entidad circuito combinatorio library ieee; use ieee_std_logic_1164.all; entity combina is port (A,B,C: in std_logic; F: out std_logic); end combina; use work.compuerta.all;
architecture estructural of combina is signal X: bit_vector (0 to 2); begin U0: and2 port map (B, C, X(0); U1: and2 port map (C, A, X(1); U2: and2 port map (A, B, X(2)); U3: or3 port map (X(0), X(1), X(2), F); end estructural;
43
Las declaraciones concurrentes se encuentran fuera de la declaracin de un proceso y suelen usarse en las descripciones de flujo de datos y estructural. En la declaracin concurrente no importa el orden en que se escriban las seales, ya que el resultado para determinada funcin seria el mismo. Tipos de declaraciones concurrentes:
Declaraciones condicionales asignadas a una seal (when - else). Declaraciones concurrentes asignadas a seales. Seleccin de una seal (with - select- when).
44
45
46
47
48
49
llevan pueden tener efecto significativo en la lgica descrita. Una secuencia debe ejecutarse en el orden en que aparece y forma parte de un proceso (process).
El siguiente ejemplo del comparador dos nmeros de dos bits (a,b) y compara los nmeros si son iguales o son diferentes.
50
51
52
53
54
55
56
57
58
59
60
61