Forum: FPGA, VHDL & Co. problem mit der TB: type mark expected in a subtype indication


von Arne Z. (zachso)


Lesenswert?

Hallo, ich habe gerade eine kleine uebung gemacht und hier das problem 
dass dich der VHDL-Code nicht kompilieren laesst mit GHDL, was amche ich 
da falsch?

Weil es so wenige Zeilen sind Kopiere ich ihn mal direkt hier rein, ich 
hoffe das ist so in Ordnung.

logik.vhd, funktioniert:
1
entity logik is
2
  port(  E  : in bit_vector (2 downto 0);
3
      Y  : out bit_vector (1 downto 0));
4
end logik;
5
6
architecture behaviour of logik is
7
  begin
8
    Y(0) <= (E(0) and E(1)) or E(2);
9
    Y(0) <= (E(0) or E(1)) and E(2);
10
end behaviour;

dies ist die testbench, hier bricht er am ende ab:
1
entity logik_tb is
2
end logik_tb;
3
4
architecture test of logik_tb is
5
signal E1  : in bit_vector (2 downto 0);
6
signal Y1  : out bit_vector (1 downto 0);
7
    
8
component logik
9
  port(  E  : in bit_vector (2 downto 0);
10
      Y  : out bit_vector (1 downto 0));
11
end component;
12
for all: logik use entity work.logik(behaviour);
13
14
begin
15
  E1 <= "000", "001" after 10 ns, "010" after 20 ns, "011" after 30 ns, "100" after 40 ns, "101" after 50 ns, "110" after 60 ns, "111" after 70 ns;
16
C1:    logik port map(E1, Y1);
17
end test;

und der fehler ist:
1
xxx:~$ ghdl -a logik.vhd 
2
xxx:~$ ghdl -a logik_tb.vhd 
3
logik_tb.vhd:5:18: type mark expected in a subtype indication
4
/usr/lib/ghdl/bin/ghdl: compilation error

waere sehr schoen wenn mir irgendjemand sagen koennte warum das nicht 
klappt, an der logik.vhd scheint es nicht zu liegen. leider reichen 
meien kenntnisse auch nicht wirklich um selber herauszufinden woran das 
liegen koennte. Beide dateien liegen im gleichen Ordner.

danke
arne

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


Lesenswert?

Mit Modelsim und deinem Code bekomme ich gleich mal:
1
# ** Failure: (vsim-3344) Signal 'y' has multiple drivers but is not a resolved signal.
Ok, in logik.vhd aus dem Y(0) ein Y(1) gemacht, dann sagt er:
1
# ** Error: logik_tb.vhd(19): near "in": expecting "STRING" or "IDENTIFIER"
2
# ** Error: logik_tb.vhd(20): near "out": expecting "STRING" or "IDENTIFIER"
Und tatsächlich, in der Zeile 19 und 20 ist ein Fehler, denn Signale 
haben keine Richtung :
1
-- signal E1  : in  bit_vector (2 downto 0); 
2
-- signal Y1  : out bit_vector (1 downto 0);
3
signal E1  : bit_vector (2 downto 0);
4
signal Y1  : bit_vector (1 downto 0);
Und kaum ist das korrigiert, läuft alles wie geschmiert... ;-)

BTW:
1
for all: logik use entity work.logik(behaviour);
Diese Zeile kannst du dir sparen.

von zachso (Gast)


Lesenswert?

Oha, danke
da haste 2 Fehler gefunden obwohl mir nur einer aufgefallen ist. Y(1) 
ist natuerlich auch so gedacht gesesen, da wars wohl gestern abend schon 
ein wenig spaet.
Aber warum meckert denn ghdl nicht wenn ich die logik.vhd kompiliere? da 
muesste er doch eigentlich auch schon die hufe hochwerfen und sagen dass 
ich hier das den gleichen port 2mal belege? oder habe ich das falsch 
verstanden?

danke,
arne

von Duke Scarring (Gast)


Lesenswert?

ghdl ist eben noch Version 0.29...
Dafür ist die Leistung schon recht beachtlich.

Im Gegensatz zeigt Modelsim vcom nicht die Spalte an in der sich ein 
Fehler befindet.

Zum Gegenchecken bei kniffligen Problemen ist es ganz gut, den jeweils 
anderen Compiler zu haben.

Duke

von zachso (Gast)


Lesenswert?

ja, leider habe ich kein modelsim fuer linux, also die installdateien 
schon, nur ohne lizenz sind die wertlos :(
ich werde mir wohl demnaechst mal das webpack angucken, installiert ist 
es schon laenger, nur erschlaegt es einen immer wenn ich es auf mache ;)

danke jedenfalls,
arne

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.