Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 如何创建大于2³的数字标准符号值¹-1._Vhdl - Fatal编程技术网

Vhdl 如何创建大于2³的数字标准符号值¹-1.

Vhdl 如何创建大于2³的数字标准符号值¹-1.,vhdl,Vhdl,在下面的类型和常量声明中,数组中的最后一个值实际上不是2**35-1,因为大于2**31-1的整数不是标准的VHDL(2002) ieee库; 使用ieee.numeric_std.all; --删除样板。。。 恒定X_尺寸:自然:=40;——真的,任何大于32的东西 类型x_数组是有符号的数组(自然范围); 常量XS:x_数组=( 到_签名(0,X_大小), 至_签名(1,X_尺寸), 要签名(2**35-1,X_大小)--不可能! ); 我不能对有符号(2,X_大小)**35-1执行,因为

在下面的类型和常量声明中,数组中的最后一个值实际上不是
2**35-1
,因为大于
2**31-1
的整数不是标准的VHDL(2002)

ieee库;
使用ieee.numeric_std.all;
--删除样板。。。
恒定X_尺寸:自然:=40;——真的,任何大于32的东西
类型x_数组是有符号的数组(自然范围);
常量XS:x_数组=(
到_签名(0,X_大小),
至_签名(1,X_尺寸),
要签名(2**35-1,X_大小)--不可能!
);

我不能对有符号(2,X_大小)**35-1执行
,因为在有符号的
上未定义幂运算。我讨厌键入完整的数组,因为它看起来很笨重,
X\u大小
将来可能会改变。那么,我如何在这里创造我想要的价值呢?有没有比逐字输入40
0
s和
1
s更好的方法?

根据值的不同,有几种方法

  • 使用十六进制文字适用于任意数字,并将节省一点空间:
    x“1fffffff”
  • 聚合赋值提供了一种指定模式的方法(例如,对于任何大小,一个0后跟所有1):
    (X_size-1降到35=>'0',其他=>'1')
    -请注意,如果您尝试将其与其他运算符或函数组合,编译器将无法推断出所需的向量大小。您需要执行以下操作:
    (X_SIZE-1向下至35=>“1”,35向下至0=>“0”)
    。在这一点上,您可能不会节省太多空间,但取决于您正在做什么,这可能会使您的意图比文字更清晰
  • 您还可以构造所需类型的单元,并将其左右移动:
    shift\u left(到\u unsigned(1,X\u SIZE),35)-1
  • library ieee;
    use ieee.numeric_std.all;
    
    -- Boilerplate elided...
    
    constant X_SIZE : natural := 40; -- Really, anything greater than 32
    type x_array is array(natural range <>) of signed;
    
    constant XS : x_array := (
        to_signed(0, X_SIZE),
        to_signed(1, X_SIZE),
        to_signed(2**35 - 1, X_SIZE) -- Not possible!
    );