Hallo zusammen! Ich würde meinen Altera-FPGA gern sowohl mit einem Oszillator wie auch mit einem extern angeschlossenen Rechtecksignalgenerator (CMOS-Pegel) betreiben. Dazu habe ich ein paar Fragen: 1. Megafunction altclkctrl Habe ich das aus dem Datenblatt richtig verstanden, dass man bei unterschiedlichen Taktquellen die altclkctrl-Funktion verwenden muss, die als MUX funktioniert und den Takt an die PLLs weiterleitet? Wie ist das dann zu betreiben wenn ich entweder mit dem Oszillator und der PLL - ODER dem externen Takt als Global-Clock arbeiten möchte? 2. Pegelanpassung Da die Takteingänge des FPGAs nur 3,3V vertragen, müsste ich den Taktpegel aus dem Signalgenerator dann noch durch einen Pegelwandler schicken oder gibt es (da nur ein Signal) auch noch einen andere Möglichkeit? Perfekt wäre eine 50ohm Anpassung-ist aber kein Muss. 3. Taktausgang Zusätzlich möchte ich noch den Arbeitstakt ausgeben. Dafür muss ich dann auch die Megafunction von oben nehmen, oder? Es gibt zwar viel Text zu dem Thema oder scheinbar keine Applikations-Schaltung. Darum bin ich mir auch noch so unsicher. Danke und viele Grüße!
1. ja. du kannst jede PLL auch mit einem äusseren Takt zusätlzich betreiben und umschalten. 2. nein, 3,3V OSC oder einen passenden buffer. Serienterminierung mit z.B. 33 Ohm reichen. 3. DDR-FF im Ausgangspin nutzen und statisch mit 1/0 belegen.
Hey Pesto! Schon mal danke für deine Antwort. Wie mag sich denn die PLL verhalten, wenn man ihr verschiedene Arbeitstakte gibt? Man gibt ihr ja vorher an, wie hoch der Eingangstakt ist. Wenn ich jetzt aber zwischen OSZ und ext. Takt hin-und-her schalte, gibt es da evtl. Probleme? Was ist DDR-FF? Dazu finde ich irgendwie nichts..
Sorry, da war's wohl schon was spät.. Ich hab mich jetzt mal mit der Megafunction ALTDDIO (also dem DDR-FF) befasst. Das scheint wirklich alles mitzubringen, was ich benötige. Danke für den Hinweis! Das einzige offene Problem ist jetzt noch der externe Takt mit CMOS-Pegel. Dieser Pegelwandler scheint mir die beste Wahl zu sein: http://www.fairchildsemi.com/ds/NC/NC7SZ08.pdf @Pesto: Wie kommst du zu den 33ohm?
Sofern Du die ALTPLL Megafuction benutzt kannst Du für Deine PLL auch zwei Clockeingänge wählen und diese in der Laufzeit umstellen, hab ich zwar noch nie gemacht, doch so habe ich es verstanden. Ob Deine externe CLK mit 3,3V Pegel passt hängt in erster Linie von der IO Voltage der IO Bank ab an der das Signal ankommt. Ist diese ebenfalls 3,3V sehe ich kein Problem. Ist sie geringer so sind die I/Os zwar over voltage tolerant, aber laut Datenblatt nicht beliebig viele Zyklen bevor der Pin sich verabschiedet. Sagen wir mal so, ich hab aktuell einen FPGA der mit zwei externen Quarzoszillatoren 4 PLLs versorgt und darüber hinaus kommen noch mindestens 4-5 externe Clock dazu, die teilweise auf dedizierte Clockeingänge gehen, teilweise aber auch nur stumpfe GPIOs füttern. Geht alles ohne Probleme. Solange es aber nicht direkt in eine PLL danach geht ist das Constraining wichtig, damit Quartus weiss, mit welchem Takt es rechnen muss, ansonsten wird 1ns = 1GHz angenommen und dass schafft auch ein Stratix nicht. ;) Wenn möglich solltest Du aber immer auf dedizierte Clockeingänge routen, damit die Clocks sinnvoll auf die globalen Clocknetzwerke im FPGA verteilt werden können (das Delay ist dann minimal). Wenn die Clock aber nur ein paar Register taktet ist ein GPIO völlig ausreichend.
Hey! Danke für deine Antwort! Mein Design wird wirklich relativ simpel. Ich glaub dafür mach ich mir einfach zu viele Sorgen :) Also mein 150MHz Oszillator soll eine PLL füttern, die dann verschiedene Takte erzeugt die wiederum gemuxt werden. Der am MUX ausgewählte Takt soll dann einen Prozess takten. Der externe Signalgenerator soll auch auf diesen MUX von oben aufgelegt werden, sodass man entweder einen der PLL-Takte ODER den externen Generatotakt wählen kann. Ich kann bei Quartus für meinen CycloneIII nur einen Eingangstakt für die PLLs wählen. Als Eingangstakt-MUX steht die Megafunction ALTCLKCTRL zur Verfügung. Die würde aber, wie ich das verstehe, den selektierten Eingangstakt (Osz oder Signalgenerator) nur einer PLL zuführen und nicht als globalen Takt zur Verfügung stehen. Ich weiß also nicht, wie ich den Osz über die PLL führe und den anderen Eingangstakt nicht.
Also so: Takt1: Signalgenerator Takt2: 150MHz Oszillator |--------| Takt1----------------------| | | MUX | |----------| | |---------> Prozess | c0| | | | Takt2---| PLL c1|-------| | | | c2| |--------| ---> clk_out |----------| Kann ich da einfach die beiden Eingangstakte auf zwei clk_p Pins legen und den clk_out über ein DDR-FF auf einen GPIO Pin?
Warum so kompliziert? Du musst und darfst den Takt nicht über einen MUX führen. Wozu? Da immer ein Takt inaktiv sein wird, kannst du das Ganze IN/VOr der PLL machen.
Wie kann ich das ganze denn IN der PLL machen, wenn der nur einen Takteingang hat? Und wenn die Auswahl des Eingangstaktes VOR der PLL passiert, ist das doch auch ein MUX, oder wie meinst du das?
Daniel G. schrieb: > Also mein 150MHz Oszillator soll eine PLL füttern, die dann verschiedene > Takte erzeugt die wiederum gemuxt werden. Der am MUX ausgewählte Takt > soll dann einen Prozess takten. So etwas klingt mir eher mach Murx. Falls Du mit der Taktfrequenz nach oben gehen willst, also > 150 MHz, dann würde ich mit der PLL die höchste Taktfrequenz erzeugen. Alle anderen, tieferen Frequenzen werden mit einem Clock Enable erzeugt, und die gesamte Schaltung läuft mit immer mit dem selben Takt. Alternativ könntest Du auch die Parameter der PLL ändern, sodass diese unterschiedliche Takte erzeugt, sodass trotzdem immer nur der Ausgang der PLL OHNE Mux an die Schaltung geht. Zumindest bei Xilinx, glaube ich, kann man die Teilerfaktoren der PLL dynamisch ändern. Habe das aber noch nicht benötigt. Und auch das mit dem Signalgenerator ist sicher nicht optimal. So ein Generator liefert für FPGA Verhältnisse niedere Frequenzen, und die Flanken entsprechen üblicherweise nicht den Anforderungen eines FPGAs. Du musst also am Eingang sicherlich einen Schmitt-Trigger vorsehen, der Dir die Flankensteilheit garantiert.
Genau so hatte ich es vor. 150MHz ist die höchste Taktgeschwindigkeit. Alle teilbaren Takte werden durch clock enable erzeugt. Jedoch gibt es auch "ungerade" Takte, die ich mit der PLL erzeugen muss - und deshalb der MUX dahinter. Das Thema "rekonfigurierbare PLL" führt für dieses Projekt zu weit. Das mit der Flankensteilheit ist auch richtig. Die Quelle wird hier einfach mal als qualitativ hochwertig vorausgesetzt. Die immer noch offene Frage ist nun: wie bekomme ich den Takt des Generators (für meine Zwecke) in den FPGA? clk_in oder einfach durch ein GPIO wie von Joost S. beschrieben. Und wie bekomme ich den aktiven Takt wieder aus den Chip raus? Über ein DDR-FF an einem GPIO oder muss ich da wie schon oft gelesen über einen clk-pin gehen (wobei die doch nur als Eingang gedacht sind, oder)? Viele Grüße!
Daniel G. schrieb: > Die immer noch offene Frage ist nun: wie bekomme ich den Takt des > Generators (für meine Zwecke) in den FPGA? > clk_in oder einfach durch ein > GPIO wie von Joost S. beschrieben. Dazu musst Du das Datenblatt lesen oder jemand, der Altera besser kennt, kann es beantworten. Der Unterschied liegt einmal in der Laufzeit (dürfte Dir wahrscheinlich egal sein), und andererseits kann es möglich sein, dass der GPIO nicht zu einem Taktmultiplexer geroutet werden kann. Nimm einen dedizierten Eingang und Du bist auf der sicheren Seite. > Und wie bekomme ich den aktiven Takt > wieder aus den Chip raus? Über ein DDR-FF an einem GPIO oder muss ich da > wie schon oft gelesen über einen clk-pin gehen (wobei die doch nur als > Eingang gedacht sind, oder)? Auch hier liegt der Unterschied nur in der Laufzeit. Ein DDR-FF erzeugt ein Taktsignal, dessen Flanken gleichzeitig zu den anderen, durch diesen Takt erzeugten Ausgängen liegt. Das kann hilfreich sein wenn man den Takt dazu verwendet, mit einem anderen Baustein die ausgegebenen Daten wieder einzutakten (Bus). Wenn Du nur den Takt als Signal allein brauchst, dann genügt ein normaler Ausgang. Dedizierte Clock Pins haben damit nichts zu tun.
Ah wunderbar! Das ist genau das, was ich lesen wollte. Ja, Laufzeiten sind in meinem Fall wirklich egal. Ich hab nur in einem Altera-Forum gelesen, dass man den Clock-Ausgang zu einem dedizierten Clock-Pin routen soll. Und das hat mich verwirrt. Vielen Dank!
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.