Hola!!
Este sería el código (un ejemplo, porque hay más maneras) de un comparador de 1 bit:
Codigo:
entity Compara1 is
port (
A, B: IN STD_LOGIC;
Igual, Amayor, Bmayor : OUT STD_LOGIC;
);
end Compara1
architecture Compara1Arq of Compara1 is
begin
Igual = (A & B) | (~A & ~B);
Amayor = (A & ~B);
Bmayor = (~A & B);
end Compara1arq;
Espero que te sirva. A ver cómo se te ocurre hacer el comparador de 4 bits a partir de este, y nos lo enseñas, vale? Si te atascas dime, ok?
Hola mr_rubrik!
Tal y como has planteado el comparador, definiendo la entidad con las cuatro entradas, no estás implementando un comparador de 4 bits a partir de cuatro comparadores de 1 bit.
Con el código que has propuesto (que tiene muy buena pinta), podrías construir un comparador de 4 bits muy fácilmente; pero yo haría esto:
Bloque de entidad:
Codigo:
entity Compara4 is
port(A:in std_logic_vector(3 downto 0);
B:in std_logic_vector(3 downto 0);
menor:out std_logic;
igual:out std_logic;
mayor:out std_logic
);
end Compara4;
Bloque de arquitectura, incluyendo un proceso:
---------------------------------------------------
Codigo:
architecture comp of Compara4 is
begin
process(A,B)
begin
if (A<B) then
menor <= "1";
igual <= "0";
mayor <= "0";
elsif (A=B) then
menor <= "0";
igual <= "1";
mayor <= "0";
else
menor <= "0";
igual <= "0";
mayor <= "1";
end if;
end process;
end comp;
Si quieres construir un comparador de n bits en lugar de cuatro, en la definición del puerto de entrada tendrías que poner un vector de n posiciones, en lugar de 4 como el ejemplo que te he puesto.
Otra cosa, si quieres utilizar 4 comparadores de 1 bit para hacer el comparador de 4 bits, te doy una pista: necesitas definir la entidad con COMPONENT, componentes que serán precisamente los comparadores de 1 bits, y que tendrás que configurarlos como entradas y salidas en los puertos. A ver si lo pillas, vale? y me cuentas.