我必須在VHDL中創建一個只有併發語句的4位幅度比較器(no if/else或case/when)。4位幅度比較器VHDL
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;
的問題是,我需要在計算STD_LOGIC的所有其他值(U,X,Z,W,L,H, - ),我知道有是others
,但不能弄明白如何使with/select
聲明的比較器。
感謝
如果你的幅度定義是通常的算術定義,那麼你最好使用numeric_std,它將把你的向量當作數值數據。然後你必須決定它們是否是有符號或無符號數,並分別聲明它們是'signed'或'unsigned'(或將類型轉換爲適當的形式)。 –
通常可以使用package numeric_std_unsigned(-2008)將std_logic_vector視爲未簽名,該函數使用包含關係運算符的各種運算符進行unsigned的類型轉換的numeric_std調用。這是元值與二進制值之間的衝突,如果任一操作數包含元值,則numeric_std將解析爲FALSE。默認的運算符(本例中爲IEEE Std 1076-2008 9.2.3關係運算符)在枚舉的std_ulogic類型定義中是純粹的位置順序,而'Z'的位置高於'1'或'0'。 – user1155120
許多工具(包括Xilinx)仍然缺乏VHDL2008支持,因此您可能不想使用numeric_std_unsigned。 –