VHDL immer Variablen auf U in der Simulation

OP #7562790
Lesenswert?
• ▲
▼

Hey ich bin neu im VHDL Gebiet und wollte ein halbaddierer bauen:

1
library ieee;
2
use ieee.std_logic_1164.all;
3

4
entity halfadder is
5
port(
6
  a, b : in std_logic;
7
  sum, carry : out std_logic
8
);
9
end halfadder;
10

11
architecture behavioral of halfadder is
12
begin
13
  sum <= a xor b;
14
  carry <= a and b;
15
end behavioral;

Bis dahin ist es soweit kein Problem, jedoch wenn ich meine Testbench:

1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use std.env.finish;
4
entity halfadder_tb is
5
end halfadder_tb;
6

7
architecture Behavioral of halfadder_tb is
8

9

10
signal a_sig : std_logic := '0';
11
signal b_sig : std_logic := '0';
12
signal sum_sig : std_logic := '0';
13
signal carry_sig : std_logic := '0';
14

15

16

17
  component halfadder is
18
    Port(
19
  a, b : in std_logic;
20
  sum, carry : out std_logic
21
);
22
  end component;
23

24

25
begin
26
  -- Instantiate the Halfadder
27
 dut: halfadder port map (
28
    a => a_sig,
29
    b => b_sig,
30
    sum => sum_sig,
31
    carry => carry_sig
32
  );
33

34
  -- Testbench
35
 test_pattern_gen : process begin
36
    -- Corner Case 1: A = '0', B = '0'
37
    a_sig <= '0';
38
    b_sig <= '0';
39
    wait for 10 ns;
40
    assert sum_sig ='0';
41
    assert carry_sig ='0';
42

43
    -- Corner Case 2: A = '1', B = '0'
44
    a_sig <= '1';
45
    b_sig <= '0';
46
    wait for 10 ns;
47
    assert sum_sig ='1';
48
    assert carry_sig ='0';
49
    -- Corner Case 3: A = '0', B = '1'
50
    a_sig <= '0';
51
    b_sig <= '1';
52
    wait for 10 ns;
53
    assert sum_sig ='1';
54
    assert carry_sig ='0';
55
    -- Corner Case 4: A = '1', B = '1'
56
    a_sig <= '1';
57
    b_sig <= '1';
58
    wait for 10 ns;
59
    assert sum_sig ='0';
60
    assert carry_sig ='1';
61
    -- Halt simulation
62
  end process;
63
end Behavioral;

ausführe sind meine Variablen nie initialisiert und ich bekomme nur eine Orangene Simulation. DAnke im voraus.

Angehängte Dateien:
Persönliche Seite #7564139
Lesenswert?
• ▲
▼

Du solltest entweder in der Simulation einen Reset einbauen und zwar so, wie er real auch vorliegt und schauen, ob dann alles läuft - oder die Simulation mit den Init-Werten laden, die in den Registern vorliegen. Wenn das nicht determiniert ist, kann man das durch Variationsrechnung durchfahren - macht natürlich niemand.

Am Besten ist es dann, man lädt mit einem Prozess, der einmal gestartet wird und dann stoppt einmal alle Variablen und Signale so, wie sie im FPGA z.B. durch Init vorbelegt werden und den Rest mit worst case.

Ich mache es so, dass die INITs im VHDL stehen und alles, was einen ändernden Zustand haben kann, fest belegt. Das ist zwar technisch nicht besser oder sicherer, erspart aber nutzlose Simulationen von Zuständen, die keiner braucht. Die Zustandspeicher und Register, die Auswirkungen auf die Ausgänge haben, bekommen einen Reset. Alles was rechnet und "einschwingt" bekommt nichts dergleichen. Damit kann man sehen, wie die (und DASS!) dies "U"s langs aus dem System verschwinden, wenn man es richtig getimed hat.

#7564288
Lesenswert?
• ▲
▼

Justus B. schrieb:

library ieee; use ieee.std_logic_1164.all; entity halfadder is port( a, b : in std_logic; sum, carry : out std_logic ); end halfadder; architecture behavioral of halfadder is begin sum <= a xor b; carry <= a and b; end behavioral;

Jürgen S. schrieb:

solltest entweder in der Simulation einen Reset einbauen

Wo schließe ich bei einem Halfadder den Reset an? Außerdem funktioniert der Code von Justus. Er hatte nur versehentlich das DUT statt der Testbench simuliert...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.