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
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 :-)
Hier steht auch was dazu: http://www.physik.rwth-aachen.de/fileadmin/user_upload/www_physik/Institute/Inst_3B/Mitarbeiter/Joerg_Pretz/Bachelorarbeit_OliverFreyermuth.pdf
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.
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.
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.
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.
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 :-)
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
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.
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
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
Barni2k7 schrieb: > Habe jetzt ein ein entsprechendes Schieberegister In VHDL beschrieben Sollte das nicht als Core vorliegen??
>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
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.
>konkret die Unterscheidung virtuelle und reale Hardwareresourcen und deren
Nutzung.
full ack!
gruss jonas
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
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?
Mit einem Oszi die Transciever durchmessen? Eher LogicAnalyzer und den mit wenigstens 10GSPS.
Naja, schnelles Oszi mit viel Bandbreite und Differenztastkopf tuts auch.
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.