2010-10-26 4 views
3

У меня очень простая проблема с оператором в VHDL. Я пытаюсь сравнить некоторые входы с логическими операторами, но получить сообщение об ошибке ...Проблема с логическим оператором VHDL

entity test is 
port (
    paddr    : in std_logic_vector(15 downto 0); 
    psel    : in std_logic; 
    penable    : in std_logic; 
    pwrite    : in std_logic 
); 
end entity test; 

signal wrfifo_full  : std_logic; 

process (paddr, psel, penable, pwrite, wrfifo_full) is 
begin 
    if (((paddr(8 downto 2) = "1000000")) and (psel and penable) and (pwrite and not(wrfifo_full))) then 
    dt_fifo_wr_i <= '1'; 
    else 
    dt_fifo_wr_i <= '0'; 
    end if; 

конец процесса;

Unfortuantely, я получаю то следующее сообщение об ошибке:

если (((paddr (8 Downto 2) = "1 миллион")) и (Псел и penable) и (pwrite и (wrfifo_full))) затем | ncvhdl_p: * E, OPTYMM (ЛВП/VHDL/test.vhd, 523 | 43): оператор типа аргумента несоответствие 87 [4.3.3.2] 93 [4.3.2.2] [7,2]

Во всяком случае видит проблему?

Приветствия

ответ

6

Псел, penable, pwrite и wrfifo_full все std_logic.

В vhdl, чтобы написать тест, как у вас есть, им нужно будет иметь значение boolean.

Вместо этого напишите код, чтобы сравнить их значения с 1 или ноль.

(paddr(8 downto 2) = "1000000"  and 
psel = '1' and penable  ='1' and 
pwrite = '1' and wrfifo_full = '0') 
+0

Спасибо, ребята, он работает сейчас! Помните об этом! – Martin

+0

Отлично, не могли бы вы отметить вопрос? – George

5

Как сказал Джордж, вы должны в настоящее время преобразовать все ваши std-логики в булевы.

В VHDL-2008, однако, существует новый условный оператор (??), который применяется неявно к таким заявлениям, как ваш, что означает, что они будут работать так, как вы надеялись. Вы должны включить поддержку VHDL2008 на вас компилятором (или плакаться на своего поставщика, чтобы со временем :)

Эта книга является хорошим для чтения на всех новых битов, которые VHDL2008 дает нам:

VHDL-2008 Just the new stuff

Раздел 4.4 охватывает условный оператор

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