VHDL 'range => '0' 命令



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

如果 ( 元素 1 = (元素 1'范围 => '0')) 则

假设 element1 是 4 位std_logic_vector,这个条件在说什么?在我拥有的几本书或谷歌上,我找不到直接的答案。谢谢!

也就是说,创建一个临时数组聚合指定范围的大小,每个元素都设置为"0"。无论这个范围是什么。

防止元素1尺寸发生变化时的事故。

每次你看到像3 downto 0这样的幻数时,for i in 0 to 3 loop ...试着用这个或等价物替换它们,因为for i in element1'range loop ...永远不会循环到数组的末尾。

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

如果element1只包含'0',则条件将返回 true。这是一种不依赖于element1大小的编写方式。在这种情况下,element1'range 3 downto 0 。例如,如果要将其更改为 5 downto 0 ,则if条件仍然有效。

(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 等待语句,条件的 BNF,9。表达式,9.1 一般,中间目标主的 BNF 允许它们)。

最新更新