Forum: FPGA, VHDL & Co. Erzeugen hochfrequenter sychroner Taktsignale


von Barni2k7 (Gast)


Angehängte Dateien:

Lesenswert?

Guten Morgen,

ich studiere Elektrotechnik mit der Fachrichtung Mikrosystemtechnik. 
Seit längerer Zeit verfolge ich schon die Thread hier im Forum und bin 
wirklich begeistert von der Qualität der Beiträge und auch dem 
Engagement was die Leute hier in ihrer Freizeit reinstecken.
Kurz zu mir: Habe Erfahrungen sowohl im Analog- als auch im 
Digitaldesign von elektronischen Schaltungen. Eine gewissen 
Grundkenntniss im Umgang mit FPGA's und VHDL ist durch Vorlesungen 
vorhanden. Jedoch fehlt, wie sollte es im Studium auch anders sein die 
Praxiserfahrung.

Muss nun für die Uni ein sehr umfangreiches VHDL/FPGA Projekt 
realisieren und wäre um eure Mithilfe sehr dankbar. Es geht mir aber 
nicht darum, hier eine fertige Lösung des Projektes zu bekommen, sondern 
eher um Denkanstöße, mögliche Lösungswege, Hinweise und Verbesserungen 
meiner Implentierung. Ich möchte aus dem Projekt den für mich 
größtmöglichen Lerneffekt erzielen, um am Ende sagen zu können, dass ich 
sowohl den Umgang mit dem FPGA als auch mit VHDL erlernt habe.

Nun zu meinem Projekt:
Es geht um die Ansteuerung einer Time-of-Flight Kamera welche im 
Pulsverfahren funktioniert. Das heißt, es muss ein hochfrequentes 
sychrones Taktsignal erzeugt werden. Dies soll mittels eines FPGA's 
geschehen. Im Anhang habe ich sowohl das Timing Diagramm als auch einen 
ersten Versuchsaufbau dargestellt.
Ich versuche nun mit eigenen Worten kurz zu beschreiben was genau 
gemacht werden soll:
Zuerst wird ein Signal (TL1) erzeugt, mit welche eine Laserdiode 
angesteuert wird. Die Breite des Signals soll ich im Bereich zwischen 20 
- 50 ns bewegen. Mit einer Schrittweite von 500 ps. Danach wird ein 
Signal (TV1) erzeugt welches in der Kamera den Shutter 1 öffnet. Dieses 
Signal muss die selbe Breite haben wie das Signal TL1 . Das Signal TV1 
soll eine nach "links" programmierbare Delayzeit haben, die auch in der 
Auflösung von 500 ps einstellbar sein soll. Sobald der Shutter 1 
geschlossen ist, wird ein Signal an Shutter 2 angelegt und dieser 
geöffnet. Durch das Verhältnis des eintreffenden Lichtes auf die beiden 
Shutter kann später die Entfernung bestimmt werden. (Auswertung nicht 
Teil des Projektes) Ein dritter Shutter (TV3) ist geöffnet wenn die 
beiden Shutter 1 & 2 geschlossen sind.
Hoffe ich konnte verständlich erklären, was implementiert werden soll.

Als Hardware steht mir ein Altera ARRIA V GT Development Board zur 
Verfügung und als Software werde ich Quartus II 13.1 benutzen. Eine 
Einarbeitung sowohl in die Software als auch in die Hardware hat 
stattgefunden.

Bisher fehlt mir aber ein wirklicher Anfang wie ich dieses Problem 
umsetzen kann. Wäre dankbar für ein paar Gedankenanstöße um überhaupt 
reinzukommen.

Gruß Jan

von Paul B. (Gast)


Lesenswert?

Du brauchst einen hochgenauen Quarz, ein einstellbares Delay, ein 
Oder-Gatter UND-Gatter zum Ereugen des Pulses, ein weiteres 
einstellbares Delay ein Oder-Gatter zum Verlängern des Pulses und eines 
zum Abschalten. Das Ganze zweimal für die beiden Shutter. In einem ARRIA 
V GT müsste das vom Tempo her gerade zu machen sein, auch wenn es von 
der Grösse her in einen MAX2 passt :-)

von Daniel R. (dan066)


Lesenswert?


von Karl (Gast)


Lesenswert?

Ohne es je verwendet zu haben: TI wirbt bei seinen TMS320 mit 
High-resolution PWM und Micro-Edge-Positioning. Angeblich bis 150 ps 
Auflösung. Angesichts dessen, dass die Aufgabe abgesehen von den kleinen 
Zeiten recht einfach aussieht, vielleicht einen Blick wert.

von Lattice User (Gast)


Lesenswert?

Der Arria V GT hat Transceiver deren Transmitter im PMA Mode bis zu 10.3 
GBit/s können. Damit ist es "trivial" Pulse mit einer einstellbaren 
Breite in 100 ps Schritten zu erzeugen.

von J. S. (engineer) Benutzerseite


Lesenswert?

Lattice User schrieb:
> amit ist es "trivial" Pulse mit einer einstellbaren
> Breite in 100 ps Schritten zu erzeugen.
Mit den Xilinx-IO-Delays geht das nominell sogar auf 50ps genau und dies 
erfordert nicht einmal einen aktuellen Chip. Wenn man da ein bischen 
nachdenkt und klug baut, geht es sogar auf 15ps (getestet), soforen die 
Analogtechnik drum herum entsprechend aufgrüstet wird.

von Lattice User (Gast)


Lesenswert?

Jürgen S. schrieb:
> Lattice User schrieb:
>> amit ist es "trivial" Pulse mit einer einstellbaren
>> Breite in 100 ps Schritten zu erzeugen.
> Mit den Xilinx-IO-Delays geht das nominell sogar auf 50ps genau und dies
> erfordert nicht einmal einen aktuellen Chip. Wenn man da ein bischen
> nachdenkt und klug baut, geht es sogar auf 15ps (getestet), soforen die
> Analogtechnik drum herum entsprechend aufgrüstet wird.

Du hast mich falsch verstanden. Wozu sich mit IO Delays und sonstigen 
Tricks abplagen, wenn der FPGA den er bereits auf dem Tisch hat eine 
viel einfachere Möglichkeit bietet, nämlich ein mit 10 GHz taktbares 
80bit Schieberegister.

Ich habe keine Zweifel dass so etwas auch mit Xilinx geht, nur hat er 
den Arria V GT bereits.

von J. S. (engineer) Benutzerseite


Lesenswert?

Ich habe Dich schon richtig verstanden :-)
Mein Beitrag war nur der Vollständigkeit erwähnt, dass die 500ps kein 
Hexenwerk sind.

Allerdings muss ich schon noch sagen, dass das 10GHz Schieberegister 
auch nicht ganz so einfach anzusteuern sein wird, im Vergleich zu einem 
Delay, bei dem das "Abplagen" darin bestünde, das delay reinzuschreiben 
:-)

von Barni2k7 (Gast)


Lesenswert?

Ok, also euren Aussagen zu entnehmen dürfte die Umsetzung nicht wirklich 
ein Problem sein.

Zuerst muss ich ja die beiden Pulse TL1 und TV1 (mit einstellbarem 
Delay) erzeugen. Doch wie genau erzeuge ich eine solche Pulse mittels 
VHDL? Wird sowas durch eine PWM gemacht oder bin ich da jetzt komplett 
auf dem Holzweg?

Und wofür genau soll das 10 GHz taktbare 80bit Schieberegister genutzt 
werden?

Gruß Jan

von Lattice User (Gast)


Lesenswert?

Barni2k7 schrieb:
> Ok, also euren Aussagen zu entnehmen dürfte die Umsetzung nicht wirklich
> ein Problem sein.
>
> Zuerst muss ich ja die beiden Pulse TL1 und TV1 (mit einstellbarem
> Delay) erzeugen. Doch wie genau erzeuge ich eine solche Pulse mittels
> VHDL? Wird sowas durch eine PWM gemacht oder bin ich da jetzt komplett
> auf dem Holzweg?

Im Prinzip ja, aber dafür müsstet du den FPGA mit 2 GHz betreiben, was 
nicht geht.

>
> Und wofür genau soll das 10 GHz taktbare 80bit Schieberegister genutzt
> werden?
>

Das Schieberegister wird z.B. all 8 ns, d.h. mit einem leicht 
beherschbaren 125 MHz Takt mit einem neuen Bitmuster geladen.

z.B. auf 2 GHz und 16 bit Breite konfiguriert, (um 500 ps Auflösung)
sieht es so aus..

0: 0000 0000 0000 0000
1: 1111 1111 1111 1111
2: 1111 1111 1111 1111
3: 1111 1111 1110 0000
4: 0000 0000 0000 0000

Gibt einen 21.5 ns langen Puls.

0: 0000 0000 0000 0000
1: 1111 1111 1111 1111
2: 1111 1111 1111 1111
3: 1111 1111 1111 0000
4: 0000 0000 0000 0000

Gibt einen 22 ns langen Puls.

Wie man den PMA Mode des GT Transceivers konfiguriert steht im 
Datashheet bzw siehe MegaWizard (oder wie auch immer das IP Tool in 
Quartus heisst)

Du braucht mindestens 3, die zudem einmalig beim Reset synchronisiert 
werden müssen. Bin nicht sicher ob das geht.

von Barni2k7 (Gast)


Lesenswert?

Ok, ich werde mich den Rest der Woche dann mal mit der erzeugend eines 
Pulses mit Hilfe des Schieberegisters auseinandersetzen. Und werde die 
Lösung dann hoffentlich am Freitag präsentieren können ;)

Falls ihr noch Anregungen oder Ideen habt immer her damit :)

Gruß Jan

von Barni2k7 (Gast)


Angehängte Dateien:

Lesenswert?

So das ganze hat dann doch etwas länger gedauert. Lag leider eine Woche 
krank im Bett.

Habe jetzt ein ein entsprechendes Schieberegister In VHDL beschrieben 
und mit einer Testbenche getestet. Das ganze ist aber noch nicht 
synthetisierbar, da mit in der eigentlichen Beschreibung die 
Realisierung mit den verschiedenen Clocks ( 125MHZ fürs parallele Laden 
& 2 GHz für das Schieben) fehlt.

Im Anhang habe ich das Schieberegister, die Testbench und die ModelSim 
Ergebnisse.

Gruß Jan

von FPGA-Spezi (Gast)


Lesenswert?

Barni2k7 schrieb:
> Habe jetzt ein ein entsprechendes Schieberegister In VHDL beschrieben

Sollte das nicht als Core vorliegen??

von jo (Gast)


Lesenswert?

>Im Anhang habe ich das Schieberegister, die Testbench und die ModelSim
>Ergebnisse.

>Gruß Jan

Ja schön und wie willst du das mit dem Arria V GT Transceiver 
verheiraten?

>Sollte das nicht als Core vorliegen??

Denk ich auch...

Gruß Jonas

von FPGA-Spezi (Gast)


Lesenswert?

Ich fürchte, hier müssen nochmals einige Grundlagen des FPGA-Designs 
besser verstanden werden, konkret die Unterscheidung virtuelle und reale 
Hardwareresourcen und deren Nutzung.

von jo (Gast)


Lesenswert?

>konkret die Unterscheidung virtuelle und reale Hardwareresourcen und deren 
Nutzung.

full ack!

gruss jonas

von Barni2k7 (Gast)


Lesenswert?

Guten Morgen,

ich kann eure Kritik vollkommen nachvollziehen! Es ging jetzt für mich 
im ersten Schritt überhaupt mal darum ein Gefühl dafür zu bekommen wie 
so ein Schieberegister in VHDL realisiert werden kann und mal eine erste 
Timinig Simulation durchzuführen.

Das meine Beschreibung nicht synthetisierbar ist, bzw so nicht als 
Hardware auf dem ARRIA V umsetzbar ist, ist mir bewusst. Der zweite 
Schritt wäre sich jetzt zu überlegen wie man dies realisieren kann.
Grade mit dem ARRIA V GT Transceiver habe ich noch nicht so die 
wirkliche Ahnung.

jo schrieb:
>>konkret die Unterscheidung virtuelle und reale Hardwareresourcen
> und deren Nutzung.

Was meinst du genau damit? Hast du vllt ein paar Tips oder Informationen 
dazu?

Gruß Jan

von Schrammler (Gast)


Lesenswert?

1. Ersetz die Variable durch ein Signal.

2. Wenn du die Sache mit dem Gigabit Tranceiver probieren möchtest dann 
belies dich erstmal etwas dazu (dafür sollte es einen IP Core geben den 
du nutzen kannst) und schau dir an wie man sowas instanziert (COMPONENT, 
PORT MAP)

3. Bau dir ne Simulation

4. Synthetisier das ganze und miss mit nem Oszi nach ob dein Ausgang das 
richtige tut. Danach kannst du deine Eingangsdaten und damit auch deinen 
Ausgangstakt verändern. Bei Xilinx lief das glaube ich über den DRP?

von Michael W. (Gast)


Lesenswert?

Mit einem Oszi die Transciever durchmessen? Eher LogicAnalyzer und den 
mit wenigstens 10GSPS.

von Christian R. (supachris)


Lesenswert?

Naja, schnelles Oszi mit viel Bandbreite und Differenztastkopf tuts 
auch.

von jo (Gast)


Lesenswert?

>Was meinst du genau damit? Hast du vllt ein paar Tips oder Informationen
>dazu?

Er meinte damit das manche Resourcen eines FPGA's z.B. der Transciever 
zwar die Funktion eines Schieberegisters haben, jedoch nicht als sochles 
in vhdl zu beschreiben sind, sondern meist über spezielle ip-generatoren 
code für diese erzeugt wird...das macht man dann selten zu Fuss, siehe 
z.B. DDR-RAM ip-generator usw...

Gruß Jonas

von Paul B. (Gast)


Lesenswert?

An dieser Stelle muss man sich immer wieder vergegenwärtigen, dass mit 
VHDL nur die frei konfigurierbare Logik verwaltet wird. Die harte Logig 
wird direkt verwendet.

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.