www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Fallende/Steigende Flanke erkennen mit doppelter Abtastfrequenz


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, anscheinend hab ich damals in der Schule nicht richtig aufgepasst 
und jetzt Recht sich das in Unwissenheit, deshalb hoffe ich hier auf 
eine Verständliche Antwort.

Ich bekomme von einem Master Mikrocontroller 8Bit Werte mittels SPI Bus 
auf meinem CPLD gesendet. Zum Anfang möchte ich nur ein Schieberegister 
in den CPLD beschreiben und keine Daten zum Master zurueck senden.

Die Beschreibung eines 8Bit Schieberegister ist nicht so schwer, aber in 
anderen Beiträgen habe ich gelesen, dass man eine Steigende / Fallende 
Flanke mittels doppelter Abtastfrequenz oder DDR Verfahren erkennen 
kann.
Ich persönlich würde das DDR Verfahren nutzen, aber jeder bewältigt 
seine Probleme auf seine eigene Art.

Wieso kann ich kein flankengesteuertes Flip Flop beschreiben? Er liesst 
doch erst das Bit bei Clock High ein und  das Spiel beginnt von vorne. 
Ist es nur zur Sicherstellung, dass wenn die Clockleitung 1 = Idle ist 
eine richtige Erkennung erfolgt?

Der AVR kann auch maximal eine Masterlock / 2 SPI Bus Freq. sampeln als 
SPI Slave, deshalb wird auch hier wohl eine Flankenerkennung genutzt.

Liege ich mit meiner Vermutung richtig ?

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Hallo, anscheinend hab ich damals in der Schule nicht richtig aufgepasst
> und jetzt Recht sich das in Unwissenheit

Scheint ganz der Fall zu sein SCNR

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich hab eine Seite gefunden die eine Einsyncronisierung beschreibt 
und Anhand deren Beschreibung viel der Groschen.

@Christoper D.

Sinnvoller Post. Bedenke jeder fing mal an.

Autor: Gast4 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hallo, anscheinend hab ich damals in der Schule nicht richtig aufgepasst
>und jetzt Recht sich das in Unwissenheit, deshalb hoffe ich hier auf

Recht --> rächt

Das war aber schon in der Grundschule der Fall!

Gast4

Autor: pcb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ok, ich hab eine Seite gefunden die eine Einsyncronisierung beschreibt
>und Anhand deren Beschreibung viel der Groschen
>
Michael kannst du mal bitte den Link zur dieser Seite schicken?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ftp://ftp.fh-konstanz.de/pub/ti/electronic_design_center/DSYS/Vorlesung/ 
KAPITEL_GDS.pdf


vergessen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ftp://ftp.fh-konstanz.de/pub/ti/....
Insgesamt eine schöne und lesbare Aufstellung von Regeln.

Aber die Regel 3 ist zumindest für Xilinx FPGAs suboptimal:
Regel 3:   Flipflops müssen mit externem Reset (rück-) setzbar sein 
Alle Flipflops sollten von (möglichst) einem externen Resetsignal setzbar 
oder rücksetzbar sein.  
Im Betrieb kann dann durch eine "Power-on-Reset" - Schaltung ein kurzer 
Resetimpuls erzeugt werden und das System befindet sich dann in einem 
definierten Anfangszustand. 
Das wurde schon im Beitrag "Xilinx und die Resets" 
diskutiert.

Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, im Dateianhang hab ich eine Flankenerkennung im Internet als 
Lernhilfe gefunden und mir wird nach der Synthese ein 2 Bit 
Schieberegister angezeigt. Das Schieberegister entspricht auch meinen 
Erwartungen, aber das Design ist relativ langsam mit ~200MHz.

In dem Angang weiter unten findet Ihr eine Flankenerkennung von mir mit 
knapp 500MHz und in der Simulation Verhalten sich beide Beschreibungen 
identisch, aber in meiner Beschreibung findet er 2 Multiplexer. Setze 
ich in der Case Abfrage die Snyc Signale (Sync_l und Sync_h) zusätzlich 
auf logisch 0, dann entfernt die Synthese beide Multiplexer und die 
Geschwindigkeit sinkt auf ~400MHz.

Ist meine Case Anweisung nicht richtig beschrieben oder warum wird in 
meinem Design kein Schieberegister beschrieben?
Welche Beschreibung ist die bessere oder sichere?

Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Meine Flankenerkennung

Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Testbench

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Ist meine Case Anweisung nicht richtig beschrieben oder warum wird in
> meinem Design kein Schieberegister beschrieben?
Da ist doch ein Schieberegister drin (Screenshot: blau). Das geht dann 
auf die Select-Eingänge des MUX.

> ~200MHz. ...  500MHz ... ~400MHz.
Ich verwende einen Spartan3-400 Speedgrade -4.
Das Originaldesign hat bei mir 260MHz.
Dein gepostetes Design hat 367 MHz.
Mit den aktivem synchronen Zurücksetzen (sync_l <= '0') dann noch 238 
MHz.

Die Geschwindigkeitsverluste kommen offenbar dadurch, dass in der 
Originalbeschreibung und in deiner "langsamn" Beschreibung FFs verwendet 
werden, die eine Kombinatorik vor dem synchronen Reset-Eingang haben.

Ich habe mal die Originalfassung analysiert und auf diese Variante 
umgeschrieben:
  fast_sync1 : process(clk)
    variable resync : std_logic_vector(1 to 3);
  begin
    if rising_edge(clk) then
      -- detect rising and falling edges.
      rise <= not resync(2) and resync(3);
      fall <= not resync(3) and resync(2);
      -- update history shifter.
      resync := not async_sig & resync(1 to 2);
    end if;
  end process;
Hier ist keinerlei Kombinatorik mehr nötig (Screenshot im nächste Post), 
und das Ding ist mit 376 MHz am schnellsten ;-)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die schnellste Variante...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Dass du auf die Zahlen der Synthese nicht allzuviel geben solltest, 
erkennst du, wenn du den synchronen Reset aus deinem Design 
herausnimmst. Es wird eigentlich der selbe RTL-Plan erzeugt, nur der 
Reset-Pin der FFs ist nicht angeschlossen (Screenshot).
Deine "schnelle" Variante hat dann aber nur noch 294 Mhz  (statt 367) 
:-o

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Lothar für die Hilfe! Die erklärung von Dir ist einleuchtend und 
für die Zukunft werde ich mehr die RTL's prüfen und mich nicht allein 
auf den Synthesereport verlassen.

Autor: Frank H. (maxmeise)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

sorry für diese Anfängerfrage, aber ich versuche mich gerade ( leider
nur am WE ) in die Materie einzuarbeiten.

Was genau sagen diese MHZ Zahlen aus?
1. Die Schaltung läuft auf einem idealem CLPD/FPGA in dieser 
Geschwindigkeit??
2. Die Schaltung läuft auf einem neuen aktuellem CLPD in dieser
Geschwindigkeit wenn die Taktrate stimmt ??
3. Ganz was anderes ;-)

bis dann,

MaxMeise

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, die MHz nach der Synthese sind ziemlich obskur. Wichtig ist, was 
nach dem Fitting bzw. Place&Route rauskommt. Da richtet der sich aber 
nach deinen Vorgaben im UCF File, der Optimizer rechnet nur so lange wie 
nötig, wenn die Vorgabe erreicht ist, hört der auf.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was genau sagen diese MHZ Zahlen aus?
Es läuft ohne weitere Optimierungen auf dem angegebenen Spartan 3 
Speedgrade -4 mit dieser Geschwindigkeit. Mit entsprechenden 
Optimierungseinstllungen könnte das noch ein wenig schneller werden...

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mit entsprechenden Optimierungseinstllungen könnte das noch ein wenig
> schneller werden...

Wenn man einen größeren Chip nimmt, mehr Logik hinzufügt oder mehr 
kombinatorische Tiefe einbaut kann es auch signifikant langsamer werden 
:-/

Also alles in allem: Die Zahlen sind nur ein grober Richtwert, solange 
man mit dem Design noch nicht endgültig fertig ist.

Duke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.