4-битный компаратор VHDL

Я должен сделать компаратор 4-битной величины в VHDL только с одновременными операторами (без if/else или case/when).

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 утверждение.

Спасибо


person rockstiff    schedule 27.06.2015    source источник
comment
Если ваше определение величины является обычным арифметическим, то вам лучше использовать numeric_std, который будет обрабатывать ваши векторы как числовые данные. Затем вам нужно решить, являются ли они знаковыми или беззнаковыми числами, и объявить их как signed или unsigned соответственно (или выполнить преобразование типов в соответствующую форму).   -  person user_1818839    schedule 27.06.2015
comment
Как правило, std_logic_vector можно считать беззнаковым с помощью пакета numeric_std_unsigned (-2008), который использует вызовы numeric_std с преобразованием типов в беззнаковые для различных операторов, включая реляционные операторы. Это конфликт между мета-значениями и двоичными значениями, который numeric_std разрешает как FALSE, если любой из операндов содержит мета-значения. Операторы по умолчанию (в данном случае реляционные операторы IEEE Std 1076-2008 9.2.3) являются чисто позиционными — порядок в перечислимом определении типа std_ulogic, а «Z» имеет более высокую позицию, чем «1» или «0».   -  person    schedule 28.06.2015
comment
Поддержка VHDL2008 по-прежнему отсутствует во многих инструментах, включая Xilinx, поэтому вы можете пока не захотеть использовать numeric_std_unsigned.   -  person Timmy Brolin    schedule 29.06.2015


Ответы (2)


В общем, вы можете «конвертировать» различные значения, которые может принимать std_logic, либо в 0, либо в 1, используя функцию to_01. Я думаю, что это в пакете numeric_std.

person scary_jeff    schedule 29.06.2015

person    schedule
comment
Код, который я написал, пытается смоделировать 4-битный компаратор, используя оператор with - select - when. Определение объекта довольно простое. - person anonymous; 20.12.2016