Comparadores en VHDL

Anuncio
Comparadores en VHDL
VHDL tiene operadores de comparación para todos los tipos
predefinidos. Igualdad (=) y desigualdad (/=) se aplican a todos los tipos; para
los arrays y los tipo record, los operandos deben tener el mismo tamaño y
estructura, y los operandos se comparan componente a componente.
Los otros operadores de comparación, >, <, >= y <=, se aplican solo a
tipos enteros, tipos enumerados (como STD_LOGIC) y arrays unidimensionales
de tipos enumerados o enteros. El orden entero de menor a mayor es el orden
natural, de menos infinito a más infinito, y los tipos enumerados usan el orden
en el que los elementos del tipo fueron definidos, desde el primero al último.
El orden de los tipos array se define iterativamente, empezando con el
elemento más a la izquierda en cada array. Los arrays siempre se comparan de
izquierda a derecha, independientemente del orden del rango de su índice (“to”
o “downto”). El orden del par más a la izquierda de elementos distintos es el
orden del array. Si los arrays son de distinta longitud y todos los elementos del
más corto coinciden con los elementos correspondientes del más largo, se
considera menor el más corto.
El resultado de todo esto es que los operadores de comparación
predefinidos comparan arrays de igual longitud de tipo BIT_VECTOR Y
STD_LOGIC_VECTOR como si representaran enteros sin signo. Si los arrays
tienen distintas longitudes, entonces los operadores no producen una
comparación aritmética válida, lo que se puede conseguir extendiendo el array
más corto con ceros por la izquierda.
Diseño lógico EUP ULPGC
Jose Torres
1 de 2
El siguiente programa VHDL produce todas las salidas de comparación
para comparar enteros sin signo de 8 bits. Como los dos vectores de entrada A
y B tienen igual longitud, el programa produce el resultado deseado:
library IEEE;
use IEEE.std_logic_1164.all;
entity vcompare is
port (
A, B: in STD_LOGIC_VECTOR (7 downto 0);
EQ, NE, GT, GE, LT, LE: out STD_LOGIC
);
end vcompare;
architecture vcompare_arch of vcompare is
begin
process (A, B)
begin
EQ <= '0'; NE <= '0'; GT <= '0'; GE <= '0'; LT <= '0'; LE <= '0';
if A = B then EQ <= '1'; end if;
if A /= B then NE <= '1'; end if;
if A > B then GT <= '1'; end if;
if A >= B then GE <= '1'; end if;
if A < B then LT <= '1'; end if;
if A <= B then LE <= '1'; end if;
end process;
end vcompare_arch;
Diseño lógico EUP ULPGC
Jose Torres
2 de 2
Descargar