Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VHDL:如何解析此语句:类型foo的范围是-(2**30)到2**30;?_Vhdl_Exponentiation - Fatal编程技术网

VHDL:如何解析此语句:类型foo的范围是-(2**30)到2**30;?

VHDL:如何解析此语句:类型foo的范围是-(2**30)到2**30;?,vhdl,exponentiation,Vhdl,Exponentiation,我在处理以下类型声明时遇到问题: 类型foo的范围为-(2**30)到2**30 对于指数化,有两种可能的解释需要考虑: 函数“**”(universal\u integer,integer)返回universal\u integer 函数“**”(整数,整数)返回整数 (有使用实数的解释,但我们可以很容易地拒绝这些解释,因为第一个参数是整数。) 由于求幂运算的第二个操作数必须是整数,因此使用任一替代方法都需要隐式转换。因此,我们不能以需要隐式转换为理由取消任何一种选择的资格 类型声明的边界必须

我在处理以下类型声明时遇到问题:

类型foo的范围为-(2**30)到2**30

对于指数化,有两种可能的解释需要考虑:

函数“**”(universal\u integer,integer)返回universal\u integer

函数“**”(整数,整数)返回整数

(有使用实数的解释,但我们可以很容易地拒绝这些解释,因为第一个参数是整数。)

由于求幂运算的第二个操作数必须是整数,因此使用任一替代方法都需要隐式转换。因此,我们不能以需要隐式转换为理由取消任何一种选择的资格

类型声明的边界必须是某种整型,但它们不必是同一类型。如果没有任何进一步的约束,我会拒绝这个类型声明,因为它是不明确的

这似乎是一个求幂的怪癖。如果我有:

类型foo的范围为0到2*30

对于“*”还有两种选择。然而:

函数“*”(universal\u integer,universal\u integer)返回universal\u integer

不需要隐式转换,因此我们可以使用它并拒绝另一个

此外:

常数K:整数:=2**30

由于额外的约束,结果类型必须是整数,因此也可以正常工作

但是类型定义和指数运算的结合剥夺了我们进行选择的足够信息

既然这个类型定义在其他实现中也可以使用,那么我还缺少什么呢

代表我的实施者。。 肯

类型foo的范围为-(2**30)至2**30

有两个合格的“**”函数实现了求幂运算符

9.2.8其他操作员

为每个整数类型和每个浮点类型预定义了求幂运算符**。在这两种情况下,右操作数(称为指数)都是预定义的整数类型

整数指数的幂运算相当于左操作数自身从左到右重复乘以指数绝对值所指示的次数;如果指数为负,则结果为指数绝对值的倒数。只有浮点类型的左操作数才允许使用负指数进行幂运算。按零指数求幂得到值1。浮点型值的幂运算是近似值

预定义类型的预定义运算符在包标准中显示为注释。这两种方法适用于:

16.3包装标准

--函数“**”(匿名:通用\u整数;匿名:整数)
--返回通用_整数

--函数“**”(匿名:整数;匿名:整数) --返回整数

请注意,右操作数类型为整数。右操作数进行隐式类型转换

在5.2.3整数类型和5.2.3.1概述中可以找到两个原因:

整数类型定义中使用的范围约束的每个边界应是某个整数类型的局部静态表达式,但这两个边界不必具有相同的整数类型。(允许负边界。)

整数文本是匿名预定义类型的文本,在本标准中称为universal_Integer。其他整数类型没有文本。但是,对于每种整数类型,都存在一种隐式转换,将universal_integer类型的值转换为整数类型的相应值(如果有)(见9.3.6)

边界必须是某种整数类型,并且可以包括universal_integer

重载解析上下文根据9.3.6类型转换中的语义选择这两个选项中的哪一个:

在某些情况下,将执行隐式类型转换。仅当操作数是数值文字或属性时,才能应用将universal_integer类型的操作数隐式转换为另一个整数类型,或将universal_real类型的操作数隐式转换为另一个浮点类型,或者,如果操作数是由物理类型的值除以相同类型的值组成的表达式;这种操作数称为可转换通用操作数。当且仅当最内部的完整上下文确定隐式转换的唯一(数字)目标类型,并且没有此转换就没有此上下文的法律解释时,才会应用可转换通用操作数的隐式转换

只有在没有其他法律解释的情况下,才能将universal_integer隐式转换为其他整数类型。这是一种机制,用于防止在解决过载问题时出现两种可能的选择

对于2**30,是否必须隐式转换左操作数?否。是否必须隐式转换正确的操作数?是,两个选项都要求类型为整数。此外,不要求结果是与整数类型定义语义(5.2.3.1)所要求的universal_integer不同的整数类型

看看9.5通用表达式,这里对整数类型的定义还有一个额外的限制:

对于通用表达式运算的求值,以下规则适用。如果结果为universal_integer类型,则操作数和结果的值应位于整数类型的范围内,且实现提供的范围最宽,不包括universal_integer类型本身。如果结果为universal_real类型,则va
constant K: integer := 2 ** 30;
constant K: integer := integer(2 ** 30);