Forum: FPGA, VHDL & Co. Problem mit Testbench


von shockwaverider (Gast)


Lesenswert?

Hallo Leute,

ich habe folgendes Problem mit einer Testbench:

Ich erzeuge in dieser Testbench in einem Prozess einen 50 MHz Takt, der 
dann einfach in meine Top_Level Entity reingeht. Genauso erzeuge ich zu 
Anfang der Simulation ein Reset-Signal, das auch in die Top Level Entity 
geht. Wenn ich nun aber die Simulation mit ModelSim starte, so kommen 
weder das Clock-Signal, noch das Reset-Signal aus der Testbench im Top 
Level Modul an.
Stattdessen sind die Signale zu Anfang undefiniert und bleiben es auch 
während der gesamten Simulation, wobei man in der Simulation aber sehen 
kann, dass die erzeugenden Signale in der Testbench richtig 
funktionieren, sie werden einfach nicht an die T-L Entity 
weitergeleitet, und ich weiß einfach nicht woran das liegen könnte. 
Vielleicht hat ja einer von euch zufällig eine Idee? Besten Dank.

Hier der Code der T-L Entity:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity lauflicht_top is
  port (
          signal clk50in    : in  std_logic;
    signal test_reset_n  : in  std_logic;
    signal test_ausg_f  : out  std_logic;
    signal test_ausg_s  : out  std_logic
  );
end lauflicht_top;

architecture Behavioral of lauflicht_top is

  component clock_generator
    port (
      CLOCK50_I  : in  std_logic;
      RESET_N    : in  std_logic;
      CLOCK_F    : out  std_logic;
      CLOCK_S    : out  std_logic
    );
  end component;

begin

  clock_gen : clock_generator
    port map (
      CLOCK50_I  =>  clk50in,
      RESET_N   =>  test_reset_n,
      CLOCK_F   =>  test_ausg_f,
      CLOCK_S   =>  test_ausg_s
    );

end Behavioral;

Hier der Code der entspr. Testbench:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;

entity clock_generator_tb_vhd is
end clock_generator_tb_vhd;

architecture behavior of clock_generator_tb_vhd is

component lauflicht_top
port (
  signal clk50in    : in  std_logic;
  signal test_reset_n  : in  std_logic;
  signal test_ausg_f  : out  std_logic;
  signal test_ausg_s  : out  std_logic
);
end component;

  --Inputs
  signal clock50_i_tb   :  std_logic;
  signal reset_n_tb  :  std_logic;

  --Outputs
  signal clock_f_tb   :  std_logic;
  signal clock_s_tb   :  std_logic;

begin

  UUT : lauflicht_top
  port map (
    clk50in    =>  clock50_i_tb,
    test_reset_n  =>  reset_n_tb,
    test_ausg_f  =>  clock_f_tb,
    test_ausg_s  =>  clock_s_tb
  );

  TAKT : process  -- simuliert 50 MHz Takt
  begin
    clock50_i_tb <= '0';
    wait for 10 ns;
    clock50_i_tb <= '1';
    wait for 10 ns;
  end process;

  TB : process
  begin
    -- Wait 100 ns for global reset to finish
    reset_n_tb <= '0';
    wait for 100 ns;
    reset_n_tb <= '1';
    wait for 100 ns;
    wait; -- will wait forever
  end process;

end;

von thomas (Gast)


Lesenswert?

Seltsam, bei mir kommt Clock und Reset am Eingang an. Bist Du sicher, 
dass Du auch den TB simulierst ? ;)

von miha (Gast)


Lesenswert?

TAKT : process  -- simuliert 50 MHz Takt
  begin
    clock50_i_tb <= '0';
    wait for 10 ns;
    clock50_i_tb <= '1';
    wait for 10 ns;
  end process;

du brauchst kein TAKT process zu schreiben. eínfach so:

clock50_i_tb <= not clock50_i_tb after 10ns;

von Peter (Gast)


Lesenswert?

Dann muss die clk aber noch initialisiert werden, weil not U = auch U 
:-)

von shockwaverider (Gast)


Lesenswert?

Hi Leute,

vielen Dank für die Antworten, aber das Problem
hat sich mittlerweile erledigt.

Trotzdem Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.