Descargar

Lenguaje VHDL (Powerpoint) (página 2)

Enviado por Pablo Turmero


Partes: 1, 2, 3
edu.red

La declaración de los tipos predefinidos se encuentra en el paquete STANDARD Existen 5 clases de tipos: – Scalar (entero, enumerado, físico, punto flotante) – Composite (array, record) – File – Access – Protected Tipos

edu.red

Entero type WORD_INDEX is range 31 downto 0; type BYTE_LENGTH_INTEGER is range 0 to 255; * El único tipo entero predefinido es INTEGER Enumerado type BIT is (‘0’, ‘1’); type estados is (Espera, Inicializacion, Procesamiento, Envio_Datos); * Los tipos enumerados predefinidos son: CHARACTER, BIT, BOOLEAN, SEVERITY_LEVEL, FILE_OPEN_KIND, Y FILE_OPEN_STATUS. Tipos escalares (ejemplos)

edu.red

type DURATION is range -1E18 to 1E18 units fs; –femtosecond ps = 1000 fs; –picosecond ns = 1000 ps; –nanosecond us = 1000 ns; –microsecond ms = 1000 us; –millisecond sec = 1000 ms; –second min = 60 sec; –minute end units; * El único tipo físico predefinido es TIME Físico Tipos escalares (ejemplos)

edu.red

constant PI: REAL := 3.141592; * El único tipo punto flotante predefinido es REAL Punto flotante Tipos escalares (ejemplos)

edu.red

type MY_WORD is array(0 to 31) of bit; type MEMORY is array(integer range <>) of MY_WORD;

Estos tipos así declarados se pueden usar para describir una memoria de 2N palabras de 32 bits: signal MY_MEMORY: MEMORY (0 to 2**N-1); * Los tipos array predefinidos son: STRING, BOOLEAN_VECTOR, BIT_VECTOR, INTEGER_VECTOR, REAL_VECTOR, and TIME_VECTOR (definidos en el paquete STANDARD) Array Tipos compuestos (ejemplos)

edu.red

type DATE is record DAY : integer range 1 to 31; MONTH : MONTH_NAME; YEAR : integer range 0 to 5000; end record; * No existe ningún tipo record predefinido. Record Tipos compuestos (ejemplos)

edu.red

file of STRING — Define un tipo de archivo que puede — contener un número indefinido de — strings de largo arbitrario.

file of NATURAL — Define un tipo de archivo que puede — contener sólo valores enteros positivos File Tipo file (ejemplos)

edu.red

En VHDL existen 4 clases de objetos: – Constantes – Señales – VariablesArchivos Objetos Un objeto es un elemento que guarda un valor de un tipo de dato específico. Sólo puede ser parte de operaciones coherentes con su tipo (lenguaje strong typing).

edu.red

Son utilizadas para el manejo de valores que se mantienen constantes durante el diseño. De esta manera se evita el uso de números que a simple vista parecen mágicos. Es una práctica muy recomendable el uso de nombres claros y que representen algo dentro del diseño. Para la asignación de un valor a una variable se utiliza el símbolo “:=“ Se declaran del siguiente modo: constant identificador: tipo [ := expresión]; Constantes Objetos

edu.red

Se declaran del siguiente modo: constant identificador: tipo [ := expresión];

Ejemplo: constant N: integer := 8; Constantes Objetos

edu.red

Representan las conexiones del hardware. En otras palabras, representan los cables. En las simulaciones toman el valor asignado un delta de tiempo después (salvo que se indique un retardo por medio de la sentencia after). Para la asignación de un valor a una señal se utiliza el símbolo “<=“ Se declaran del siguiente modo: signal identificador: tipo [ := expresión]; Señales Objetos

edu.red

Nota: Se supone definidas las siguientes variables signal word: std_logic_vector(3 downto 0); signal single_bit: std_logic; Se podría tener las siguientes asignaciones: – word <= “1110”; – single_bit <= ‘1’; – word <= (others => ‘0’); – word <= single_bit & word(3 downto 1);

Señales: Ejemplos Objetos

edu.red

Son utilizadas para almacenar valores que pueden sufrir cambios. No tienen significado físico Cuando un valor es asignado a una variable esta lo toma inmediatamente. Para la asignación de un valor a una variable se utiliza el símbolo “:=“ Se declaran del siguiente modo: variable identificador: tipo [ := expresión]; Variables Objetos

edu.red

variable aux: integer := 3; — declaración de variable con — asignación inicial de un valor

aux := aux + 1; — asignación de un valor a una variable Variables: Ejemplos Objetos

edu.red

Estos objetos no son sintetizables. Se utilizan en simulaciones. Se puede acceder a ellos tanto para lectura como para escritura Se declaran del siguiente modo: file identificador : subtipo [info_apertura]; info_apertura = [open modo_de_apertura] is nombre_archivo nombre_archivo = string

Archivos Objetos

edu.red

type IntegerFile is file of INTEGER; file F1: IntegerFile; — No existe llamado implícito a FILE_OPEN.

file F2: IntegerFile is "test.dat"; — Existe un llamado implícito a: — FILE_OPEN (F2, "test.dat"). El modo de apertura por defecto — es READ_MODE.

file F3: IntegerFile open WRITE_MODE is "test.dat"; — Existe un llamado implícito a: — FILE_OPEN (F3, "test.dat", WRITE_MODE);

(*) IEEE Std 1076™-2008 – IEEE Standard VHDL Language Archivos: Ejemplos (*) Objetos

edu.red

Lógicos Operadores De relación Aritméticos Concatenación and, or, nor, xor, not = (igual) , < (menor) , > (mayor) , /= (distinto) , <= (menor o igual) , >= (mayor o igual) + (suma) , – (resta) & Ejemplo: a <= b(N-1) & b(N-1 downto 1);

edu.red

Instrucciones concurrentes. Procesos. Se utilizan para implementar una expresión concurrente utilizando una serie de expresiones secuenciales Su evaluación se efectúa al mismo tiempo. Se sitúan dentro de los procesos Expresiones secuenciales Se evalúan en orden, una a continuación de la otra. Expresiones concurrentes Expresiones concurrentes y secuenciales

edu.red

La sentencia if selecciona una o ninguna secuencia de sentencias.

Sintaxis: [ if_label : ] if condition then sequence_of_statements { elsif condition then sequence_of_statements } [ else sequence_of_statements ] end if [ if_label ] ; Sentencia IF Sentencias secuenciales

edu.red

if x1= '0' and X2 = '1‘ then sal <= '1' ; elsif x3= '1' then sal <= '1'; else sal <= '0'; end if; Sentencia IF (ejemplo) Sentencias secuenciales

edu.red

La sentencia case selecciona una entre varias alternativas de secuencia de sentencias.

Sintaxis: [ label: ] case expression is when choices => sequential_statements when choices => sequential_statements … end case [ label ]; choices = choice | … choice = constant_expression | range | others Sentencia CASE Sentencias secuenciales

edu.red

C1: case sel is when 1 => A <= '0'; B <= ‘0'; when 2 => A <= '1'; B <= '1'; when 3 => A <= '0'; B <= '1'; when others => A <= '1'; B <= '0'; end case C1; Sentencia CASE (ejemplo) Sentencias secuenciales

edu.red

La sentencia Loop incluye una secuencia de sentencias que se ejecutarán reiteradamente, ninguna o varias veces.

Sintaxis: [ loop _label : ] [ iteration_scheme ] loop sequence_of_statements end loop [ loop _label ] ;

iteration_scheme ::= while condition | for loop_parameter_specification

parameter_specification ::= identifier in discrete_range Sentencia LOOP Sentencias secuenciales

edu.red

La sentencia For Loop contiene una secuencia de sentencias que se repetirán mientras el parametro_loop se mantenga dentro del rango mencionado (range) en el encabezado de la sentencia .

Sintaxis: [ etiqueta: ] for parametro_loop in range loop sequential_statements end loop [ etiqueta ]; El parámetro parametro_loop no necesita ser declarado. La declaración del loop lo hace implícitamente. El parámetro parametro_loop es una constante dentro de un loop lo que implica que no puede asignársele ningún valor dentro del mismo. Sentencia FOR LOOP Sentencias secuenciales

Partes: 1, 2, 3
 Página anterior Volver al principio del trabajoPágina siguiente