Académique Documents
Professionnel Documents
Culture Documents
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
Componentes genricos.
c0
c1 c2 C ontrolador
s1
s2
s3
Nivel de mscara
NIVEL FSICO
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
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
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.
y y y
EL LENGUAJE VHDL
Lista de conexiones de la tecnologa destino. Conocimiento de retardos internos. Salida de las herramientas de sntesis. 2
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
Dependiente de la Tecnologa
Verificacin temporal
Sntesis lgica.
Nivel de pue rtas
TEST
Fsico
TECNOLOGA
Sntesis de layout.
Nivel de mscara
EL LENGUAJE VHDL
EL LENGUAJE VHDL
LENGUAJES HDLs.
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:
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.
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.
SNTESIS.
Los modelos de alto nivel creados se pueden sintetizar obtenindose una lista de conexiones para la tecnologa destino.
EL LENGUAJE VHDL
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.
EL LENGUAJE VHDL
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)
EL LENGUAJE 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.
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
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.
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 ( _ ).
EL LENGUAJE VHDL
CORRECTOS CORRECTOS Mi_entidad Mi_entidad mux4a2 mux4a2 clk clk reset reset reloj reloj
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
Inertial * inout is
Next nor not null of on open or others out package port postponed *
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
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
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
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
LITERALES .
Smbolos cuyo valor se obtiene directamente de su representacin. Tipos:
yNumricos. yAlfanumricos yEnumerados. yNull. yCreados por el usuario.
EL LENGUAJE VHDL
19
Numricos.
Enteros (integer):
Comprendidos en el margen 2147483647 a 2147483647
123.234 -14.23
EL LENGUAJE VHDL
20
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
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
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
TIPOS DE DATOS.
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.
EL LENGUAJE VHDL
24
Acceso
Arrays
Registros
Enteros
Reales
Enumerados
Fsicos
EL LENGUAJE VHDL
25
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
Enteros (integer):
type integer is range -2_147_483_647 to 2_147_483_647;
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
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<=
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
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
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
EL LENGUAJE VHDL
32
Enumerados.
EL LENGUAJE VHDL
34
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
Datos compuestos.
Son aquellos que estn formados por varios elementos o unidades atmicas y por lo tanto son divisibles. Tienen semntica hardware.
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
Vectores.
Un vector es un conjunto de objetos del mismo tipo ordenados mediante uno o ms ndices que indican la posicin dentro del vector.
El rango especifica el margen de valores del vector. El rango ser un tipo discreto (entero o enumerado).
EL LENGUAJE VHDL
38
EL LENGUAJE VHDL
39
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
Vectores predefinidos.
EL LENGUAJE VHDL
41
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
42
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
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
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
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.
... ...
EL LENGUAJE VHDL
46
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
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
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
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
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
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
EL LENGUAJE VHDL
53
TIPOS
ACCESO (access).
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.
EL LENGUAJE VHDL
54
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
TIPOS
FICHERO (file).
El tipo declarado define el tipo de datos (escalar, registro o array restringido) que se almacenan en el fichero.
Una vez declarado el tipo se debe definir un objeto fichero (file) del tipo declarado para acceder a l
EL LENGUAJE VHDL
56
Para los vectores ademas: El dato asignado debe tener igual tamao que el objeto al que se le
asigna.
EL LENGUAJE VHDL
57
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;
EL LENGUAJE VHDL
58
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
........ ........
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
........ ........
EL LENGUAJE VHDL
59
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
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
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 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
EL LENGUAJE VHDL
62
EL LENGUAJE VHDL
63
........
EL LENGUAJE VHDL
64
........
EL LENGUAJE VHDL
65
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<=
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
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
tipo.
sobrecarga de tipo.
EL LENGUAJE VHDL
68
EL LENGUAJE VHDL
69
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.
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
EL LENGUAJE VHDL
72
Almacenan valores que pueden cambiar Proporciona un mecanismo conveniente para el almacenamiento local.
EL LENGUAJE VHDL
73
EL LENGUAJE VHDL
75
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;
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
EL LENGUAJE VHDL
77
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 LENGUAJE VHDL
78
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
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;
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
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
Permiten intercambio de informacin con el exterior. ySlo en simulacin para aplicar vectores de test y recoger el
resultado de la simulacin.
Paquetes empleados para la gestin de ficheros: yTEXTIO define rutinas ms potentes para gestin de ficheros de
texto.
EL LENGUAJE VHDL
82
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;
83
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
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
EL LENGUAJE VHDL
86
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
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
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.
+ +
EL LENGUAJE VHDL
89
Atributos de seales.
Atributo
Descripcin
* *
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
Sdriving_value
EL LENGUAJE VHDL
90
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
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
EL LENGUAJE VHDL
93
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).
EL LENGUAJE VHDL
95
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
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.
Estn
EL LENGUAJE VHDL
98
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<= 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<=
EL LENGUAJE VHDL
100
Operadores de desplazamiento.
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
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.
Permiten
Admiten cualquier tipo de datos. El resultado un valor boolean (true false). Los operandos deben ser del mismo tipo.
=
/= > < >= <=
EL LENGUAJE VHDL
103
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;
EL LENGUAJE VHDL
104
Otros operadores.
+ -
&
EL LENGUAJE VHDL
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
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