Moin,
eine Frage, die ich mir gerade gestellt habe: Ist 'buffer' für einen
Signal im Entityport seit VHDL-2008 noch für irgendwas gut?
Buffer war, soweit ich es gelernt habe, ja nie richtig 'beliebt' und
seit VHDL-2008 fällt auch der einzige mir bekannte Einsatzzweck, das
Lesen von Ausgangssignalen, weg.
Ich habe es selbst vor VHDL-2008 nie verwendet und jetzt scheint es
keinen Unterschied zu out zu geben. Auch im Buch „Effective Coding in
VHDL“ steht nichts anderes.
Also erstmal, das wolllte ich eben schon korrigieren, aber der
Spamschutz hat mich nicht gelassen:
"Ist 'buffer' für ein Signal..."
Blechbieger schrieb:> Ich habe es selbst vor VHDL-2008 nie verwendet und jetzt scheint es> keinen Unterschied zu out zu geben.
Mir erscheint es auch so. Verwendet habe ich buffer auch fast nie, außer
als Anfänger oder zum schnellen Testen. Deshalb frage ich mich, ob
'buffer' inzwischen genau das Gleiche wie 'out' ist.
Dussel schrieb:> Deshalb frage ich mich, ob> 'buffer' inzwischen genau das Gleiche wie 'out' ist.
Nein, ist es selbstverständlich nicht. Buffer ist in etwa das, was inout
darstellt und passt nur auf das Toplevel. Verwendet man es intern, wird
es nach außen getrieben, soweit das möglich ist. Funktionieren kann es
aber nur, wenn auch die weiteren Signale als buffer definiert sind und
entsprechend verdrahtet werden können. Ich habe da aber schon Pferde
kotzen sehen, z.B. bei Datenleitungen von externen RAMs. Am Ende gab es
nur noch outputs und die inputs konnten nicht mehr gebaut werden.
Man sollte solche Spielchen lieber weglassen und saubere Signal
definieren, also IO auf dem LOPLEVEL und innen eins von beiden.
Dussel schrieb:> Buffer war, soweit ich es gelernt habe, ja nie richtig 'beliebt' und
Beliebtheit ist hier kein Kriterium, weil es ja um einen formal korrekte
Beschreibungssprache für sicheres FPGA-Design und nicht um die
Verbreitung einer fetzigen Jugendsprache geht.
'buffer' ist halt wie die Verwendung des 'Goto' in modernen
Programmiersprachen: wenn man das im Code findet war offensichtlich ein
Idiot am Werk der die passenden Sprach-elemente für diesen Fall nie
gelernt hat oder aus Bequemlichkeit ignoriert.
Man könnte höchstens nachforschen, ob es im ASIC-Bereich diesbezüglich
anders ausschaut.
Messtechnikprofi schrieb:> Buffer ist in etwa das, was inout darstellt und passt nur> auf das Toplevel.
Interssant. Ich kannte 'buffer' immer nur als Ausgang. Dann muss ich
mich da wohl nochmal genau einlesen.
Fpgakuechle K. schrieb:> Beliebtheit ist hier kein Kriterium
Und deshalb steht es in Anführungszeichen.
Fpgakuechle K. schrieb:> 'buffer' ist halt wie die Verwendung des 'Goto' in modernen> Programmiersprachen
Während aber goto grundsätzlich noch (seltene) Anwendungszwecke hat(te),
kam es mir so vor, als wären 'out' und 'buffer' jetzt genau das Gleiche
oder als wäre 'out' ein universelleres und sichereres 'buffer'.
Der Antwort von Messtechnikprofi zufolge ist das aber ja nicht der Fall.
Messtechnikprofi schrieb:> Buffer ist in etwa das, was inout> darstellt und passt nur auf das Toplevel.
Sicher? Oder wie ungenau ist deine Floskel "ist in etwa das, was"?
Bei inout kann man ein Signal lesen. Man liest immer das, was wirklich
auf der Leitung anliegt. Wenn man also eine '0' oder '1' aktiv ausgibt,
dann liest man diese auch außer bei einem Konflikt. Wenn man 'Z' ist,
dann liest man das was ein anderer Teilnehmer ausgibt.
Bei Buffer hat man einen Ausgang. Und nur einen Ausgang. Ja, man kann
auch lesen, aber nur das was man selber schreibt. Dafür hat ein Buffer
speicherndes Verhalten, da werden also FFs verwendet. Man kann so z. B.
direkt einen Buffer als Zähler verwenden, lesen und erhöhen. Oder wie im
Anhang ein Bit toggeln.
Mit VHDL2008 kann man sowieso Ausgänge auch intern lesen. Wenn man das
getaktet macht, dann werden auch dort wie beim Buffer FFs verwendet.
Fpgakuechle K. schrieb:> wenn man das im Code findet war offensichtlich ein> Idiot am Werk der die passenden Sprach-elemente für diesen Fall nie> gelernt hat oder aus Bequemlichkeit ignoriert.
Nun, Buffer gibt es nicht ohne Grund in der Sprache und in VHDL2008 kann
man auch nicht ohne Grund Ausgänge auch intern verwenden. Und zwar weil
es die Sprache etwas bequemer macht. Natürlich sollte man wissen was man
tut, aber das gilt sowieso immer. Ich finde das also völlig OK und
richtig wenn man Sprachfeatures korrekt verwendet. Auch wenn das
Features sind die man leicht falsch verwenden kann.
Gustl B. schrieb:> Auch wenn das> Features sind die man leicht falsch verwenden kann.
Das ist doch das Problem. Die Beschreibung "Buffer" hat im analogen
Bereich die Bedeutung einer Signalentkopplung, insbesondere auch im FPGA
im Bezug auf Takte und IOs. Sie rührt her von einer Beschreibung von
physikalischen Funktionen und die kollidieren regelmäßig mit denen für
das Logikdesign, weil die Pioniere der HDL das eben
durcheinandergeworfen haben.
Es wäre allemal zweckmäßiger, dies zu trennen und für die logische
Funktion des Pufferns eines Signals, also der statischen Speicherung,
eine andere Terminologie einzuführen. Um das zu entspannen hilft es
daher nur, auf solche unlogischen Konstrukte bei der Bescheibung von
Schaltungslogik zu verzichten.
Im Bezug auf "buffer" ist das umsomehr nötig, weil es diese
physikalische Funktion so in FPGAs nicht mehr gibt.
Jürgen S. schrieb:> Das ist doch das Problem.
Nein. Oder anders: Wir sollten vorher mal klären wer eine Sprache wie
benutzt. Profis mit viel Erfahrung, professionellere Amateure die schon
etwas mehr wissen aber keine Profis sind, Anfänger.
Und was ist die Aufgabe der Sprache? Soll die Sprache so sein, dass sich
selbst der blutigste Anfänger nicht in den Fuß schießen kann? Oder soll
die Sprache so sein, dass ein Profi damit möglichst einfach zum Ziel
kommt?
Was sollen wir also verbieten?
Buffer in VHDL Ports.
For ... loop ist für Anfänger auch gefährlich.
Variablen auch und es gibt keine Stelle an der man Variablen zwingend
verwenden müsste, also auch weg damit?
Und wer sollte das verbieten oder beseitigen. Muss schon die Sprache
Idiotensicher sein? Warum? Wenn da ein Profi dran sietzt, dann freut der
sich über Features die ihm die Arbeit erleichtern und er weiß genau was
er tut.
Ich bin dafür, dass das die Menschen regeln die eine Sprache verwenden.
Man sollte sich selbst einschätzen und dann nur das verwenden was man
auch beherrscht. Ist ja auch außerhalb der Sprachen so. Wenn man nicht
weiß wie ein Ding funktioniert und durch Fehlbedienung Schaden entstehen
kann, dann lässt man es besser. Sowas wie die Kettensäge meine ich.
Und dann gibt es ja auch noch Firmen. Die können ihren Mitarbeitern
Dinge vorschreiben. Also auch Sprachkonstrukte verbieten. Ich weiß von
einer Firma die viel ADA in der Luftfahrt verwendet. Dort ist Rekursion
verboten. Und zwar vor allem aus Gründen der Wartbarkeit. Wenn man Code
von anderen Mitarbeitern übernehmen soll/muss, dann sollte der einfach
zu verstehen sein. Rekursion kann da ein Hindernis sein.