Verzögerung durch D Flip Flop

Gast #1895639
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.
Moderator (Firma: Titel) Persönliche Seite #1895675
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...
Gast #1895737
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

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