VHDL Basico
VHDL Basico
VHDL Basico
Contenidos
q
Introduccin
u u u u
Conceptos bsicos
u u
Modelos de hardware
Contenidos
q q q
Resumen
3
Hardware Description Language (HDL) = lenguaje de programacin para modelado de hardware digital
4
Reusabilidad
Diseo de Hardware. ASIC: mapeo sobre alguna tecnologa FPGA: mapeo sobre los CLB PLD: Estructuras pequeas, poco uso del VHDL Soluciones Estndares, modelos, descripcin comporamental, ... Diseo de software VHDL - C interface (herramientas especficas) Principal punto de inters (hardware/software co-diseo)
Historia de VHDL
q
En Diciembre 1987, VHDL es acogido como Estndar del IEEE 1076-1987 y en 1988 un ANSI En Septiembre 1993, VHDL fue restandarizado Para clarificar y mejorar el lenguaje
10
11
Abstraccin
Abstraccin es la ocultacin de detalles:
Se diferencia entre informacin esencial y no esencial
Igualdad de abstraccin:
Toda la informacin de un modelo sobre un nivel de abstraccin contiene el mismo grado de abstraccin
12
13
14
15
Descripcin en el Nivel RT
17
18
19
Modularidad y Jerarqua
Permite la particin, en diferentes bloques o mdulos (diseos parciales), de sistemas complejos Restringiendo la complejidad Permitiendo o facilitando el trabajo de el equipo de diseo Facilita el estudio de diferentes alternativas de implementacin permite implementar modelos Soft para tener en cuenta el entono real de operacin.
20
VHDL es una especificacin de lenguaje internacional estndar del IEEE (IEEE 1076-1993) para describir hardware digital usado en la industria de todo el mundo VHDL es un acrnimo de VHSIC (Very High Speed Integrated Circuit) Hardware Description Lenguage VHDL permite modelar hardware desde nivel de sistema hasta nivel de puertas VHDL suministra un mecanismo para el diseo digital y re_uso de la documentacin de los diseos
21
Permite varias metodologa de diseo Es independiente de la tecnologa Describe una ancha variedad de hardware digital Facilita la comunicacin al ser un lenguaje estndar Permite un mejor manejo de los diseos Es un lenguaje flexible
q q
22
23
Generics
Entity
Ports
Architectur e
Architectur e
24
Introduccin
q
q q q q
25
Problema: Disear un Simple semi-sumador de un Bit con carry and enable Especificaciones
r r r r
Entradas y salidas son cada una de bit Cuando enable esta a nivel alto, result es x + y Cuando enable esta a nivel alto, carry es el carry de x + y Las salidas son cero cuando enable esta a nivel bajo
x y enable
Semi-sumador
carry result
26
Como primer paso, la declaracin de la entidad entity permite definir la interfaces del componente
r
ENTITY semi_sumador IS PORT( x, y, enable: IN BIT; carry, result: OUT BIT); END semi_sumador;
x y enable
semi sumador
carry result
27
Una descripcin a alto nivel puede ser usada para describir la funcin del sumador
ARCHITECTURE semi_sumador_a OF semi_sumador IS BEGIN PROCESS (x, y, enable) BEGIN IF enable = 1 THEN result <= x XOR y; carry <= x AND y; ELSE carry <= 0; result <= 0; END IF; END PROCESS; END semi_sumador_a;
El modelo puede ser simulado para verificar la correcta funcionalidad del componente
28
ARCHITECTURE semi_sumador_b OF semi_sumador IS BEGIN carry <= enable AND (x AND y); result <= enable AND (x XOR y); END semi_sumador_b;
De nuevo, el modelo puede ser simulado para confirmar las ecuaciones lgicas
29
Como tercer mtodo, una descripcin estructural puede ser creada a partir de componentes ya predefinidos x y enable carry
result
-SIGNAL xor_res : BIT; -- Seal interna -- Notar que las otras seales ya estn declaradas en la --- entidad BEGIN A0 : and2 PORT MAP (enable, xor_res, result); A1 : and3 PORT MAP (x, y, enable, carry); X0 : xor2 PORT MAP (x, y, xor_res); END semi_sumador_c;
32
q q q
33
Una descripcin completa de un componente en VHDL requiere de una entity y una architecture
La entity define la interface del componente r La architecture define a la funcin del componente
r
Varias arquitecturas alternativas pueden ser desarrollada para el uso con una misma entidad Existen dos formas bsica para describir un componente en VHDL:
Descripcin estructural r Descripcin comportamental
r
34
definicin architecture
35
Declaracin de la Entidad
Sintaxis:
entity entity-name is port ( signal-name: modo signal-type; ... signal-name: modo signal-type); end entity-name;
Modos: in
36
El propsito principal de una entidad es la declarar las seales en la interfase del componente
Las seales de la interfase son listadas en la clusula PORT u Segn esto la entidad es el equivalente a el smbolo de un componente en un esquemtico r Las dems clusulas en la entidad sern introducidas mas tarde
r
x y enable
Semi Sumad.
carry result
ENTITY half_adder IS GENERIC(prop_delay : TIME := 10 ns); PORT( x, y, enable : IN BIT; carry, result : OUT BIT); END half_adder;
37
Definicin de la Arquitectura
q
Los procesos pueden ser definidos explcita o implcitamente dentro de una arquitectura
Syntax:
Process-Name: process (sensitivity-list) begin statements end process;
Definicin de la Arquitectura
q
Una descripcin completa de un componente en VHDL requiere de una entity y una architecture
r La r La
entity define la interface del componente architecture define a la funcin del componente
Suma: Suma: PROCESS( A, B, Cin) PROCESS( A, B, Cin) BEGIN BEGIN Sum <= A XOR B XOR Cin; Sum <= A XOR B XOR Cin; END PROCESS Suma; END PROCESS Suma; Acarreo: Acarreo: PROCESS( A, B, Cin) PROCESS( A, B, Cin) BEGIN BEGIN Cout <= (A AND B) OR Cout <= (A AND B) OR (A AND Cin) OR (A AND Cin) OR (B AND Cin); (B AND Cin); END PROCESS Acarreo; END PROCESS Acarreo;
Componente
A Sum B Cout Cin
39
Ejemplo PORT :
PORT ( input : IN BIT_VECTOR(3 DOWNTO 0); PORT ( input : IN BIT_VECTOR(3 DOWNTO 0); ready, output : OUT BIT ); ready, output : OUT BIT );
r
Notar que puertos del mismo modo y tipo deben ser declarado en la misma lnea
40
41
in: Los valores de las seales son de lectura out: Los valores de las seales son de escritura por mltiples drivers buffer: comparable a out pero de escritura/lectura inout: puerto bi-direccional
42
Generics puede se usado para legibilidad, mantenimiento y configuracin Sintaxis de la declaracin generic :
r
Si el valor opcional por defecto no es explicitado en la GENERIC (generic_name : type [:= default_value]); declaracin, este tiene que estar presente cuando el GENERIC (generic_name : type [:= default_value]); componente sea usado (por ejemplo en la instanciacin del mismo)
Ejemplo de genrico:
El parmetro genrico Mi_ID,con valor por defecto 37, puede ser referenciado en alguna arquitectura de la entidad GENERIC (Mi_ID : INTEGER := 37); GENERIC (Mi_ID : INTEGER := 37); r El valor de defecto puede ser cambiado en la instanciacin
r
43
Cuerpo de la Arquitectura
q q
Componentes pre-definidos de VHDL son instanciados y conectados juntos Descripcin estructural puede conectar puertas simple y/o componentes complejos VHDL suministra los mecanismos para hacer una descripcin jerrquica VHDL suministra los mecanismos para describir estructuras repetitivas fcilmente
Output
46
Ciclo de Simulacin
q
VHDL usa el siguiente ciclo de simulacin para modelar los estmulos y respuesta natural del Hardware digital
Resumen
48
Tipos de Datos
q
Todas las declaraciones de VHDL, ports, signals, y variables deben especificar su correspondiente tipo o subtipo Types Access Composite Array Scalar Record
Integer
Real
Enumerated
Physical
49
Tipos de Datos
Declaracin Sintaxis de declaracin
TYPE nombre IS <definicin del tipo> ; TYPE nombre IS <definicin del tipo> ; q
Ejemplos
r
definicin
Type DiasMes is range 1 to 31; Type DiasMes is range 1 to 31; Type PuntosCardinales is (norte, sur este, oeste); Type PuntosCardinales is (norte, sur este, oeste);
uso
Constant DiasEnero: DiasMes:=31; Constant DiasEnero: DiasMes:=31; Variable Diahoy: DiasMes; Variable Diahoy: DiasMes; Signal Direccin: PuntosCardinales; Signal Direccin: PuntosCardinales; Port (Entrada: in PuntosCardinales; Port (Entrada: in PuntosCardinales; Salida : in Puntoscardinales); Salida : in Puntoscardinales);
50
Enteros
Rango: - 2,147,483,647 a 2,147,483,647 r Ejemplo de asignacin a una variable del tipo entero:
r
ARCHITECTURE test_int OF test IS ARCHITECTURE test_int OF test IS BEGIN BEGIN PROCESS (X) PROCESS (X) VARIABLE a: INTEGER; VARIABLE a: INTEGER; BEGIN BEGIN a := 1; -- OK a := 1; -- OK a := -1; -- OK a := -1; -- OK a := 1.0; -- ilegal a := 1.0; -- ilegal END PROCESS; END PROCESS; END test_int; END test_int;
51
Reales
Rango: -1.0E38 a 1.0E38 r Ejemplo de asignacin a una variable del tipo real :
r
ARCHITECTURE test_real OF test IS ARCHITECTURE test_real OF test IS BEGIN BEGIN PROCESS (X) PROCESS (X) VARIABLE a: REAL; VARIABLE a: REAL; BEGIN BEGIN a := 1.3; -- OK a := 1.3; -- OK a := -7.5; -- OK a := -7.5; -- OK a := 1; -- illegal a := 1; -- illegal a := 1.7E13; -- OK a := 1.7E13; -- OK a := 5.3 ns; -- illegal a := 5.3 ns; -- illegal END PROCESS; END PROCESS; END test_real; END test_real;
52
Enumerados
El usuario define la lista de posibles valores de dicho tipo r Ejemplo declaracin y uso de un tipo enumerado :
r
TYPE binary IS ( ON, OFF ); TYPE binary IS ( ON, OFF ); --... ms declaraciones ... --... ms declaraciones ... ARCHITECTURE test_enum OF test IS ARCHITECTURE test_enum OF test IS BEGIN BEGIN PROCESS (X) PROCESS (X) VARIABLE a: binary; VARIABLE a: binary; BEGIN BEGIN a := ON; -- OK a := ON; -- OK ... Ms declaraciones ... ... Ms declaraciones ... a := OFF; -- OK a := OFF; -- OK ... Ms declaraciones ... ... Ms declaraciones ... END PROCESS; END PROCESS; END test_enum; END test_enum;
53
TYPE resistance IS RANGE 0 TO 10000000 TYPE resistance IS RANGE 0 TO 10000000 UNITS UNITS ohm; -- ohm ohm; -- ohm Kohm = 1000 ohm; -- i.e. 1 K Kohm = 1000 ohm; -- i.e. 1 K Mohm = 1000 kohm; -- i.e. 1 M Mohm = 1000 kohm; -- i.e. 1 M END UNITS; END UNITS;
r
Array
Son usados para agrupar elementos de un mismo tipo en un objeto de VHDL r El Rango puede estar sin restringir en la declaracin u Pero debera ser restringido cuando es usado r Ejemplo para un array unidimencional (vector):
r
TYPE data_bus IS ARRAY(0 TO 31) OF BIT; TYPE data_bus IS ARRAY(0 TO 31) OF BIT;
55
Records (registros)
Son usados para agrupar elementos de posiblemente distintos tipos en un objeto de VHDL r Los Elementos son indexados va nombre y campo r Ejemplo de registro o record:
r
TYPE binary IS ( ON, OFF ); TYPE binary IS ( ON, OFF ); TYPE switch_info IS TYPE switch_info IS RECORD RECORD status : BINARY; status : BINARY; IDnumber : INTEGER; IDnumber : INTEGER; END RECORD; END RECORD; VARIABLE switch : switch_info; VARIABLE switch : switch_info; switch.status := ON; -- Estado del switch switch.status := ON; -- Estado del switch switch.IDnumber := 30; -- n de identificacin del switch.IDnumber := 30; -- n de identificacin del
57
SUBTYPE nombre IS type_base RANGE <rango>; SUBTYPE nombre IS type_base RANGE <rango>;
r
Ejemplo Subtype :
SUBTYPE primeros_diez IS INTEGER RANGE 0 TO 9; SUBTYPE primeros_diez IS INTEGER RANGE 0 TO 9;
58
integer: defined as in other languages, though its width is inferred boolean: as in other languages
signal signal-name: boolean := true; signal int-name: integer range start to end;
59
std_logic std_logic_vector
signal signal-name: std_logic; signal bus-name: std_logic_vector (start to end); signal bus-name: std_logic_vector (start downto end);
60
q q
61
Objetos en VHDL
q
Reglas de visibilidad:
r
Los objetos declarados u en un paquete estn disponibles para toda la descripcin VHDL que usa el paquete u en una entidad estn disponibles para todas las arquitectura asociadas con la entidad u en una arquitectura estn disponibles para todas las construcciones en la arquitectura u en a proceso estn disponibles solamente dentro del proceso
62
Objetos en VHDL
Constantes Nombres asignados a un valor especifico de un tipo Permite una actualizacin fcil y legibilidad La declaracin de una constante puede omitir el valor de forma que sea aplazado su asignacin Facilita la reconfiguracin Sintaxis de la declaracin :
CONSTANT nombre_constante : type_name [:= valor]; CONSTANT nombre_constante : type_name [:= valor]; q
q q q q q
Declaracin ejemplos :
CONSTANT PI : REAL := 3.14; CONSTANT PI : REAL := 3.14; CONSTANT velocidad : INTEGER; CONSTANT velocidad : INTEGER;
63
Objetos en VHDL
Variables
q
Sintaxis Declaracin :
VARIABLE variable_name : type_name [:= value]; VARIABLE variable_name : type_name [:= value];
Ejemplos de Declaracin :
VARIABLE opcode : BIT_VECTOR(3 DOWNTO 0) := "0000"; VARIABLE opcode : BIT_VECTOR(3 DOWNTO 0) := "0000"; VARIABLE freq : INTEGER; VARIABLE freq : INTEGER;
64
Objetos en VHDL
Seales
q q
Usadas para la comunicacin entre componentes de VHDL Realmente, las seales fsica en un sistema a menudo son mapeadas en seales de VHDL TODAS las asignaciones de seales en VHDL requiere un delta ciclo o un delay especificado por el usuario antes de tomar su nuevo valor
65
Objetos en VHDL
Seales (cont.)
Sintaxis de la declaracin :
SIGNAL signal_name : type_name [:= value]; SIGNAL signal_name : type_name [:= value];
66
Seales y Variables
q
ARCHITECTURE test1 OF mux IS ARCHITECTURE test1 OF mux IS SIGNAL x : BIT := '1'; SIGNAL x : BIT := '1'; SIGNAL y : BIT := '0'; SIGNAL y : BIT := '0'; BEGIN BEGIN PROCESS (in_sig, x, y) PROCESS (in_sig, x, y) BEGIN BEGIN x <= in_sig XOR y; x <= in_sig XOR y; y <= in_sig XOR x; y <= in_sig XOR x; END PROCESS; END PROCESS; END test1; END test1; q
Asumiendo una transicin de 1 a 0 sobre la seal in_sig, Cuales son los resultados para y en ambos casos?
67
Objetos en VHDL
Seales frente a variables La clave entre variables y seales es tiempo de retardo en la asignacin
ARCHITECTURE sig_ex OF test IS ARCHITECTURE sig_ex OF test IS PROCESS (a, b, c, out_1) PROCESS (a, b, c, out_1) BEGIN BEGIN out_1 <= a NAND b; out_1 <= a NAND b; out_2 <= out_1 XOR c; out_2 <= out_1 XOR c; END PROCESS; END PROCESS; END sig_ex; END sig_ex; Time 0 1 1+d 1+2d a 0 1 1 1 b 1 1 1 1 c 1 1 1 1 out_1 1 1 0 0 out_2 0 0 0 1
68
Objetos en VHDL
Seales frente a variables(Cont.)
ARCHITECTURE var_ex OF test IS ARCHITECTURE var_ex OF test IS BEGIN BEGIN PROCESS (a, b, c) PROCESS (a, b, c) VARIABLE out_3 : BIT; VARIABLE out_3 : BIT; BEGIN BEGIN out_3 := a NAND b; out_3 := a NAND b; out_4 <= out_3 XOR c; out_4 <= out_3 XOR c; END PROCESS; END PROCESS; END var_ex; END var_ex; Time 0 1 1+d a 0 1 1 b 1 1 1 c 1 1 1 out_3 1 0 0 out_4 0 0 1
69
Objetos en VHDL
Ficheros
q
Files suministra una forma de comunicacin entre el diseo en VHDL y el servidor o PC La declaracin hace que un fichero est disponible en el diseo Los ficheros pueden ser abiertos para escritura o lectura El Paquete STANDARD define las rutinas bsicas I/O para trabajar con ficheros El Paquete TEXTIO define rutinas para manejar ficheros de texto
70
Las declaraciones en VHDL que se ejecutan secuencial mente estn dentro de un proceso process
71
Sentencias Concurrentes
q q
72
Sentencias Concurrentes
q
Las sentencias concurrentes son ejecutadas al mismo tiempo independientemente del orden en el que aparezcan
73
Sentencias Concurrentes
Asignacin condicional de seales SEAL <= VALOR; SEAL <= VALOR _1 when CONDICION_1 else VALOR _2 when CONDICION_2 else ... VALOR _n;
q q q q q
CONDICION Es una expresin boleana Equivalente a la construccin if ..., elsif ..., else
74
Sentencias Concurrentes
Asignacin condicional de seales : Ejemplo
entity condi_asig is port (A, B, C, X : in bit_vector (3 downto 0); Z_CONC : out bit_vector (3 downto 0); Z_SEQ : out bit_vector (3 downto 0)); end condil_asig; architecture Ejemplo of condi_asig is begin -- versin Concurrente Z_CONC <= B when X = "1111" else C when X > "1000" else A; end Ejemplo; Vesin secuencial process (A, B, C, X) begin if (X = "1111") then Z_SEQ <= B elsif (X > "1000") then Z_SEQ <= C; else Z_SEQ <= A; end if; end process;
75
Sentencias Concurrentes
Asignacin de seal con seleccin
q q q q q q
with EXPRESION select SIGNAL<= VALOR_1 when ELECCION_1, VALOR _2 when ELECCION _2 | ELECCION _3, VALOR _3 when ELECCION _4 to ELECCION _5, VALOR _n when others;
Las ELECIONES no se deben solapar Todas las elecciones deben ser cubiertas Valores simples, rango de Valores
operaciones lgicas ("|" significa "or") "when others" cubre las restantes opciones
76
Sentencias Concurrentes
Asignacin de seal con seleccin Ejemplo
-- Versin secuencial -- Version Concurrente with X select Z_CONC <= A when 0, B when 7 | 9, C when 1 to 5, 0 when others; process (A, B, C, X) begin case X is when 0 when 7 | 9 => Z_SEQ <= A; => Z_SEQ <= B;
when 1 to 5 => Z_SEQ <= C; when others => Z_SEQ <= 0; end process;
77
Sentencias Concurrentes
Resumen La asignacin concurrente describe funcionalidad de multiplexores
Asignacin condicional: Las decisiones son basadas sobre varias seales r Asignacin con seleccin: Las decisiones son basadas envalores de una simple seal
r
Equivalencias
Asignacin condicional <=> if ..., elsif ..., else ..., end if r Asignacin con seleccin <=> case ..., when ..., end case
r
78
Sentencias Secuenciales
q q
Todas las declaraciones que estn dentro de un process se ejecutan secuencialmente Son ejecutadas de acuerdo al orden en el que aparezcan tal como los lenguajes de programacin
ARCHITECTURE secuencial OF test_mux IS ARCHITECTURE secuencial OF test_mux IS BEGIN BEGIN select_proc : PROCESS (x,y) select_proc : PROCESS (x,y) BEGIN BEGIN IF (select_sig = '0') THEN IF (select_sig = '0') THEN z <= x; z <= x; ELSIF (select_sig = '1') THEN ELSIF (select_sig = '1') THEN z <= y; z <= y; ELSE ELSE z <= "XXXX"; z <= "XXXX"; END IF; END IF; END PROCESS select_proc; END PROCESS select_proc; END sequential; END sequential;
79
Sent. Secuen_1
Sent. Secuen_2
Sent. Secuen_3
Sentencias Secuenciales
Sentencia IF
if CONDICION then if CONDICION then if CONDICION then -- Decla. secuenciales end if; -- Decla. secuenciales Else -- Decla. secuenciales end if; -- Decla. secuenciales elsif CONDICION then -- Decla. secuenciales else -- Decla. secuenciales
q
end if;
La clusula elsif
r
Es opcional e impone prioridad Opcional y es ejecutado si todas las condiciones son falsas
80
La clusula else
r
81
Sentencias Secuenciales
Sentencia Case
case EXPRESION is when VALOR_1 => -- Decla Secuenciales when VALOR _2 | VALOR _3 => -- Decla Secuenciales when VALOR _4 to VALOR _N => -- Decla Secuenciales when others => -- Decla Secuenciales end case ;
82
Las opciones no deben solaparse Todas las opciones deben ser cubiertas Valores, simples o rango ("|" significa "or") "when others" Cubre el resto opciones
Sentencias Secuenciales
sentencia case ejemplo
process (A, B, C, X) begin case X is when 0 => when 7 | 9 => when 1 to 5 => when others => end case; end process;
83
Sentencias Secuenciales
sentencia For loops
entity FOR_LOOP is port (A : in integer range 0 to 3; architecture Ejemplo of FOR_LOOP is begin process (A) begin Z <= "0000"; -- Asigna. por defecto for I in 0 to 3 loop if (A = I) then Z(I) <= `1`; end if; end loop; end process; end Ejemplo;
84
El parmetro del Loop esta declarado implcitamente No puede ser declarado externamente Su acceso es solo de lectura Recorre todos los valores dentro del rango especificado Enteros enumerados
Sentencias Secuenciales
sentencia sintaxis Loop [LOOP_etiqueta :]for INTIFICADOR in RANGO_DISCRE loop -- Declaraciones Secuen. end loop [LOOP_LABEL]; [LOOP_ etiqueta :] while CONDICION loop -- Declaraciones Secuen. end loop [LOOP_ etiqueta ];
Etiqueta opcional pero facilita la legibilidad FOR loop identificador , no es declarado, Solo lectura, Solo visible dentro el loop Sntesis: Loop for debe tener rango fijo y - 'while' usualmente no es sintetizable
85
Si est indefinido el proceso nunca se reactivar Wait: La declaracin no puede ser usada con la lista de sensibilidad en el proceso
89
: out bit);
BUS_B <= "0000"; BUS_A <= "1111"; wait for 10 ns; SEL <= `1`; wait for 10 ns; SEL <= `0`; wait for 10 ns; wait; end process STIMULUS;
92
wait until CPU_DATA_VALID = `1`; CPU_DATA_READ <= `1`; READ_CPU : process Begin wait for 20 ns; LOCAL_BUFFER <= CPU_DATA; wait for 10 ns; end process READ_CPU; CPU_DATA_READ <= `0`;
93
N := B; Z <= M + N;
96
Paquetes y Libreras
q
Las Construcciones de usuario dentro de arquitecturas y entidades no son visibles en otros componentes de VHDL
r
El marco o mbito de subprogramas, definiciones de los usuarios: tipos de datos, constantes y seales estn limitados a los componentes de VHDL en los cuales se han hecho
Los Paquetes y libreras suministran un mecanismo para poder re-usar construcciones ya hechas r Cosas declaradas en paquetes pueden ser usadas (incluidas) en otros componentes de VHDL
r
97
Paquetes
q
Declaracin del Paquete Contiene las declaraciones de los objetos definidos en el paquete Cuerpo del Paquete Contiene las definiciones necesarias para ciertos objetos definidos en la declaracin del paquete u Ejemplo descripcin de un subprograma Declaraciones Bsicas u Tipos, subtipos u Constantes u Subprogramas u Clusula Use
r r r
98
Paquetes
Declaracin
Ejemplo e la declaracin de un Paquete:
PACKAGE mi_material IS PACKAGE mi_material IS TYPE binary IS ( ON, OFF ); TYPE binary IS ( ON, OFF ); CONSTANT PI : REAL := 3.14; CONSTANT PI : REAL := 3.14; CONSTANT My_ID : INTEGER; CONSTANT My_ID : INTEGER; PROCEDURE add_bits3(SIGNAL a, b, en : IN BIT; PROCEDURE add_bits3(SIGNAL a, b, en : IN BIT; SIGNAL temp_result, temp_carry : OUT BIT); SIGNAL temp_result, temp_carry : OUT BIT); END mi_material; END mi_material;
q
Notar que algunas cosas solo requieren declaracin mientras otras necesitan informacin adicional detallada en el cuerpo
r r
Par definicin de tipos y subtipos, La declaracin es suficiente Los subprogramas requiere declaracin y descripcin
99
Paquetes
Paquete Cuerpo (Body)
q
Incluye la informacin necesaria (Descripcin Funcional) para los objetos declarados en la declaracin del paquete he
r
PACKAGE BODY mi_material IS PACKAGE BODY mi_material IS CONSTANT My_ID : INTEGER := 2; CONSTANT My_ID : INTEGER := 2; PROCEDURE add_bits3(SIGNAL a, b, en : IN BIT; PROCEDURE add_bits3(SIGNAL a, b, en : IN BIT; SIGNAL temp_result, temp_carry : OUT BIT) IS SIGNAL temp_result, temp_carry : OUT BIT) IS BEGIN -- this function can return a carry BEGIN -- this function can return a carry temp_result <= (a XOR b) AND en; temp_result <= (a XOR b) AND en; temp_carry <= a AND b AND en; temp_carry <= a AND b AND en; END add_bits3; END add_bits3; END mi_material; END mi_material;
100
Paquetes
Clusula Use
q
Los Paquetes tienen que ser hechos visibles antes de que su contenidos puedan ser usados
r
La Clusula USE hace el que el paquete sea visible para las entidades, arquitecturas, y otros paquetes
--Usa solamente las declaraciones binary y --add_bits3 USE mi_material.binary, mi_material.add_bits3; ... ENTITY declaracin... ... ARCHITECTURE declaracin... --Usa todas las declaraciones en paquete mi_material USE mi_material.ALL; ... ENTITY declaracin... ... ARCHITECTURE declaracin...
101
Libreras
q
q q
La unidad del diseo actual es compilado dentro la librera Work Ambas libreras Work y STD estn siempre visibles Existen muchas mas libreras suministradas por el vendedor del simulador de VHDL u Ejemplo privadas y estndar (IEEE).
Library IEEE; all; use IEEE.STD_Logic_1164.all all all; use ieee.std_logic_arith.all all all; use ieee.std_logic_unsigned.all all library LPM; ALL; use LPM.lpm_components.ALL ALL
102
Atributos
q
Ejemplo. types, subtypes, procedures, functions, signals, variables, constants, entities, architectures, configurations, packages, components Sintaxis General :
nombre'atributo_identicador nombre'atributo_identicador
q
X'EVENT -- TRUE Cuando hay un evento sobre la Seal X X'LAST_VALUE retorna el valor previo de la seal X Y'HIGH retorna el valor ms alto del rango de Y X'STABLE(t) -- TRUE Cuando no ocurren eventos sobre la seal X en el tiempo pasado t
103
Atributos
Register Example
q q
The following example shows how attributes can be used to make an 8-bit register Especificaciones :
Triggers on rising clock edge r Latches only on enable high r Has a data setup time of x_setup r Has propagation delay of prop_delay
r
ENTITY 8_bit_reg IS GENERIC (x_setup, prop_delay : TIME); PORT(enable, clk : IN qsim_state; a : IN qsim_state_vector(7 DOWNTO 0); b : OUT qsim_state_vector(7 DOWNTO 0)); END 8_bit_reg; q
104
Atributos
Register Example (Cont.)
q q
The following architecture is a first attempt at the register The use of 'STABLE is to used to detect setup violations in the data input
ARCHITECTURE first_attempt OF 8_bit_reg IS BEGIN PROCESS (clk) BEGIN IF (enable = '1') AND a'STABLE(x_setup) AND (clk = '1') THEN b <= a AFTER prop_delay; END IF; END PROCESS; END first_attempt;
What happens if a does not satisfy its setup time requirement of x_setup?
105
Atributos
Register Example (Cont.)
q q
The following architecture is a second and more robust attempt The use of 'LAST_VALUE ensures the clock is rising from a value of 0
ARCHITECTURE behavior OF 8_bit_reg IS BEGIN PROCESS (clk) BEGIN IF (enable = '1') AND a'STABLE(x_setup) AND (clk = '1') AND (clk'LAST_VALUE = '0') THEN b <= a AFTER prop_delay; END IF; END PROCESS; END behavior;
An ELSE clusula could be added to define the behavior when the requirements are not satisfied
106
Operadores
q
Can use parentheses for readability and to control the association of operators and operands
Operadores
Examples
q
0
SHIFTIN 1
1
0
2
0
3
1
SHIFTED q
**
x := 5**5 -- 5^5, OK x := 5**5 -- 5^5, OK y := 0.5**3 -- 0.5^3, OK y := 0.5**3 -- 0.5^3, OK x := 4**0.5 -- 4^0.5, Illegal x := 4**0.5 -- 4^0.5, Illegal y := 0.5**(-2) -- 0.5^(-2), OK y := 0.5**(-2) -- 0.5^(-2), OK
108
Modulo Outline
q q q q
Introduction VHDL Design Example VHDL Model Components Basic VHDL Constructs
q
q
Examples
Summary
109
110
Summary
q
VHDL is a worldwide standard for the description and modeling of digital hardware VHDL gives the designer many different ways to describe hardware Familiar programming tools are available for complex and simple problems Sequential and concurrent modes of execution meet a large variety of design needs Packages and libraries support design management and component reuse
111
References
[Bhasker95] Bhasker, J. A VHDL Primer, Prentice Hall, 1995. [Calhoun95] Calhoun, J.S., Reese, B.,. Class Notes for EE-4993/6993: Special Topics in Electrical Engineering (VHDL), Mississippi State University, http://www.erc.msstate.edu/, 1995. [Coelho89] Coelho, D. R., The VHDL Handbook, Kluwer Academic Publishers, 1989. [Gajski83] Gajski, Daniel D. and Kuhn, Robert H., "Guest Editors Introduction - New VLSI Tools", IEEE Computer, pp 11-14, IEEE, 1983; IEEE 1983 [Hein98] Hein, et al, VHDL Modeling Terminology and Taxonomy, Version3.0, July 29, 1998. [IEEE] All referenced IEEE material is used with permission. [Lipsett89] Lipsett, R., C. Schaefer, C. Ussery, VHDL: Hardware Description and Design, Kluwer Academic Publishers, , 1989. [LRM93] IEEE Standard VHDL Language Reference Manual, IEEE Std 1076-1993. [Navabi93] Navabi, Z., VHDL: Analysis and Modeling of Digital Systems, McGraw-Hill, 1993. [Menchini94] Menchini, P., Class Notes for Top Down Design with VHDL, 1994. [MG90] An Introduction to Modeling in VHDL, Mentor Graphics Corporation, 1990. [MG93] Introduction to VHDL, Mentor Graphics Corporation, 1993. [Perry94] Perry, D. L., VHDL, McGraw-Hill, 1994. [Richards97] Richards, M., Gadient, A., Frank, G., eds. Rapid Prototyping of Application Specific Signal Processors, Kluwer Academic Publishers, Norwell, MA, 1997 [Smith88] Smith, David, What is Logic Synthesis, VLSI Design and Test, October, 1988.
112
References, cont.
[USE/DA94] USE/DA Standards Survey, 1994. [VI93] VHDL International Survey, 1993. [Walker85] Walker, Robert A. and Thomas, Donald E., "A Model of Design Representation and Syntheses", 22nd Design Automation Conference, pp. 453-459, IEEE, 1985 [Waxman89A] Waxman, R., Saunders, L.F., and Carter, H.C., Abolishing the Tower of Babel, Spectrum, Vol. 26, Number 5, May 1989, pp. 40-44. [Waxman89B] R. Waxman and L. Saunders, The Evolution of VHDL, Invited Paper, INFORMATION PROCESSING '89, G.X. Ritter (ed.), Elsevier Science Publishers B.V. (North Holland), copyright IFIP, 1989, PP. 735-742. [Williams94] Williams, R. D., "Class Notes for EE 435: Computer Organization and Design", University of Virginia, http://www.ee.virginia.edu/research/CSIS/, 1994.
113