====== COMPARATORS library ====== The COMPARATORS library consists of the following 3 generic components: * [[.:comparators#eqN]]: N-bit equality comparator * [[.:comparators#gleNs]]: N-bit greater-less-equal signed number magnitude comparator * [[.:comparators#gleNu]]: N-bit greater-less-equal unsigned number magnitude comparator The COMPARATORs library can be verified with this testbench: [[.:comparators#testbench|test_comparators]] ===== eqN ===== -- ############################################################################ -- # Project : Leonardo CBT-Kernel # -- # # -- # Filename : comparators.vhd # -- # # -- # Component : eqN : N-Bit Equality comparator # -- # # -- # Model : rtl # -- # # -- # Designer : S. Theoharis,N. Zervas # -- # Institute : VLSI Design Lab., University of Patras # -- # Date : 01.05.1999 # -- ############################################################################ library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.ALL; -- eqN Entity Description entity eqN is generic(N: INTEGER := 4); port( A: in unsigned(N-1 downto 0); B: in unsigned(N-1 downto 0); EQ: out std_ulogic ); end eqN; -- eqN Architecture Description architecture rtl of eqN is begin -- A = B eq <= '1' WHEN (A = B) ELSE '0'; end rtl; ===== gleNs ===== -- ############################################################################ -- # Project : Leonardo CBT-Kernel # -- # # -- # Filename : comparators.vhd # -- # # -- # Component : gleNs : N-Bit greate-less-equal signed magnitude comp. # -- # # -- # Model : rtl # -- # # -- # Designer : S. Theoharis,N. Zervas # -- # Institute : VLSI Design Lab., University of Patras # -- # Date : 01.05.1999 # -- ############################################################################ library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.ALL; -- gleNs Entity Description entity gleNs is generic(N: INTEGER := 4); port( A: in signed(N-1 downto 0); B: in signed(N-1 downto 0); EQ,GT,LT: buffer std_ulogic ); end gleNs; -- gleNs Architecture Description architecture rtl of gleNs is signal SignGreater,gt1,gt2 : std_ulogic; begin -- A = B eq <= '1' WHEN (A = B) ELSE '0'; -- A > B SignGreater <= '1' WHEN (B(N-1) > A(N-1)) ELSE '0'; gt1 <= '1' WHEN (A>B) ELSE '0'; gt2 <= NOT A(N-1) OR B(N-1); gt <= (gt1 AND gt2) OR SignGreater; -- A < B lt <= (NOT eq) AND (NOT gt); end rtl; ===== gleNu ===== -- ############################################################################ -- # Project : Leonardo CBT-Kernel # -- # # -- # Filename : comparators.vhd # -- # # -- # Component : gleNu : N-Bit greate-less-equal unsigned comparator # -- # # -- # Model : rtl # -- # # -- # Designer : S. Theoharis,N. Zervas # -- # Institute : VLSI Design Lab., University of Patras # -- # Date : 01.05.1999 # -- ############################################################################ library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.ALL; -- gleNu Entity Description entity gleNu is generic(N: INTEGER := 4); port( A: in unsigned(N-1 downto 0); B: in unsigned(N-1 downto 0); EQ,GT,LT: out std_ulogic ); end gleNu; -- gleNu Architecture Description architecture rtl of gleNu is begin -- A = B eq <= '1' WHEN (A = B) ELSE '0'; -- A > B gt <= '1' WHEN (A > B) ELSE '0'; -- A < B lt <= '1' WHEN (A < B) ELSE '0'; end rtl; ===== Testbench ===== -- ############################################################################ -- # Project : Leonardo CBT-Kernel # -- # # -- # Filename : test_comparators.vhd # -- # # -- # Component : test_comparators : Test Bench for various comparatos. # -- # # -- # Model : rtl # -- # # -- # Designer : S. Theoharis,N. Zervas # -- # Institute : VLSI Design Lab., University of Patras # -- # Date : 01.05.1999 # -- ############################################################################ library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; entity test_comparators IS END test_comparators; ARCHITECTURE rtl OF test_comparators IS COMPONENT eqN is generic(N: INTEGER := 4); port( A: in unsigned(N-1 downto 0); B: in unsigned(N-1 downto 0); EQ: out std_ulogic ); end COMPONENT; COMPONENT gleNs is generic(N: INTEGER := 4); port( A: in signed(N-1 downto 0); B: in signed(N-1 downto 0); EQ,GT,LT: buffer std_ulogic ); end COMPONENT; COMPONENT gleNu is generic(N: INTEGER := 4); port( A: in unsigned(N-1 downto 0); B: in unsigned(N-1 downto 0); EQ,GT,LT: out std_ulogic ); END COMPONENT; FOR ALL : eqN USE ENTITY WORK.eqN(rtl); FOR ALL : gleNs USE ENTITY WORK.gleNs(rtl); FOR ALL : gleNu USE ENTITY WORK.gleNu(rtl); CONSTANT N : integer := 8; SIGNAL A_u,B_u : unsigned(N-1 downto 0); SIGNAL A_s,B_s : signed(N-1 downto 0); SIGNAL EQ0,EQ1,GT1,LT1,EQ2,GT2,LT2 : std_ulogic; BEGIN Equality : eqN GENERIC MAP ( N=>N ) PORT MAP ( A=>A_u, B=>B_u, EQ=>EQ0 ); Comparator_unsigned : gleNu GENERIC MAP ( N=>N ) PORT MAP ( A=>A_u, B=>B_u, EQ=>EQ1, GT=>GT1, LT=>LT1 ); Comparator_signed : gleNs GENERIC MAP ( N=>N ) PORT MAP ( A=>A_s, B=>B_s, EQ=>EQ2, GT=>GT2, LT=>LT2 ); A_u <= "10101000", "01011001" AFTER 100 ns, "11011011" AFTER 200 ns, "01101001" AFTER 300 ns; B_u <= "00111000", "01001011" AFTER 100 ns, "01010001" AFTER 200 ns, "11001001" AFTER 300 ns; A_s <= "10101000", "01011001" AFTER 100 ns, "11011011" AFTER 200 ns, "01101001" AFTER 300 ns; B_s <= "00111000", "01001011" AFTER 100 ns, "01010001" AFTER 200 ns, "11001001" AFTER 300 ns; END rtl;