2013-06-02 45 views
0

我有以下問題: 我需要乘,並添加各種std_logic_vectors並獲得結果,可以是否定的或積極的。然後我必須檢查結果:1.如果它是負值,我應該給它一個零值; 2.如果它大於255我應該給它一個值255; 3.如果它在0到255之間,它應該保持不變。 我正在使用8位std_logic向量。結果存儲在16位std_logic_vector中(因爲我有乘法和加法,所以這個值可以大於2^8(255)。所以,如果你有任何想法,請幫助。我不知道如何使用有符號的,無符號的值,因爲在我的情況下,我必須使用兩者,例如,我乘以-1,4等等 例如,我有:結果< = op1 *( - 1)+ op2 * 4 + op3 *( - 2)...我已經寫出了負數作爲整數,所以你知道它們是負數(-1 = x「ff」)。我應該使用哪些庫?以及如何構造if ...那麼... elsif ... then ... else ... end if; construction? 先謝謝了!我真的需要幫助!我想乘以有符號和無符號vhdl

+0

我解決了!謝謝! – fanciulla

+4

安娜,你爲什麼不告訴我們? – Fabrizio

回答

0

如果您使用numeric_std庫,那麼您需要將您的信號向量無論是有符號還是無符號。整數常量sho也不錯。

如果信號可以是有符號的或無符號的(取決於另一個控制信號),並且您打算只推斷出一個乘法器模塊,那麼一個簡單的技巧可能會有所幫助:密鑰是將總是有符號的乘法運算,但多用一個位操作數。附加位是由簽名擴展(複製符號位)或零擴展(無符號操作數)生成的。所以新的一點,它是一個簡單的「is_signed」控制信號和MSB位。我在一個用於FPGA的通用ALU中使用了它。

對於正8位數值的限制,我認爲最好在簽名結果上這樣做。