Comparador Aritmético

Última modificación: 6 de marzo del 2023

Problema

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.

Descripción del Circuito

AHDL

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;

VHDL

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;

Verilog

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