我正在研究SHA-256哈希函数的VHDL实现。
我有一些32位unsigned
信号定义如下:
SIGNAL a, b : UNSIGNED (31 downto 0);
在SHA-256算法的规范中,它表示必须以2 ^ 32的模式执行加法,以便在溢出时保留32位大小。现在,根据this问题的答案,听起来溢出已经用VHDL中的模块化添加处理了:
没有溢出处理,溢出进位就丢失了。因此,结果只是您的操作模2 ^ MAX的整数结果。
我有两个问题:
MAX = 31
这也意味着我在a
和b
执行的任何添加操作都将使用2 ^ 31进行修改? 答案 0 :(得分:4)
你对unsigned(31 downto 0)
没问题。您引用的帖子中的2^MAX
是错误的,应该是2^length
。 31 downto 0
的长度为32。
考虑一下,31 downto 0
可以表示0到2 ^ 32-1之间的数字,如果你可以代表更大的数字,那么任何对该范围的添加都是模2 ^ 31是没有多大意义的!
我不确定我理解你的第二个问题,但是加法模2 ^ 32产生的结果范围为0到2 ^ 32-1。 2 ^ 32是非法的,因此你无法用无符号代表它。