使用VHDL-2019 IEEE规范时
部分。 5.2.3.1。一般

“但是,实现应允许声明任何整数
类型的范围完全包含在–(2 ** 63)和
(2 ** 63)–1(含)。”

(我添加了指数**)

这是否意味着–(2 ** 63)= -9223372036854775808?

在1993年的规范中,它指出-(((2 ** 31)-1)和(2 ** 31)-1)
-2147483647和2147483647

新的VHDL规范在该定义中是否有错误?

最佳答案

更改是故意的。参见LCS2016_026c。您可能会注意到,该范围与编程语言中的64位整数相同。非对称效应来自于二进制补码,这是VHDL工具实现中整数类型的基础,带有十进制的ALU的大铁时代早已淡出。

先前的对称范围与实现无关,VHDL算术语义要求对溢出或下溢进行运行时检测。此更改允许在不使用测试值的情况下基于符号变化而更简单地进行检测,同时以大于64位的通用整数执行算术运算。

增加值范围是为了迫使综合供应商提供比标准先前版本所指定的最小范围更多的支持。效果如何(以及在​​什么实施间隔内)将在 future 某个时候成为历史问题。基于索引范围(IEEE Std 1076-2019 5.3.2.2索引约束和离散范围)和枚举类型的位置对应关系(5.2.2枚举类型,5.2.2.1常规)还有其他影响。从栈大小问题开始,模拟(或合成)具有极高索引值范围的复合对象是不切实际的。行业惯例尚未解决,可能会导致当今的HDL被淘汰。

有关标准语义描述准确性的问题可以向IEEE-SAs VASG小组委员会提出,该小组委员会鼓励有关方面的参与。您将在此处找到参与标准化过程的Stackoverflow vhdl标签定义者。

关于vhdl - VHDL整数定义VHDL-2019的范围是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60044785/

10-13 04:23