2016-09-23 133 views
1

我正試圖在它的二進制補碼中轉換一個std_logic_vector。我正試圖在矢量上執行-2乘法。std_logic_vector的二進制補碼

library ieee; 
use ieee.std_logic_1164.all; 

entity twoscomplement is 
port (x : in std_logic_vector(15 downto 0); 
     y : out std_logic_vector(15 downto 0) 
    ); 
end entity; 

architecture model of twoscomplement is 
signal x_c : std_logic_vector (15 downto 0); 

x_c <= (not(x) +'1')*2 ; -- x_c = -2*x 

end model; 
+0

什麼是您的具體問題?你有錯誤需要處理嗎? – user1155120

+0

你在x_c聲明後缺少'begin'。對於早於2008年使用'use ieee.numeric_std.all;','x_c <= std_logic_vector(shift_left(not unsigned(x)+ 1,1));'的附加使用條款,',其中shift的距離爲1將有一個匹配x的結果長度。對於-2008,使用'ieee.numeric_std_unsigned.all;'和'x_c <= shift_left((不是x + 1),1);'的使用條款。使用「*」會增加結果長度。請參見使用標準軟件包指南IEEE Std 1076-2008 G.3.5.1用2的冪乘以餘數, – user1155120

+3

不要採用'std_logic_vector'的2的補碼。取一個'numeric_std.signed'的2的補碼。 –

回答

0

附加庫

use IEEE.numeric_std.all; 

...內部架構

x_c <= signed(x);