Мне нужно сделать 4-битный компаратор в VHDL только с одновременными операторами (нет, если/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, который будет обрабатывать ваши векторы как числовые данные. Затем вам нужно решить, являются ли они подписанными или неподписанными числами, и объявлять их как «подписанные» или «неподписанные» соответственно (или выполнять преобразования типов в соответствующую форму). –
Обычно std_logic_vector можно считать неподписанным с помощью пакета numeric_std_unsigned (-2008), который использует вызовы numeric_std с преобразованиями типов в unsigned для различных операторов, включая реляционные операторы. Это столкновение между значениями meta и двоичными значениями, которые numeric_std разрешает как FALSE, если один из операндов содержит метазначения. Операторы по умолчанию (IEEE Std 1076-2008 9.2.3 Реляционные операторы в этом случае) являются чистым позиционным порядком в перечисляемом определении типа std_ulogic, а «Z» имеет более высокую позицию, чем «1» или «0». – user1155120
Поддержка VHDL2008 по-прежнему отсутствует во многих инструментах, включая Xilinx, поэтому пока вы не можете использовать numeric_std_unsigned. –