Está en la página 1de 13

VHDL: Operadores y Atributos

Arquitectura del Computador 2017


Operadores de Asignación

● <= asigna un valor a una SIGNAL.

● := asigna un valor a una VARIABLE, CONSTANT, o GENERIC. También se


utiliza para establecer valores iniciales.

● => asigna valores a elementos individuales de un vector, o a varios


usando “OTHERS”.

x <= '1'; -- '1' is assigned to SIGNAL x using "<="


y := "0000"; -- "0000" is assigned to VARIABLE y using ":="
w <= (0 =>'1', OTHERS =>'0'); -- SIGNAL w: LSB='1' and the others='0'
Operadores Lógicos

NOT - AND - OR - NAND - NOR - XOR - XNOR

● El operador NOT tiene precedencia sobre los demás.

● Los datos deben ser de tipo BIT, STD_LOGIC o STD_ULOGIC (o sus


respectivas extensiones: BIT_VECTOR, STD_LOGIC_VECTOR o
STD_ULOGIC_VECTOR).

y <= NOT a AND b; -- (a'.b)


y <= NOT (a AND b); -- (a.b)'
y <= a NAND b; -- (a.b)'
Operadores Aritméticos

● + Addition
● - Subtraction
● * Multiplication
● / Division (sólo se permite para divisores=potencia de 2: operación shift)
● ** Exponentiation
No sintetizables:
● MOD Modulus (y mod x devuelve el resto de y/x con el signo de x)
● REM Remainder (y rem x devuelve el resto de y/x con el signo de y)
● ABS Absolute value

Los datos deben ser de tipo INTEGER, SIGNED, UNSIGNED o REAL (también
STD_LOGIC_VECTOR si se usan los package std_logic_signed o
std_logic_unsigned de la librería ieee, para sumas y restas).
Operadores de Comparación

● = Equal to
● /= Not equal to
● < Less than
● > Greater than
● <= Less than or equal to
● >= Greater than or equal to

Los datos deben ser de tipo INTEGER, SIGNED, UNSIGNED o REAL (también
STD_LOGIC_VECTOR si se usan los package std_logic_signed o
std_logic_unsigned de la librería ieee, para sumas y restas).
Operadores de desplazamiento

● sll Shift left logic – las posiciones a la derecha se completan con '0's
● srl Shift right logic – las posiciones a la izquierda se completan con '0's

Sintaxis:

<operando izquierdo> <operación de desplazamiento> <operando derecho>

- operando izquierdo: type BIT_VECTOR


- operando derecho: INTEGER.
Resumen de operadores
Atributos de los datos

● d’LOW: Returns lower array index


● d’HIGH: Returns upper array index
● d’LEFT: Returns leftmost array index
● d’RIGHT: Returns rightmost array index
● d’LENGTH: Returns vector size
● d’RANGE: Returns vector range
● d’REVERSE_RANGE: Returns vector range in reverse order

Ejemplo:
SIGNAL d : STD_LOGIC_VECTOR (7 DOWNTO 0);
Luego:
d'LOW=0, d'HIGH=7, d'LEFT=7, d'RIGHT=0, d'LENGTH=8,
d'RANGE=(7 downto 0), d'REVERSE_RANGE=(0 to 7).
Atributos de las señales

Sintetizables:
● s’EVENT: Returns true when an event occurs on s
● s’STABLE: Returns true if no event has occurred on s

No sintetizables:
● s’ACTIVE: Returns true if s = ‘1’
● s’QUIET <time>: Returns true if no event has occurred during the time
specified
● s’LAST_EVENT: Returns the time elapsed since last event
● s’LAST_ACTIVE: Returns the time elapsed since last s = ‘1’
● s’LAST_VALUE: Returns the value of s before the last event.
Atributos de las señales - ejemplos

Las cuatro asignaciones que se muestran a continuación son sintetizables y


equivalentes. Devuelven TRUE cuando se produce un evento (un cambio) en
clk, AND (y) si tal evento es hacia arriba (es decir, cuando un flanco ascendente
se produce en clk).

IF (clk'EVENT AND clk='1')... -- EVENT attribute used with IF

IF (NOT clk'STABLE AND clk='1')... -- STABLE attribute used with IF

WAIT UNTIL (clk'EVENT AND clk='1'); -- EVENT attribute used with WAIT

IF RISING_EDGE(clk)... -- call to a function


GENERIC

● Permite designar parámetros genéricos: parámetros estáticos que pueden


ser modificados fácilmente y adaptados a diferentes aplicaciones.

● Los códigos se vuelven más flexibles y reutilizables.

● Se declara en la ENTITY y debe ser un parámetro global.

● Sintaxis:

GENERIC (parameter_name : parameter_type := parameter_value);


GENERIC: ejemplo

Se realiza una declaración GENERIC del parámetro ‘n’, tipo INTEGER, con valor
por defecto = 8. Dentro de la ENTITY y la ARCHITECTURE, cada vez que
aparece ‘n’ de asume el valor 8.
ENTITY my_entity IS
GENERIC (n : INTEGER := 8);
PORT (...);
END my_entity;
ARCHITECTURE my_architecture OF my_entity IS
...
END my_architecture;

Se puede especificar más de un parámetro GENERIC:


GENERIC (n: INTEGER := 8; vector: BIT_VECTOR := "00001111");
Ejemplo: Detector de paridad (n bits)

Diseñar un detector de paridad


cuya salida sea sea ‘0’ mientras la
cantidad de 1’s del vector de
entrada sea par. La salida debe
ser ’1’ para el resto de los casos.

También podría gustarte