Sunteți pe pagina 1din 2

Comparadores en VHDL

VHDL tiene operadores de comparacin 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 tamao y
estructura, y los operandos se comparan componente a componente.
Los otros operadores de comparacin, >, <, >= 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 ms 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 ms 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 ms a la izquierda de elementos distintos es el
orden del array. Si los arrays son de distinta longitud y todos los elementos del
ms corto coinciden con los elementos correspondientes del ms largo, se
considera menor el ms corto.
El resultado de todo esto es que los operadores de comparacin
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
comparacin aritmtica vlida, lo que se puede conseguir extendiendo el array
ms corto con ceros por la izquierda.

Diseo lgico EUP ULPGC

Jose Torres

1 de 2

El siguiente programa VHDL produce todas las salidas de comparacin


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;

Diseo lgico EUP ULPGC

Jose Torres

2 de 2

S-ar putea să vă placă și