Dakons blog

Erstellt: 25. 8. 2005, 08:47
Geändert: 8. 8. 2007, 09:17

The others

Tags:

Es gibt ja ungefähr so viele Programmiersprachen wie Gründe warum Leute in dem Alkoholismus verfallen, Zusammenhänge nicht gänzlich ausgeschlossen. Nun gibt aber einige davon die sich durch einige Besonderheiten von den anderen abheben, und eine von denen Ziel dieser Lästerei: VHDL (nicht zu verwechseln mit Verilog HDL, das man genauso abkürzen kann, aber etwas anderes ist).

VHDL ist eine Hardwarebeschreibungssprache in der ich derzeit das Innenleben eines Chips für meine Diplomarbeit schreiben darf. Eines der gängigen Konzepte von VHDL ist ein Vektor, quasi eine Ansammlung von zusammengehörigen Leitungen. Stelle man sich nun z.B. einen 32 Bit breiten Datenbus vor, so kann man damit eigentlich alles anstellen was man sich so vorstellt:

vector(31 downto 0) <= (24 => '1', 16 => '1', 8 => '1', 0 => '1'); initialisiert nur das jeweils letzte Bit eines jeden Bytes in dem Vektor. Die anderen Bits bleiben alle auf dem vorherigen Wert. vector(31 downto 0) <= (24 => '1', 16 => '1', 8 => '1', 0 => '1', (others => '0')); initialisiert auch alle vorher nicht explizit erwähnten, auf 0. Extrem praktisch, denn others weiß automatisch wie lang es ist. vector <= (others => '0'); knüppelt gnadenlos alles auf 0 was in dem Vektor ist. Auch hier weiß others automatisch wie lang es ist.

Was mich aber richtig nervt ist die Tatsache das bei Vergleichen others auf einmal jede Intelligenz verliert und ein Konstrukt wie if (vector = (others => '0')) then ... schlicht einen Compilerfehler wirft weil er nicht weiß wie lang er den ad-hoc-Vektor machen muss. Hallo? Wie wäre es mit der Länge des Vergleichswerts?

Aber nicht nur die Sprache ist an einigen Stellen irgendwie daneben, wie es sich für eine Programmiersprache gehört sind auch die Tools auf viele subtile Arten kaputt. Da ist zum Beispiel dieser HDL Designer von Mentor, der das in der Tat nützliche Feature hat bei einem Doppelklick auf die Fehlermeldung des Compilers an die entsprechende Stelle im Code zu springen. Wenn die Datei vorher nicht geöffnet war macht er sie sogar auf. Das ist nur leider schlimmer als wenn er nichts getan hätte, denn jetzt muss man die Datei erst schließen, erneut öffnen und wieder an die richtige Stelle gehen um die Korrekturen zu machen. Aus mir völlig unerklärlichen Gründen öffnet er die Datei nämlich schreibgeschützt. Dann hat der Editor das überaus nützliche Feature bei if-else-end-Konstruktionen die Einrückung automatisch zu machen. Tippe ich ein if und füge einen Zeilenumbruch ein verschiebt er den Cursor gleich um einen Tab weiter nach rechts. Sollte ich dann ein else, elsif oder end tippen springt er automatisch zurück sobald ich das Wort fertig habe. Er ist sogar so intelligent das er wenn ich mich vertippt habe und aus einem else ein elsif mache das nicht nochmals zurück eingerückt wird. Was ich aber nicht verstehe ist warum er innerhalb von Funktionen dieses Feature auf einmal vergisst und keinerlei Einrückungen mehr von selbst vornimmt.

Anbieterkennzeichnung