ISE Webpack 11 - Testbenchprobleme

Gast #1296128
Lesenswert?

Hallo zusammen!

Ich habe einen einfachen 4-Bit-Zähler mit D-FF und Halbaddierern mit dem 
Webpack erstellt.

Wollte das ganze mit dem Simulator testen, wozu ich eine Testbench in 
VHDL erstellt habe, bzw. von der Software erstellen ließ.

Wenn ich die Simulation starte, funktioniert lediglich die clock. Alle 
anderen Ausgänge bleiben auf 'U' (unassigned nehme ich an?)

Ich hoffe jemand kann mir weiterhelfen, vielen Dank schonmal!

Hier der Zähler und die Testbench:

entity f_bit_counter is
    Port ( clock : in  STD_LOGIC;
           Qa : inout  STD_LOGIC;
           Qb : inout  STD_LOGIC;
           Qc : inout  STD_LOGIC;
           Qd : inout  STD_LOGIC);
end f_bit_counter;

architecture Behavioral of f_bit_counter is

component half_adder

  port (a, b : in std_logic;
      sum, carry : out std_logic);
end component;

component d_ff

  port (d, clock : in std_logic;
      q : out std_logic);
end component;

signal Qan1, Qbn1, Qcn1, Qdn1,
      c_a, c_b, c_c, c_d : std_logic;

begin

ha_a : half_adder port map ( a => Qa, b => '1', sum => Qan1, carry => 
c_a );
ha_b : half_adder port map ( a => Qb, b => c_a, sum => Qbn1, carry => 
c_b );
ha_c : half_adder port map ( a => Qc, b => c_b, sum => Qcn1, carry => 
c_c );
ha_d : half_adder port map ( a => Qd, b => c_c, sum => Qdn1, carry => 
c_d );

d_ff_a : d_ff port map ( d => Qan1, clock => clock, q => Qa );
d_ff_b : d_ff port map ( d => Qbn1, clock => clock, q => Qb );
d_ff_c : d_ff port map ( d => Qcn1, clock => clock, q => Qc );
d_ff_d : d_ff port map ( d => Qdn1, clock => clock, q => Qd );

end Behavioral;

ENTITY testbench_counter IS
END testbench_counter;

ARCHITECTURE behavior OF testbench_counter IS

    -- Component Declaration for the Unit Under Test (UUT)

    COMPONENT f_bit_counter
    PORT(
         clock : IN  std_logic;
         Qa : INOUT  std_logic;
         Qb : INOUT  std_logic;
         Qc : INOUT  std_logic;
         Qd : INOUT  std_logic
        );
    END COMPONENT;


   --Inputs
   signal clock : std_logic := '0';

  --BiDirs
   signal Qa : std_logic;
   signal Qb : std_logic;
   signal Qc : std_logic;
   signal Qd : std_logic;

   -- Clock period definitions
   constant clock_period : time := 1us;

BEGIN

  -- Instantiate the Unit Under Test (UUT)
   uut: f_bit_counter PORT MAP (
          clock => clock,
          Qa => Qa,
          Qb => Qb,
          Qc => Qc,
          Qd => Qd
        );

   -- Clock process definitions
   clock_process :process
   begin
    clock <= '0';
    wait for clock_period/2;
    clock <= '1';
    wait for clock_period/2;
   end process;


   -- Stimulus process
   stim_proc: process
   begin
       hold reset state for 100ms.
      wait for 100ms;

      wait for clock_period*10;

      -- insert stimulus here

      wait;
   end process;

END;
Gast #1299359
Lesenswert?

danke für die Antwort!

Ich habe jetzt anstelle der inout ports signals genommen.
Wie sollte denn beispielhaft ein Stimulus auf die Eingänge aussehen?

Bin recht neu bei VHDL und habe noch so meine Probleme. Wäre super, wenn 
jemand zu obigen einen Vorschlag machen könnte.

Oder kennt jemand eine Quelle in der Testbenches ausführlich erklärt 
werden? Habe bisher nichts wirklich brauchbares gefunden (und eigentlich 
schon viel gesucht)

Tobias
Moderator (Firma: Titel) Persönliche Seite #1299389
Lesenswert?

> Bin recht neu bei VHDL und habe noch so meine Probleme.
Lies mal das Buch "VHDL Synthese" von Reichardt/Schwarz ISBN: 3486581929

> Oder kennt jemand eine Quelle in der Testbenches ausführlich erklärt
> werden?
Dir reicht vorerst eine oberflächliche, dafür aber praxisnahe 
Betrachtung des Themas. Im o.g. Buch ist das enthalten.
Gast #1302243
Lesenswert?

Hallo zusammen!

Um nochmal auf die obige Frage von mir zurückzukommen:

Ich kriege einfach keine Simulation für den 4bit-Zähler zum laufen. Ich 
habe jetzt schon einiges gelesen, wie eine Testbench funktioniert etc. 
ist mir auch klar.

Ich habe auch die einzelnen Komponenten getestet mit einer Simulation 
(also das D-FF und den Halbaddierer).

Wenn ich die ganze Schaltung testen will, bleiben jedoch immer alle 
Werte auf 'U'. Langsam verzweifle ich daran ;-)

Kann jemand helfen?

Vielen Dank!

Hier die aktuelle Testbench:

ENTITY testbench IS
END testbench;

ARCHITECTURE behavior OF testbench IS

    -- Component Declaration for the Unit Under Test (UUT)

    COMPONENT f_bit_counter
    PORT(
         clock : IN  std_logic;
         Qa : OUT  std_logic;
         Qb : OUT  std_logic;
         Qc : OUT  std_logic;
         Qd : OUT  std_logic
        );
    END COMPONENT;


   --Inputs
   signal clock : std_logic := '0';

   --Outputs
   signal Qa : std_logic := '0';
   signal Qb : std_logic := '0';
   signal Qc : std_logic := '0';
   signal Qd : std_logic := '0';

   -- Clock period definitions
   constant clock_period : time := 1us;

BEGIN

  -- Instantiate the Unit Under Test (UUT)
   uut: f_bit_counter PORT MAP (
          clock => clock,
          Qa => Qa,
          Qb => Qb,
          Qc => Qc,
          Qd => Qd
        );

   -- Clock process definitions
   clock_process :process
   begin
    clock <= '0';
    wait for clock_period/2;
    clock <= '1';
    wait for clock_period/2;
   end process;


   -- Stimulus process
   stim_proc: process
    begin

    wait for 100us;

      wait for clock_period*10;

    Qa <= Qa;
    Qb <= Qb;
    Qc <= Qc;
    Qd <= Qd;

     end process;

END;
(Firma: www.dossmatik.de) #1303063
Lesenswert?

Tobias schrieb:
> Hallo!
> Um ISIM zu starten musst du Links im "Design" Panel unter "Sources
> for..."
> "Behavioral Simulation" auswählen. Da kannst du dann (wenn du eine
> Testbench erstellt hast) unter Processes unter anderem "Run simulation"
> auswählen.
>
> Tobias

Hallo Tobias,

ich kann es einfach nicht finden,
kannst du mir einen Screenshot senden. Es ist als bin ich bla.
Moderator (Firma: Titel) Persönliche Seite #1310907
Lesenswert?

Tobias schrieb:
> hier sind jetzt die aktuellen Dateien mit dem vhdl-Code.
Dein and2 muß erst mal andtwo heißen.

Und dann sollte noch das d_ff initialisiert werden:
1
entity d_ff is
2
    Port ( D : in  STD_LOGIC;
3
           clock : in  STD_LOGIC;
4
           Q : out  STD_LOGIC := '0');
5
end d_ff;
Dann gehts (Screenshot)  ;-)

EDIT:
Alternativ auch so:
1
entity d_ff is
2
    Port ( D : in  STD_LOGIC;
3
           clock : in  STD_LOGIC;
4
           Q : out  STD_LOGIC);
5
end d_ff;
6

7
architecture Behavioral of d_ff is
8
signal q_loc : std_logic := '0';
9
begin
10

11
 process (clock)
12
 begin
13
   if clock'event and clock='1' then  
14
      q_loc <= D;
15
   end if;
16
   Q <= q_loc;
17
 end process;
18

19
end Behavioral;
Angehängte Dateien:

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