www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Prinzipielle Frage zu


Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute!

Ich möchte gerne eine AD Wandler ansteuern. Dazu benötige ich einen 
Impuls damit die Konvertierung gestartet wird. Dieser soll sich alle 
200ns wiederholen.

Nach so einem Impuls sollen 100ns gewartet werden und dann 16 
Taktimpulse erzeugt werden. Nach diesen 16 Taktimpulsen soll 0 an der 
Leitung anliegen.

Das ganze Spiel soll sich beim nächsten Konvertierungsimpuls 
wiederholen. Also wieder Impuls kommt, 100ns warten, 16 Taktimpulse 
erzeugen, danach wieder 0 bis zum nächsten Konvertierungsimpuls.

Ich habe das ganze probiert mit Zählern zu realisieren, das mit dem 
Konvertierungsimpuls klappt ohne Probleme. Jedoch mit den 16 
Taktimpulsen und der darauffolgenden 0 habe ich so meine Probleme.


Anbei auch mein VHDL Code bzw. ein Teil davon. Mir geht es jetzt nicht 
genau um das Timing daher habe ich auf die Zeite angepasst, sondern ich 
bekomme die Taktimpulse nicht geschafft. Habe das Signal clk_en in einen 
Mux gelegt. Der mir abwechselt enweder den CLK_50MHZ übernimmt und 
durchschaltet bzw. wenn clk_en auf 0 geht liegt am Ausgang des MUX 0 an.

Habe ich irgendwo einen Denkfehler??? oder ist das kompletter Mist den 
ich da zusammengebastelt habe???
Vielleicht kann mir jemand helfen! Danke im Voraus!

Ich glaube im Mux haben ich sicher eine Mist gebaut!

Vorweg möcht ich sagen, das ich noch VHDL Anfänger bin und mich erst 
langsam in die Materie einarbeite. Einwenig VHDL Erfahrung habe ich 
schon (LED Beispiele usw.) Daher ich sage es mal so ein paar Grundlagen 
kenne ich.

Autor: Olli R. (omr) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
joe schrieb:

> Anbei auch mein VHDL Code bzw. ein Teil davon.

Wo? Bestimmt von der Vorschaufunktion gefressen worden.

Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig!

sorry kann das vhdlfile erst morgen wieder dranhängen...
habs am anderen Rechner!

lg

Autor: Olli R. (omr) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird mal Zeit, dass Andreas die Vorschaufunktion repariert.

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

Bewertung
0 lesenswert
nicht lesenswert
Aber jetzt....

hoffe ich halt!

m.f.g

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

Bewertung
0 lesenswert
nicht lesenswert
>>> ... Microsoft Word Document ...
Der Quelltext hat irgendwas unübersichtliches an sich...
Meine VHDL-Quelltexte enden auf *.vdh und es kommt kein Textstring von 
M$ darin vor :-/

> Ich glaube im Mux haben ich sicher eine Mist gebaut!
Ja, Takte werden nicht gemultiplext.
Und falls doch, dann solltest du den anschliessend noch über ein FF 
takten, damit keine Spikes am Ausgang auftreten.

>  oder ist das kompletter Mist den ich da zusammengebastelt habe???
Tendenziell eher ja.
Du solltest eher den Takt auf 100MHz verdoppeln (wie das geht, hängt vom 
FPGA-Typ und -Hersteller ab), und daraus dann in einer State Machine die 
Steuerung und den Takt für den ADC ableiten. Das macht die ganze Sache 
richtig synchron und kontrollierbar.

Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Zuerstmal danke für deine Antwort. Naja das mit dem Word Document war 
mein Fehler hab nur einen Teil des Codes rausgenommen, da ich schon sehr 
viel im VHDL File herumgespielt habe....

Meinst du nur "meine" Takte werden nicht gemultiplext oder generell 
macht man das nicht????

Taktverdoppeln verstehe ich, jedoch eine State Machine bauen, das habe 
ich schon länger nicht gemacht.. Gibt es da noch eine andere Lösung (ich 
weiss schöner wäre es mit einer State Machine)???
Ich werd mich mal wieder einlesen zum Thema State Machine...

m.f.g

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

Bewertung
0 lesenswert
nicht lesenswert
> Meinst du nur "meine" Takte werden nicht gemultiplext oder generell
> macht man das nicht????
Man tut sowas nicht.
Dein takt wird schon irgendwie gemultiplext werden...
Aber wehe, da ändert sich nur eine Kleinigkeit am Design oder Routing 
oder FPGA oder der Temperatur oder der Versorgung. Dann viel Spass damit 
:-/

> Ich werd mich mal wieder einlesen zum Thema State Machine...
Yo, besser is das.


BTW:
Müssen das unbedingt 50MHz Takt am ADC sein?
Oder könntest du für Versuche einfach insgesamt mal langsamer fahren?
Dann würdest du dir das Taktverdoppeln vorerst sparen...

Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also dann lass ich das mit dem Multiplexen des Taktes.
Danke einmal für die Info.

Das witzige ist, der ADC braucht als Takt 250MHZ. Ich verwende das 
Spartan3E Starter Kit. Mittels des Core Generator kann ich mir den Takt 
erzeugen. Ich habe es langsamer auch schon probiert. Sprich ich lasse 
die 50 MHZ. Erzeug mir daraus meine Konvertierungsimpulse und kann mir 
auch einen durchgegehenden Takt mit nur ca 10MHZ erzeugen. Wo ich jedoch 
ehrlich gesagt anstehe, ist das Erzeugen von nur 16 Taktimpulsen.

Das komische (ich weiss meine VHDL schreibweise ist nicht die beste) mit 
meiner Countervariante hab ich mir was ausgedacht, was ich gerade 
probiere, um die 16 Taktimpulse zu erzeugen.

Jedoch wenn ich einen höheren Takt verwenden muss, was eigentlich 
gefordert ist, dann blicke ich da nicht ganz durch wie ich die 16 
Taktimpulse lösen soll. Jetzt mal ohne State Machine.

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

Bewertung
0 lesenswert
nicht lesenswert
> der ADC braucht als Takt 250MHZ.
Was ist das für ein Ding?
Was hat der für ein Interface?

Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

AD7625 aus dem Hause Analog Devices

Datenblatt :

http://www.analog.com/en/analog-to-digital-convert...

Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

AD7626 aus dem Hause Analog Devices

Datenblatt :

http://www.analog.com/en/analog-to-digital-convert...

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
joe schrieb:
> Das witzige ist, der ADC braucht als Takt 250MHZ.
wohl eher: der ADC kann mit bis zu 250MHz betrieben werden.

Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

ne laut datenblatt typ : 250MHZ

maximal 400MHZ....


also wenns anders wäre... dann wäre ich auch sehr glücklich darüber..
nur ich glaube, ich sehe das richtig im datenblatt..

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist auch eine Mindestfrequenz angegeben?
Ansonsten kannst du ja mit der Frequenz fast beliebig tief runter gehen.

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

Bewertung
0 lesenswert
nicht lesenswert
>> Das witzige ist, der ADC braucht als Takt 250MHZ.
> wohl eher: der ADC kann mit bis zu 250MHz betrieben werden.
Ja, ich würde den einfach mal langsamer anfahren.
Aber das auf jeden Fall synchron.

> 250MHz...
Das wird sportlich, zieh dich warm an.
Brauchst du diesen hohen Durchsatz wirklich?

EDIT:
> Ist auch eine Mindestfrequenz angegeben?
Nein.
CLK frequency fCLK  min --    typ 250    max 400 MHz
Aber ganz auf 0 gehts wohl doch nicht:
Throughput Rate     min 0.001            max 10 MSPS

Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will auch langsamer fahren....
Hab nur gedacht ich richte mich besser nach der typischen Frequenz wegen 
den Timings..
aber jetzt wo ich so nachdenken war diese überlegung falsch.. ich werde 
es einmal langsamer probiern.

Derzeit brauche ich den Durchsatz noch nicht. Später wenn ich das mal im 
Griff habe, dann wird es vielleicht aktuell.

nochmal eine frage zur state machine... hat da jemand einen buchtipp 
oder sowas in der art?

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
joe schrieb:
> nochmal eine frage zur state machine... hat da jemand einen buchtipp
> oder sowas in der art?

"VHDL-Synthese" von Reichardt/Schwarz
ISBN: 978-3-486-58192-8

Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Perfekt danke!
dieses Buch ist eh schon auf dem Weg zu mir!!

Dürfte ich trotzdem später nocheinmal meine Countervariante posten, 
damit ihr einen Blick drauf werfen könnt???

m.f.g

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
joe schrieb:
> Dürfte ich trotzdem später nocheinmal meine Countervariante posten,
> damit ihr einen Blick drauf werfen könnt???
Natürlich, wenn du so nett fragst ;-)

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

Bewertung
0 lesenswert
nicht lesenswert
> nochmal eine frage zur state machine... hat da jemand einen buchtipp
> oder sowas in der art?
Mein wichtigster Tipp:
Mach dein Design synchron
http://www.lothar-miller.de/s9y/archives/16-Takt-i...

Der Zweitwichtigste:
Verwende die Ein-Prozess-Schreibweise

Es wird nicht immer klappen, sich an diese Regeln zu halten. Aber wenn 
du es versuchst, dann funktioniert wenigstens 90% deines Designs auf 
Anhieb und du hast nur mit 10% Scherereien  ;-)

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

Bewertung
0 lesenswert
nicht lesenswert
Hi Lothar!

Danke für den Link zu deiner Seite, die habe ich schon öfters 
heimgesucht ;) (klingt nur so schlimm)

Natürlich habe ich jetzt genau 2 Process in Verwendung. Da ich noch 
immer mit der Counter-Variante beschäftigt bin, würde ich gerne wissen, 
ob man meinen Code in einem Process überhaupt zusammenführen kann oder 
ob dann komplett die Übersicht verloren geht.

Ich bin bis jetzt folgend vorgegangen. Zuerst einmal fahr ich jetzt nur 
mit den 50 Mhz. Dann habe ich alle Zeiten einwenig in die Länge gezogen.
Ich erzeuge mir einen Konvertierungsimpuls. Danach warte ich 100ns und 
dann beginnen die Taktimpulse. Mein Problem im jetzigen Code ist, dass 
ich das Signal mit dem ich den 2. Process steuer bzw. starte irgendwann 
mal wieder auf 0 gesetzt werden muss da ich sonst ja die ganze Zeit 
diese Taktimpulse erzeuge die überhaupt nicht synchron zu meinem 
Konvertierungsimpuls sind....

I hoff ich konnte mich verständlich ausdrucken...

Autor: joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry ein Fehler ist noch drin (bzw. ihr findet sicher mehr ;) )

bei dem zweiten Process gehört das rising_edge natürlich weg...

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

Bewertung
0 lesenswert
nicht lesenswert
So nochmal ich...

Ich hab noch einwenig weiter gemacht......

Hab das jetzt so hinbekommen wie ich es mir vorgestellt habe
also laut Simulation her....

Die Frage mit nur einem Process beschäftigt mich jetzt noch...

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.