35 lines
750 B
VHDL
35 lines
750 B
VHDL
library IEEE;
|
|
use IEEE.STD_LOGIC_1164.ALL;
|
|
|
|
|
|
entity Comparator is
|
|
generic( BITCOUNT: integer := 8 );
|
|
port(
|
|
xT, yT: in std_logic_vector((BITCOUNT-1) downto 0);
|
|
needSwap: out std_logic
|
|
);
|
|
end Comparator;
|
|
|
|
architecture ComparatorArch of Comparator is
|
|
signal xGTy: std_logic_vector((BITCOUNT-1) downto 0);
|
|
signal yGTx: std_logic_vector((BITCOUNT-1) downto 0);
|
|
begin
|
|
xGTy <= xT and (not yT);
|
|
yGTx <= (not xT) and yT;
|
|
|
|
needSwap_compute: process (xGTy, yGTx)
|
|
variable SW: std_logic;
|
|
variable K: std_logic;
|
|
begin
|
|
SW := '0';
|
|
K := '1';
|
|
for i in (BITCOUNT-1) downto 0 loop
|
|
SW := SW or ((not(xGTy(i)) and yGTx(i)) and K);
|
|
K := K and (not(xGTy(i) and not(yGTx(i))));
|
|
end loop;
|
|
needSwap <= SW;
|
|
end process;
|
|
|
|
end ComparatorArch;
|
|
|