VHDL 'range => '0' 命令

VHDL 'range => '0' command

希望有人能回答我的问题。我在 VHDL 代码中遇到了这个命令,但不确定它到底做了什么。有人可以澄清以下内容吗?

if ( element1 = (element1'range => '0')) then

鉴于 element1 是 4 位 std_logic_vector,这个条件说明了什么?我无法在我拥有的几本书中或 google 上找到直接的答案。 谢谢!

如果 element1 仅包含 '0',则条件 return 为真。这是一种不依赖于 element1 大小的写法。在这种情况下 element1'range3 downto 0。例如,如果您将其更改为 5 downto 0if 条件仍然有效。

意思是,创建一个临时数组聚合指定范围的大小,并将每个元素设置为“0”。无论那个范围是什么。

防止element1大小变化时发生意外。

每次看到 3 downto 0for i in 0 to 3 loop ... 之类的幻数时,请尝试用此或等价物替换它们,因为 for i in element1'range loop ... 永远不会在数组末尾循环。

定义的范围是必要的,因为关系运算符 =(如 <、> 和其他)不会将其参数限制为相同的长度,因此更简单的聚合形式 (others => '0')不起作用,因为它的大小未定义。

(element1'range => '0') 是一个数组聚合,其元素选择范围为 element1,并将这些元素与值 '0' 相关联,创建一个从上下文中获取其类型的复合值 - “=”运算符的左侧(IEEE Std 1076-2008 9.3.3 聚合,9.3.3.3 数组聚合)。

if语句(10.8 If语句)条件element1 = (element1'range => '0')判断element1是否全部'0'以范围独立的方式,相等关系运算符(9.2.3关系运算符) 返回布尔值。

这种评估 element1 值的方法不受 element1 更改声明的影响(6.4.2 对象声明,6.4.2.3 信号声明,6.4.2.4 变量声明,6.5。 2 接口对象声明)。

条件(表达式)的外括号对在 VHDL 中是多余的(10.2 Wait 语句,条件的 BNF,9. 表达式,9.1 通用,中间目标 primary 的 BNF 允许它们)。