我在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]
无论如何都看到了问题?
干杯
答案 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为我们提供的所有新内容:
第4.4节介绍了条件运算符