我在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]
无论如何看到问题?
干杯
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)
正如George所说,你必须将你所有的std逻辑转换为布尔值.
然而,在VHDL-2008中,有一个新的条件运算符(??)隐式应用于诸如你的语句之类的语句,这意味着它们将按照您的希望工作.您必须在编译器上启用VHDL-2008支持(或者在您的供应商处抱怨以获得时间:)
本书很好地阅读了VHDL2008为我们提供的所有新内容:
第4.4节涵盖了条件运算符