Queremos diseñar un circuito combinacional que tenga la siguiente funcion: recibir dos entradas de n bits y dar tres salidas de 1 bit (One Hot) donde dependiendo que bit esté encedido se indica si la entrada A es mayor a B, si A es igual a B o si A es menor que B, a este circuito se le conoce como comparador aritmético, se clasifican por su número de entradas, por ejemplo el comparador aritmético de la figura 1 es un comparador aritmético de 4 bits donde el número de bits representa el tamaño máximo de números que se pueden comparar.
Para crear este circuito podemos hacerlo mediante mapas de Karnaugh o tablas de verdad y de esa forma encontraríamos la ecuación lógica que lo describe, pero ya que sabemos que hoy en día podemos hacer uso de herramientas CAD para facilitar este proceso, procederé a mostrar directamente su implementación en los HDL's.
Implementación de un Comparador Aritmético de 4 bits en AHDL.
SUBDESIGN Comparador(
a[3..0], b[3..0] : INPUT;
z[2..0] : OUTPUT;
)
BEGIN
IF (a > b) THEN
z[2] = VCC;
ELSIF (a == b) THEN
z[1] = VCC;
ELSE
z[0] = VCC;
END IF;
END;
Implementación de un Comparador Aritmético de 4 bits en VHDL.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY Comparador IS
PORT(a, b : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
z : OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END Comparador;
ARCHITECTURE Behaviour OF Comparador IS
BEGIN
z <= "100" WHEN a > b ELSE
"010" WHEN a = b ELSE
"001";
END Behaviour;
Implementación de un Comparador Aritmético de 4 bits en Verilog.
module Comparador(a, b, z);
input [3:0] a, b;
output [2:0] z;
assign z = a > b ? 3'b100 : (a == b ? 3'b010 : 3'b001);
endmodule