det*_*tly 5 standards integer-overflow vhdl
如果我有一个unsigned(MAX downto 0)包含该值2**MAX - 1,那么VHDL(87 | 93 | 200X)标准是否定义了当我将其递增1时会发生什么?(或者,类似地,当我从零减去一个?)
简短回答:
没有溢出处理,溢出进位就丢失了.因此,结果只是您的操作模2 ^ MAX的整数结果.
更长的回答:
该numeric_std软件包是标准软件包,但它不是核心VHDL标准(87,93,200X).供参考:numeric_std.vhd
最后+操作员调用ADD_UNSIGNED (L, R : unsigned; C : std_logic)函数(with C = '0').请注意,任何整数/自然操作数首先转换为unsigned.
该函数的定义是:
function ADD_UNSIGNED (L, R : unsigned; C : std_logic) return unsigned is
constant L_left : integer := L'length-1;
alias XL : unsigned(L_left downto 0) is L;
alias XR : unsigned(L_left downto 0) is R;
variable RESULT : unsigned(L_left downto 0);
variable CBIT : std_logic := C;
begin
for i in 0 to L_left loop
RESULT(i) := CBIT xor XL(i) xor XR(i);
CBIT := (CBIT and XL(i)) or (CBIT and XR(i)) or (XL(i) and XR(i));
end loop;
return RESULT;
end ADD_UNSIGNED;
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,如果CBIT='1'(携带位)发生"溢出" i = L_left.结果位RESULT(i)正常计算,最后一个进位bot值被忽略.