Forum: FPGA, VHDL & Co. Toggeln von pins


von Max (Gast)


Lesenswert?

Hallo,

Ich nutze das Spartan-3E und wollte jetzt mal die Zeit messen wie lange 
mein Programm braucht. Dafür wollte ich einen Pin toggeln wie beim 
Mikrocontroller wenn ich das jedoch machen möchte bekomme ich immer den 
Fehler "this signal is connected to multiple drivers". Daher meine frage 
ist es möglich das zu machen oder kann ich die zeit nur über die 
Simulation messen?

von Dussel (Gast)


Lesenswert?

Max schrieb:
> Daher meine frage ist es möglich das zu machen oder kann ich die zeit nur
> über die Simulation messen?
Das ist ziemlich problemlos möglich. Toggeln ist eine Grundfunktion.

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


Lesenswert?

Max schrieb:
> Daher meine frage ist es möglich das zu machen
Ja.

> oder kann ich die zeit nur über die Simulation messen?
Du kommst allein mit Überlegen drauf: wenn du ein Flipflop mit 
irgendeiner Taktfrequenz toggeln lässt, dann kommt die halbe 
Taktfrequenz heraus.

> wie lange mein Programm braucht
Du hast die komplett falsche Denkweise!
VHDL ist keine Programmiersprache (sonst hieße es ja VHPL), sondern 
eine HardwareBESCHREIBUNGSsprache. Und um etwas BESCHREIBEN zu können, 
muss man eine brauchbare Vorstellung davon haben. Du musst also nicht 
irgendwas hin"programmieren", sondern dir eine Hardware ausdenken oder 
skizzieren und dann diese Hardware mit VHDL BESCHREIBEN.

> mein Programm ...
> immer den Fehler "this signal is connected to multiple drivers"
Zeig doch mal...

: Bearbeitet durch Moderator
von Fpgakuechle K. (Gast)


Lesenswert?

Max schrieb:

> Ich nutze das Spartan-3E und wollte jetzt mal die Zeit messen wie lange
> mein Programm braucht. Dafür wollte ich einen Pin toggeln wie beim
> Mikrocontroller wenn ich das jedoch machen möchte bekomme ich immer den
> Fehler "this signal is connected to multiple drivers". Daher meine frage
> ist es möglich das zu machen oder kann ich die zeit nur über die
> Simulation messen?
1
process(clk)
2
 if rsing_edge(clk) then
3
  toogle_pin <= not toogle_pin;
4
 end if;
5
end process;

Mit DDR-FF gehts noch schneller oder du nimmst die MultiGigabit 
Transceiver (MGT) da sind soger meherer GHz toogle-frequenz möglich.
Da brauchs du schon eine Multi kilo Euro Scope um das überhaupt zu 
messen.

Dein Problem ist wahrscheinlich das mehreer processe das selbe signal 
treiben.

Recherchier mal "multiple driver".

MfG,

von Fau Ha De Ell Profi (Gast)


Lesenswert?

Lothar M. schrieb:
>> wie lange mein Programm braucht
> Du hast die komplett falsche Denkweise!
> VHDL ist keine Programmiersprache

Das ist erstens nicht uneingeschränkt richtig und zweitens nicht die 
Begründung gegen die Ansichten des TE.

Ich probiere es mal so:

Dein VHDL-Programm läuft zunächst nicht im FPGA sondern in der 
Synthesesofware. Diese bestimmt in der Simulation, wie lange das real 
dauert. Wie schnell da virtuell was toogelt, hängt von der eingestellten 
Verzögerung ab.

"wie lange in VHDL" etwas "braucht" hängt davon ab, wie es gebaut wird 
und das ist eine Sache des Tools und der Hardware und Sinn macht diese 
Betrachtung nur bei ungetakteten Schaltungen.

Die schnellste programmierbare Einheit in einem FPGA ist eine 
rückgekoppelte LUT. In einen Spartan 3E kann die mit gemessennen 900 MHz 
schwingen. Man darf sie aber nicht wesentlich belasten, sondern muss die 
mit Faktor 3 runterteilen und dann auf einen Buffer geben. Damit kann 
man einen Schwingkreis von etwa 300 MHz herstellen. Mit dem kann man 
aber nicht viel treiben, weil in einem Spartan die Elemente insgesamt zu 
langsam sind, als dass grössere Kombinatorik so rasch laufen könnte.

Ansonsten toggelt dann ein Signal intern so schnell, wie eben der Takt 
vorgibt.

Mit einem reinen Takt bekommt man in einem S3E mindestens (Erfahrung) 
200MHz DDR2 hin - also 400 MHz. Aber auch die nur, wenn sie fast nichts 
treiben müssen, ausser kurzen Leitungen.

Es gibt also nochmal einen Unterschied zwischen innen und aussen, und 
dem, was Takt sein kann und darf.

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


Lesenswert?

Fau Ha De Ell Profi schrieb:
> Dein VHDL-Programm läuft zunächst nicht im FPGA sondern in der
> Synthesesofware. Diese bestimmt in der Simulation, wie lange das real
> dauert.
Die "Synthesesoftware" simuliert nicht. Und der simulator berechnet 
keine Timings. Das macht dann erst die STA...

>>> wie lange mein Programm braucht
>> Du hast die komplett falsche Denkweise!
>> VHDL ist keine Programmiersprache
> Das ist erstens nicht uneingeschränkt richtig
Oh doch. Nur hast du durchaus die richtige Sichtweise und kannst dir 
gar nicht (mehr) vorstellen, wie falsch Max derzeit nocht liegt. Er 
meint, sein "Programm" würde wie ein Softwareprogramm "von oben her 
Schritt für Schritt abgearbeitet". Und genau das passiert eben bei 
einer VHDL Beschreibung nicht. Da kann es durchaus sein, dass die 
"unterste" Zuweisung weit vor der "obersten" fertig ist.
Und dann kommt noch dazu, dass bestenfalls 10% des gesamten VHDL 
Sprachumfangs überhaupt synthetisierbar und damit auf Hardware 
umsetzbar sind. Und diese Befehle dann auch noch in der richtigen 
Reihenfolge stehen müssen, was wiederum im Synthesizer-Handbuch (für 
Xilinx der XST User Guide) festgehalten ist...

> "wie lange in VHDL" etwas "braucht" hängt davon ab, wie es gebaut wird
> und das ist eine Sache des Tools und der Hardware und Sinn macht diese
> Betrachtung nur bei ungetakteten Schaltungen.
Gerade bei getakteten Schaltungen ist die Frage "wie lange etwas 
braucht" substantiell wichtig. Denn die Antwort auf diese Frage bestimmt 
die maximale Taktfrequenz eines Designs.

Nicht umsonst hatte ich nach dem VHDL Code der fraglichen und 
fehlerhaften Beschreibung gefragt.

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.