2016-08-12 19 views
-1

Könntest du bitte mir helfen, in vhdl/ich möchte negativen Wert in meinem Code schreiben/ich meine wie -1 Wert.X Wert in vhdl

--onemore 
library ieee; 
use ieee.std_logic_1164.all; 
use IEEE.std_logic_arith.all; 
use ieee.std_logic_unsigned.all; 
entity mapper_3 is 
port ( 
     clk : in std_logic; 
     rst :in std_logic; 
     data_in : in std_logic_vector (4 downto 0); 
     data_out : out std_logic_vector(31 downto 0) 
); 
end mapper_3; 
architecture mapper_3_arch of mapper_3 is 
signal cnt : unsigned(4 downto 0); 
constant zeros : std_logic_vector :="00000"; 
constant zeros_end : std_logic_vector :="000000"; 
constant ones : signed := "1"; 
constant ones_m : signed := "-1"; 
constant zero : signed := "0"; 
signal out_t : std_logic_vector(5 downto 0); 
signal out_t_1 : std_logic_vector(11 downto 0); 
signal out_t_2 : std_logic_vector(17 downto 0); 
signal out_t_3 : std_logic_vector(18 downto 0); 
signal out_t_4 : std_logic_vector(25 downto 0); 
signal out_t_5 : std_logic_vector(31 downto 0); 
begin 
-- counter code 
process (clk, rst) 
begin 
if (rst = '1') then 
    cnt <= (others => '0'); 
elsif rising_edge(clk) then 
cnt <= cnt + 1; 
if cnt = 4 then 
out_t <= zeros & conv_std_logic_vector(ones,1); 
elsif cnt = 9 then 
out_t_1 <= out_t & data_in & conv_std_logic_vector(ones_m,1); 
elsif cnt = 14 then 
out_t_2 <= out_t_1 & data_in & conv_std_logic_vector(ones,1); 
elsif cnt = 15 then 
out_t_3 <= out_t_2 & conv_std_logic_vector(zero,1); 
elsif cnt = 21 then 
out_t_4 <= out_t_3 & conv_std_logic_vector(ones_m,1) & data_in & conv_std_logic_vector(ones,1); 
elsif cnt = 26 then 
data_out <= out_t_4 & zeros_end; 
end if; 
end if; 
end process; 
end mapper_3_arch; 

wenn ich diesen Code in ModelSim simulieren, auf der Position, wo ich versuche -1 zu schreiben, in ModelSim sein Aussehen wie X.Do haben Sie Ideen, wie man schreibt -1 value.Now data_out sieht aus wie 000001data_inXdata_in10X und so weiter/Ich will das anstelle von X, sollte -1/ist es möglich, oder ich verstehe etwas nicht

+0

Der Wert "-1" als Zeichenfolgenliteral, das einen vorzeichenbehafteten Wert darstellt, wird wegen des Metawerts '-' in conv_std_logic_vector in 'X' konvertiert, wobei Sie eine Größe von 1 angeben (was ungerade erscheint, ein vorzeichenbehafteter Wert) wäre mindestens zwei Bits). Siehe Synopsys std_logic_arith Paket conv_std_logic_vector [signed, Ganzzahl return std_logic_vector] und make_binary [signed, Ganzzahl return std_logic_vector]. Es ist nicht klar aus deiner Erzählung, was du versuchst zu tun, und deine Signal- und Entitätsnamen sind nicht informativ. – user1155120

+0

danke für die Antwort, also, wie ich verstanden habe, muss ich die Breite meiner konstant auf eine mehr ändern – Kooss

Antwort

0

der Zweck dieses Codes ist ziemlich unklar für mich.

Sie sollten sich ansehen, wie signierte Zahlen in Binärdarstellung dargestellt werden. Sie können hier beginnen: https://en.wikipedia.org/wiki/Signed_number_representations

Sie können z.B. ein Zeichenbit davor (das wie das "-" ist, mit dem jeder im Dezimalsystem vertraut ist) oder ein 2-Komplement oder irgendein anderes.