标识符的类型与其作为 "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;

emptyfull 不是布尔值。它们是 std_logic,这是一个用户定义的类型(在 ieee.std_logic_1164 库中定义)。这不是布尔值。

是的,您可以反转它们,但结果仍然是std_logic。 (std_logicNOT 的重载实现也在 ieee.std_logic_1164 库中定义。

要转换为布尔值,您需要将它们与可以解释为 std_logic 的内容进行比较,例如

read_now <= '1' when
    empty = '0' AND
    status_as_int > read_thresh
       else '0';