2015-03-15 3 views
0

Вот мой раздели пример:GHDL: нет функции объявления для оператора "и"

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

entity queue is 
    port(
     reset: in std_logic; 
     input_ready: out std_logic 
    ); 
end entity; 

architecture reference of queue is 
    signal queue_size: unsigned(15 downto 0); 
begin 
    process 
    begin 
      input_ready <= (reset = '0') and (queue_size < 1024); 
    end process; 
end architecture; 

Где эта линия:

input_ready <= (reset = '0') and (queue_size < 1024); 

производит

no function declarations for operator "and" 
ghdl: compilation error 

при запуске

ghdl -a queue.vhdl 

с GHDL 0.32rc1 (20141104) [Dunoon edition] на Arch Linux.

В соответствии с VHDL operators оба сравнения возвращают boolean и существует and определение для двух булевых. Так что я делаю неправильно?

ответ

3

Два подвыбора (reset = '0') и (queue_size < 1024) возвращают логическое значение. Оператор and также возвращает логический результат, который вы пытаетесь назначить на выход std_logic.

Решение:

input_ready <= '1' when (reset = '0') and (queue_size < 1024) else '0'; 

Примечание: Эта строка не нуждается в окружающем процессе.

+0

И я думал, что могу избежать влияния C фона ... VHDL также решает перегрузки по типу возврата, не так ли? –

+0

@Dadam: Перегрузка по типу возврата - это точно проблема, и да VHDL делает. –

+0

Вы также можете отметить, что круглые скобки в решении Paebbels являются излишними. Операторы отношения ("=") являются более приоритетными, чем логические операторы ("и"). IEEE Std 1076-2008, 9.2 Операторы, 9.2.1 Общие положения. – user1155120

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