Hallo, Für ein Projekt brauche ich eine Schaltung die für einen Puls am Eingang, 8 Taktzyklen mit definierter länge an einem Ausgang ausgibt. Die Pulsdauer Ti sowie die Pausendauer Tp sollen je, genau 300nS betragen, also eine Periodendauer von 600nS am Ausgang. Wünschenswert wäre, wenn man die Zeiten für Ti und Tp, z.b. in 20nS Schritten ändern könnte. Ich habe mich leider bisher überwiegend mit Mikrocontrollern beschäftigt, deshalb die Frage: Ist so etwas mit einem FGPA möglich bzw. besser umsetzbar als mit einem uC? Oder nimmt man dafür doch lieber einen Mikrocontroller? Gruß Manuel
Servus, naja ich hab mal mit nem XC164 10MHz Pulse erzeugt, wobei hier die Pulse allein von den Port Kapas nicht mal mehr auf GND kamen! Aber 1,7MHz sollten machbar sein. Willst du mit den 20ns auch noch schneller werden oder nur langsamer? Beachte auch die Rise und Fall Zeiten, die ein Controller hat (wobei die wohl eher niedriger sind!). Ansonsten wäre noch interresant, was du damit schalten willst? Mathias
Danke für die schnelle Antwort! :-) Mit den 20nS will ich, wenn überhaupt nach oben, also auf keinen Fall schneller. Mit dem Ausgang soll ein optischer Transmitter angesteuert werden, um das Signal in einem LWL zu übertragen. Gruß Manuel
Manuel Weikert schrieb: > Ist so etwas mit einem FGPA möglich Programmierbare Logik ist dafür geradezu prädestiniert... > bzw. besser umsetzbar als mit einem uC? Für den, ders kann: ja. Für andere gibt es da noch einige Randbedingungen zu beachten: Welches FPGA? Welche Beschreibungssprache? Welche Versorgung (FPGAs brauchen und vertragen selten mehr als 3,3V)? Wie soll die Pulsdauer eingestellt werden? Reicht auch ein CPLD (einfache Versorgung, weniger komplex, billiger)? > Oder nimmt man dafür doch lieber einen Mikrocontroller? Wenn das die einzige Aufgabe sein sollte, dann ist ist ein FPGA technischer Overkill. Wenn du aber noch andere Aufgaben reinpacken kannst, dann Mathias Fendl schrieb: > ich hab mal mit nem XC164 10MHz Pulse erzeugt, wobei hier die Pulse > allein von den Port Kapas nicht mal mehr auf GND kamen! Allein der Port kommt in 50ns (von 1/10MHz=100ns --> 50nsHigh/50nsLow) nicht mehr auf einen definierten Pegel? Wie sollte denn mit so einem Portpin z.B. ein externes RAM angesteuert werden? Ich vermute die Ursache für dieses Verhalten irgendwo anders...
Lothar Miller schrieb: > Programmierbare Logik ist dafür geradezu prädestiniert... Das klingt doch schonmal gut. :-) > Reicht auch ein CPLD (einfache Versorgung, weniger komplex, billiger)? Ich denke ein CPLD reicht mir auch, habe da an sowas wie den CPLD XC9536 gedacht, was meinst du? Da ich gerade erst dabei bin mich in das Thema einzulesen kannst du mir vielleicht schonmal einen Tipp geben wie man am besten einen Puls definierter Länge ausgibt. Geht man da den Weg über die Laufzeiten und schaltet dann dementsprechend viele Flipflops dazwischen? Oder kann man dem einfach "sagen" er soll bei (Clock von 100MHz) einfach 30 Zyklen auf high bleiben? Die Ansteuerung der Zeit (also ob genau 300nS oder 320nS, usw.) könnte man dann per Jumper an bestimmten Eingängen definieren. Ist der Ansatz richtig, oder gibt es leichter/bessere Methoden, sowas umzusetzen? Gruß Manuel
Bin gerade dabei mich ein wenig in VHDL einzulesen. Das ganze scheint wirlich sehr interssant zu sein, und hat potential als nebenberufliches Hobby zu enden. :-) Da ich aber mit meinem Projekt schnell ans Ziel kommen möchte konzentriere ich mich vorerst primär auf die "puls definierter länge" Sache. Ich habe in einem Tutorial der Uni Hamburg folgenden VHDL-Code gefunden:
1 | architecture ARCH_BEHAV of COMPARE is |
2 | begin
|
3 | P1: process (A, B) |
4 | begin
|
5 | if (A = B) then |
6 | C <= ’1’ after 1 ns; |
7 | else
|
8 | C <= ’0’ after 2 ns; |
9 | end if; |
10 | end process P1; |
11 | end architecture ARCH_BEHAV; |
Besonderes Augenmerk ist gleich auf die "after 1ns;" Zeile gefallen. Ist es wirklich so einfach, dass ich sagen kann:
1 | Ausgang x <= 1 after 300ns; |
2 | Ausgang x <= 0 after 300ns; |
? Bitte versteht mich nicht falsch, ich möchte nicht die basics von euch erklärt bekommen, die gibt es ja ausreichend nachzulesen. Ich möchte nur im Zuge meiner Einarbeitung gleich besonderes Augenmerk auf die momentan benötigten Dinge legen können. Gruß Manuel
So wie ich das verstanden habe, gelten die Zeitangaben nur für Simulationen auf dem Testbench. Bei der Synthese in reale Hardware werden sie ignoriert. (korrigiert mich, wenn das falsch sein sollte)
Manuel Weikert schrieb: > Ist es wirklich so einfach, dass ich sagen kann: > Ausgang x <= 1 after 300ns; Ja und Nein. Wie schon angemerkt kann die Sprache VHDL das. Aber ein CPLD/FPGA kann das nicht. Aber keine Sorge, das ist der beliebteste Anfänger-Irrtum... ;-) Kurz und knackig: Alles (zu 99,5%), was in realer Hardware mit Zeiten (Timer, Zähler,...) zu tun hat, hat irgendwas mit einem Takt zu tun. Sieh dir mal an, wie ich ein Lauflicht mache (das is ja das "Hello-World" der Hardware): http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html Und versuch ein Exemplar des Buches VHDL-Synthese von Reichardt&Schwarz zu bekommen...
Lothar Miller schrieb: > Und versuch ein Exemplar des Buches VHDL-Synthese von Reichardt&Schwarz > zu bekommen... Hallo Lothar, das Buch ist da. :-) Vielen Dank für die Empfehlung, es ist schön geschrieben und leicht verständlich (zumindest die ersten Kapitel). Ich bekomme nun so langsam einen Eindruck davon, was mit FGPA's alles möglich ist und bin begeistert. Werde mich nun erstmal ausgiebig mit dem Buch befassen. Wenn ich danach noch ungeklärte Fragen dazu habe (denke nicht), werde ich mich melden. Gruß Manuel
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.