Forum: FPGA, VHDL & Co. Verzögerung durch D Flip Flop


von TM (Gast)


Lesenswert?

Hallo,

Mein Problem ist folgendes ich bekomme in den FPGA einen Datenstrom. 
Sobalt daten anliegen (wird über Flag signalisiert) läuft eine 
Statemachine an welche eine Kennung in einen Buffer füllt und 
anschließen den Datenstrom hinterher.

Jetzt hatte ich das Problem das ich um die 2 Byte kennung 
davorzuschreiben 2 Takte brauche (Es ist ein 8 Bit breiter Fifo).

Also hab ich mir gedacht das ich den Datenstrom einfach in einem zweiten 
process durch zwei Flip Flops enstprechend verzögere und nach der 
Kennung die Verzögerten Daten sende.

In der Simulation funktioniert dies. Ich kann das Design auch 
synthetisieren und auf mein FPGA Board spielen dort funktioniert diese 
Verzögerung aber nicht mehr und ich kriege das gleiche Ergebniss als 
hätte ich diese gar nicht eingebaut.

Ich benutze als Entwicklungsumgebung Quartus 2 und spiele das ganze auf 
einen Cyclone 3

Hier der für das Verzögern verantwortliche Code:
1
 process (CLK,RES_N)
2
  begin
3
    if(rising_edge(CLK)) then
4
      if RES_N='0' then
5
        data_reg1       <= "0000000000000000";
6
        data_reg2       <= "0000000000000000";
7
        data_valid_reg1 <= '1';
8
        data_valid_reg2 <= '1';
9
      else
10
        data_reg1          <= INDATA(15 downto 0);
11
        data_reg2          <= data_reg1;
12
        data_valid_reg1    <= DATA_VALID;
13
        data_valid_reg2    <= data_valid_reg1;
14
      end if;
15
    end if;
16
  end process;

Anschließend wird in einem zweiten Process das data_reg2 als Datenstrom 
für die State Machine genutzt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>     data_reg1          <= INDATA(15 downto 0);
Das ist keine Art, asynchrone externe Busse einzusynchronisieren... 
:-o
Was passiert denn, wenn genau bei der steigenden Taktfklanke der Bus 
seine Pegel von x"0000" nach x"ffff" wechselt?
Logisch, ein paar der data_reg1 FFs kriegen noch eine 0 ab, der Rest 
schon die neue 1. In der funktionalen Simulation wirst du diesen Fehler 
nie sehen...

> Mein Problem ist folgendes ich bekomme in den FPGA einen Datenstrom.
> Sobalt daten anliegen (wird über Flag signalisiert) läuft eine
Was ist das für ein Flag? Ist das irgendwie synchron zum FPGA-Takt? Nur 
mit so einem Valid-Signal könntest du sinnvoll Daten an das FPGA 
übergeben...

von TM (Gast)


Lesenswert?

Die änderung der Daten und das Valid Flag ist snychron zum FPGA Takt.

von Harald F. (hfl)


Lesenswert?

Zusammenfass: Synchrones Design, stabile Daten, Simulation tut -> das 
FPGA in der realen Welt tut -> Du machst einen Beobachtungsfehler. Wie 
wärs mit SignalTap?

von TM (Gast)


Lesenswert?

Tag,

Hab nochmal genau drüber nachgedacht und hab gemerkt das ich zwar mein 
verzögertes Data_valid signal auswerte aber nicht das originalsignal 
deshalb fing der FPGA immer zu spät an ins FIFO zu schreiben.

In der Simulation hat das ganze nur funktioniert weil ein Reset Signal 
vorraus kam welches die Data_valid_reg2 auf anfangswert 1 gesetzt hat.

Naja nen ziehmlich blöder Fehler aber jetzt funktionierts.

Gruß Tobias

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.