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
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
danke für die Antwort, also, wie ich verstanden habe, muss ich die Breite meiner konstant auf eine mehr ändern – Kooss