0
我正在研究SHA-256散列函数的VHDL实现。 我有定义为这样的一些32位unsigned
信号:VHDL modulo 2^32 addition
SIGNAL a, b : UNSIGNED (31 downto 0);
的SHA-256算法的规范内,它说除了必须以保留32位大小进行模2^32溢出的情况。现在,根据答案this问题,这听起来像溢出已经与模加在VHDL处理:
没有溢出处理,溢流进位简单地丢失。因此,结果就是您的操作模2^MAX的整数结果。
我有2个问题:
- 在我的情况下,
MAX = 31
这是否意味着,任何加法运算我对a
和b
执行将用2^31改装成的? - 我需要执行加模2^这显然没有意义,因为我正在使用32位数字和2^32是一位太大。那么是不是暗示我实际上应该用2^?
因此,VHDL确实会考虑将mod 2^32应用于添加32位无符号数的结果,我不应该明确执行它吗? –
是的,VHDL中无符号加法/减法的默认行为是模数。非模添加或溢出检测实际上比较困难,虽然不是很多。 –
计算机的整数运算在*残余类环*上工作。计算机不计算mod 2^32。这只是丢弃位31以上的所有位的结果。或者换句话说,因为32是2的幂 - mod 2^32等于位0到31的低32位:)。 – Paebbels