Está en la página 1de 108

DISEO EN VHDL PARA FPGAs.

INTRODUCCIN AL VHDL.

EL LENGUAJE VHDL

DISEO ELECTRNICO.

PROBLEMA NIVEL Requisitos y especificaciones FUNCIONAL Funcionalidad I/O y restricciones NIVEL ARQUITECTURAL
Nivel de tarea modem
Carrier Recovery

Algoritmos y funciones.

AGC

Phase
Splitter

Equalizer

Sec.

Slicer

Pri. Demodulation

Recovery

Timing

Nivel de arquitectura.

FSM reset s0

Arquitectura RTL Diseo lgico

Componentes genricos.

c0

c1 c2 C ontrolador

s1

s2

s3

Nivel de mscara

Nivel: - elctrico. - geomtrico.

NIVEL FSICO

Layout (ASIC) Arch. Config (FPGA/CPLD)

EL LENGUAJE VHDL

NIVELES DE ABSTRACCIN.

Nivel de abstraccin: grado de detalle con que se define una descripcin HDL respecto a su implementacin fsica. S=A*B+C

Funcional o de comportamiento (behavioral).

y y

Se describe el comportamiento del sistema como una relacin entre las entradas y las salidas. No existe nocin de tiempo (retardos temporales), slo orden de realizacin de operaciones. Slo para simulacin, no sintetizable?

multiplicador

multiplicando

shift_reg

Nivel RTL

FSM de control

shift_adder

reg Ciclo clk Salida 1 2 3 n P producto

y y y y y

Asignacin de operaciones a bloques funcionales. Se describen la seales que interactan en el circuito. Se planifica en qu ciclo de reloj se realiza cada operacin. No detalla la implementacin de los bloques, pero hay una arquitectura. Entrada de las herramientas de sntesis.

Nivel lgico o de puertas (estructural).

y y y
EL LENGUAJE VHDL

Lista de conexiones de la tecnologa destino. Conocimiento de retardos internos. Salida de las herramientas de sntesis. 2

METODOLOGA DE DISEO (I).

Planteamiento del diseo

Especificacin /nivel funcional Funcional Independiente de la Tecnologa


AGC

Nivel de tarea
Phase
Splitter

modem
Ca rrier Recove ry

Equalizer

Sec.

Slice r

Sntesis de comportamiento

Pri. Demodulation

Re covery

Tim ing

Arquitectural

Verificacin funcional

Nivel arquitectural-RT

Sntesis hard ware de alto nivel.


Nivel d e arquitectura. FSM reset s0 c0 c1 c2 Controlado r s1 s2 s3

Sntesis RT-lgica Puertas Lgicas

Dependiente de la Tecnologa

Verificacin temporal

Nivel lgico (netlist)

Sntesis lgica.
Nivel de pue rtas

Sntesis estructural RETROANOTACIN

TEST

Fsico

Diseo fsico Nivel tecnolgico

TECNOLOGA

Sntesis de layout.
Nivel de mscara

Fabricacin y validacin de prototipos

EL LENGUAJE VHDL

METODOLOGA DE DISEO (II)

EL LENGUAJE VHDL

LENGUAJES HDLs.

Los lenguajes de descripcin Hw (HDL) son similares a los lenguajes de


descripcin software (C- Verilog, Ada-VHDL).

Los HDL`s son lenguajes de alto nivel que definen hardware:

yModelan componentes para su simulacin: y Aseguran el comportamiento de un circuito antes de realizarlo y Acepta todas las caractersticas del lenguaje y Descripciones independientes de la tecnologa final yDescribe el diseo de un circuito para su implementacin fsica: y Genera un circuito (hardware) mediante un proceso de sntesis y Soporta solo un subconjunto del lenguaje y La calidad del resultado depende del estilo de descripcin y Necesita de parmetros fsicos dependientes de la tecnologa

EL LENGUAJE VHDL

VENTAJAS Y LIMITACIONES DE LOS HDL`s.

Ventajas:

yDisponibilidad pblica (Estandar IEEE) yDescripciones con mltiples niveles de abstraccin yUn nico lenguaje en todo el proceso de diseo simplifica la gestin yIndependencia de metodologa, de herramientas y de tecnologa yDefinen una sintaxis y una semntica de modelado para simulacin yReutilizacin y portabilidad del cdigo entre entornos de CAD (Cadence,
MAX+plus II, Mentor).

yConcurrencia.
Limitaciones:

y Los lenguajes tienden a ser complejos y Falta de una semntica formal para sntesis (problemas de portabilidad) y VHDL mejor dotado para las descripciones a nivel funcional/algortmico que a
nivel de puertas. En Verilog resulta al revs.

y La enorme flexibilidad del VHDL dificulta la implantacin de mecanismos


estndar para facilitar el intercambio de mdulos, timing y backannotation.
EL LENGUAJE VHDL
6

HDLs: CAMPOS DE APLICACIN.

ESPECIFICACIN.

Permite indicar el comportamiento del sistema utilizando construcciones de alto nivel. Esta especificacin puede utilizarse incluso como documentacin del sistema.

MODELADO.

La especificacin del sistema se puede modelar con distintos niveles de detalle y estilos.

SIMULACIN.

La validez de los modelos desarrollados se puede verificar mediante simulacin.

SNTESIS.

Los modelos de alto nivel creados se pueden sintetizar obtenindose una lista de conexiones para la tecnologa destino.

EL LENGUAJE VHDL

HDLs vs LENGUAJES DE PROGRAMACIN

Descripcin de hardware:

ySe puede obtener un sistema fsico yLos elementos tienen significado fsico. yConcurrente: Ejecucin en paralelo (evolucin en el tiempo). Independencia del orden de definicin. ySecuencial: Evolucin progresiva. Dependencia del orden de definicin.
CONCURRENTE CONCURRENTE t t aa bb cc 00 22 00 11 11 77 11 11 77 88 88 15 77 88 15 SECUENCIAL SECUENCIAL TT aa bb cc 00 00 11 11 77 11 11 77 88 11 15 77 88 15

Concurrencia vs secuencialidad.

1- a=7 a=7 12- b=a+1 b=a+1 23- c=a+b c=a+b 3-

EL LENGUAJE VHDL

LENGUAJES DE DESCRIPCIN HARDWARE (HDLs).

VHDL: (Very high speed Hardware Description Language) fue promovido en 1982 por el DoD, para la
especificacin y documentacin de los sistemas electrnicos digitales. 1 estandarizacin: IEEE std 1076-1987. 2 estandarizacin : IEEE std 1076-1993.

IEEE 1076.4-99 IEEE 1076.6-99 IEEE 1076.3-97 IEEE 1164-93 Standard Multivalue Logic System for VHDL Model VHDL Language Interoperatibility Reference Manual (STD_LOGIC_1164) (LRM) IEEE 1076-93 VHDL Register Transfer Level (RTL) Synthesis. VHDL Initiative Towards ASIC Libraries (VITAL)

Standard Synthesis Packages: NUMERIC_BIT NUMERIC_STD

VHDL-AMS (IEEE 1076.1-2006) extensin para incluir partes de diseo analgico


9

EL LENGUAJE VHDL

CARACTERSTICAS GENERALES DE VHDL.

Capacidad de expresar:

yConcurrencia. yJerarqua.

Varias clases de objetos (constantes, variables, seales). Lenguaje fuertemente tipado. Caractersticas propias de programacin orientada a objetos:

ySobrecarga de operadores.

Reminiscencias de ADA.

yMuchos elementos se componen de una declaracin y un cuerpo. yVerificacin de rangos de valores.

Basado en palabras clave.

EL LENGUAJE VHDL

10

ELEMENTOS DE VHDL
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std. all; entity contador is port (rst,prst,load,ce,clk: in std_logic; din:in std_logic_vector(3 downto 0); q:out std_logic_vector(3 downto 0); ceo:out std_logic); end contador; architecture rtl of contador is signal cuenta:unsigned(3 downto 0); begin q<=std_logic_vector(cuenta); process (clk, rst,prst) begin if (rst='1') then cuenta<=(others=>'0'); elsif (prst='1') then cuenta<="1001"; elsif (clk'event and clk='1') then if load='1' then cuenta<= unsigned(din); elsif (ce='1') then if (cuenta= "1001") then cuenta<="0000"; else cuenta<=cuenta+1; end if; end if; end if; end process; end rtl; 11

libreras paquetes

entidad

arquitectura

EL LENGUAJE VHDL

proceso

EVOLUCIN.

VHDL fue concebido inicialmente como un lenguaje de modelado de circuitos para simulacin, no para sntesis.

VHDLpara parasimulacin: simulacin: VHDL Muyflexible. flexible. Muy Muchosestilos estilosde dedescripcin. descripcin. Muchos Semnticaperfectamente perfectamentedefinida. definida. Semntica Resultadosindependientes independientesde dela la Resultados herramienta. herramienta.

VHDLpara parasntesis: sntesis: VHDL Restriccionessintcticas sintcticasyysemnticas. semnticas. Restricciones Diferenciasentre entresimulacin simulacinpre preyypost-sntesis. post-sntesis. Diferencias Cadaherramienta herramientaimpone imponesus susrestricciones. restricciones. Cada Resultadosindependientes independientesde dela laherramienta. herramienta. Resultados

VHDL
VHDL SINTETIZABLE

EL LENGUAJE VHDL

12

APLICACIN DE VHDL A LA SNTESIS.

El estndar IEEE 1076.6 normaliza el subconjunto de VHDL empleado para la sntesis RTL. Un sintetizador no tiene por qu interpretar todas las construcciones que VHDL acepta, sino
slo las que impone la norma IEEE 1076.6 relativa a la sntesis no la simulacin.

Las construcciones VHDL se clasifican por parte del sintetizador en:

ySoportadas. El sintetizador debe interpretar la construccin, es decir, mapearla en


hardware.

yIgnoradas. El sintetizador debe ignorar la construccin. El procesamiento de esta


construccin no debe provocar un error de sntesis, si bien la simulacin del circuito simulado puede diferir de la del cdigo VHDL original. La herramienta de sntesis puede informar al usuario de que esa construccin no est definida por el estndar.

yNo soportadas. El sintetizador no soporta la construccin . Se supone que estas


construcciones no deben aparecer en el cdigo VHDL por lo que el modo de fallo est indefinido. EL LENGUAJE VHDL
13

ELEMENTOS DE VHDL: IDENTIFICADORES (I).

IDENTIFICADORES.
Se utilizan para asignar un nombre a un elemento de VHDL:
yp.e. una variable, seal, puerto, tipo de datos etc.
component puerta port (entrada_a,entrada_b:.........

No se pueden utilizar las palabras clave. No existen restricciones en cuanto al mximo nmero de caracteres a emplear. Vlidos los caracteres:
yAlfabticos (a-z, A-Z) (no si w) ynumricos ( 0-9) ySubrayado ( _ ).

No se hace distincin entre maysculas y minsculas (case insensitive). Restricciones:


yDeben empezar por un carcter alfabtico yNo pueden tener dos subrayados seguidos yNo pueden acabar en subrayado.
14

EL LENGUAJE VHDL

ELEMENTOS DE VHDL: IDENTIFICADORES (II).

CORRECTOS CORRECTOS Mi_entidad Mi_entidad mux4a2 mux4a2 clk clk reset reset reloj reloj

INCORRECTOS INCORRECTOS 9_bus 9_bus Mux__4a2 Mux__4a2 Clk_ Clk_

IDENTIFICADORES EXTENDIDOS (VHDL93).

Permiten comunicar herramientas


yCualquier secuencia de caracteres delimitada por sendos \ yHay distincin entre maysculas y minsculas (case sensitive). \file.tmp$$\ \123__%carry\ \component\ \reloj\ (distinto de reloj)

Si se usa \ hay que duplicarlo


\Reloj\\1\
EL LENGUAJE VHDL
15

ELEMENTOS DE VHDL: PALABRAS CLAVE (I)

abs access after alias all and architecture array assert attribute begin block body

buffer bus case component configuration constant disconnect downto else elsif end entity

Exit file for function generate generic Group* guarded if impure * in

Inertial * inout is

Next nor not null of on open or others out package port postponed *

label library linkage literal * loop map mod nand new

Palabra clave (negrita cursiva) indica que es una palabra no soportada durante la sntesis. Palabra clave (subrayado) indica que la palabra es ignorada durante la sntesis. * Aadidas en VHDL 93. EL LENGUAJE VHDL
16

ELEMENTOS DE VHDL: PALABRAS CLAVE (II)

procedure process pure * range record register reject * rem report return rot * ror * select severity

shared * signal sla * sll * sra * srl * subtype then to transport type unaffected * units until

use variable wait when

while (in loop) with xnor * xor

Palabra clave (negrita cursiva) indica que es una palabra no soportada durante la sntesis. Palabra clave (subrayado) indica que la palabra es ignorada durante la sntesis. * Aadidas en VHDL 93. EL LENGUAJE VHDL
17

ELEMENTOS DE VHDL: SMBOLOS ESPECIALES

Pueden ser operadores Pueden formar parte de sentencias. Pueden ser smbolos de puntuacin.
UN CARCTER: & ( ) * + , - / : ; < > = | \ # DOS CARCTERES: => ** := /= >= <= <> --

Las sentencias terminan en ; Los comentarios se construyen a partir del doble carcter: --

EL LENGUAJE VHDL

18

ELEMENTOS DE VHDL: LITERALES(I).

LITERALES .
Smbolos cuyo valor se obtiene directamente de su representacin. Tipos:
yNumricos. yAlfanumricos yEnumerados. yNull. yCreados por el usuario.

Los tipos de datos predefinidos se encuentran casi en su totalidad en el paquete


standard de la librera std.

EL LENGUAJE VHDL

19

ELEMENTOS DE VHDL: LITERALES(II).

Numricos.

Enteros (integer):
Comprendidos en el margen 2147483647 a 2147483647

23 -37 23456789 23_456_789


Real (real) (punto flotante):
Comprendidos en el margen 1.0E38 a 1.0E38

123.234 -14.23

EL LENGUAJE VHDL

20

ELEMENTOS DE VHDL: LITERALES(III)

Otras forma de representacin de los literales numricos.

Notacin exponencial:

y65e12 y25.46E+2 y12E2 ns y-36E-8 )Para los valores enteros el exponente debe ser positivo
Utilizacin de bases

y2#10010011111# y2#10_0100_1111# y4#22033# y8#1217# y10#592# y16#24F# y10#0.32#e+4 y2#1001#e+2 (=36) "Las bases y exponentes se representan en base decimal. "La potencia es de la base con la que se trabaja.
EL LENGUAJE VHDL
21

ELEMENTOS DE VHDL: LITERALES(IV)

Alfanumricos.
CARACTERES SIMPLES:
Es un carcter ASCII encerrado entre comillas simples. t K 9 1 0 ,

CADENA DE CARACTERES
Es un conjunto caracteres ASCII encerrado entre comillas dobles. HOLA whyn& hjl nt g45hj67

EL LENGUAJE VHDL

22

ELEMENTOS DE VHDL: LITERALES(V)

CADENA DE BITS (bit string).


Se corresponde con un vector binario (bit_vector) 11001110 Admiten una representacin simplificada utilizando bases :

Binaria: B11001101 Es la base por defecto Octal: O571 o571 Hexadecimal: Xcf45a XCF45A
Admiten el carcter subrayado _ para mejorar la legibilidad. 100_1100_0010 XEF_56_90

EL LENGUAJE VHDL

23

ELEMENTOS DE VHDL: TIPO DE DATOS (I).

TIPOS DE DATOS.

Todo objeto est caracterizado por el tipo de datos que


representa.

El tipo de un objeto determina: yEl conjunto de valores que puede tomar el objeto. yLas operaciones que se pueden realizar con el objeto. VHDL es un lenguaje fuertemente tipado yNo estn permitidas las asignaciones entre objetos de
distinto tipo.

yEmpleo de funciones de conversin.

EL LENGUAJE VHDL

24

ELEMENTOS DE VHDL: TIPO DE DATOS(II).

Tipos Compuestos Fichero Escalares

Acceso

Arrays

Registros

Enteros

Reales

Enumerados

Fsicos

EL LENGUAJE VHDL

25

ELEMENTOS DE VHDL: TIPO DE DATOS(III).

ESCALARES: son aquellos cuyos valores estn formados por una sola unidad indivisible. No tiene semntica hardware Declaracin de un tipo de datos: type identificador is range literal to| downto literal; type identificador is definicion_tipo;

Existe una serie de tipos predefinidos as como la posibilidad de definir nuevos tipos de datos.

EL LENGUAJE VHDL

26

ELEMENTOS DE VHDL: ENTEROS(I).

Enteros (integer):
type integer is range -2_147_483_647 to 2_147_483_647;

23 -37 23456789 23_456_789 12e2 23.0 error


Un subconjunto de los enteros son:

Naturales (natural).
subtype natural is integer range 0 to integer'high;

Positivos (positive).
subtype positive is integer range 1 to integer'high;
EL LENGUAJE VHDL
27

ELEMENTOS DE VHDL: ENTEROS(II).

Definicin de nuevos tipos: type identificador is range literal to| downto literal;
type altura altura is is range range 00 to to 10_000 10_000 type ;; type precio precio is is range range 1000 1000 downto downto 00 type ;; Signal talla: talla: altura; altura; Signal Signal pvp: pvp: precio; precio; Signal .... .... pvp<= 275; 275; pvp<= pvp<= -25; -25; --- error error pvp<= .... .... talla<= 25; 25; talla<= talla<= 25.0;-25.0;-- error error talla<=

Por qu acotar? Los tipos enteros se codifican como vectores de bits


Los positivos en binario sin signo. Los negativos en complemento a dos.
EL LENGUAJE VHDL
28

ELEMENTOS DE VHDL: REALES(I).

Real (real).
type real is range -1.0E38 to 1.0E38;

La norma indica que los tipos reales deben representar el rango -1.0E38 a
1.0E38. Sin embargo no indica nada respecto a la precisin.

2.3 -3.7 1.267e-3 2.3e3 2e2 error, deben llevar un punto decimal 23 error
El tipo real no es aceptado por la mayora de las herramientas de sntesis.

EL LENGUAJE VHDL

29

ELEMENTOS DE VHDL: REALES(II).

Definicin de nuevos tipos: type identificador is range literal to| downto literal;
type altura altura is is range range 0.0 0.0 to to 260.0 260.0 ; type ; type precio precio is is range range 99.99 99.99 downto downto 0.00 0.00 ; type ; Signal talla: talla: altura; altura; Signal Signal pvp: pvp: precio; precio; Signal Signal elemento:real; elemento:real; Signal .... .... pvp<= 25.09; 25.09; pvp<= talla<= 2.578; 2.578; talla<= talla<= 25; 25; --- error error talla<= talla<= -25.0; -25.0; --- error error talla<= Elemento<=-1.23E-3; Elemento<=-1.23E-3;

EL LENGUAJE VHDL

30

ELEMENTOS DE VHDL: FSICOS(I).

Fsicos.
Son valores enteros en punto flotante que tienen una unidad de medida fsica asignada. Las unidades van separadas por un espacio en blanco. Slo est predefinido el tipo tiempo (time)
type time is range -2147483647 to -2147483647 type time is range -2147483647 to -2147483647 Units Units fs; fs; ps 1000 fs; ps == 1000 fs; ns 1000 ps; ns == 1000 ps; us 1000 ns; us == 1000 ns; ms 1000 us; ms == 1000 us; sec 1000 ms; sec == 1000 ms; min 60 sec; min == 60 sec; hr 60 min; hr == 60 min; End units; End units; --fentosegundo --fentosegundo --picosegundo --picosegundo --nanosegundo --nanosegundo --microsegundo --microsegundo --milisegundo --milisegundo --segundo --segundo --minuto --minuto --hora --hora

EL LENGUAJE VHDL

31

ELEMENTOS DE VHDL: FSICOS(II).

Definicin de nuevos tipos fsicos:


type identificador is range literal to|downto literal units identificador; {identificador= literal_fsico;} end units [identificador];
type peso is range to 1e10 type peso is range 00 to 1e10 units units gr; --gramo gr; --gramo kgr 1000 gr; --kilogramo kgr == 1000 gr; --kilogramo tns 1000 kgr;--tonelada tns == 1000 kgr;--tonelada end units; end units; .... .... signal medida:peso; signal medida:peso; medida<=12 gr; medida<=12 gr; medida<=12.54 kgr; medida<=12.54 kgr; medida<=12.54 gr;-error medida<=12.54 gr;-error

EL LENGUAJE VHDL

32

ELEMENTOS DE VHDL: ENUMERADOS(I)

Enumerados.

y Se define el conjunto de posibles valores del tipo especificado.


type identificador is (identificador|carcter{,...};
type estado estado is is (activado,desactivado); (activado,desactivado); type type nivel_logico nivel_logico is is (L,H); (L,H); type ... ... signal A: A: estado; estado; signal signal din: din: estado; estado; signal ... ... <= activado; activado; AA <= Din<=L; Din<=L; Din<=H; --- error error Din<=H;

En sntesis a cada valor enumerado se le asigna un cdigo binario.


EL LENGUAJE VHDL
33

ELEMENTOS DE VHDL: ENUMERADOS(II)

Tipos enumerados del paquete standard de la librera std.


type severity_level severity_level is is (note,warning,error,failure); (note,warning,error,failure); type type boolean boolean is is (false,true); (false,true); type type bit bit is is ('0','1'); ('0','1'); type type character character is is (NUL, (NUL, SOH, SOH, STX, STX, ETX, ETX, EOT, EOT, ENQ, ENQ, ACK, ACK, BEL, BEL, type ................. ................. '@', 'A', 'A', 'B', 'B', 'C', 'C', 'D', 'D', 'E', 'E', 'F', 'F', 'G', 'G', '@', ................. ................. 'p', 'q', 'q', 'r', 'r', 's', 's', 't', 't', 'u', 'u', 'v', 'v', 'w', 'w', 'p', ................. ................. ', '!', '!', '"', '"', '#', '#', '$', '$', '%', '%', '&', '&', ''', ''', '' ', ................. ................. '', '', '', '', '', '', '', '', '', '', '', '', '', ''); ''); '', type file_open_kind file_open_kind is is (read_mode, (read_mode, write_mode, write_mode, append_mode); append_mode); type type File_open_status File_open_status is is (open_ok, (open_ok, status_error, status_error, name_error, name_error, mode_error); mode_error); type

EL LENGUAJE VHDL

34

ELEMENTOS DE VHDL: ENUMERADOS(III)

Tipo enumerado del paquete std_logic_1164 de la librera IEEE.


library IEEE; IEEE; library use IEEE.std_logic_1164. IEEE.std_logic_1164. all use all type std_ulogic std_ulogic is is (( 'U',-'U',-- Uninitialized Uninitialized type 'X',-- Forcing Forcing Unknown Unknown 'X',-'0',-- Forcing Forcing 00 '0',-'1',-- Forcing Forcing 11 '1',-'Z',-- High High Impedance Impedance 'Z',-'W',-- Weak Weak Unknown Unknown 'W',-'L',-- Weak Weak 00 'L',-'H',-- Weak Weak 11 'H',-'-' --- Don't Don't care care '-' ); );

y Valores lgicos: 0, 1, L y H. y Valores metalgicos: U, X, W, -


std_logic: Tipo resuelto derivado de std_ulogic. No tienen semntica aritmtica.
EL LENGUAJE VHDL
35

ELEMENTOS DE VHDL: SUBTIPOS (I).

Definicin de subtipos: Es aplicable a cualquier tipo de datos


subtype identificador is id_tipo [range literal to|downto literal]; subtype h_1 h_1 is is integer integer range range 00 to to 10 10 subtype ;; signal k:h_1; k:h_1; signal ........ ........ K<=2; K<=2; k<=2.0; --- error error k<=2.0; K<=-2; --- hay hay error error K<=-2;

subype digito digito is is character character range range 0 0 to to 9; 9; subype type decimal decimal is is (0,1,2,3,4,5,6,7,8,9,); (0,1,2,3,4,5,6,7,8,9,); type subype octal octal is is decimal decimal range range 0 0 to to 7; 7; subype

EL LENGUAJE VHDL

36

ELEMENTOS DE VHDL: DATOS COMPUESTOS.

Datos compuestos.
Son aquellos que estn formados por varios elementos o unidades atmicas y por lo tanto son divisibles. Tienen semntica hardware.

Existen dos tipos:

yVectores (array): Las unidades atmicas son del mismo tipo.


N Tipo a N N-1 Tipo a N+1 N-2 Tipo a N+2 . N-K Tipo a N+K

yRegistros (record): Las unidades atmicas son del mismo o distinto tipo.
N Tipo a N N-1 Tipo b N+1 N-2 Tipo c N+2 . N-K Tipo l N+K

EL LENGUAJE VHDL

37

ELEMENTOS DE VHDL: VECTORES(I).

Vectores.
Un vector es un conjunto de objetos del mismo tipo ordenados mediante uno o ms ndices que indican la posicin dentro del vector.

type identificador is array (rango{,...}) of tipo_objetos;

El rango especifica el margen de valores del vector. El rango ser un tipo discreto (entero o enumerado).

EL LENGUAJE VHDL

38

ELEMENTOS DE VHDL: VECTORES(II).

RANGOENTERO ENTERO RANGO


type byte_1 byte_1 is is array array (7 (7 downto downto 0) 0) of of bit; bit; type type byte_2 is array (0 to 7) of bit; type byte_2 is array (0 to 7) of bit; type valor_1 valor_1 is is array array (0 (0 to to 99) 99) of of real; real; type type v_1 v_1 is is array array (integer (integer range range 00 to to 3) 3) of of integer; integer; type type v_1 is array (0 to 3) of integer; type v_1 is array (0 to 3) of integer; subtype D0A9 D0A9 is is integer integer range range 00 to to 9; 9; subtype type valor_3 valor_3 is is array array (D0A9) (D0A9) of of real; real; type

RANGOENUMERADO ENUMERADO RANGO


type FSMstate FSMstate is is (idle, (idle, rdy, rdy, tx); tx); type type CntState is array (idle to tx) of of state; state; type CntState is array (idle to tx) subtype decimal decimal is is character character range range 0 0 to to 9; 9; subtype type valor valor is is array array (decimal (decimal range range 0 0 to to 3) 3) of of bit; bit; type

EL LENGUAJE VHDL

39

ELEMENTOS DE VHDL: VECTORES(III).

El rango del array puede no estar acotado cuando se declara el tipo.


y
El rango se acota cuando se declara el objeto.

type MiVector MiVector is is array array (natural (natural range range <>) <>) of of bit; bit; type ....... ....... signal aux: aux: MiVector MiVector (7 (7 downto downto 0); 0); signal aux<=1111_0000; aux<=1111_0000; Aux<=Xf0; Aux<=Xf0;

EL LENGUAJE VHDL

40

ELEMENTOS DE VHDL: VECTORES(IV).

Vectores predefinidos.

String: Representan un vector de elementos de tipo carcter.

yDefinido en el paquete standard de la librera std .


type string is array (POSITIVE range <>) of CHARACTER; subtype POSITIVE is INTEGER range 1 to INTEGERHIGH; signal cadena_1: cadena_1: string string (7 (7 downto downto 0); 0); --error signal error signal cadena_1: cadena_1: string string (7 (7 downto downto 2); 2); signal signal cadena_2: cadena_2: string; string; ---error, error, tipo tipo no no acotado acotado signal cadena_1<= abcd13; abcd13; cadena_1<= cadena_1<= ab13;-ab13;-error cadena_1<= error

EL LENGUAJE VHDL

41

ELEMENTOS DE VHDL: VECTORES(V)

bit_vector. Representan vectores de bit. yDefinido en el paquete standard. yNo tienen semntica aritmtica. type bit_vector is array (NATURAL range <>) of bit; subtype NATURAL is INTEGER range 0 to INTEGERHIGH;

signal bus_dir: bus_dir: bit_vector bit_vector (15 (15 downto downto 0); 0); signal signal bus_datos:bit_vector bus_datos:bit_vector (7 (7 downto downto 0); 0); signal

Se utiliza para agilizar las simulaciones.


EL LENGUAJE VHDL

42

ELEMENTOS DE VHDL: VECTORES(VI).

std_ulogic_vector, std_logic_vector Representan vectores de std_ulogic y std_logic.

yDefinido en el paquete std_logic_1164 (librera IEEE). yNo tienen semntica aritmtica.


type std_ulogic_vector is array (NATURAL range <>) of std_ulogic; type std_logic_vector is array (NATURAL range <>) of std_logic; subtype NATURAL is INTEGER range 0 to INTEGERHIGH;

signal bus_dir: bus_dir: std_logic_vector std_logic_vector (15 (15 downto downto 0); 0); signal signal bus_datos: bus_datos: std_logic_vector std_logic_vector (7 (7 downto downto 0); 0); signal

EL LENGUAJE VHDL

43

ELEMENTOS DE VHDL: VECTORES(VII).

signed, unsigned. Representan vectores de bit con semntica aritmtica.

Definido en el paquete numeric_bit (librera IEEE).

type unsigned is array (NATURAL range <>) of bit; type signed is array (NATURAL range <>) of bit; subtype NATURAL is INTEGER range 0 to INTEGERHIGH;

library IEEE; IEEE; library use IEEE.NUMERIC_BIT. IEEE.NUMERIC_BIT. all; use all; .... .... signal suma,sumando_1,sumando_2:unsigned suma,sumando_1,sumando_2:unsigned (7 (7 downto downto 0); 0); signal suma<= sumando_1 sumando_1 + + sumando_2; sumando_2; suma<=

EL LENGUAJE VHDL

44

ELEMENTOS DE VHDL: VECTORES(VIII).

signed, unsigned. Tambin pueden representan vectores de


std_logic con semntica aritmtica.

Definido en el paquete numeric_std (libreria IEEE).

type unsigned is array (NATURAL range <>) of std_logic; type signed is array (NATURAL range <>) of std_logic; subtype NATURAL is INTEGER range 0 to INTEGERHIGH;

library IEEE; IEEE; library use IEEE.NUMERIC_STD. IEEE.NUMERIC_STD. all; use all; .... .... signal suma,sumando_1,sumando_2:unsigned suma,sumando_1,sumando_2:unsigned (7 (7 downto downto 0); 0); signal suma<= sumando_1 sumando_1 + + sumando_2; sumando_2; suma<=

EL LENGUAJE VHDL

45

ELEMENTOS DE VHDL: VECTORES(IX).

ASIGNACIN DE VALORES A TIPOS VECTORES.

Arrays unidimensionales.
y
La asignacin se hace elemento a elemento, independiente del ndice.
Z_BUS(3) <= <= C_BUS C_BUS (1); (1); Z_BUS(3) Z_BUS(2) <= C_BUS (2); Z_BUS(2) <= C_BUS (2); Z_BUS(1) <= C_BUS (3); Z_BUS(1) <= C_BUS (3); Z_BUS(0) <= <= C_BUS C_BUS (4); (4); Z_BUS(0) signal Z_BUS:bit_vector(3 Z_BUS:bit_vector(3 downto downto 0); 0); signal signal C_BUS:bit_vector(1 C_BUS:bit_vector(1 to to 4); 4); signal Z_BUS <= <= C_BUS; C_BUS; Z_BUS

y y

El dato asignado debe tener igual tamao que el objeto al que se le asigna. El tipo de los elementos de los vectores dato y objeto deben ser iguales.

Asignacin por posicin.


signal a,b a,b :: std_logic_vector std_logic_vector (3 (3 downto downto 0); 0); signal

... ...

a<=('1','0','1','0'); a<=('1','0','1','0'); b<=(a(3),a(0),a(2),a(1)); b<=(a(3),a(0),a(2),a(1));

EL LENGUAJE VHDL

46

ELEMENTOS DE VHDL: VECTORES(IX).

Asignacin por identificador.


signal aux: aux: bit_vector bit_vector (7 (7 downto downto 0); 0); signal ... ... aux <= <= 00001111; 00001111; aux aux(7) <= 1; 1; aux(7) <= aux(7 downto downto 4) 4) <= <= 1100; 1100; aux(7 aux(4 to to 7) 7) <= <= 0011;-0011;-- error error aux(4 aux <= ( others => 0); -Todos bits bits aa 0. 0. aux <= (others => 0); -- Todos aux<= (7=>1,5=>1); (7=>1,5=>1); --- error error aux<= aux<= (7=>1,5=>1, others => 0); 0); aux<= (7=>1,5=>1, others => aux<= (7|5=>1); (7|5=>1); --- error error aux<= aux<= (7|5=>1, (7|5=>1, others others => => 0); 0); aux<=

La palabra reservada others: asigna un valor a todos los elementos a los que no se le asigna un valor.

signal a,b,s: std_logic_vector(7 downto 0); signal a,b,s: std_logic_vector(7 downto 0); s(7 downto 4)<=a(7 downto 4); s(7 downto 4)<=a(7 downto 4); s(3 downto 0)<=b(3 downto 0); s(3 downto 0)<=b(3 downto 0);

EL LENGUAJE VHDL

47

ELEMENTOS DE VHDL: VECTORES(X).

Asignacin a vectores con rango enumerado.

type Coordenadas Coordenadas is is (X, (X, Y, Y, Z); Z); type type Punto Punto is is array array (X (X to to Z) Z) of of real; real; type signal Punto1: Punto1: Punto; Punto; signal ... ... Punto1(X)<=2.5; Punto1(X)<=2.5; Punto1(Y)<=7.3; Punto1(Y)<=7.3; Punto1(Z)<=2.5; Punto1(Z)<=2.5; Punto1 <= <= (2.5, (2.5, 7.3, 7.3, 2.5); 2.5); Punto1 Punto1 <=(1=>2.5, <=(1=>2.5, 2=>7.3, 2=>7.3, 3=>2.5); 3=>2.5); --- error error Punto1 Punto1 <=(X=>2.5, <=(X=>2.5, Y=>7.3, Y=>7.3, Z=>2.5); Z=>2.5); Punto1 Punto1 <=(x=>2.5, <=(x=>2.5, y=>7.3, y=>7.3, z=>2.5); z=>2.5); Punto1 Punto1 <=(y=>7.3, <=(y=>7.3, z=>2.5,x=>2.5); z=>2.5,x=>2.5); Punto1 Punto1 <=(X <=(X || ZZ =>2.5, =>2.5, Y=>7.3); Y=>7.3); Punto1

EL LENGUAJE VHDL

48

ELEMENTOS DE VHDL: VECTORES(XI).

Arrays bidimensionales.
type RAMmem RAMmem is is array array (0 (0 to to 127,7 127,7 downto downto 0) 0) of of bit; bit; type signal mem1, mem1, mem2: mem2: RAMmem; RAMmem; signal ... ... mem1 <= <= mem2; mem2; mem1 mem1(120,2) <= <= 1; 1; --- Bit Bit 22 de de direccin direccin 120 120 aa 11 mem1(120,2) type Memoria Memoria is is array array (0 (0 to to 63, 63, 00 to to 7) 7) of of bit; bit; type type Direccion Direccion is is range range 00 to to 63; 63; type type Contenido Contenido is is array array (0 (0 to to 7) 7) of of bit; bit; type signal RamA, RamA, RamB RamB :: Memoria; Memoria; signal signal DireccionRamA DireccionRamA :: Direccion; Direccion; signal signal ContenidoRamA ContenidoRamA :: Contenido; Contenido; signal ... ... RamA<=RamB; RamA<=RamB;

RamA(4,7)<=1; --- asignacin asignacin 1bit 1bit RamA(4,7)<=1; ... ... DireccionRamA <=34; <=34; --- lectura lectura de de una una palabra palabra DireccionRamA ContenidoRamA <=RamA(DireccionRamA, <=RamA(DireccionRamA, 00 to to 7); 7); ContenidoRamA EL LENGUAJE VHDL

49

ELEMENTOS DE VHDL: VECTORES (XII).

Arrays de arrays.
type byte byte is is array array (7 (7 downto downto 0) 0) of of bit; bit; type type RAMmem RAMmem is is array array (0 (0 to to 127) 127) of of byte; byte; type signal mem1, mem1, mem2: mem2: RAMmem; RAMmem; signal ... ... mem1 <= <= mem2; mem2; mem1 mem1 (120)(2) (120)(2) <= <= 1; 1; --- Bit Bit 22 de de direccin direccin 120 120 aa 11 mem1 type RAMmem RAMmem is is array array (0 (0 to to 127) 127) of of bit_vector bit_vector (7 (7 downto downto 0); 0); type signal mem1, mem1, mem2: mem2: RAMmem; RAMmem; signal ... ... mem1 <= <= mem2; mem2; mem1 mem1 (120)(2) (120)(2) <= <= 1; 1; --- Bit Bit 22 de de direccin direccin 120 120 aa 11 mem1

type int int is is array array downto 0) 0) of of std_logic_vector(7 std_logic_vector(7 downto downto 0); 0); type (( 77 downto signal etapas: etapas: int; int; signal ... ... etapas<= (others (others =>(others =>(others => => '0')); '0')); etapas<=

EL LENGUAJE VHDL

50

ELEMENTOS DE VHDL: REGISTROS (I).

Registros.
Un registro es un conjunto de objetos de diferente o igual tipo, cada uno de los cuales se llama campo.

type identificador is record elemento1: tipo; elemento2: tipo; ... elementoN: tipo; end record [identificador];

EL LENGUAJE VHDL

51

ELEMENTOS DE VHDL: REGISTROS(II).


type cod_op cod_op is is (sum,res,mul,div,sal); (sum,res,mul,div,sal); type type instruccion instruccion is is record record type codigo:cod_op;--campo1 codigo:cod_op;--campo1 fuente:integer; --campo2 --campo2 fuente:integer; destino:integer; --campo3 --campo3 destino:integer; end record record end ;; signal ins_1,ins_2:instruccion; ins_1,ins_2:instruccion; signal ins_1<=ins_2; ins_1<=ins_2;

signal reg_ins: reg_ins: cod_op; cod_op; signal signal reg1,reg2:integer; reg1,reg2:integer; signal instruc.codigo <=reg_ins; <=reg_ins; instruc.codigo instruc.fuente <=reg1 <=reg1 ;; instruc.fuente instruc.destino <=reg2 <=reg2 ;; instruc.destino

signal reg_ins: reg_ins: cod_op; cod_op; signal signal reg1,reg2:integer; reg1,reg2:integer; signal signal instruc:instruccion; instruc:instruccion; signal reg_ins<=instruc.cdigo; reg_ins<=instruc.cdigo; reg1 <= <= instruc.fuente; instruc.fuente; reg1 reg2 <= <= instruc.destino; instruc.destino; reg2

EL LENGUAJE VHDL

52

ELEMENTOS DE VHDL: REGISTROS(III).

Asignacin por posicin.


instruc<=(reg_ins,reg1,reg2) ; ; instruc<=(reg_ins,reg1,reg2)

Asignacin por identificador.


instruc<=(codigo=>reg_ins,fuente=>reg1,destino=>reg2) ; ; instruc<=(codigo=>reg_ins,fuente=>reg1,destino=>reg2) Ins_1<=(codigo=>ins_2.codigo,fuente=>ins_2.fuente, Ins_1<=(codigo=>ins_2.codigo,fuente=>ins_2.fuente, estino=>ins_2.destino) ; ; estino=>ins_2.destino)

EL LENGUAJE VHDL

53

ELEMENTOS DE VHDL: ACCESS(I).

TIPOS

ACCESO (access).

Define el tipo de dato que seala un puntero

Se comportan como los punteros en los lenguajes de programacin. Permite la reserva dinmica de recursos. Es til para modelar estructura dinmicas de datos (pilas, fifos, ect) Solo se pueden declarar variables de este tipo.

type identificador is access tipo_datos;

No es soportado por las herramientas de sntesis.

EL LENGUAJE VHDL

54

ELEMENTOS DE VHDL: ACCESS(II).

typepalabra palabrais isarray array(31 (31downto downto0, 0,31 31downto downto0) 0)of ofbit; bit; type typepuntero punterois isaccess accesspalabra; palabra; type variablep: p:puntero; puntero; variable p(10,7):= :=1; 1; p(10,7) .......... .......... fori iin in11to to77loop loop for p(i,7):= :=1 1 p(i,7) .... .... deallocate(puntero); (puntero); deallocate

typepuntero punterois isaccess accessinteger; integer; type variablep: p:puntero; puntero; variable :=new newinteger; integer; pp:= p. all:= :=21; 21; p. all deallocate(puntero); (puntero); deallocate

EL LENGUAJE VHDL

55

ELEMENTOS DE VHDL: FILE(I).

TIPOS

FICHERO (file).

Permiten acceder a informacin de un mismo tipo, normalmente almacenada en disco.

El tipo declarado define el tipo de datos (escalar, registro o array restringido) que se almacenan en el fichero.

type identificador is file of tipo_objetos;

Una vez declarado el tipo se debe definir un objeto fichero (file) del tipo declarado para acceder a l

EL LENGUAJE VHDL

56

ELEMENTOS DE VHDL: INCOMPATIBILIDAD ENTRE TIPOS (I).

A un objeto (signal, variable,) slo se le puede asignar un dato que sea


del tipo utilizado en su declaracin.

Para los vectores ademas: El dato asignado debe tener igual tamao que el objeto al que se le
asigna.

El tipo de los elementos de los vectores dato y objeto deben ser


iguales.
type h_1 h_1 is is range range 00 to to 10 10 type ;; type h_2 h_2 is is range range 00 to to 100 100 type ;; signal k1:h_1; k1:h_1; signal signal k2:h_2; k2:h_2; signal signal k3:integer; k3:integer; signal ........ ........ K1<=k2; --- error error K1<=k2; K3<=k1; --- error error K3<=k1; K2<=k3; --- error error K2<=k3; signal a: a: std_logic_vector std_logic_vector (3 (3 downto downto 0); 0); signal signal b: b: std_logic_vector std_logic_vector (7 (7 downto downto 0); 0); signal signal c: c: bit_vector bit_vector (3 (3 downto downto 0); 0); signal ........ ........ a<=b; --- error error a<=b; a<=11; --- error error a<=11; b<=a; --- error error b<=a; a<=c; --- error error a<=c;

EL LENGUAJE VHDL

57

ELEMENTOS DE VHDL: INCOMPATIBILIDAD ENTRE TIPOS (II).

Dos tipos de datos son incompatibles si uno no procede del otro. Excepto: Restricciones de rango.
signal k1: k1: integer integer range range 00 to to 10 10 signal ;; signal k2: k2: integer integer range range 00 to to 100 100 signal ;; signal k3: k3: integer; integer; signal ........ ........ K1<=k2; --- ok ok K1<=k2; K3<=k2 --- ok ok K3<=k2 K3<=k1; --- ok ok K3<=k1;

Declaracin de un subtipo.
subtype h_1 h_1 is is integer integer range range 00 to to 10 10 subtype ;; subtype h_2 h_2 is is h_1 h_1 range range 00 to to 55 subtype ;; signal k1:h_1; k1:h_1; signal signal k2:h_2; k2:h_2; signal signal k3: k3: integer; integer; signal ........ ........ k1<=k2; --- ok ok k1<=k2; K3<=k2; --- ok ok K3<=k2;

)Un Un tipo un subtipo no ) tipo yy un subtipo no


pueden considerarse como pueden considerarse como tipos diferentes tipos diferentes

EL LENGUAJE VHDL

58

ELEMENTOS DE VHDL: CONVERSION DE TIPOS(I).

Conversin entre tipos diferentes


Conversin tipo CAST (conversin de tipos) Se realiza entre tipos que:

Comparten un conjunto de valores:

Tipos enteros (proceden de un mismo tipo).

Arrays similares: tienen la misma longitud y tienen elementos idnticos o convertibles.

Los tipos enumerados no se pueden convertir

Identif_destino<=tipo_identif_destino(identif_origen)
type s1 s1 is is range range 00 to to 25; 25; type signal sa:s1; sa:s1; signal
........ ........

signal sb,sc:integer; sb,sc:integer; signal

type s1 s1 is is range range 00 to to 25; 25; type signal sa:s1; sa:s1; signal signal sb,sc:integer; sb,sc:integer; signal
........ ........

sa<=sb;-error sa<=sb;-error sc<=sa; --error sc<=sa; error

sa<=s1(sb);-OK sa<=s1(sb);-OK sc<=integer(sa); --- OK OK sc<=integer(sa);

EL LENGUAJE VHDL

59

ELEMENTOS DE VHDL: CONVERSION DE TIPOS (II).

signal ar,br:real; ar,br:real; signal signal ai,bi: ai,bi: integer; integer; signal
........ ........

ai<=123; ai<=123; ar<=11.05; ar<=11.05; bi<= integer(ar); integer(ar); bi<= br<= real(ai); real(ai); br<= signal ent_a, ent_a, ent_b: ent_b: std_logic_vector(7 std_logic_vector(7 downto downto 0); 0); signal signal res_1,res_2: res_1,res_2: std_logic_vector(7 std_logic_vector(7 downto downto 0); 0); signal
........ ........

ent_a<="11111101"; ent_a<="11111101"; ent_b<="00001001"; ent_b<="00001001"; res_1<= std_logic_vector(unsigned(ent_a)+unsigned(ent_b)); std_logic_vector(unsigned(ent_a)+unsigned(ent_b)); res_1<= res_2<= std_logic_vector(signed(ent_a)+signed(ent_b)); std_logic_vector(signed(ent_a)+signed(ent_b)); res_2<=

EL LENGUAJE VHDL

60

ELEMENTOS DE VHDL: CONVERSION DE TIPOS(III).

subtype int1 is range 0 to 10; subtype int2 is range 0 to 10; type arrayInt1 is array(1 to 8) of int1; subtype byte is bit_vector(0 to 7); type arrayBits8 is array(10 to 17) of bit; type arrayBits16 is array(0 to 15) of bit; .... signal Sint1: int1; signal Sint2: int2; signal Sarray: arrayInt1; signal Sbyte: byte; signal SarrayBits8: arrayBits8; signal sarrayBits16: arrayBits16; signal Sbit: bit; signal Sbool: boolean; Sint2 <= Sint1; -- error, tipos distintos.

-- Conversiones legales de tipos. Sint2 <=int2(Sint1); Sbyte <= byte(SarrayBits8); -- Conversiones ilegales de tipos. Sbool <= boolean(Sbit); Sint1 <= int1(Sbit); SarrayBit16 <= arrayBit16(Sbyte); Sarray <= arrayInt1(Sbyte); EL LENGUAJE VHDL ----Conversin entre tipos enumerados Conversin tipos enumerados y otros. Dimensiones distintas de arrays. Elementos de los arrays distintos
61

-- conversiones entre enteros. -- conversiones entre arrays similares

ELEMENTOS DE VHDL: CONVERSION DE TIPOS(IV).

Funciones de conversin.
Permiten realizar la conversin entre tipos que no guardan ninguna relacin. Suelen aparecer dentro de libreras de diseo, definidas en ciertos paquetes de uso comn. El diseador puede codificar las suyas.

signal res_1,res_2: res_1,res_2: integer; integer; signal


........ ........

signal ent_a: ent_a: unsigned(7 unsigned(7 downto downto 0); 0); signal signal ent_b: ent_b: signed(7 signed(7 downto downto 0); 0); signal

ent_a<="11111101";-- 253 253 ent_a<="11111101";-ent_b<="11111101";--- -3 -3 ent_b<="11111101";---

res_1<= to_integer(ent_a); to_integer(ent_a); res_1<= res_2<= to_integer(ent_b); to_integer(ent_b); res_2<=

EL LENGUAJE VHDL

62

ELEMENTOS DE VHDL: CONVERSION DE TIPOS(V).

Funciones de conversin del paquete numeric_std.


-- Id: D.1 function TO_INTEGER (ARG: UNSIGNED) return NATURAL; -- Result subtype: NATURAL. Value cannot be negative since parameter is an -UNSIGNED vector. -- Result: Converts the UNSIGNED vector to an INTEGER. -- Id: D.2 function TO_INTEGER (ARG: SIGNED) return INTEGER; -- Result subtype: INTEGER -- Result: Converts a SIGNED vector to an INTEGER. -- Id: D.3 function TO_UNSIGNED (ARG, SIZE: NATURAL) return UNSIGNED; -- Result subtype: UNSIGNED(SIZE-1 downto 0) -- Result: Converts a non-negative INTEGER to an UNSIGNED vector with -the specified SIZE. -- Id: D.4 function TO_SIGNED (ARG: INTEGER; SIZE: NATURAL) return SIGNED; -- Result subtype: SIGNED(SIZE-1 downto 0) -- Result: Converts an INTEGER to a SIGNED vector of the specified SIZE.

EL LENGUAJE VHDL

63

ELEMENTOS DE VHDL: CONVERSION DE TIPOS(VI).

Funciones de conversin del paquete std_logic_1164 (librera IEEE) .


Function TO_BIT TO_BITVECTOR TO_BITVECTOR TO_STDULOGIC TO_STDLOGICVECTOR TO_STDLOGICVECTOR TO_STDULOGICVECTOR TO_STDULOGICVECTOR Pass STD_ULOGIC STD_LOGIC_VECTOR STD_ULOGIC_VECTOR BIT BIT_VECTOR STD_ULOGIC_VECTOR BIT_VECTOR STD_LOGIC_VECTOR Return BIT BIT_VECTOR BIT_VECTOR STD_ULOGIC STD_LOGIC_VECTOR STD_LOGIC_VECTOR STD_ULOGIC_VECTOR STD_ULOGIC_VECTOR

........

EL LENGUAJE VHDL

64

ELEMENTOS DE VHDL: CONVERSION DE TIPOS(VII).

Funciones de conversin del paquete std_logic_arith (librera IEEE) .


FUNCTION CONV_INTEGER CONV_INTEGER CONV_INTEGER CONV_INTEGER CONV_UNSIGNED CONV_UNSIGNED CONV_UNSIGNED CONV_UNSIGNED CONV_SIGNED CONV_SIGNED CONV_SIGNED CONV_SIGNED CONV_STD_LOGIC_VECTOR CONV_STD_LOGIC_VECTOR CONV_STD_LOGIC_VECTOR CONV_STD_LOGIC_VECTOR EXT SXT Pass(arg, size) INTEGER UNSIGNED SIGNED STD_ULOGIC INTEGER, INTEGER UNSIGNED, INTEGER SIGNED, INTEGER STD_ULOGIC,INTEGER INTEGER, INTEGER UNSIGNED, INTEGER SIGNED, INTEGER STD_ULOGIC, INTEGER INTEGER, INTEGER UNSIGNED, INTEGER SIGNED, INTEGER STD_ULOGIC, INTEGER STD_LOGIC_VECTOR, INTEGER STD_LOGIC_VECTOR, INTEGER Return INTEGER INTEGER INTEGER SMALL_INT; UNSIGNED; UNSIGNED; UNSIGNED; UNSIGNED; SIGNED; SIGNED; SIGNED; SIGNED; STD_LOGIC_VECTOR STD_LOGIC_VECTOR STD_LOGIC_VECTOR STD_LOGIC_VECTOR STD_LOGIC_VECTOR; -- zero extend STD_LOGIC_VECTOR; -- sign extend

........

EL LENGUAJE VHDL

65

ELEMENTOS DE VHDL: CONVERSION DE TIPOS(VIII).


signal a,b: a,b: unsigned(7 unsigned(7 downto downto 0); 0); signal signal c,d: c,d: signed(7 signed(7 downto downto 0); 0); signal signal e,f,g,h: e,f,g,h: integer; integer; signal
........ ........

a<="11111101"; a<="11111101"; c<="11111101"; c<="11111101"; e<=7; e<=7; f<=-8; f<=-8; g<= to_integer(a); to_integer(a); g<= h<= to_integer(c); to_integer(c); h<= b<= to_unsigned(e,8); to_unsigned(e,8); b<= d<= to_signed(f,8); to_signed(f,8); d<=

g=253 g=253 h=-3 h=-3 b=00000111 b=00000111 d=11111000 d=11111000

signal v1,o: v1,o: std_logic_vector(1 std_logic_vector(1 to to 4); 4); signal ........ ........ V1<=1011; V1<=1011; <= not not std_logic_vector(to_unsigned(2**(3-to_integer(unsigned(v1(1 to to 2)))), 2)))), 4))); 4))); oo <= (( std_logic_vector(to_unsigned(2**(3-to_integer(unsigned(v1(1

EL LENGUAJE VHDL

66

ELEMENTOS DE VHDL: TIPOS DE DATOS.

TIPOS DE DATOS MS UTILIZADOS EN EL DISEO DE SISTEMAS DIGITALES Std_logic. Std_logic_vectors. Unsigned, signed. Enumerados. - Para objetos simples. - Para buses. - Para operaciones aritmticas. - En mquinas de estados.

EL LENGUAJE VHDL

67

ELEMENTOS DE VHDL: SOBRECARGA DE LITERALES.

tipo.

Un literal se dice que est sobrecargado cuando est incluido en ms de un


signal d_1: d_1: bit; bit; signal signal d_2: std_logic; signal d_2: std_logic; ...... ...... d_1<=1; d_1<=1; d_2<=1; d_2<=1;

sobrecarga de tipo.

En algunos casos es necesario indicar explcitamente el tipo. Calificacin o


type color color is is (rojo, (rojo, verde, verde, amarillo,azul,cian); amarillo,azul,cian); type type color_RGB is (rojo, verde,azul); type color_RGB is (rojo, verde,azul); signal A: A: color; color; signal signal b: b: color_RGB; color_RGB; signal ...... ...... A<= colorazul; colorazul; A<= B<= color_RGBazul; B<= color_RGBazul; signal Sreg: Sreg: std_logic_vector(3 std_logic_vector(3 downto downto 0); 0); signal signal suma:std_logic_vector(2 suma:std_logic_vector(2 downto downto 0); 0); signal ...... ...... begin begin Sreg<=1100; Sreg<=1100; suma<= std_logic_vector(unsigned(std_logic_vector'("00"& std_logic_vector(unsigned(std_logic_vector'("00"& Sreg(3))) Sreg(3))) ++ suma<= unsigned(std_logic_vector'("00"& Sreg(2))) Sreg(2))) ++ unsigned(std_logic_vector'("00"& unsigned(std_logic_vector'("00"& Sreg(1))) ++ unsigned(std_logic_vector'("00"& Sreg(1))) unsigned(std_logic_vector'("00"& Sreg(0)))); Sreg(0)))); unsigned(std_logic_vector'("00"&

EL LENGUAJE VHDL

68

ELEMENTOS DE VHDL: OBJETOS(I)

Un objeto es un elemento al que se le asigna un valor de un tipo


determinado: almacenan informacin. Slo se le puede asignar un valor del tipo sobre el que est definido Existen cuatro clases de objetos en VHDL:

yConstantes. yVariables. ySeales. yFicheros.

objeto <lista_de identificadores>: tipo [:= expresin]

Opcionalmente se les puede asignar un valor inicial (ignorado en sntesis).

EL LENGUAJE VHDL

69

ELEMENTOS DE VHDL: OBJETOS(II)

Los objetos deben declararse antes de ser utilizados. No todos los objetos se declaran en el mismo sitio. El mbito de visibilidad depende de la zona de declaracin: Objeto declarado en un proceso slo puede ser usado en ese
proceso.

Objeto declarado en una zona de declaracin de una entidad


puede ser usado en ella misma y en los cuerpos de arquitectura asociados.

Objeto declarado en el cuerpo de arquitectura puede usarse en


cualquier construccin dentro de la arquitectura.

Objeto declarado en una zona de declaracin de paquete puede


ser usado en cualquier unidad para la que el paquete sea visible.
EL LENGUAJE VHDL
70

OBJETOS: CONSTANTES (I).

Es un objeto que mantiene siempre su valor inicial. Su valor no puede modificarse. Se emplean para asignar un identificador a un valor. Facilitan la legibilidad y depuracin del cdigo.
constant identificador{,..}: tipo [:= valor_inicial];

constant tpd: tpd: time time := := 12 12 ns; ns; constant constant ROMsize: ROMsize: integer integer := := 10; 10; constant constant bus_dir: bus_dir: bit_vector(7 bit_vector(7 downto downto 0):=1001_0111; 0):=1001_0111; constant constant Pi Pi :: real:= real:= 3.1415927 3.1415927 constant constant BitsPalabra: BitsPalabra: integer:= integer:= 8; 8; constant constant NmeroPalabras: NmeroPalabras: integer integer := := 64; 64; constant constant NmeroBits:integer:= NmeroBits:integer:= BitsPalabra BitsPalabra ** NmeroPalabras; NmeroPalabras; constant constant RetardoAND2, RetardoAND2, RetardoOR2 RetardoOR2 :: time time := := 22 ns; ns; constant

EL LENGUAJE VHDL

71

OBJETOS: CONSTANTES (II).

CONSTANTES DIFERIDAS (deferred constant)


Son aquellas en la que no se especifica el valor inicial, para posteriormente realizar la asignacin. Slo se puede declarar en un paquete. Su valor se especifica en el cuerpo del paquete.
pakage ctes ctes is is pakage constant ROMsize:integer:=10; ROMsize:integer:=10; constant constant Nbits: Nbits: integer; integer; constant .. .. .. end pakage pakage ctes ctes ;; end pakage body body ctes ctes is is pakage .. .. .. Nbits:= 8* 8* ROMsize; ROMsize; Nbits:= .. .. .. end pakage pakage body body ctes ctes end

EL LENGUAJE VHDL

72

OBJETOS: VARIABLES (I).

Almacenan valores que pueden cambiar Proporciona un mecanismo conveniente para el almacenamiento local.

yEjemplos: Contadores de bucles, valores intermedios.


No tiene analoga en el hardware. Slo existen en estructuras secuenciales (procesos y subprogramas). Son locales.

yVHDL 93 soporta variables globales (shared) para comunicar


procesos. (no recomendables, pueden producir simulaciones no determinsticas).

variable identificador{,..}: tipo [:= valor_inicial];

EL LENGUAJE VHDL

73

OBJETOS: VARIABLES (II).

En la sntesis se ignora el valor inicial


variable cnt_1,cnt_2 cnt_1,cnt_2 :: natural; natural; variable variable adrs adrs :: bit_vector bit_vector (3 (3 downto downto 0) 0) := := 0000; 0000; variable variable data data :: bit_vector bit_vector (0 (0 to to 15); 15); variable variable minutos: minutos: integer integer range range 00 to to 59; 59; variable

El valor inicial, sino se especifica, es el igual al primer elemento del tipo.


cnt_1=00 cnt_1= cnt_2=00 cnt_2= data=0000_0000_0000_0000 0000_0000_0000_0000 data= minutos=00 minutos=

Se cambia de valor mediante una sentencia de asignacin := Identificador_vble:= expresin;


cnt_1:=250; cnt_1:=250; cnt_2:=1024; 1024; cnt_2:= data:=1100_0011_0110_1001; 1100_0011_0110_1001; data:= Minutos:=24; 24; Minutos:= EL LENGUAJE VHDL
74

OBJETOS: VARIABLES (III).

La asignacin de las variables es inmediata.


Ejemplo: intercambio de valores entre 2 variables.

a:=b; a:=b; b:=a; b:=a; mal

temp:=a; temp:=a; a:=b; a:=b; b:=temp; b:=temp; bien

EL LENGUAJE VHDL

75

OBJETOS: VARIABLES (V).

Variables compartidas.
architecture non_determinist of example is shared variable count : integer; begin p1 : process begin count := 3; wait for 50 ns; count := 4; wait for 50 ns; end process p1; p2 : process begin count := 3; wait for 50 ns; count := 4; wait for 50 ns; end process p1; end non_determinist;

El resultado final depende de la posicin en el archivo


EL LENGUAJE VHDL
76

OBJETOS: SEALES (I).

Permiten que se modifique su valor dentro de los posibles de su tipo. Tienen una analoga directa con el hardware. Modela una conexin fsica. Se declara en la parte declarativa de las arquitecturas. Se utilizan como elemento de comunicacin entre procesos. Son visibles en la arquitectura en que se declaran. Puede recibir asignaciones concurrentes o secuenciales (salvo en las funciones). La asignacin de las seales es diferida .

yLlevan asociados una lista (cola) de eventos con el conjunto de posibles valores futuros a
tomar.

yEmpleo de ciclos delta. yPuede demorarse mediante construcciones VHDL. yLa asignacin no se hace efectiva hasta que todos los procesos terminan el ciclo actual
de simulacin

Los puertos de una entidad se consideran seales.

EL LENGUAJE VHDL

77

OBJETOS: SEALES (II).

Asignacin a una seal:


signal identificador{,..}: tipo [:= valor_inicial]; En la sntesis se ignora el valor inicial

signal rst rst :: bit; bit; signal signal clk_1,clk_2,clk_3 bit := := 0; 0; signal clk_1,clk_2,clk_3 :: bit signal cuenta cuenta :: integer integer := := 145; 145; signal signal hora hora :: time time := := 55 sg; sg; signal signal data data :: bit_vector bit_vector (0 (0 to to 15); 15); signal signal minutos: integer range 0 to 59; 59; signal minutos: integer range 0 to

El valor inicial, sino se especifica, es igual al primer elemento del tipo.

EL LENGUAJE VHDL

78

OBJETOS: SEALES (II). Asignacin a una seal: [etiqueta:]Identificador<= expresin ;

El valor asignado se proyecta en la cola de eventos y se asigna


cuando todos los procesos estn suspendidos/inactivos.

No se tiene acceso a los valores de la cola de eventos. La cola de eventos es una lista con los valores futuros a asignar a
la seal ordenados por tiempo.
t 10 ns 20 ns 25 ns 35 ns 40 ns 0 1 0 0 1

Cola de eventos

Seal

V_act 1

EL LENGUAJE VHDL

79

OBJETOS: SEALES (II).

architecture ejem of inv architecture ejem of inv isis begin begin process (a,b,c) process (a,b,c) begin begin a<=c; a<=c; b<=a; b<=a; c<=b; c<=b; end process; end process; end ejem; end ejem;

Inicio : a=2, b=3, c=1;

Fin : a=1,b=2, c=3;

signal clk_1,clk_2,rst clk_1,clk_2,rst :: bit bit signal Signal cuenta,valor_1,valor_2:integer; cuenta,valor_1,valor_2:integer; Signal constant Tclk :: time time := := 50 50 ns; ns; constant Tclk signal sel sel :: std_logic_vector( std_logic_vector( 00 to to 1):="00"; 1):="00"; signal .. .. .. clk_1<= clk_2 clk_2 and and rst; rst; clk_1<= cuenta<= valor_1 valor_1 ++ valor_2; valor_2; cuenta<= cuenta<= valor_1 + after 22 ns; ns; cuenta<= valor_1 + 11 after Clk_1<= not not clk_1 clk_1 after after Tclk/2; Tclk/2; Clk_1<= sel<= "00" "00" after after 50 50 ns,"01" ns,"01" after after 100 100 ns,"10" ns,"10" after after 150 150 ns,"11" ns,"11" after after 250 250 ns; ns; sel<=

EL LENGUAJE VHDL

80

OBJETOS: VARIABLES vs SEALES.

Seales Asignacin Utilidad Declaracin Visibilidad destino <= fuente Representan interconexiones de circuitos Parte declarativa de la arquitectura Global (comunicacin entre procesos) Asignacin diferida (Se actualiza al concluir la ejecucin del proceso)

Variables destino := fuente Representan almacenamiento local Parte declarativa del proceso Local (interna al proceso) Asignacin inmediata

Comportamiento

EL LENGUAJE VHDL

81

OBJETOS: FICHEROS (I).

Permiten intercambio de informacin con el exterior. ySlo en simulacin para aplicar vectores de test y recoger el
resultado de la simulacin.

Antes de poder declarar un objeto fichero es preciso definir el


tipo de ste (tipos de datos a almacenar).

El tipo de fichero viene determinado por el tipo de datos que


contiene.

Paquetes empleados para la gestin de ficheros: yTEXTIO define rutinas ms potentes para gestin de ficheros de
texto.

EL LENGUAJE VHDL

82

OBJETOS: FICHEROS (II).

Sintaxis (VHDL93)
file identificador: tipo_fichero [open tipo_acceso] [is nombre];

Identificador: manejador (handle) del fichero Tipo_fichero: tipo previamente definido que define el tipo de datos a almacenar. Slo existe un tipo fichero predefinido, el tipo text.
tipe text is file of string;

tipo_acceso: puede ser:

read_mode (por defecto) write_mode append_mode

nombre: Expresin de tipo string correspondiente al nombre fsico del fichero


EL LENGUAJE VHDL

83

OBJETOS: FICHEROS (III).

architecture comport of arch3 is type cfile is file of character; file f1i: cfile open read_mode is"f11.txt" ; file f1o: cfile open write_mode is"f21.txt" ; begin process variable char:character; begin while not endfile(f1i) loop read (f1i,char); . . . write (f1o,char); wait for 50 ns; end loop; -- cierre de archivos file_close(f1i); file_close(f1o); wait; end process; end comport;

EL LENGUAJE VHDL

84

ATRIBUTOS (I).

ATRIBUTOS.
Es una caracterstica que se puede asociar a un elemento del lenguaje:

Tipos , subtipos, procedimientos, funciones, seales, variables, constantes, entidades, arquitecturas, configuraciones, paquetes y componentes.

Proporcionan informacin de esos elementos El atributo de un elemento es distinto al valor de ese elemento. El uso de atributos mejora la portabilidad del cdigo. Los sintetizadores suelen emplear atributos predefinidos para controlar el proceso de sntesis. identificador_elementoidentificador_atributo

EL LENGUAJE VHDL

85

ATRIBUTOS PREDEFINIDOS (I).

Atributos de rango de vectores.


Atributo

Descripcin Valor izquierdo del ndice n de A. Valor derecho del ndice n de A. Valor mnimo del ndice n de A. Valor mximo del ndice n de A. Verdadero si el rango del ndice n de A es ascendente. Rango del ndice n de A. Rango del ndice n de A invertido. Nmero de valores del rango del indice n de A

Aleft(n) Aright(n) Alow(n) Ahigh(n) Aascending(n) Arange(n) Areverse_range(n) Alength(n)

EL LENGUAJE VHDL

86

ATRIBUTOS PREDEFINIDOS (II).

type matriz matriz is is array array (3 (3 downto downto 0, 0, 11 to to 7) 7) of of bit; bit; type signal aa :: matriz; matriz; signal ......... ......... a left ===> ===> 33 a left a left (2)===> 11 a left (2)===> a right ===> ===> 00 a right a right (2)===> 77 a right (2)===> a low ===> ===> 00 a low a high (2)===> 77 a high (2)===> a ascending (2)===> true true a ascending (2)===> a range ===> 33 downto downto 00 a range ===> a reverse_range ===> 00 to to 33 a reverse_range ===> a length ===> 44 a length ===> a length (2)===> 77 a length (2)===> type ar1 ar1 is is array array (0 (0 to to 15,0 15,0 to to 7) 7) of of std_logic; std_logic; type type ar2 ar2 is is array array (0 (0 to to 15) 15) of of std_logic_vector std_logic_vector (0 (0 to to 7); 7); type signal v1:std_logic_vector( v1:std_logic_vector( 00 to to 7); 7); signal signal u1: u1: unsigned unsigned (0 (0 to to 7); 7); signal signal ind_1,ind_2,ind_3,ind_4,ind_5, ind_1,ind_2,ind_3,ind_4,ind_5, ind_6: ind_6: integer:=0; integer:=0; signal signal ar1: ar1: a1; a1; signal signal ar2: ar2: a2; a2; signal ......... ......... ind_1<= v1 v1 'left ind_1<= 'left ;; ind_2<= v1 v1 'right ind_2<= 'right ;; ind_3<= u1 u1 'left ind_3<= 'left ;; ind_4<= ar1 ar1 'left (1); ind_4<= 'left (1); ind_5<= ar1 ar1 'left (2); ind_5<= 'left (2); ind_6<=ar2 'left (2);-(2);-error ind_6<=ar2 'left error

EL LENGUAJE VHDL

87

ATRIBUTOS PREDEFINIDOS (III).

type dato: dato: bit_vector bit_vector (0 (0 to to 7); 7); type signal A: A: dato; dato; signal process (A) process (A) begin begin for ii in in 00 to to 77 loop loop for if A(i) A(i) == 0 0 then then if ... ... end loop loop end ;; end process process end ;;

Uncambio cambioen enel eltamao tamao Un dedato datoobliga obligaaa de modificarel elbucle. bucle. modificar

type dato: dato: bit_vector bit_vector (0 (0 to to 7); 7); type signal A: A: dato; dato; signal
Uncambio cambioen enel eltamao tamao Un dedato datono noobliga obligaaa de modificarel elbucle. bucle. modificar

process (A) process (A) begin begin for i i in in A A range loop loop for range if A(i) A(i) = = 0 0 then then if ... ... end loop loop ; end ; end process process end ;;
88

EL LENGUAJE VHDL

ATRIBUTOS PREDEFINIDOS (IV).

Atributos de tipos de datos.


Atributo

Descripcin Tipo base de T. Valor ms a la izquierda de T. Valor ms a la derecha de T. Valor mnimo de T. Valor mximo de T. Verdadero si T tiene rango ascendente. Representacin textual del valor x del tipo T. Valor expresado por la cadena de caracteres. Posicin ocupada por x en T. Valor de la posicin x en T. Valor de la posicin siguiente a x en T. Valor de la posicin anterior a x en T. Valor de la posicin derecha a x en T. Valor de la posicin izquierda a x en T.

Tbase Tleft Tright Tlow Thigh Tascending + Timage(x) Tvalue(x) Tpos(x)

+ +

* Tval(x) * Tsucc(x) * Tpred(x) * Tleftof(x) * Trightof(x) *

* Slo se pueden aplicar a tipos discretos o fsicos. + Aadidos en VHDL93.

EL LENGUAJE VHDL

89

ATRIBUTOS PREDEFINIDOS (V).

Atributos de seales.
Atributo

Descripcin

Sdelayed(t) Sstable(t) Squiet(t)

* *

Seal S demorada t unidades de tiempo. Seal booleana verdadera si S es estable hace t unidades de tiempo. Seal booleana verdadera si no ha habido ninguna asignacin a S es desde t unidades de tiempo. Seal de tipo bit, vale 1' cuando hay una asignacin a S. Verdadero si ocurre un evento en S. Verdadero si ocurre una asignacin sobre S. Unidades de tiempo desde el ltimo evento en S. Unidades de tiempo desde la ltima asignacin sobre S. Valor anterior de S.

* Stransaction *
Sevent Sactive Slast_event Slast_active
Slast_value

Sdriving

Verdadero si el proceso actual excita la seal S.

Sdriving_value

+ Valor inyectado por el proceso actual sobre la seal S.

* Devuelven una seal. +Aadidos en VHDL93.

EL LENGUAJE VHDL

90

ATRIBUTOS PREDEFINIDOS (VI).

signal s, s, s1, s1, s2,s3 s2,s3 :: bit bit := := '0'; '0'; signal signal b1, b1, b3, b3, b4: b4: boolean; boolean; signal . . . . . . <= '1' '1' after after 10 10 ns, ns, '0' '0' after after 15 15 ns, ns, '1' '1' after after 30 30 ns, ns, '0' '0' after after 45 45 ns; ns; ss <= s1 <= s' delayed (10 ns); s1 <= s'delayed(10 ns); b1 <= <= s' s' stable (2 ns); ns); b1 stable (2 s2 <= s' last_value s2 <= s'last_value;; b3 <= <= s' s' quiet (3 ns); ns); b3 quiet (3 b4 <= s' active ; b4 <= s'active; s3 <= <= s' s' transaction s3 transaction ;;

EL LENGUAJE VHDL

91

ATRIBUTOS PREDEFINIDOS (VI).

signal CLK,CLR CLK,CLR D, D, Q: Q: std_logic; std_logic; signal .... .... process (CLK, (CLK, CLR) CLR) process Begin Begin if CLR=1 CLR=1 then then if Q<=0; Q<=0; elsif CLK'event and CLK CLK == '1' '1' then then elsif CLK'event and <= D; D; QQ <= end if if end ;; end process process end ;;

CLK

?
CLR

EL LENGUAJE VHDL

92

DEFINICIN DE ATRIBUTOS POR EL USUARIO (I).

VHDL permite definir atributos que se pueden asociar a cualquier


elemento del lenguaje. Siempre son estticos (constantes).

Declaracin del atributo:


attribute identificador:tipo_datos;

Especificacin del atributo:

attribute identificador of id_elemento: clase_elemento is expresin;

EL LENGUAJE VHDL

93

DEFINICIN DE ATRIBUTOS POR EL USUARIO (II).

type dias_semana dias_semana is is (L,M,X,J,V,S,D); (L,M,X,J,V,S,D); type --Declaracin de los atributos. --Declaracin de los atributos. attribute primer_dia primer_dia :dias_semana; :dias_semana; attribute attribute ultimo_dia ultimo_dia :dias_semana; :dias_semana; attribute attribute numero_dias:integer range 00 t0 t0 7; 7; attribute numero_dias:integer range -- Especificacin Especificacin de de los los atributos atributos -attribute primer_dia primer_dia of of dias: dias: signal signal is is L; L; attribute attribute ultimo_dia of dias: signal is D; attribute ultimo_dia of dias: signal is D; attribute numero_dias numero_dias of of dias: dias: signal signal is is 7; 7; attribute ...... ...... signal dias,tmp_dias:dias_semana; signal dias,tmp_dias:dias_semana; signal numero:integer numero:integer range range 00 t0 t0 7; 7; signal tmp_dias<=dias'primer_dia; tmp_dias<=dias'primer_dia; tmp_dias<=diasultimo_dia; tmp_dias<=diasultimo_dia; numero<=dias'numero_dias; numero<=dias'numero_dias; ...... ...... for dias'primer_dia dias'primer_dia to to dias' dias' ultimo_dia ultimo_dia loop loop for

type estados: estados: (st0,st1,st2,st3,st4); (st0,st1,st2,st3,st4); type ......... ......... attribute codigo_estados:std_logic_vector(2 codigo_estados:std_logic_vector(2 downto downto 0); 0); attribute attribute codigo_estados codigo_estados of of st0 st0 :: literal literal is is 000"; 000"; attribute attribute codigo_estados of st1 : literal is 001"; attribute codigo_estados of st1 : literal is 001"; attribute codigo_estados codigo_estados of of st2 st2 :: literal literal is is 011"; 011"; attribute attribute codigo_estados of st3 : literal is 110"; attribute codigo_estados of st3 : literal is 110"; attribute codigo_estados codigo_estados of of st4 st4 :: literal literal is is 111"; 111"; attribute

EL LENGUAJE VHDL

94

OPERADORES.

Permiten construir expresiones para calcular datos. Tratamiento de programacin orientada a objetos. y Los operadores se consideran funciones. y Los tipos de datos definen los operadores que se pueden aplicar y Un subtipo hereda los operadores del tipo del cual deriva. y Un mismo operador se puede aplicar a varios tipos de datos
(sobrecarga).

Tipos de operadores: y Aritmticos. y Relacionales. y Lgicos. y Desplazamiento y Otros.

EL LENGUAJE VHDL

95

OPERADORES: ARITMTICOS (I).

Operadores aritmticos.
Operacin Suma Resta Producto Divisin Potencia Mdulo Resto Valor absoluto Operador + * / ** mod rem abs Tipo de datos

Numrico. Numrico. Entero, real o fsico. Entero, real o fsico. Entero, real. (Exp entero) Entero. Entero. Numrico.

Todos tienen la misma precedencia. A<= b+c*d; A=(a+c)*d El tipo de los resultados puede ser diferente del tipo de los operandos. Para realizar operaciones con tipos no numricos (std_logic y std_logic_vector) hay que usar los paquetes de la biblioteca IEEE: y Operaciones sin signo -> paquete std_logic_unsigned y Operaciones con signo ->paquete std_logic_signed

EL LENGUAJE VHDL

96

OPERADORES: ARITMTICOS (II).

Si el signo de a y

b son iguales:

a rem b = a mod b = resto de la divisin. Si el signo de a y b son distintos: a rem b = resto de la divisin (b + a) rem b si a rem b 0 a mod b= 0 si a rem b = 0

EL LENGUAJE VHDL

97

OPERADORES: LGICOS (I).

Operadores lgicos.
Estn

definidos para los tipos

bit boolean bit_vector. std_logic_vectors El

tamao de los vectores de los operandos debe coincidir


Operacin And Or negacin Nor Nand xor xnor Operador and or not nor nand xor xnor

EL LENGUAJE VHDL

98

OPERADORES: LGICOS (II).

No tienen orden de precedencia, excepto not que tiene el orden mayor. Se asocian de izquierda a derecha si no hay parntesis. El resultado es del mimo tipo y tamao que los operandos.
Signal A,B: A,B: std_logic_vector(3 std_logic_vector(3 downto downto 0); 0); Signal Signal C: C: std_logic_vector(0 std_logic_vector(0 to to 3); 3); Signal .. .. . . A<= B B or or C; C; A<=

A(3)=B(3) or C(0); A(2)=B(2) or C(1); A(1)=B(1) or C(2); A(0)=B(0) or C(3);


EL LENGUAJE VHDL
99

OPERADORES: LGICOS (III).

A<= b b nor nor c; c; A<= A<= b b or or c c or or d; d; A<= A<= b b or or not not c c or or d; d; A<= A<= b b or or not not (c (c or or d); d); A<= A<= b b nand nand c c nand nand d; d; --- error error A<= A<= b b nand nand (c (c nand nand d); d); A<= A<= b b xor xor c c and and d; d; A<= A<= b b xor xor (c (c and and d); d); A<=

Los operadores NAND, NOR y XNOR no son asociativos

EL LENGUAJE VHDL

100

OPERADORES: DESPLAZAMIENTO (I).

Operadores de desplazamiento.

Permiten desplazar los bits de un array binario un nmero entero de posiciones:


Bit_vector Unsigned Signed.

sll, srl, rol y ror se definen en los paquete numeric_bit/std No estn definidos para los tipo std_logic_vector. Son sintetizables.
101

EL LENGUAJE VHDL

OPERADORES: DESPLAZAMIENTO (II).

signal a,b,c,d,e,f,g:unsigned(7 a,b,c,d,e,f,g:unsigned(7 downto downto 0); 0); signal a<="11000101"; a<="11000101"; b<= a a sll sll 2; 2; b<= c<= a a srl srl 2; 2; c<= d<=a sla sla 2; 2; d<=a e<=a sra sra 2; 2; e<=a f<=a rol rol 2; 2; f<=a g<=a ror ror 2; 2; g<=a

EL LENGUAJE VHDL

102

OPERADORES: RELACIONALES (I).

Operadores relacionales.
Permiten

comparar objetos de datos

Admiten cualquier tipo de datos. El resultado un valor boolean (true false). Los operandos deben ser del mismo tipo.

Los paquetes numeric_std(bit) permiten comparar (un)signed con enteros.


Operacin Igual Diferente Mayor que Menor que Mayor o igual que Menor o igual que Operador

=
/= > < >= <=

EL LENGUAJE VHDL

103

OPERADORES: RELACIONALES (II).

signal s2 s2 unsigned(3 downto downto 0); 0); signal :: unsigned(3 signar r2:bit; r2:bit; signar . . . . . . if s2 s2 == 22 then then if r2 <= '1'; r2 <= '1'; else else r2 <= <= '0'; '0'; r2 end if ; end if;

Arrays de diferentes tamaos

EL LENGUAJE VHDL

104

OPERADORES: OTROS (I).

Otros operadores.
+ -

Signo positivo. Signo negativo.

Concatenacin. Permite concatenar bits_vector o std_logic_vector para obtener una mayor.


Las

&

cadenas deben ser del mismo tipo.


Signalsel1,sel0,z,d0,d1,d2,d3: sel1,sel0,z,d0,d1,d2,d3:std_logic; std_logic; Signal Signalsel:std_logic_vector(1 sel:std_logic_vector(1downto downto0); 0); Signal . .. .. . sel<= <=sel1 sel1& &sel0; sel0; sel <= zz<= d0 d0 d1 d1 d2 d2 d3 d3 when(sel (sel==00") 00")else else when when(sel (sel==01") 01")else else when when(sel (sel==10") 10")else else when when(sel (sel==11") 11")else else Z; when Z;

Los tipos (un)signed no soportan la concatenacin.


105

EL LENGUAJE VHDL

OPERADORES: OTROS (II).

Sumadores sin overflow


signal a,b a,b :: unsigned(7 unsigned(7 downto downto 0); 0); signal signal s: s: unsigned(8 unsigned(8 downto downto 0)); 0)); signal s<=unsigned('0'&std_logic_vector(a))+unsigned('0'&std_logic_vector(b)); s<=unsigned('0'&std_logic_vector(a))+unsigned('0'&std_logic_vector(b));

signal a,b a,b :: signed(7 signed(7 downto downto 0); 0); signal signal s: s: signed(8 signed(8 downto downto 0)); 0)); signal s<=signed(a(7)&std_logic_vector(a))+signed(b(7)&std_logic_vector(b)); s<=signed(a(7)&std_logic_vector(a))+signed(b(7)&std_logic_vector(b));

EL LENGUAJE VHDL

106

OPERADORES: OTROS (III).

Realizar un desplazamiento.

signal entrada, entrada, salida: salida: bit_vector bit_vector (3 (3 downto downto 0); 0); signal ... ... salida <= <= entrada(2 entrada(2 downto downto 0) 0) & & 0; 0; salida

3
entrada 1

2
1

1
0

0
1

salida

EL LENGUAJE VHDL

107