types - 类型错误将中缀表达式“或”解析为 std.STANDARD.BOOLEAN
问题描述
我无法理解错误。在大多数情况下,我理解问题与数据类型有关。为什么我的一些数据默认为 BOOLEAN?当它执行 A AND B 时,它应该返回一个正确的 std_logic 值吗?有人可以解释发生了什么吗?
library ieee;
use ieee.std_logic_1164.all;
entity Majority is port (
A, B, C : in std_logic;
Y: out std_logic);
end Majority;
architecture behavioral of Majority is
begin
Y <= '1' when ((A AND B) OR (A AND C) OR (B AND C)) else
'0';
end architecture behavioral;
解决方案
and
and运算符在将操作数传递给它们or
时返回 std_logicstd_logic
而不是布尔值(正如我在已删除的答案中所想的那样)。when
-else
要求条件是布尔值。
因此,如评论中所述,您可以Y <= '1' when ((A AND B) OR (A AND C) OR (B AND C)) = '1' else '0';
将返回 a 的表达式转换std_logic
为布尔值,以便可以在 when-else 结构中使用它。
然而,这种结构是多余的。你可以去:
Y <= (A AND B) OR (A AND C) OR (B AND C);
。条件返回 a std_logic
,因此您可以直接分配它。
VHDL-2008 引入了一个新的运算符,??。它被称为条件运算符,它将 STD_LOGIC 表达式转换为 BOOLEAN 表达式:'1' 和 'H' 被认为是 TRUE,其他一切都是 FALSE。(它还将 BIT 转换为 BOOLEAN 。)
这 ??运算符在 when-else 结构中自动应用,因此使用 VHDL 2008,您的代码应该可以工作。
推荐阅读
- c++ - 在 c++ Primer 中使用 Struct 和 Vector 时出现错误 C2661
- c - 统一随机数——不包括上限
- python - 未找到:ID 为 0 的 TF GPU 设备未注册,之后出现段错误
- java - 找不到 RestOperations bean
- java - 在活动android中重新启动一个void
- node.js - 为我的机器人改进 discord.js 音频质量
- c# - 如何在 ASP.NET Core Web API 中使用 MassTransit 事件总线?
- java - Data Structures Implementation
- haskell - 仍然对 GHCi 中的“让”感到困惑
- c# - 使用 NULL 节点的 C# XML 反序列化