Undefinierte Zustände vom Tristate

Gast #576124
Lesenswert?
• ▲
▼
Hi, ich Probiere eine inout Kommunikation hinzukriegen, leider habe ich 
undefinierte Zustände, wenn enable auf 0 ist, da sollte inout aber 
eigentlich hochomig sein. Die ganze Datei zu posten wäre zu 
unübersichtlich, hier ist aber eine Vereinfachte Version:
1
library ieee;
2
use ieee.std_logic_1164.all;
3

4
entity tri_io is
5
    port(   clk  : in std_logic;
6
          enable : in std_logic;
7
          
8
          write_s   : out std_logic_vector(3 downto 0);
9
          read_s   : in std_logic_vector(3 downto 0);
10
          bus_s   : inout std_logic_vector(3 downto 0)
11
          
12
          );
13
end tri_io;
14

15
architecture behaviour of tri_io is
16
signal int : std_logic_vector(3 downto 0) := X"2";
17

18
begin
19
  write_s <= bus_s;
20
  bus_s <= read_s when enable='1' else "ZZZZ";
21
  
22
  process (clk)
23
  begin
24
      if rising_edge(clk) then
25
        --int <= output;
26
      end if;
27
      
28
  end process;
29
end behaviour;
Gast #576159
Lesenswert?
• ▲
▼
Meinst du beim simulieren? dann sollteste du in die Simulation auch 
einbringen, dass externe Pull-Up oder Pull-Down Widerstände (Signal <= 
'H' bzw 'L') angebracht sind. Wenn keine Komponente das Signal treibt 
dann auch keine Pull Up/Downs angebracht sind, dann ist der Zustand des 
Signals undefiniert.
#576258
Lesenswert?
• ▲
▼
> Wenn keine Komponente das Signal treibt dann auch keine Pull Up/Downs
> angebracht sind, dann ist der Zustand des Signals undefiniert.

Das stimmt so nicht ganz.
Undefiniert ist das Signal nur wenn es entweder nicht initialisiert 
(Wert 'U') oder wenn der Bus von 2 oder mehreren verschiedenen Signalen 
getrieben ist (Wert 'X').
Wenn das Modul aber dem Bus ein 'Z' zuweist, und die Testbench dem Bus 
nichts zuweist, dann sieht man auch ein 'Z' in der Simulation.

Poste einmal die VHDL Testbench, mit der Du das Modul testest.

Klaus
Gast #576320
Lesenswert?
• ▲
▼
Hier ist das File von der Testbench:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
USE IEEE.STD_LOGIC_TEXTIO.ALL;
4
USE IEEE.STD_LOGIC_ARITH.ALL;
5
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
6
USE STD.TEXTIO.ALL;
7

8
ENTITY tri_test_tw IS
9
END tri_test_tw;
10

11
ARCHITECTURE testbench_arch OF tri_test_tw IS
12
    FILE RESULTS: TEXT OPEN WRITE_MODE IS "results.txt";
13

14
    COMPONENT tri_io
15
        PORT (
16
            clk : In std_logic;
17
            enable : In std_logic;
18
            write_s : Out std_logic_vector (3 DownTo 0);
19
            read_s : In std_logic_vector (3 DownTo 0);
20
            bus_s : InOut std_logic_vector (3 DownTo 0)
21
        );
22
    END COMPONENT;
23

24
    SIGNAL clk : std_logic := '0';
25
    SIGNAL enable : std_logic := '0';
26
    SIGNAL write_s : std_logic_vector (3 DownTo 0) := "0000";
27
    SIGNAL read_s : std_logic_vector (3 DownTo 0) := "0000";
28
    SIGNAL bus_s : std_logic_vector (3 DownTo 0) := "0000";
29

30
    constant PERIOD : time := 200 ns;
31
    constant DUTY_CYCLE : real := 0.5;
32
    constant OFFSET : time := 0 ns;
33

34
    BEGIN
35
        UUT : tri_io
36
        PORT MAP (
37
            clk => clk,
38
            enable => enable,
39
            write_s => write_s,
40
            read_s => read_s,
41
            bus_s => bus_s
42
        );
43

44
        PROCESS    -- clock process for clk
45
        BEGIN
46
            WAIT for OFFSET;
47
            CLOCK_LOOP : LOOP
48
                clk <= '0';
49
                WAIT FOR (PERIOD - (PERIOD * DUTY_CYCLE));
50
                clk <= '1';
51
                WAIT FOR (PERIOD * DUTY_CYCLE);
52
            END LOOP CLOCK_LOOP;
53
        END PROCESS;
54

55
        PROCESS
56
            BEGIN
57
                -- -------------  Current Time:  85ns
58
                WAIT FOR 85 ns;
59
                enable <= '1';
60
                bus_s <= "0010";
61
                -- -------------------------------------
62
                -- -------------  Current Time:  285ns
63
                WAIT FOR 200 ns;
64
                enable <= '0';
65
                -- -------------------------------------
66
                -- -------------  Current Time:  485ns
67
                WAIT FOR 200 ns;
68
                enable <= '1';
69
                bus_s <= "0011";
70
                -- -------------------------------------
71
                -- -------------  Current Time:  685ns
72
                WAIT FOR 200 ns;
73
                bus_s <= "0001";
74
                -- -------------------------------------
75
                -- -------------  Current Time:  885ns
76
                WAIT FOR 200 ns;
77
                enable <= '0';
78
                -- -------------------------------------
79
                WAIT FOR 315 ns;
80

81
            END PROCESS;
82

83
    END testbench_arch;

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