lenguaje vhdl - · pdf fileing. wilmer naranjo 2 descripción en vhdl ¾al inicio...

48
Ing. Wilmer Naranjo 1 LENGUAJE VHDL

Upload: duongkhanh

Post on 05-Feb-2018

226 views

Category:

Documents


1 download

TRANSCRIPT

Ing. Wilmer Naranjo 1

LENGUAJE VHDL

Ing. Wilmer Naranjo 2

DESCRIPCIÓN EN VHDLAl inicio de los 80´s diversos grupos de investigadores empiezan a crear y desarrollar los llamados "lenguajes de descripción de hardware" cada uno con sus peculiaridades. Empresas como IBM con su IDL, el TI - HDL de Texas Instruments, ZEUS de General Electric, etc.,Alrededor de 1981 el Departamento de Defensa de los Estados Unidos desarrolla un proyecto llamado VHSIC (Very High Speed Integrated Circuit ) su objetivo era rentabilizar las inversiones en hardware haciendo más sencillo su mantenimiento. Se pretendía con ello resolver el problema de modificar el hardware diseñado en un proyecto para utilizarlo en otro, lo que no era posible hasta entonces porque no existía una herramienta adecuada que armonizase y normalizase dicha tarea, era el momento de los HDL's

Ing. Wilmer Naranjo 3

DESCRIPCIÓN EN VHDL

Constituida al menos por 3 elementos principales:o Biblioteca (librerías)o Entidadeso Arquitecturas

El diseñador generalmente realiza la descripción de las entidades y arquitectura empleando elementos almacenados en las bibliotecas.Éstas a su vez son almacenadas en la biblioteca de trabajo, luego de ser compiladas.

Ing. Wilmer Naranjo 4

BIBLIOTECA

Es un lugar donde el compilador VHDL almacena información referente a un proyecto de diseño particular, incluyendo documentos intermedios que son usados en el análisis, simulación y la síntesis.

Una biblioteca estándar muy usada es IEEE.

Para especificar la biblioteca se usa "library" y en la primera línea del programa de escribirse lo siguiente:

Library ieee;

Ing. Wilmer Naranjo 5

OBJETO DE DATOSSe proporcionan tres tipos de objetos de datos:SeñalesConstantes VariablesLas señales: representan las señales lógicas de un circuito.Las constantes y variables son útiles para describir el circuito.

Ing. Wilmer Naranjo 6

NOMBRE DE OBJETO DE DATOSCualquier carácter AlfanuméricoEmpieza con una letra (ingles)No puede ser una palabra reservada de VHDLNo puede empezar con “_”No puede tener dos “_” seguidosEjemplo X1, Puerto_1, UNO, estado, a, FVHDL no distingue entre mayúscula y minúscula.

Ing. Wilmer Naranjo 7

VALORES DE OBJETO DE DATOSSe utiliza objeto de datos SIGNAL para representar señales lógicas en un circuito.El Valor objeto SIGNAL individual se especifica utilizando apostrofe como en ‘0’ o en ‘1’ para un número binario.El Valor objeto SIGNAL multibits se especifica utilizando comillas como en “0101” o “10111100”Las comillas también se emplean para indicar un número binario “1001” representa los cuatro valores SIGNAL ‘1’, ‘0’, ‘0’, ‘1’Los valores CONSTANT o VARIABLE se especifican de la misma manera que los objetos de datos SIGNAL.

Ing. Wilmer Naranjo 8

OBJETO DE DATOS SIGNALLos objetos de datos SIGNAL representan señales lógicas, o cables en un circuito.Ejemplo de declaración:SIGNAL signal_name: type_nameLa variable type_name determina los valores legales que la señal puede asumir y sus usos en VHDL.Ejemplos:BIT, BIT VECTOR, STD_LOGIC, STD_LOGICVECTOR , STD_ULOGIC , SIGNED, UNSIGNED, INTEGER, ENUMERATION y BOOLEAN.

Ing. Wilmer Naranjo 9

TIPO BIT y BIT_VECTOREstos tipos están predefinidos en los estandares de VHDL del IEEE 1076 y 1164.BIT puede tener los valores ‘1’ o ‘0’BIT_VECTOR es un arreglo lineal de objetos tipo bit.Ejemplo:SIGNAL X1: BITSIGNAL C: BIT_VECTOR (1 TO 4)SIGNAL D: BIT_VECTOR (7 DOWNTO 0)

C<= “1010” --C(1)=1, C(2)=0, C(3)=1, C(4)=0D<= “10010100” --D(7)=1, D(6)=0, D(5)=0, D(4)=1

--D(3)=0, D(2)=1, D(1)=0, D(0)=0

Ing. Wilmer Naranjo 10

TIPO STDLOGIC y STDLOGIC _VECTORSe añadio en el estandar de VHDL del IEEE 1164.Ofrece mayor versatilidad que el tipo BIT.Para utilizarlo debemos de incluir las siguientes instrucciones

LIBRARY ieeeUSE ieee.std_logic_1164.all

Los siguientes valores son legales para STD_LOGIC:0 ----- un 0 ;1 ---- un 1 Z ----- alta impedancia ;‘-‘ ---- estado opcional (don’t care) L ----- un 0 débil ;H ---- un 1 débil U ----- no inicializado ;X ---- desconocido (un 0 ó un 1 fuerte) W ----- desconocido (un 0, ó un 1 débiles)SIGNAL X1, x2, x3 :STD_LOGICSIGNAL C : STD_LOGIC_VECTOR (1 TO 4)SIGNAL Y, Z : STD_LOGIC_VECTOR (7 DOWNTO 0)

Ing. Wilmer Naranjo 11

TIPO STD_ULOGICMuy similares a las señales de tipo STD_LOGIC.La diferencia esta en que STD_ULOGIC se relaciona con el concepto de Función de Resolución.La Función de Resolución se utiliza para determinar que valor debe tomar una señal si hay dos fuentes para la misma.Por ejemplo dos buffers triestados podrían tener sus salidas conectadas a una señal x, en algún momento uno de ellos podría producir un valor de salida ‘Z’ y el otro un valor ‘1’. Para determinar que el valor de X debe de ser ‘1’ en este caso se emplea la función resolución

Ing. Wilmer Naranjo 12

TIPO SIGNED Y UNSIGNED

Los paquetes std_logic_signed y std_logic_unsignedrecurren a otro paquete llamado std_logic_arith, que define el tipo de circuito que utilizará operadores aritméticos como +.El tipo signed maneja números con signo (complemento a 2)El tipo unsigned emplea números sin signo.

Ing. Wilmer Naranjo 13

TIPO INTEGERUna señal INTEGER tiene 32 bit, cuyo rango [-(231-1) a (231-1)].El rango se puede personalizarutilizango RANGE.SIGNAL X: INTEGER RABGE -127 TO 127.

TIPO BOOLEANTiene los valores TRUE o FALSE, que equivale a ‘1’ y a ‘0’.

TIPO ENUMERATIONTiene valores que el usuario especifica.TYPE enumerated_type_name IS (name{, name});TYPE State_type IS (estadoA, estadoB, estadoC);SIGNAL y: State_type;Los valores legales para y son estadoA, estadoB y estadoC

Ing. Wilmer Naranjo 14

OBJETO DE DATOS CONSTANTESEs aquel cuyo dato no puede cambiar.CONSTANT constant_nombre : type_name:=constant_valor;CONSTANT zero : std_logic_vector (3 downto 0):=“0000”;

OBJETOS DE DATOS VARIABLESSe utiliza para almacenar los resultados de los cálculosVARIABLE variable_name: type_name

Ing. Wilmer Naranjo 15

Operadores

Cinco categorías de operadores:

AritméticosRelacionalesLógicosDesplazamientoOtros

Ing. Wilmer Naranjo 16

Operadores Aritméticos

OPERACIÓN OPERADOR

Igual =Diferente /=

Mayor >Mayor o igual >=

Menor <Menor o igual <=

Ing. Wilmer Naranjo 17

Operadores lógicos y de desplazamientoOPERACIÓN OPERADOR

Y andY Negado nand

O orO Negado nor

O-exclusiva xorO-exclusiva negada xnor

Negación notDesplazamiento lógico a la izquierda sllDesplazamiento lógico a la derecha srl

Desplazamiento aritmético a la izquierda slaDesplazamiento aritmético a la derecha sraDesplazamiento circular a la izquierda rolDesplazamiento circular a la derecha ror

Ing. Wilmer Naranjo 18

Operadores de adición

OPERACIÓN OPERADORSigno positivo +Signo negativo -Concatenación &

Operadores Otros

Operadores de multiplicar: *, /, MOD, REM

Operadores miscellaneous: **, ABS

Ing. Wilmer Naranjo 19

Tipos de datos

Estándar Lógico‘0’ , ‘1’,’Z’ (tercer estado), ‘-’(don´t care),’L’,’H’,,’U’,’X’,’W’

Std_logic

Cadena de caracteresConjunto de caracteresStringCaracteresCharacter

Cadena de bitsConjunto de bitsBit_vector

Números binarios0,1BitNúmeros booleanosTRUE,FALSEBoolean

Números realesMAXREAL… MAXREALRealNúmeros positivos1… MAXINTPositiveNúmeros naturales0… MAXINTNaturalNúmeros enterosMAXINT… MAXINTIntegerDESCRIPCIÓNRANGOTIPO

Ing. Wilmer Naranjo 20

ENTIDAD DE DISEÑO DE VHDLUn circuito o subcircuitodescrito con código VHDL se llama entidad de diseño o simplemente entidad.Tiene dos partes principales que son:

Declaración de entidad ENTITYEspecifica las señales de entrada y salida del circuito digital.Arquitectura .Proporciona los detalles del circuito.

ENTIDAD

DECLARACION DE ENTIDAD

ARQUITECTURA

Ing. Wilmer Naranjo 21

DECLARACION ENTITYLas señales de E/S del circuito digital se especifica utilizando la declaración ENTITY.PORT indica la señal de E/S en modo:Modo in: Un puerto es de modo in si la información correspondiente al mismo, entra a la entidad.Modo out: Un puerto es de modo out si la

información fluye hacia fuera de la entidad.Modo buffer: Este modo es similar al modo out, pero además, permite la realimentación y no es bidireccional. Modo inout: Es usado para señales

bidireccionales.

Ing. Wilmer Naranjo 22

ENTIDADTiene la misión de modelar la interfaz de un circuito o sistema con el exterior, a través de las entradas y salidas.

EA

BC

Entity EJEMPLO isPort (A,B: in bit;

C : out bit);End EJEMPLO

EA

BC

Entity EJEMPLO1 isPort (A,B: in bit_vector (1 to 4);

C : out bit_vector (1 to 4));End EJEMPLO1

Ing. Wilmer Naranjo 23

ARQUITECTURAARCHITECTURE Provee los detalles del circuitopara una entidad.Consta de 2 partes principales:La región declarativa

Precede a la palabra reservada BEGIN.Se utiliza para declarar señales, tipos definidos por el usuario y constantes, componentes y atributos.

La región del cuerpo de arquitecturaSe encuentra después de BEGIN y se detalla la programación en VHDL del circuito digital

Ing. Wilmer Naranjo 24

PAQUETEUn paquete en VHDL sirve como un depósito. Se utiliza para almacenar código de VHDL de uso general.Un paquete tiene dos partes:Declaración de Paquete.Se declara: LIBRARY library_name;

USE library_name.package_name_all;

PACKAGE package_name IS[TYPEdeclarartions][SIGNAL declarartions][COMPONENT declarartions]

END package_nameCuerpo de Paquete.Opcional para definir funciones de VHDL

Ing. Wilmer Naranjo 25

Crear paquetesLa biblioteca IEEE es solo de lectura, tipo global, no puede interactuar ni modificar.

Cada diseñador puede crear su propio paquete dando la posibilidad de utilizarlos en otros diseños o modificarlos, para esto el compilador VHDL genera automáticamente una biblioteca llamada work.

En la biblioteca work se almacenan las entidades y arquitecturas de diseño.

Una vez creado el nuevo paquete se lo puede usar en otro proyecto declarándolo de la siguiente manera:

Use work.nombre_del_paquete.all ;

Ing. Wilmer Naranjo 26

SUBCIRCUITOSUna entidad de VHDL definida en un archivo de código fuente puede usarse como subcircuito en otro archivo de código fuente.El subcircuito en VHDL se llama COMPONENTE.Un componente se declara en la arquitectura o en la declaración de paquete.La sintaxis de la declaración del componente es similar a la declaración de la entidad.Una vez declarado, este puede instanciarse como un subcircuito. COMPONENT component_name[GENERIC ( parameter_name: integer:= default_value{;

parameter_name: integer:= default_value});]PORT ([SIGNAL] signal_name {, signal_name}:[mode] type_name{;

[SIGNAL] signal_name {, signal_name}:[mode] type_name});

instance_name : component_name PORT MAP(formal_name => actual_name {, formal_name => actual_name });

Ing. Wilmer Naranjo 27

ARQUITECTURAEs la encargada de la descripción del funcionamiento de un circuito.Describe el funcionamiento interno de las entidades.Pueden existir varias arquitecturas para una misma entidad.

Niveles de arquitectura:

- Nivel Algorítmico- Nivel RTL- Nivel Lógico

Ing. Wilmer Naranjo 28

Nivel Algorítmico, funcional o de comportamiento

Es el nivel con mayor grado de abstracción.

El diseñador sólo describe el comportamiento del sistema sin preocuparse de las señales o componentes internos del mismo.

Se suele hablar de éste nivel como: Alto Nivel.

Ing. Wilmer Naranjo 29

Ejemplo:

Entity decodificador isPort (e0,e1,en: in bit;

s0,s1,s2,s3 : out bit);End decodificador

Ing. Wilmer Naranjo 30

Nivel Algorítmicoarchitecture algoritmica of decodificador is begin

process (e0,e1,en)begin

if en=‘0’ thens0<=‘0’; s1<=‘0’; s2<=‘0’; s3<=‘0’;

elsif e1=‘0’ and e0=‘0’ thens0<=‘1’;

elsif e1=‘0’ and e0=‘1’ thens1<=‘1’;

elsif e1=‘1’ and e0=‘0’ thens2<=‘1’;

elsif e1=‘1’ and e0=‘1’ thens3<=‘1’;

end if;end process;

end algoritmica;

Ing. Wilmer Naranjo 31

Nivel RTL (Register Transfer Level) o de flujo de datos (Data Flow)

Proporciona un cierto grado de abstracción con respecto al hardware.

El diseñador describe el sistema mediante diagramas de transferencias entre registros, tablas de verdad o ecuaciones lógicas.

Ing. Wilmer Naranjo 32

Nivel RTLarchitecture RTL of decodificador is

signal e0n, e1n: bit;begin

e0n<=not(e0);e1n<=not(e1);s0<= e0n and e1n and en;s1<= e0 and e1n and en;s2<= e0n and e1 and en;s3<= e0 and e1 and en;

end RTL;

Ing. Wilmer Naranjo 33

Nivel Lógico o Estructural

Utiliza los recursos que el lenguaje proporciona para describir las interconexiones entre los distintos componentes de un circuito.

No se realiza una descripción del comportamiento sino de la estructura del mismo.

Ing. Wilmer Naranjo 34

Nivel Lógicoarchitecture estructural of decodificador is

signal e0n, e1n: bit;component inversor is

port (e:in bit; s:out bit);end component;component puerta_and is

port (e0, e1,en:in bit; s:out bit);end component;

BeginN0:inversor port map (e0, e0n);N1:inversor port map (e1, e1n);A0:puerta_and port map (e0n, e1n, en,,s0);A1:puerta_and port map (e0, e1n, en,,s1);A2:puerta_and port map (e0n, e1, en,,s2);A3:puerta_and port map (e0, e1, en,,s3);

end estructural;

Ing. Wilmer Naranjo 35

INSTRUCCIONES DE ASIGNACION CONCURRENTEAsignación de señales simples

Signal_name <= expression;

Asignación de señales seleccionadaWhit expression SELECTsignal_name <= expression WHEN constant_value{,

expression WHEN constant_value};

Asignación de señal condicionalsignal_name <= expression WHEN logic_expression ELSE

{expression WHEN logic_expression ELSE}expression;

Instrucciones Generate

Ing. Wilmer Naranjo 36

COMPARADOR ASIGNACION

EA

BC

Entity comparador isPort (A,B: in bit_vector (0 to 3);

C : out bit );End comparadorarchitecture RTL of comparador is

BEGINC <= NOT (A(0) XOR B(0)) AND

NOT (A(1) XOR B(1)) ANDNOT (A(2) XOR B(2)) AND NOT (A(3) XOR B(3));

end RTL;

Ing. Wilmer Naranjo 37

SELECTOR SELECCIONEntity selector isPort (A,B: in bit_vector (1 to 4);

S: in bit; C : out bit_vector (1 to 4));

End selectorarchitecture RTL of selector isbegin

WITH S SELECTC <= A WHEN ‘0’,

B WHEN OTHERS;end RTL;

E

S

A

BC

Ing. Wilmer Naranjo 38

SELECTOR 4Entity selector4 isPort (A,B,C,D: in bit_vector (1 to 4);

S: in bit_vector (0 to 1); F : out bit_vector (1 to 4));

End selector4architecture RTL of selector4 isbegin

WITH S SELECTF <= A WHEN ‘00’,

B WHEN ‘01’,C WHEN ‘10’,D WHEN OTHERS;

end RTL;

E

S

A

BF

C

D

Ing. Wilmer Naranjo 39

COMPARADOR CONDICIONAL

EA

BC

Entity comparador isPort (A,B: in bit_vector (1 to 4);

C : out bit );End comparadorarchitecture RTL of comparador is

BEGINC <= ‘1’ when (a = b) else ‘0’;

end RTL;

Ing. Wilmer Naranjo 40

SELECTOREntity selector2 isPort (A,B: in bit_vector (1 to 4);

S: in bit; C : out bit_vector (1 to 4));

End selector2architecture RTL of selector2 isbegin

C <= A WHEN S= ‘0’ ELSE B;end RTL;

E

S

A

BC

Ing. Wilmer Naranjo 41

Asignación de señal recibida 2

Otra forma:with - select - when - others

Ejemplo:Whit m selectT <=‘1’ when 0 | 4 | 18;

‘0’ when 14 | 16 | 20;‘z’ when others;

Las barras verticales (|) tienen el mismo significado que la operación lógica or.

Ing. Wilmer Naranjo 42

PROCESOEs el mecanismo fundamental utilizado para describir el comportamiento de una entidad.La arquitectura de una entidad descrita a nivel de comportamiento incluye una o más procesos.Es en sí una cláusula concurrente, pero las sentencias incluidas en él son secuenciales.

La declaración de los procesos comienza con el nombre de éste, seguida por dos puntos (:) y luego, la palabra clave PROCESS.Después de la palabra clave es necesario detallar una lista de señales, conocida como lista de sensibilidades.El objetivo de esta lista es activar el proceso, siempre y cuando se active o cambie una de las señales contenidas en dicha lista.

Ing. Wilmer Naranjo 43

Sintaxis del procesonombre_del_proceso: process (señal1, señal2,…,señaln)

Declaración de tipos Declaración de variablesDeclaración de constantesBeginDeclaraciones secuenciales...

Declaraciones secuencialesend process nombre_del_proceso;

Ing. Wilmer Naranjo 44

Declaración if - thenLa declaración if es una estructura de asignación condicional, que permite la selección de instrucciones que serán ejecutadas, dependiendo de una o más condiciones.Ejemplo:

If a=b thenE<=‘1’;end if;

Declaración if – then-elseEjemplo:

If a=b thenE<=‘1’;

elseE<=‘0’;

end if;

Ing. Wilmer Naranjo 45

Declaración if – then-elsif-else

Usada cuando es necesario varias estructuras ifanidadas (una en el interior de otras).

Ejemplo:

If [A[3]=‘1’] then Y <= “111”;elsif [A[2]=‘1’] then Y <= “110”;elsif [A[1]=‘1’] then Y <= “101”;elsif [A[0]=‘1’] then Y <= “100”;

else Y <= “000”;end if;

Ing. Wilmer Naranjo 46

Declaración Case

Es muy útil cuando se disponen de varias alternativas a partir del valor de una señal, o una expresión y se necesita seleccionar sólo una.

Ejemplo:

Case A iswhen “001” => Y[0] <= '0';when “010” => Y[1] <= '0';when “011” => Y[2] <= '0';when “111” => Y[3] <= '0';

end case;

Ing. Wilmer Naranjo 47

Case-when-othersEjemplo:

Case A iswhen “001” => Y[0] <= '0';when “010” => Y[1] <= '0';when “011” => Y[2] <= '0';when “101” => Y[3] <= '0';when others =>Y<=“1111”;

end case;

Ing. Wilmer Naranjo 48

LOOP

VHDL provee dos instrucciones de ciclo:1.- For --- loop2.- While --- loopEstas instrucciones sirven para repetir una

o mas instrucciones de asignación secuencial.