Forum: FPGA, VHDL & Co. Toggle FF


von T.M. (Gast)


Lesenswert?

Hallo,

ich glaub ich hab grad ne Denkblockade...folgender Code soll ein T-FF
darstellen, hat meines Erachtens auch schon vor einiger Zeit schonmal
funktioniert, nun zeit mir Modelsim aber am Ausgang immer 'U'. Was is
da los? Kann mir jemand nen Tip geben?
1
entity NRZI is
2
Port (CLK, DATA_IN : in std_logic;
3
      DATA_OUT: out std_logic);
4
end NRZI;
5
6
architecture Verhalten of NRZI is
7
signal NRZI_INT: std_logic;
8
signal FF_INPUT: std_logic;
9
10
begin
11
12
KOMB: process(DATA_IN, NRZI_INT)
13
begin
14
    case DATA_IN is
15
  when '1' => FF_INPUT <= NRZI_INT;
16
  when others => FF_INPUT <= DATA_IN xnor NRZI_INT;
17
    end case;
18
end process KOMB;
19
20
DFF: process (CLK, DATA_IN)
21
begin
22
  if CLK'event and CLK = '1' then
23
    NRZI_INT <= FF_INPUT;
24
  end if;
25
end process DFF;
26
27
DATA_OUT <= NRZI_INT;
28
29
end Verhalten;

Danke schonmal...

von T.M. (Gast)


Lesenswert?

Hat sich erstmal erledigt, muss das Signal NRZI_INT natürlich mit '1'
initialisieren....nun hab ich nur noch nen anderes Problem. Bei
folgendem Code soll der Datenstrom, der in obigen Code reingeht wieder
decodiert werden. Das funktioniert auch, hab nur in der Simulation
Störspitzen bei Data_out = '0' im Takt von CLK. Was is denn da los?
1
entity DENRZI is
2
port(CLK, DATA_IN: in std_logic;
3
     DATA_OUT: out std_logic);
4
end DENRZI;
5
6
architecture Verhalten of DENRZI is
7
signal DENRZI_INT: std_logic := '1';
8
9
begin
10
11
DENRZI: process(CLK)
12
begin
13
  if CLK'event and CLK = '1' then
14
    DENRZI_INT <= DATA_IN;
15
  end if;
16
end process DENRZI;     
17
18
DATA_OUT <= DENRZI_INT xnor DATA_IN;
19
20
end Verhalten;

von TobiFlex (Gast)


Lesenswert?

Mir kommt diese Zeile sehr komisch vor:
 when others => FF_INPUT <= DATA_IN xnor NRZI_INT;
probier lieber mal:
 when others => FF_INPUT <= not NRZI_INT;

Viele Grüße
TobiFlex

von T.M. (Gast)


Lesenswert?

So, jetzt hab ich es. Ich hab den Prozess DENRZI folgendermassen
geändert:
1
DENRZI: process(CLK)
2
begin
3
  if CLK'event and CLK = '1' then
4
    DENRZI_INT <= DATA_IN;
5
   DATA_OUT <= DENRZI_INT xnor DATA_IN;
6
  end if;
7
end process DENRZI;
und schon sind die Störspitzen weg. Also einfach ne
Ausgangssynchronisation.

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.