Forum: FPGA, VHDL & Co. Für einen puls am Eingang 8 takte definierter länge ausgeben


von Manuel W. (wanie)


Lesenswert?

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

von Mathias F. (minglifu)


Lesenswert?

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

von Manuel W. (wanie)


Lesenswert?

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

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


Lesenswert?

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

von Manuel W. (wanie)


Lesenswert?

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

von Manuel W. (wanie)


Lesenswert?

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

von PittyJ (Gast)


Lesenswert?

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)

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


Lesenswert?

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

von Manuel W. (wanie)


Lesenswert?

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
Noch kein Account? Hier anmelden.