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

时间:2018-10-26 13:20:15

标签: vhdl standards hdl

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

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

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

(...)

在这种情况下,应该是编译/精化/运行时错误(超出范围),还是如果条件应始终为真(因此无需检查vector(3)的值?

2 个答案:

答案 0 :(得分:0)

在详细过程中,您将出现错误。但是通常在编写VHDL代码时,不需要使用这种技巧。

您是否要使用此代码解决构想问题?例如,如果只想使用vector(3)且vector大于3,则可以使用if ... generate语句或if ... then语句来完成。

答案 1 :(得分:0)

在某些情况下,VHDL中的

Andnandornor运算符是短路运算符。行为取决于操作数类型。

您正在使用std_logic类型,该类型未列出:

  

9.2操作员-常规
  通常,表达式中的操作数在与运算符关联之前先进行求值。对于某些   但是,只有在左侧操作数具有特定值时,才对右侧操作数求值   值。这些操作称为短路操作。二进制逻辑运算和,或,与,和   也没有为 BIT BOOLEAN 类型的操作数定义都是短路操作;此外,这些   是唯一的短路操作。

     

[...]

     

注2-与短路运算符具有相同代号的用户定义的运算符(即,用户定义的运算符   不会以短路方式调用(使短路运算符过载的)。具体来说,是调用用户定义的   操作员总是在执行函数之前先评估两个参数。

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


我认为std_logic并未列出,这是合并IEEE Std时犯的一个错误。 1164年成为IEEE标准。 VHDL-2008为1076。