逻辑运算符问题VHDL

Mar*_*tin 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;
Run Code Online (Sandbox Code Playgroud)

结束过程;

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

如果(((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]

无论如何看到问题?

干杯

Geo*_*rge 7

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')
Run Code Online (Sandbox Code Playgroud)


Mar*_*son 5

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

然而,在VHDL-2008中,有一个新的条件运算符(??)隐式应用于诸如你的语句之类的语句,这意味着它们将按照您的希望工作.您必须在编译器上启用VHDL-2008支持(或者在您的供应商处抱怨以获得时间:)

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

VHDL-2008只是新的东西

第4.4节涵盖了条件运算符