[VHDL] Inkrementieren eines std_logic_vectors

Gast #3274133
Lesenswert?

Ich will einen std_logic_vector + 1 in einer Testbench rechnen.
Normalerweise sollte ja einfach diese Programmzeile das Problem lösen:

A <= std_logic_vector(unsigned(A) + 1;

Dabei kommt jedoch zuerst 0000...000X und dann nach einer weiteren 
Clockschaltung XXXX...XXXX heraus.

Ich benutze folgende Pakete:
IEEE.std_logic_1164.all
IEEE.std_logic_unsigned.all
IEEE.std_logic_textio.all
IEEE.std_logic_numeric_std.all
std.textio.all
Gast #3274173
Lesenswert?

Tandrael schrieb:
> Tandrael schrieb:
>> Jetzt bekomme ich einen Fehler während des Checks, und zwar kennt
>> er
>> angeblich keine Definition für "+".
>
> Ich habe mich geirrt. Ich bekomme jetzt in der Simulation die ganze Zeit
> nur Us.

Hast du den Vector überhaupt initialisiert?
Gast #3274198
Lesenswert?

[vhdl]
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.STD_LOGIC_TEXTIO.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE STD.TEXTIO.ALL;

ENTITY testbench IS

END testbench;

ARCHITECTURE testbench_arch OF testbench IS

COMPONENT prakt2

PORT (
A: in std_logic_vector (31 downto 0);
B: in std_logic_vector (31 downto 0);
F: in std_logic_vector (2 downto 0);
Y: out std_logic_vector (31 downto 0);
Clock: in std_logic
);

END COMPONENT;

--develop signals to stimulate

SIGNAL A : std_logic_vector (31 downto 0) := (31 downto 0 => '0');
SIGNAL B : std_logic_vector (31 downto 0) := (31 downto 0 => '0');
SIGNAL F : std_logic_vector (2 downto 0) := (2 downto 0 => '0');
SIGNAL Y : std_logic_vector (31 downto 0) := (31 downto 0 => '0');
SIGNAL Clock : std_logic := '0';
SIGNAL V : std_logic_vector (31 downto 0) := (31 downto 1 => '0', others 
=> '1');

--UUT means unit under test

BEGIN

UUT : prakt2

--map signals on right to entitys on the left

PORT MAP (
A => A,
B => B,
F => F,
Y => Y,
Clock => Clock
);

signal_Clock: process

begin
   wait for 1 ns;
   Clock <= NOT Clock;
end process;

signal_A: process(Clock)

begin
   if rising_edge(Clock) then
       A <= std_logic_vector(unsigned(A) + 1);
   end if;
end process;

END testbench_arch;
[vhdl]
Gast #3274540
Lesenswert?

Tandrael schrieb:
> SIGNAL A : std_logic_vector (31 downto 0) := (31 downto 0 => '0');
> SIGNAL B : std_logic_vector (31 downto 0) := (31 downto 0 => '0');
> SIGNAL F : std_logic_vector (2 downto 0) := (2 downto 0 => '0');
> SIGNAL Y : std_logic_vector (31 downto 0) := (31 downto 0 => '0');
> SIGNAL Clock : std_logic := '0';
> SIGNAL V : std_logic_vector (31 downto 0) := (31 downto 1 => '0', others
> => '1');

kann es sein, dass deine Initialisierung (31 downto 0 => '0') usw. 
schief geht? Ich habe das so noch nie gesehen. Ich wuerde z.B. 
schreiben:
1
...
2
SIGNAL Y : std_logic_vector (31 downto 0) := (others => '0'); 
3
...
4
SIGNAL V : std_logic_vector (31 downto 0) := (0 => '1', others => '0');

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren