2010-10-26 196 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; 

end process;

Unfortuantely,我得到那么下面的错误消息:

如果(((PADDR(8 DOWNTO 2)= “1000000”))和(PSEL和PENABLE)和(PWRITE而不是(wrfifo_full)))然后 | ncvhdl_p:* E,OPTYMM(HDL/VHDL/test.vhd,523 | 43):操作者参数类型不匹配87 [4.3.3.2] 93 [4.3.2.2] [7.2]

反正看到的问题?

干杯

回答

6

PSEL,PENABLE,PWRITE和wrfifo_full都是STD_LOGIC。

在vhdl中,要以他们的方式编写测试,它们需要是布尔值。

而是编写代码,以便将它们的值与1或0进行比较。

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

谢谢你们,现在的工作!请记住这一点! – Martin 2010-10-26 12:43:05

+0

太好了,你可以请标记回答的问题吗? – George 2010-10-26 12:53:31

5

正如乔治所说,你必须将所有的std逻辑转换为布尔值。

但是,在VHDL-2008中,有一个新的条件运算符(??),它隐式应用于您的语句,这意味着它们将按照您的希望运行。你必须让你的编译器支持VHDL2008(或您的供应商whinge得到与时代:)

这本书是关于所有新位很好看的那VHDL2008给我们:

VHDL-2008 Just the new stuff

4.4节涵盖了条件运算