4-bit magnitude comparator VHDL

Ich eine 4bit magnitude comparator in VHDL mit nur übereinstimmende Aussagen (keine if/else oder case/Wann).

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Exercise is
port (  A : in std_logic_vector (3 downto 0);
        B : in std_logic_vector (3 downto 0);
        Ag : out std_logic;
        Bg : out std_logic;
        AeqB: out std_logic
       );   
end Exercise;

architecture Comparator of Exercise is

begin
    Ag <= '1'when (A>B) else '0'; 
    Bg <= '1' when (B>A) else '0';  --Problem: Here if i sumulate B="ZZZZ", Bg is 1, asi if B>A 
    AeqB<= '1' when (A=B) else '0'; 
end Comparator; 

Das problem ist, dass ich werden müssen, zählen die anderen Werte von std_logic (U,X,Z,W,L,H,-), ich weiß, es ist die others kann aber nicht herausfinden, wie man den Komparator mit with/select - Anweisung.

Dank

  • Wenn Ihre definition von Größe ist die übliche Arithmetik, dann würden Sie besser mit numeric_std die Behandlung der Vektoren, die als numerische Daten. Sie haben dann zu entscheiden, ob Sie signiert oder unsigniert sind zahlen, und erklären Sie, wie signed oder unsigned jeweils (oder Typ-Konvertierungen durchführen, um die geeignete form).
  • In der Regel ein std_logic_vector kann als unsigned mit dem Paket numeric_std_unsigned (-2008), die verwendet numeric_std Anrufe mit Typ-Konvertierung zu unsigned verschiedenen Betreibern, einschließlich der relationalen Operatoren. Dies ist eine Kollision zwischen meta-Werte und binäre Werte, die numeric_std aufgelöst wird, als FALSE, wenn entweder operand enthält meta-Werte. Die Standard-Operatoren (IEEE Std 1076-2008 9.2.3 Relationale Operatoren in diesem Fall) sind Reine positions - Reihenfolge, in der aufgezählt std_ulogic Typ-definition, und 'Z' hat eine höhere position als '1' oder '0'.
  • VHDL2008 unterstützen, fehlt es in vielen tools, einschließlich Xilinx, so können Sie nicht verwenden möchten numeric_std_unsigned nur noch.
InformationsquelleAutor rockstiff | 2015-06-27
Schreibe einen Kommentar