当整个条件为真时检查 if 语句中的下一个条件

checking next condition in the if statement when whole condition will be true

VHDL 语言标准是否定义了在以下情况下检查 if 语句中条件的行为:

constant one: std_logic: = '1'; -- always '1'
signal vector: std_logic_vector (2 downto 0);

(...)
if (one or vector(3) ) begin

(...)

在这种情况下,应该是 compilation/elaboration/runtime 错误(超出范围)或者如果条件应该始终为真(因此不需要检查 vector(3) 的值?

您在阐述过程中会出现错误。但是一般在写VHDL代码的时候,是不需要用到这种技巧的。

您是否正在尝试使用此代码来解决概念问题?例如,如果您只想在向量大于 3 时使用 vector(3),那么您可以使用 if...generate 语句或 if...then 语句来执行此操作。

VHDL中的

Andnandornor运算符在某些情况下是短路运算符。行为取决于操作数类型。

您使用的类型 std_logic 未列出:

9.2 Operators - General
In general, operands in an expression are evaluated before being associated with operators. For certain operations, however, the right-hand operand is evaluated if and only if the left-hand operand has a certain value. These operations are called short-circuit operations. The binary logical operations and, or, nand, and nor defined for operands of types BIT and BOOLEAN are all short-circuit operations; furthermore, these are the only short-circuit operations.

[...]

NOTE 2—A user-defined operator that has the same designator as a short-circuit operator (i.e., a user-defined operator that overloads the short-circuit operator) is not invoked in a short-circuit manner. Specifically, calls to the user-defined operator always evaluate both arguments prior to the execution of the function.

对于 or 运算符,如果第一个操作数为真,则不会计算第二个操作数。
对于 and 运算符,如果第一个操作数为假,则不会计算第二个操作数。


我认为 std_logic 没有列出,这是在合并 IEEE 标准时犯的一个错误。 1164 到 IEEE 标准。 VHDL-2008 为 1076。