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個問題:
- 在我的情況下,
MAX = 31
這是否意味着,任何加法運算我對a
和b
執行將用2^31改裝成的? - 我需要執行加模2^這顯然沒有意義,因爲我正在使用32位數字和2^32是一位太大。那麼是不是暗示我實際上應該用2^?
因此,VHDL確實會考慮將mod 2^32應用於添加32位無符號數的結果,我不應該明確執行它嗎? –
是的,VHDL中無符號加法/減法的默認行爲是模數。非模添加或溢出檢測實際上比較困難,雖然不是很多。 –
計算機的整數運算在*殘餘類環*上工作。計算機不計算mod 2^32。這只是丟棄位31以上的所有位的結果。或者換句話說,因爲32是2的冪 - mod 2^32等於位0到31的低32位:)。 – Paebbels