【发布时间】:2014-10-07 08:57:16
【问题描述】:
VHDL-2008 引入了归约运算符,它接收一维逻辑元素数组并输出单个位值。引用自验证视野卷。 8 2012 年 10 月 3 日:
VHDL-2008 创建 AND、OR、NOR、NAND、XOR 和 XNOR 的一元版本 对于逻辑数组类型(bit_vector,std_logic_vector,...)。这 运算符应用于数组参数的每个元素(a 归约运算)并产生一个元素结果。一元运算符 与其他运算符(**、ABS 和 不是)。
机制在 LRM [9.2.2] 中进行了解释,但引发这个问题的是 [9.1] 中的注释 2:
注意 2 - 涉及一元条件的表达式的语法 运算符或一元逻辑运算符与任何其他运算符的组合 运算符 要求一元运算符及其操作数是 括号表达式。例如,表达式“(和 A)和 B”和“A and (and B)”是合法的,而“and A and B”的表述是合法的 而“A and B”不是。
不过,ModelSim 和 ActiveHDL 很乐意接受这一点:
variable B, Y: bit;
variable A: bit_vector(3 downto 0);
...
Y := and A and B; -- Should be illegal according to Note 2 [9.1]
还有这个:
variable A, Y: bit;
variable B: bit_vector(3 downto 0);
...
Y := A and and B; -- Should be illegal according to Note 2 [9.1]
现在,如果我们继续阅读 LRM,[9.2.2] 中的另一条注释提供了一些线索,说明它为什么有效:
注意——所有的二元逻辑运算符都属于 具有最低优先级的运算符。一元逻辑运算符 属于优先级最高的一类运算符
根据这个注释,该工具理解上述示例中的表达式应该没有问题。
所以,问题是:我们真的需要像 [9.1] 中的注释 2 所建议的那样写括号,还是我们可以依赖运算符优先级作为 [9.2.2] 中的注释建议?
【问题讨论】:
-
您知道,您只是缺乏自己回答这些问题的参考资源,并且正在迅速掌握 VHDL 语言(或至少是标准)。 You might consider an association with VASG/P1076, where individuals can contribute, IEEE membership only required to hold an (elected) office.您有能力为标准流程做出贡献。
-
@DavidKoontz 感谢您的信任投票,我目前正在对一个学术项目的标准进行调查。完成后我会尽快调查 VASG。
标签: operators vhdl operator-precedence unary-operator