Forum: FPGA, VHDL & Co. Was bedeutet "synthetisierbar"?


von Tim S. (mrmilk)


Lesenswert?

Hallo zusammen,

ich bin ihr neu im Forum und habe auch gleich die erste Frage. An vielen 
Stellen der hardwarenahen Programmierung finde ich den Begriff 
"synthetisierbar". Aber nirgends eine genaue Definition. Könnt ihr mir 
hier vielleicht weiter helfen?



Viele Grüße
ts(mm)

von Antti Lukats (Gast)


Lesenswert?

es bedeutet das synthese tools keine fehler geben.
so einfach ist es

das gegenteil ist simulation code
der geht nicht durch synthese, gibt fehler

von Sven P. (Gast)


Lesenswert?

Das hat nen ganz eigenen Ursprung. Die Werkzeuge, mit denen man heute 
gängigerweise Hardware beschreibt (VHDL und Verilog), die werden für 
diesen Zweck nur missbraucht. Eigentlich wurden die erfunden, um 
Testszenarien möglichst genau zu beschreiben ('wann geht welches Signal 
in welchen Zustand über'). Entsprechende Fähigkeiten haben diese 
Beschreibungsweisen dann, typischster Vertreter: 'warte eine Zeit'.
Natürlich kann man das einem Transistor so nicht klar machen (wie auch), 
das wäre dann eben nicht synthetisierbar.
Eine kleine Untermenge der Fähigkeiten von VHDL und Verilog aber sind 
durchaus synthetisierbar, etwa logische Verknüfungen. Denn die kann man 
mit Logik-Gattern in Hardware abbilden.

von Matthias G. (mgottke)


Lesenswert?

Hallo Tim,

um das zu verstehen musst Du Dir veranschaulichen wie programmierbare 
Logik funktioniert. Stell Dir dazu einfach vor Du hättest einen Sack 
voll Logik und ein Sack voll FlipFlops (FFs). Die kannst Du miteinander 
verschalten.

Das ist das was man in VHDL bzw. in Verilog beschreiben kann. Allerdings 
sind Verilog und VHDL (vor allem VHDL) aber keine 
Hardware-Beschreibungs-Sprachen. Auch wenn man damit hervorragend 
Hardware beschreiben kann. Die Sprachen beschreiben ein Verhalten.

Die Sprachen beinhalten aber eine Menge an Funktionalität 
(Beschreibungsmöglichkeiten), welche man nicht mit Logik und FFs nicht 
umsetzen kann. Die Umsetzung von einer Verhaltensbeschreibung durch die 
diversen Tools in eine Hardwareverdrahtung nennt man Synthese. Wenn die 
Verhaltensbeschreibung nicht realisierbar ist, dann ist sie eben "nicht 
synthetisierbar".

Einfaches Beispiel in VHDL:
1
a <= b after 3 ms;
Es gibt eben keine Logik oder kein FF das nach 3 ms das Signal b 
übernimmt. Aber es läßt sich sehr schön beschreiben ;-)

Matthias

von Fpgakuechle K. (Gast)


Lesenswert?

Tim S. schrieb:
> Hallo zusammen,
>
> ich bin ihr neu im Forum und habe auch gleich die erste Frage. An vielen
> Stellen der hardwarenahen Programmierung finde ich den Begriff
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> "synthetisierbar". Aber nirgends eine genaue Definition. Könnt ihr mir
> hier vielleicht weiter helfen?


Falsche baustelle, du meinst Hardwaremodellierung nicht "hardwarenahe 
Programmierung".

Ein Modell ist hier die Beschreibung einer logischen (digitalen) 
Schaltung. (so was wie: wenn das Eingangs-Pin namens INT von 0 auf 1 
wechselt, setze das Register PC auf den Wert 0x0006 und kopiere den 
Inhalt der register AA BB CC DD in die Register SAA SBB SCC und SDD). 
Mit einem Stück Software, das man Simulator nennt kann man das Verhalten 
nachstellen und debuggen, mit dem Stück Software das man Synthesetool 
nennt, kann man aus der selben beschreibung automatisch 
Konfigurationsdateien für FPGAs und/oder andere Dateien für die 
Chipfertigung erzeugen.

Ist der Code nicht synthetisierbar, muss du die Konfigurationsdateien 
etc. anders erzeugen, z.B. durch Eingabe eines Schaltplanes. Da ist aber 
doppelter Aufwand und die Simulation ist zu Teilen für die Katz. (so als 
ob du ein Programm für ein java-handy erst in Perl für Linux 
ausprobiertst und debuggst). Lerne also nicht mit VHDL wie mit einer 
Programmierspache wie C umzugehen, sondern lerne wie man mit VHDL 
digitale Hardware mit FPGA's entwickelt.

Gruß

von faustian (Gast)


Lesenswert?

"Es gibt eben keine Logik oder kein FF das nach 3 ms das Signal b
übernimmt. Aber es läßt sich sehr schön beschreiben ;-)"

Als nicht-FPGAler wuerde ich da jetzt sagen irgendwo einen bekannten 
Takt abgreifen und einen grossen Zaehler und einen Wortkomparator 
nehmen, und damit eine Verzoegerung (+- ein paar Prozent) realisieren - 
oder ein schlichtes Monoflop ;)

von Fpgakuechle K. (Gast)


Lesenswert?

faustian schrieb:
> "Es gibt eben keine Logik oder kein FF das nach 3 ms das Signal b
> übernimmt. Aber es läßt sich sehr schön beschreiben ;-)"
>
> Als nicht-FPGAler wuerde ich da jetzt sagen irgendwo einen bekannten
> Takt abgreifen und einen grossen Zaehler und einen Wortkomparator
> nehmen, und damit eine Verzoegerung (+- ein paar Prozent) realisieren -
> oder ein schlichtes Monoflop ;)

Nein, mit einem counter oder einem Monoflop kannst du kein Signal 
definiert verzögern. Einen einzelnen Impuls (genauer einen Pegelwechsel) 
ja, aber kein beliebiges Signal (was hier als Impulsfolge aufzufassen 
ist). Da brauchst Du schon einen signalrecorder oder eine delay line 
z.B. CCD.

Gruss

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


Lesenswert?

"Synthetisierbar" heißt nichts anderes, als dass sich eine Beschreibung 
(in irgendeiner Hardwarebeschreibungssprache, auch Schaltplan) auf eine 
Hardware abbilden (= dort lauffähig implementieren) lässt.

Es gibt aber durchaus Code, der sich problemlos in ein ASIC 
synthetisieren lässt und der nie und nimmer auf einem FPGA zu laufen 
kommt (das sind besonders die Tricks mit Laufzeiten und asynchroner 
Logik...).

> Nein, mit einem counter oder einem Monoflop kannst du kein Signal
> definiert verzögern.
Ich würde das jetzt nicht päpstlicher sehen als der Papst, und klar 
dafür sprechen, das ein "Signal" in einer Logikschaltung nur 2 
definierte/gültige Zustände kennt. Das hat nichts mit analogen 
"Signalen" der realen Welt zu tun...

von Tim S. (mrmilk)


Lesenswert?

Hallo,

vielen Dank für die ganzen Antworten. Wenn ich es also richtig verstehe, 
bedeutet dieses:

Die modellierte Hardware welche mit einer Hardwarebeschreibungssprache 
beschrieben wurde ist mit Hilfe von Logikbausteinen und Registern 
realisierbar.


Die Modellierung kann soweit mit VHDL und Verilog geschehen. Und wenn 
ich mich nicht ganz täusche auch mit SystemC.

Wäre dieses so richtig?


Viele Grüße
TS(MM)

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


Lesenswert?

> Wäre dieses so richtig?
Ja.
Es gibt neben den angesprochenen noch andere HW-Beschreibungssprachen, 
die aber ausgestorben/obsolete oder sehr spezialisiert sind.

von Fpgakuechle K. (Gast)


Lesenswert?

Lothar Miller schrieb:

>> Nein, mit einem counter oder einem Monoflop kannst du kein Signal
>> definiert verzögern.
> Ich würde das jetzt nicht päpstlicher sehen als der Papst, und klar
> dafür sprechen, das ein "Signal" in einer Logikschaltung nur 2
> definierte/gültige Zustände kennt. Das hat nichts mit analogen
> "Signalen" der realen Welt zu tun...

Auch digitale Signale sind nicht beliebig auf die beschriebene Weise 
verzögerbar. Nur die bei denene der zeitl. Abstand zw. zwei 
Zustandswechsel größer ist als die gewünschte Verzögerungszeit.

N'abend

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


Lesenswert?

Fpga Kuechle schrieb:
> Auch digitale Signale sind nicht beliebig auf die beschriebene Weise
> verzögerbar. Nur die bei denene der zeitl. Abstand zw. zwei
> Zustandswechsel größer ist als die gewünschte Verzögerungszeit.
Es ginge mit einem digitalen Eimerkettenspeicher aka Schieberegister ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lothar Miller schrieb:

> Es ginge mit einem digitalen Eimerkettenspeicher aka Schieberegister ;-)

Kann aber bei 3 ms schon ziemlich lang werden...

von Fpgakuechle K. (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Lothar Miller schrieb:
>
>> Es ginge mit einem digitalen Eimerkettenspeicher aka Schieberegister ;-)
>
> Kann aber bei 3 ms schon ziemlich lang werden...

Das stand nicht zur Auswahl, sondern einzelnes Monoflop, Counter oder 
register. Schieberegister geht auch, stoest aber schnell an grenzen 
hinsichtlich Größe oder parametrisierbarkeit (Einstellbarkeit der 
Verzögerungszeit). Und trägt wie jede digitale Implementierung 
Diskretisierungsfehler hinsichtlich Wert und Zeit. Es bleibt dabei, eine 
VHDL-Anweisung wie
a <= b after 3 ms;

ist (derzeit) nicht synthetisierbar und keinesfalls mit einem register 
oder Logic.

(Größe: bei 3 ms und 50 MHz als typische Werte muesste man 150 000 1 bit 
Speicher in reihe schalten. Selbst mit Schieberegistermakro (Xilinx 
SRL32) wird das eng. Und dann wird meist eine Einstellbarkeit gefordert 
(Der Laser soll x ms nach passieren der Lichtschranke feuern. x wird vom 
kunden im 0.1 ms Raster aus dem Bereich 0 bis 60 sec eingestellt.) Lässt 
schnell in VHDL niederschreiben, bei Implementierung in Hardware wird 
aber selbst so eine einfache sache schon zur handfesten 
Ingenieursaufgabe.

M'orgen

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


Lesenswert?

> Es bleibt dabei, eine VHDL-Anweisung wie
>  a <= b after 3 ms;
> ist (derzeit) nicht synthetisierbar
ACK. Schade...

Und nicht mal das ist so ohne weiteres synthetisierbar:
a <= b/c;
Aber es gibt wenigstens zaghafte Schritte in diese Richtung...

T'ach  ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Fpga Kuechle schrieb:

> Und dann wird meist eine Einstellbarkeit gefordert
> (Der Laser soll x ms nach passieren der Lichtschranke feuern. x wird vom
> kunden im 0.1 ms Raster aus dem Bereich 0 bis 60 sec eingestellt.)

:-)

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


Lesenswert?

> Und dann wird meist eine Einstellbarkeit gefordert
> (Der Laser soll x ms nach passieren der Lichtschranke feuern. x wird vom
> kunden im 0.1 ms Raster aus dem Bereich 0 bis 60 sec eingestellt.)
Und nach der Erstinbetriebnahme soll dann üblicherweise der Wertebereich 
von x ein wenig nach unten erweitert werden   ;-)

von Mathi (Gast)


Lesenswert?

> Und nicht mal das ist so ohne weiteres synthetisierbar:
> a <= b/c;

Für FPGAs stimmt das... Aber beim ASIC lässt sich a <= b/c; durchaus 
synthetisieren. Die Frage ist ob man soviel Silizium übrig hat ;-)

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.