在以下情况下,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)的值?
答案 0 :(得分:0)
在详细过程中,您将出现错误。但是通常在编写VHDL代码时,不需要使用这种技巧。
您是否要使用此代码解决构想问题?例如,如果只想使用vector(3)且vector大于3,则可以使用if ... generate语句或if ... then语句来完成。
答案 1 :(得分:0)
And
,nand
,or
和nor
运算符是短路运算符。行为取决于操作数类型。
您正在使用std_logic
类型,该类型未列出:
9.2操作员-常规
通常,表达式中的操作数在与运算符关联之前先进行求值。对于某些 但是,只有在左侧操作数具有特定值时,才对右侧操作数求值 值。这些操作称为短路操作。二进制逻辑运算和,或,与,和 也没有为 BIT 和 BOOLEAN 类型的操作数定义都是短路操作;此外,这些 是唯一的短路操作。[...]
注2-与短路运算符具有相同代号的用户定义的运算符(即,用户定义的运算符 不会以短路方式调用(使短路运算符过载的)。具体来说,是调用用户定义的 操作员总是在执行函数之前先评估两个参数。
对于or
运算符,如果第一个操作数为true,则不会计算第二个操作数。
对于and
运算符,如果第一个操作数为false,则不会计算第二个操作数。
我认为std_logic
并未列出,这是合并IEEE Std时犯的一个错误。 1164年成为IEEE标准。 VHDL-2008为1076。