VHDL模2 ^ 32加法

时间:2015-06-03 02:20:27

标签: overflow vhdl sha

我正在研究SHA-256哈希函数的VHDL实现。 我有一些32位unsigned信号定义如下:

SIGNAL a, b : UNSIGNED (31 downto 0);

在SHA-256算法的规范中,它表示必须以2 ^ 32的模式执行加法,以便在溢出时保留32位大小。现在,根据this问题的答案,听起来溢出已经用VHDL中的模块化添加处理了:

  

没有溢出处理,溢出进位就丢失了。因此,结果只是您的操作模2 ^ MAX的整数结果。

我有两个问题:

  1. 在我的情况下,MAX = 31这也意味着我在ab执行的任何添加操作都将使用2 ^ 31进行修改?
  2. 我需要执行加法模2 ^ 32 这显然没有意义,因为我使用32位数字而2 ^ 32是一个太大。那么它是否暗示我实际上应该使用2 ^ 31 进行修改?

1 个答案:

答案 0 :(得分:4)

你对unsigned(31 downto 0)没问题。您引用的帖子中的2^MAX是错误的,应该是2^length31 downto 0的长度为32。

考虑一下,31 downto 0可以表示0到2 ^ 32-1之间的数字,如果你可以代表更大的数字,那么任何对该范围的添加都是模2 ^ 31是没有多大意义的!

我不确定我理解你的第二个问题,但是加法模2 ^ 32产生的结果范围为0到2 ^ 32-1。 2 ^ 32是非法的,因此你无法用无符号代表它。