Bei der Entwicklung eines Projekts mit programmierbarer Logik
unterscheidet man zwischen folgenden Ebenen: System-Ebene,
Algorithmus-Ebene, Register-Transfer-Ebene, Gatter-Ebene,
Schalter-Ebene und die Schaltkreisebene.
Erklaerung:
System-Ebene ist die Aufteilung der Aufgabe in Hardware und Software.
Algorithmus-Ebene: c = a + b
________
Register-Transfer-Ebene: c --|addierer|-- a
-----|----
|
b
Gatter-Ebene: c = a xor b
Schalter-Ebene: xor = Verknuepfung von Schaltern
Schaltkreisebene: Elektronische Schaltung des XOR-Gatters
So, jetzt zu den Beschreibungssprachen:
Das beruemt-beruechtigte SPICE simuliert das System als Schaltkreis und
beherrscht somit nur die Schaltkreisebene.
Verilog beherrscht von der Schalterebene bis einschliesslich die
Register-Transfer-Ebene.
VHDL ist von der Gatterebene bis einschlisslich Algorithmusebene
angesiedelt.
SystemC kann Information von der Register-Transfer-Ebene bis
einschliesslich System-Ebene verarbeiten.
Jetzt naeheres zu VHDL und Verilog.
Schwierig fuer die zukuenftige Anwendung von Verilog ist dessen
Unfaehigkeit, mit der System-Ebene zu umgehen. VHDL hingegen kann noch
hochgezogen werden. Abhilfe Schafft hier SystemVerilog, das jedoch von
den preisguenstigen Simulatoren kaum unterstuetzt wird.
Zur Eignung fuer kleinere Projekte:
Obgleich VHDL anscheinend die HDL der Zukunft sein wird, wuerde ich
fuer nicht allzu umfangreiche Projekte Verilog nehmen. Der Grund dafuer
ist die Uebersichtlichkeit.
Hierzu das Beispiel der Instalziierung eines Addierers (ohne der
eigentlichen FUnktionalitaet eines Addierers, der Uebersichtlichkeit
wegen):
Verilog:
module adder(a, b, c);
input a;
input b;
output c;
endmodule;
module adder2;
reg a;
reg b;
wire c;
adder a0(.a(a),.b(b),.c(c));
adder a1(.a(a),.b(b),.c(c));
endmodule;
VHDL:
library ieee;
use ieee.std_logic_1164.all;
entity adder is
port(a: in std_logic; b: in std_logic; c: out std_logic);
end adder;
architecture add1 of adder is
begin
end add1;
entity adder2 is
end adder2;
architecture add2 of adder2 is
component adder is
port(a : in std_logic; b : in std_logic; c : out std_logic);
end component;
signal a, b, c : std_logic;
begin
a0 : adder
map port(a => a, b => b, c => c);
end adder2;
Fazit: VHDL hat viel mehr an Features, die man in den meisten
Hobby-Projekten nicht braucht. Daher ist es eher empfehlenswert,
Verilog zu nehmen.
mit freundlichen Grooves,
ejd