我建議,除非您嘗試三態信號模式,不使用STD_LOGIC和std_logic_vector - 我認爲是一種邪惡的。而是使用未解析的std_ulogic和std_ulogic_vector。這有利於在編譯期間檢測對未解析信號的多個分配。通過解析信號,您可以在模擬或合成後期檢測到錯誤。
缺點:這個建議是不是很常見,並使用與STD_LOGIC第三方邏輯可能需要一些類型轉換。
對於std_ulogic_vector的算術使用std_numeric。然後需要在操作之前將其轉換爲signed或unsigned並將結果轉換回std_ulogic_vector。對於未解決的信號,沒有標準的ieee.std_ulogic_unsigned庫。
adder_result <= std_ulogic_vector(unsigned(operant1) + unsigned(operant2)) ;
increment <= std_ulogic_vector(unsigned(operant) + 1) ;
整數,自然,正一方和無符號和正負號之間的區別是表示法。 有符號和無符號是std_logic_vector的子類型,更像是std_logic線束(或更精確的數組)。
整數類型是一個數字的數學表示。它們通常更多地用於泛型,生成循環和數組索引。但有時合成也可以爲算術單元處理它們。
那麼只要使用整數也沒有問題呢? – 2011-05-29 09:49:04
@Emil。這是正確的(當然受到限制的整數子類型)。但是,整數在實踐中有一個(令人煩惱的)32位限制,這意味着您可能更喜歡無符號/有符號的例如如果你擔心參數化或一致性。 – 2011-05-29 10:05:40
Nitpick(我知道揚知道這一點,但我會指出它的完整性):整數由標準保證是「不完全32位」 - 他們從 - ((2 ** 31)-1)到+((2 ** 31)-1)。許多供應商確實提供了完整的int32_t範圍,但不能保證:( – 2011-05-30 16:15:12