当整个条件为真时检查 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中的And
、nand
、or
和nor
运算符在某些情况下是短路运算符。行为取决于操作数类型。
您使用的类型 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。
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 语句来执行此操作。
And
、nand
、or
和nor
运算符在某些情况下是短路运算符。行为取决于操作数类型。
您使用的类型 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。