Forum: FPGA, VHDL & Co. Selbst definierter Type wird nicht synthetisiert


von andreas (Gast)


Lesenswert?

Hallo,

Ich habe ein problem mit einem selbst definierten Typen.

Ich habe folgendes Package:
1
PACKAGE types IS
2
  type alu_instruction is ( add, sub);
3
END types;

Diesen Typ verwende ich in einem anderen Stück Code:
1
LIBRARY cpu0_lib;
2
USE cpu0_lib.types.alu_instruction;
3
4
ENTITY cu IS
5
   PORT( 
6
      ....
7
      op        : OUT    alu_instruction;
8
      ....
9
   );
10
END cu;
11
12
ARCHITECTURE rtl OF cu IS
13
BEGIN
14
  process(instr)
15
    begin
16
        ....
17
        if( instr(25 downto 24) = "00") then
18
          op <= add;
19
        else
20
          op <= sub;
21
        end if;
22
  .....

Wenn ich das ganze mit ModelSIM Simuliere funktioniert alles perfekt...
Wenn ich das Ganze aber mit XST Synthetisieren will bekomme ich mehrere 
Fehler:
1
ERROR:HDLParsers:3313 - "C:/HDS/cpu0/cpu0_lib/hdl/cu_rtl.vhd" Line 57. Undefined symbol 'add'.  Should it be: and?
2
ERROR:HDLParsers:1209 - "C:/HDS/cpu0/cpu0_lib/hdl/cu_rtl.vhd" Line 57. add: Undefined symbol (last report in this block)
3
ERROR:HDLParsers:800 - "C:/HDS/cpu0/cpu0_lib/hdl/cu_rtl.vhd" Line 59. Type of op is incompatible with type of sub.
4
ERROR:HDLParsers:800 - "C:/HDS/cpu0/cpu0_lib/hdl/cu_rtl.vhd" Line 72. Type of op is incompatible with type of sub.
5
ERROR:HDLParsers:800 - "C:/HDS/cpu0/cpu0_lib/hdl/cu_rtl.vhd" Line 85. Type of op is incompatible with type of sub.

Kann mir jemand sagen was ich falsch gemacht habe?

lg
Andreas

von Morin (Gast)


Lesenswert?

XST müsste das auf jeden Fall können. Da gibt es denk ich noch irgendein 
Problem mit dem Einbinden des Typs (weil in einem Package definiert).

Versuch mal probeweise, die Zeilen
1
LIBRARY cpu0_lib;
2
USE cpu0_lib.types.alu_instruction;
auch nochmal über die Architecture zu schreiben.

von andreas (Gast)


Lesenswert?

Hallo,
1
LIBRARY cpu0_lib;
2
USE cpu0_lib.types.alu_instruction;
3
4
ARCHITECTURE rtl OF cu IS
5
BEGIN
6
  process(instr)

Habe das schnell ausprobiert, hat aber nichts an der Fehlern geändert...

lg
Andreas

PS: Den ganzen Code hab ich hier: 
http://github.com/andreasWallner/minidsp/tree/master/cpu0_lib/hdl/cu_rtl.vhd

von Joee (Gast)


Lesenswert?

Ach wenn das jetzt sicher keine Hilfe für das aktuelle Problem ist, aber 
ich habe bei mir immer mit logic-vectoren gearbeitet und mit Konstanten 
vergleichen.
Die Konstanten kamen aus einem globalen Package. So wird das verwenden 
eigener Typen in den entitiys quais by design unterbunden.

Anders haben Syntheseprogramme oft die wildesten Fehlermeldungen 
generiert ;)

von andreas (Gast)


Lesenswert?

Hi,

Danke für den Tipp mit den Konstanten, an das hatte ich im Moment gar 
ned gedacht. Mich würde trotzdem interessieren wo mein Fehler liegt, das 
ganze sollte doch funktionieren...

lg
Andreas

von Duke Scarring (Gast)


Lesenswert?

Testweise würde ich folgendes versuchen:
1
LIBRARY cpu0_lib;
2
USE cpu0_lib.types.all; -- <- all
oder
1
 op <= alu_instruction(add);
oder
1
 type alu_instruction is ( alu_add, alu_sub);

> Undefined symbol 'add'.
Möglicherweise ist add mehrfach definiert. VHDL macht dann die 
Bezeichner unsichtbar.

Duke

von Jan M. (mueschel)


Lesenswert?

Bist du übrigens sicher, dass ise dein Package wirklich unter cpu0_lib 
einbindet und nicht unter work?
Probier einfach mal ein

LIBRARY work;
USE work.types.all;

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.