标识符的类型与其作为 "boolean" 类型的用法不一致 - Quartus 中的 VHDL
Type of identifier does not agree with its usage as "boolean" type - VHDL in Quartus
我正在用 VHDL 开发一个简单的缓冲系统。每当我尝试编译时,我都会收到标题中提到的“空”错误。我不知道为什么它不让我反转 std_logic 类型。我也一直在比较错误。出于某种原因,它无法识别 status_as_int 和阈值上的“>”和“<”运算符。
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY Buffer_Controller is
port (
empty : in std_logic;
full : in std_logic;
filling_status : in std_logic_vector(14 downto 0);
read_thresh : in integer;
write_thresh : in integer;
read_now : out std_logic;
write_now : out std_logic
);
END ENTITY;
ARCHITECTURE ctrl of Buffer_Controller is
signal status_as_int : integer;
BEGIN
status_as_int <= to_integer(unsigned(filling_status));
read_now <= '1' when (NOT(empty) AND status_as_int > read_thresh) else
'0';
write_now <= '1' when (NOT(full) AND status_as_int < write_thresh) else
'0';
END ARCHITECTURE;
empty
和 full
不是布尔值。它们是 std_logic
,这是一个用户定义的类型(在 ieee.std_logic_1164 库中定义)。这不是布尔值。
是的,您可以反转它们,但结果仍然是std_logic
。 (std_logic
的 NOT
的重载实现也在 ieee.std_logic_1164 库中定义。
要转换为布尔值,您需要将它们与可以解释为 std_logic
的内容进行比较,例如
read_now <= '1' when
empty = '0' AND
status_as_int > read_thresh
else '0';
我正在用 VHDL 开发一个简单的缓冲系统。每当我尝试编译时,我都会收到标题中提到的“空”错误。我不知道为什么它不让我反转 std_logic 类型。我也一直在比较错误。出于某种原因,它无法识别 status_as_int 和阈值上的“>”和“<”运算符。
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY Buffer_Controller is
port (
empty : in std_logic;
full : in std_logic;
filling_status : in std_logic_vector(14 downto 0);
read_thresh : in integer;
write_thresh : in integer;
read_now : out std_logic;
write_now : out std_logic
);
END ENTITY;
ARCHITECTURE ctrl of Buffer_Controller is
signal status_as_int : integer;
BEGIN
status_as_int <= to_integer(unsigned(filling_status));
read_now <= '1' when (NOT(empty) AND status_as_int > read_thresh) else
'0';
write_now <= '1' when (NOT(full) AND status_as_int < write_thresh) else
'0';
END ARCHITECTURE;
empty
和 full
不是布尔值。它们是 std_logic
,这是一个用户定义的类型(在 ieee.std_logic_1164 库中定义)。这不是布尔值。
是的,您可以反转它们,但结果仍然是std_logic
。 (std_logic
的 NOT
的重载实现也在 ieee.std_logic_1164 库中定义。
要转换为布尔值,您需要将它们与可以解释为 std_logic
的内容进行比较,例如
read_now <= '1' when
empty = '0' AND
status_as_int > read_thresh
else '0';