我正在研究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的整数结果。
我有两个问题:
MAX = 31
这是否意味着,任何加法操作我执行a
,并b
会用2 ^ 31改装成的? 你对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是非法的,因此可以用未签名表示它是很好的。