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
oderunsigned
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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen können Sie 'konvertieren' die verschiedenen Werte, die std_logic können entweder
0
oder1
mit derto_01
Funktion. Ich denke, es ist im Paketnumeric_std
.