D-Flip-Flop Rückkopplung negiertem Ausgang Qbar auf Eingang D

OP #5336087
Lesenswert?

Hi,

ich versuche mich gerade in VHDL und brauche in einer Schaltung ein 
D-Flip-Flop, bei dem der negierte Ausgang Qbar auf den Eingang D 
zurückgeführt wird. Leider bin ich mit meinem VHDL-Code nicht weiter 
gekommen. Ich kann mir leider auch nicht erklären wo der Fehler liegt.

Der VHDL-Code für das D-Flip-Flop:
1
entity dff2 is
2
  Port ( D : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC;
3
                      Qbar : inout STD_LOGIC
4
  );
5
end dff2;
6

7
architecture Behavioral of dff2 is
8

9
begin
10

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

19
end Behavioral;

Der VHDL-Code mit der Rückführung durch ein
1
signal Qbar_s
 und dem Signal für die Simulation ist unten aufgeführt. Im Anhang habe 
ich auch noch ein Diagramm mit der Beschaltung des D-Flip-Flops, wie ich 
es versucht habe zu simulieren.
1
entity test_dff is
2
--  Port ( );
3
end test_dff;
4

5
architecture Behavioral of test_dff is
6

7
  component dff2
8
  port( D : in STD_LOGIC; CLK : in STD_LOGIC; Q : out STD_LOGIC;
9
                       Qbar : inout STD_LOGIC
10
  );
11
  end component;
12

13
  signal U1 : STD_LOGIC;
14
  signal CLK_s : STD_LOGIC;
15
  signal Q_s : STD_LOGIC;
16
  signal Qbar_s : STD_LOGIC;
17

18
  constant period : TIME := 20us;
19

20
begin
21

22
  -- Instantiate D-FF1
23
  dff1 : dff2 port map (
24
    D => Qbar_s,
25
    CLK => CLK_s,
26
    Q => Q_s,
27
    Qbar => Qbar_s
28
  );
29

30
  -- Generate clock
31
  CLK <=  '1' after 1*period/2,
32
    '0' after 1*period,
33
    '1' after 3*period/2,
34
    '0' after 2*period,
35
    '1' after 5*period/2,
36
    '0' after 3*period,
37
    '1' after 7*period/2,
38
    '0' after 4*period,
39
    '1' after 9*period/2,
40
    '0' after 5*period,
41
    '1' after 11*period/2,
42
    '0' after 6*period,
43
    '1' after 13*period/2,
44
    '0' after 7*period,
45
    '1' after 15*period/2,
46
    '0' after 8*period,
47
    '1' after 17*period/2,
48
    '0' after 9*period,
49
    '1' after 19*period/2,
50
    '0' after 10*period,
51
    '1' after 21*period/2,
52
    '0' after 11*period,
53
    '1' after 23*period/2,
54
    '0' after 12*period,
55
    '1' after 25*period/2,
56
    '0' after 13*period,
57
    '1' after 27*period/2,
58
    '0' after 14*period,
59
    '1' after 29*period/2,
60
    '0' after 15*period,
61
    '1' after 31*period/2,
62
    '0' after 16*period,
63
    '1' after 33*period/2,
64
    '0' after 17*period,
65
    '1' after 35*period/2,
66
    '0' after 18*period,
67
    '1' after 37*period/2,
68
    '0' after 19*period,
69
    '1' after 39*period/2,
70
    '0' after 20*period;
71

72
end Behavioral;

Im Anhang habe ich auch noch eine Abbildung mit den Signalverläufen zur 
Simulation. Meine Ausgänge bleiben undefined (U) und ich weiß nicht 
warum :-/

Kann mir einer erklären was ich übersehe? Eine direkte Rückkopplung 
sollte doch möglich sein?


Freundliche Grüße
Bruno
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #5336112
Lesenswert?

Bruno K. schrieb:
> Kann mir einer erklären was ich übersehe?
Am Anfang sind alle Signale 'U'nitialized. Und was ist ein negiertes 
'U'? Auch ein 'U'...

Probiers mal als Gebastel so:
1
  Port ( D : in STD_LOGIC; CLK : in STD_LOGIC;
2
                      Q : out STD_LOGIC := '0';
3
                      Qbar : inout STD_LOGIC := '1' );
Und: arbeite mit lokalen Signalen statt mit inout. Denn du hast da weit 
und breit keine inout. Nirgends.
Und lokale Signale kannst du dann auch initialisieren wie es sich 
gehört.


> CLK <=  '1' after 1*period/2,
Fehlt da ein _s?

BTW, einen Takt erzeuge ich so:
1
  signal CLK_s : STD_LOGIC := '0';
2

3
begin
4

5
  -- Generate clock
6
  CLK_s <=  not CLK_s after period/2;
Gast #5336140
Lesenswert?

1
-- Toggle-FF
2
library ieee;
3
use ieee. std_logic_1164.all;
4

5
entity dff2 is
6
   Port ( --D    : in STD_LOGIC; 
7
        CLK_i    : in STD_LOGIC; 
8
          Q_o    : out STD_LOGIC;
9
          Qbar_o : out STD_LOGIC
10
   );
11
 end dff2;
12

13

14
architecture Behavioral of dff2 is
15

16
signal Q_sig: std_logic := '0'; --check init value 
17

18
signal D_sig, Qbar_sig: std_logic;  
19
begin
20
   process (CLK_i)
21
   begin
22
     if rising_edge(CLK_i) then
23
       Q_sig <= D_sig;
24
     end if;
25
   end process;
26

27
Qbar_sig <= not Q_sig; 
28
D_sig    <=     Qbar_sig;
29

30
Q_o      <=     Q_sig; 
31
Qbar_o   <=     Qbar_sig;
32

33

34
end Behavioral;

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