VHDL模2 ^ 32加法

Rya*_*ure 1 overflow sha vhdl

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

SIGNAL a, b : UNSIGNED (31 downto 0);
Run Code Online (Sandbox Code Playgroud)

在SHA-256算法的规范内,它表示必须以2 ^ 32为模执行加法,以便在发生溢出时保留32位大小。现在,根据对这个问题的回答,听起来好像已经通过VHDL中的模块化添加处理了溢出:

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

我有两个问题:

  1. 就我而言,MAX = 31这是否意味着,任何加法操作我执行a,并b会用2 ^ 31改装成的?
  2. 我需要执行模2 ^ 32的加法运算,这显然没有意义,因为我使用的是32位数字,而2 ^ 32太大了。因此,这是否暗示我实际上应该修改2 ^ 31

Jon*_*let 5

你对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是非法的,因此可以用未签名表示它是很好的。