2015-06-03 61 views
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個問題:

  1. 在我的情況下,MAX = 31這是否意味着,任何加法運算我對ab執行將用2^31改裝成的?
  2. 我需要執行加模2^這顯然沒有意義,因爲我正在使用32位數字和2^32是一位太大。那麼是不是暗示我實際上應該用2^?

回答

4

你可以用unsigned(31 downto 0)。您引用的帖子中的2^MAX是一個錯誤,應爲2^length31 downto 0的長度爲32.

想一想吧,31 downto 0可以表示0到2^32-1之間的數字,如果可以的話,如果有任何範圍的加法將是模2^31,沒有什麼意義代表更大的數字!

我不確定我是否理解你的第二個問題,但加上modulo 2^32得出的結果範圍爲0到2^32-1。 2^32是非法的,因此你不能用你的無符號代表它。

+0

因此,VHDL確實會考慮將mod 2^32應用於添加32位無符號數的結果,我不應該明確執行它嗎? –

+1

是的,VHDL中無符號加法/減法的默認行爲是模數。非模添加或溢出檢測實際上比較困難,雖然不是很多。 –

+0

計算機的整數運算在*殘餘類環*上工作。計算機不計算mod 2^32。這只是丟棄位31以上的所有位的結果。或者換句話說,因爲32是2的冪 - mod 2^32等於位0到31的低32位:)。 – Paebbels