2015-06-27 5 views
0

Мне нужно сделать 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.

Благодаря

+0

Если ваше определение величины является обычной арифметической, то вам лучше использовать numeric_std, который будет обрабатывать ваши векторы как числовые данные. Затем вам нужно решить, являются ли они подписанными или неподписанными числами, и объявлять их как «подписанные» или «неподписанные» соответственно (или выполнять преобразования типов в соответствующую форму). –

+0

Обычно 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

+1

Поддержка VHDL2008 по-прежнему отсутствует во многих инструментах, включая Xilinx, поэтому пока вы не можете использовать numeric_std_unsigned. –

ответ

0

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

0
library IEEE; 

    use IEEE.STD_LOGIC_1164.ALL; 
    use IEEE.STD_LOGIC_ARITH.ALL; 
    use IEEE.STD_LOGIC_UNSIGNED.ALL; 

    entity comp_4 is 
    port ( A:IN STD_LOGIC_VECTOR(0 to 3); 
     B:IN STD_LOGIC_VECTOR(0 to 3); 
     ET:OUT STD_LOGIC; 
     GT:OUT STD_LOGIC; 
     LT:OUT STD_LOGIC); 

    end comp_4; 

    architecture dataflow of comp_4 is 

    begin 
    with A-B(0 to 3) select 

    ET <= '1' when "0000", 
     '0' when others; 

    with A > B select 

    GT <= '1' when true, 
     '0' when others; 

    with A < B select 

    LT <= '1' when true, 
     '0' when others; 

    end dataflow; 
+0

попробуйте объяснить, что делает код. – loki

+0

Код, который я написал, пытается смоделировать 4-битный компаратор, используя оператор with-select-when. Определение сущности довольно просто. – anonymous

 Смежные вопросы

  • Нет связанных вопросов^_^