在以下类型和常量声明中,数组中的最后一个值实际上不是2**35-1
,因为大于2**31-1
的整数不是标准 VHDL (2002)
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!
);
我不能这样做to_signed(2, X_SIZE)**35 - 1
,因为没有在signed
. 我不愿意输入完整的数组,因为它看起来很笨重,并且X_SIZE
将来可能会改变。那么如何在这里创造我想要的价值呢?有没有比直接输入 40 0
s 和1
s 更好的方法?