逻辑运算符问题VHDL

时间:2010-10-26 09:47:25

标签: 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;

结束过程;

不幸的是,我收到以下错误消息:

if(((paddr(8 downto 2)=“1000000”))和(psel and 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]

无论如何都看到了问题?

干杯

2 个答案:

答案 0 :(得分:6)

psel,penable,pwrite和wrfifo_full都是std_logic。

在vhdl中,要按照你的方式编写测试,他们需要是boolean。

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

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

答案 1 :(得分:5)

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

然而,在VHDL-2008中,有一个新的条件运算符(??)可以隐式应用于诸如你的语句之类的语句,这意味着它们可以按照您的意愿运行。您必须在编译器上启用VHDL-2008支持(或者向您的供应商发出支持以获取时间:)

本书很好地阅读了VHDL2008为我们提供的所有新内容:

VHDL-2008 Just the new stuff

第4.4节介绍了条件运算符