mikrocontroller.net

Forum: FPGA, VHDL & Co. Constraint Problem?


Autor: Kurt Bohnen (kurt)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
mir ist etwas merkwürdiges bei der Post-PAR-Simulation aufgefallen. Der 
Sineout Ausgang ist erst ca. 7ns nach der steigenden CLOCK Flanke 
stabil. Fehlt da etwa eine Constraint?

Von OFFSET OUT/IN habe ich schon gehört. Später soll der Takt für denn 
DDS Core aber von einer DCM kommen und dann funktioniert diese 
Constraint nicht, falls ich es richtig verstanden habe.

Was nun?

Mfg,
Kurt

Autor: mac4ever (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was passiert denn in DDS_CORE? Ist das eine RAM-Tabelle? Wann erwartest 
du denn die Daten? Sollten die Daten nicht mit der zweiten Taktflanke 
gültig sein?
CLK ___|---|___|---|___|---|___|---|
FTW            <Adresse        >
SIN                    <Daten  >

So sollte es doch sein ... aber ein paar zusätzliche Informationen 
deinerseits könnten nicht schaden.

Autor: Kurt Bohnen (kurt)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ok. Hier das Datenblatt vom DDS-Core. Er ist für den Streamingbetrieb 
konfiguriert. Abgesehen davon wird das Frequenztuningword FTW (PINC_IN) 
konstant von der Testbench vorgegeben.

Autor: mac4ever (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe mir jetzt fix das Timing angschaut. Laut Blockschaltbild 
werden die Daten einerseits gepuffert (Phase Accu) und dann per BlockRAM 
an den Ausgang gelegt. Also 1 Takt plus x ns Latenz. Der BlockRAM ist 
definitiv nicht synchron. Von daher erscheinen die Daten auch nicht mit 
der steigenden Taktflanke, sondern sind "irgendwann" gültig. Die 
Zugriffszeit ist allerdings definiert und somit kannst du dir die Latenz 
bis zum gültigen Signal entsprechend der Taktfrequenz ausrechnen.

Ich hoffe, ich erzähle gerade keinen Unsinn :D

Autor: Kurt Bohnen (kurt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was im DDS-Core los ist ist doch eigentlich egal. Ich habe (ein 
wahrscheinlich asynchrones) Signal TMP welches ich auf die steigende 
CLOCK Flanke synchronisiert auf SINEOUT ausgeben will.

Wieso ändert sich SINEOUT noch 7ns nach der Flanke obwol das FF den Wert 
längst fest gespeichert haben müsste.

Autor: mac4ever (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, das habe ich ja komplett übersehen ... ich hatte das mit SINE 
verwechselt. Dieses Verhalten kann ich mir leider auch nicht auf Anhieb 
erklären.
Wie schaut denn der zeitliche Verlauf zwischen den Signalen SINE und 
SINEOUT aus?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist doch ganz klar, die Post PAR Simulation bildet die Wirklichkeit mit 
den Ausgangsverzögerungen besser ab. In der Verhaltenssimulation 
erscheint das natürlich zur Flanke, in der Realität brauchts aber einige 
Zeit vom Register zum Pin. DU kannst das letzte Register ja mal in den 
IOB packen lassen, dann sollte es etwas schneller gehen, aber je nach 
Chip sind 7ns durchaus normal. Wenn du den CLK auch ausgeben 
willst/musst, dann am besten mit einem ODDR Register, dann hat er 
annähernd die gleiche Verzögerung wie die Daten.

Autor: bko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Kurt
Wenn du die IO-s schnell schalten willst solltest du die
IO-Timings deines Bausteins kennen, im Falle eines Xilinx-FPGAs
hier am Beispiel des spartan-3 im "ds099.pdf" auf
Seite 67 (Kapitel IO-timing):
http://www.xilinx.com/support/documentation/data_s...
Zitat:
"When reading from OFF, the time
from the active transition on the
Global Clock pin to data appearing
at the Output pin. The DCM is not
in use."
Dann steht in Tabelle das bei einem 12mA lvcmos25 FAST Ausgang der
die "clock-to-output" time je nach Typ 3.9..5.0 nanosekunden
betragen kann.
Bei anderen Treiberstärken muss man dann die Zahlen von Tabelle 46
addieren.
In deinem UCF-File fehlt die Angabe "DRIVE=" und "SLEW=", dann nimmt
der ISE (v10) 12mA und "SLEW=SLOW" als default., was nach Tabelle 46 
zusätzlich einen Delay von ca 3. nanosec. bedeuten kann.
Die Bedingungen für welche diese Zeiten gelten, sind dann auf den
folgenden Seiten erklärt.
Den delay kannst du nur durch stärkere Ausgänge veringern.
Am schnellsten schalten LVCMOS(xx) IOS dann bei 24mA SLEW=Fast.

Und dann aber auch noch  die "Simultaneously Switching Output 
Guidelines"
beachten (Seite 79ff).

Zugegeben alles eine trockene Lektüre.

Autor: Kurt Bohnen (kurt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir wird langsam klar das mein Problem eigentlich garkeins ist.

Ich kann nicht erwarten dass die Ausgänge sofort nach der internen 
steigenden Flanke einen stabilen Zustand annehmen. Es muss nur dafür 
gesorgt werden dass sie stabil sind bevor ich meinen Clock ausgebe.

Da muss ich morgen nochmal drüber nachdenken. ;-)

Autor: mac4ever (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da sieht man was passiert wenn man nur mit Altera rumspielt :)
Das SINEOUT ein IOB ist und nicht irgendein interenes Signal hab ich 
komplett übersehen. Das erklärt natürlich so einiges und die richtigen 
Antworten kamen ja bereits. And dieser Stelle unterscheiden sich die 
Schematics doch etwas mehr voneinander.

Sorry für die unqualifizierten Einträge meinerseits :)

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, ganz im ersten posting stand ja schon "Post PAR Simulation", das 
erklärt die halbwegs realen Verzögerungszeiten.
Du musst halt bei der Ausgabe nur dafür sorgen, dass der Takt 
phasengleich mit dem Signal gegeben wird, dann übernimmt der externe 
Baustein die Daten mit der nächsten Flanke.

Autor: Kurt Bohnen (kurt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für Eure Antworten und frohe Weihnachten!

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.