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.
>>> ... 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.
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
> 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...
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.
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..
>> 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.
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?
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
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
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 ;-)
> nochmal eine frage zur state machine... hat da jemand einen buchtipp> oder sowas in der art?
Mein wichtigster Tipp:
Mach dein Design synchronhttp://www.lothar-miller.de/s9y/archives/16-Takt-im-Prozess.html
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 ;-)
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...
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...