Forum: FPGA, VHDL & Co. Prinzipielle Frage zu


von joe (Gast)


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.

von Olli R. (omr) Benutzerseite


Lesenswert?

joe schrieb:

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

Wo? Bestimmt von der Vorschaufunktion gefressen worden.

von joe (Gast)


Lesenswert?

Richtig!

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

lg

von Olli R. (omr) Benutzerseite


Lesenswert?

Wird mal Zeit, dass Andreas die Vorschaufunktion repariert.

von joe (Gast)


Angehängte Dateien:

Lesenswert?

Aber jetzt....

hoffe ich halt!

m.f.g

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von joe (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von joe (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von joe (Gast)


Lesenswert?


von joe (Gast)


Lesenswert?


von Martin K. (mkohler)


Lesenswert?

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

von joe (Gast)


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..

von Martin K. (mkohler)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.
1
CLK frequency fCLK  min --    typ 250    max 400 MHz
Aber ganz auf 0 gehts wohl doch nicht:
1
Throughput Rate     min 0.001            max 10 MSPS

von joe (Gast)


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?

von Martin K. (mkohler)


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

von joe (Gast)


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

von Martin K. (mkohler)


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 ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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-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  ;-)

von joe (Gast)


Angehängte Dateien:

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...

von joe (Gast)


Lesenswert?

Sorry ein Fehler ist noch drin (bzw. ihr findet sicher mehr ;) )

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

von joe (Gast)


Angehängte Dateien:

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...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.