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)
es bedeutet das synthese tools keine fehler geben. so einfach ist es das gegenteil ist simulation code der geht nicht durch synthese, gibt fehler
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.
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
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ß
"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 ;)
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
"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...
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)
> Wäre dieses so richtig?
Ja.
Es gibt neben den angesprochenen noch andere HW-Beschreibungssprachen,
die aber ausgestorben/obsolete oder sehr spezialisiert sind.
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
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 ;-)
Lothar Miller schrieb:
> Es ginge mit einem digitalen Eimerkettenspeicher aka Schieberegister ;-)
Kann aber bei 3 ms schon ziemlich lang werden...
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
> 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 ;-)
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.) :-)
> 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 ;-)
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.