gpt4 book ai didi

standards - 是否为 VHDL numeric_std 有符号/无符号定义了溢出

转载 作者:行者123 更新时间:2023-12-02 22:18:05 24 4
gpt4 key购买 nike

如果我有一个包含值 2**MAX - 1unsigned(MAX downto 0),VHDL (87|93|200X) 标准定义了什么当我将其加一时会发生吗? (或者,类似地,当我从零减一时?)

最佳答案

简短回答:

没有溢出处理,溢出进位只是丢失。因此,结果只是运算的整数结果模 2^MAX

更长的答案:

numeric_std封装是标准封装但它不是Core VHDL标准(87,93,200X)。供引用:numeric_std.vhd

+运算符最终调用 ADD_UNSIGNED (L, R : unsigned; C : std_logic)函数(使用 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;

如您所见,如果 CBIT='1' 则会发生“溢出” (进位)为i = L_left 。结果位RESULT(i)正常计算,最后一个进位机器人值被忽略。

关于standards - 是否为 VHDL numeric_std 有符号/无符号定义了溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11769754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com