mikrocontroller.net

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


Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe ein problem mit einem selbst definierten Typen.

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

Diesen Typ verwende ich in einem anderen Stück Code:
LIBRARY cpu0_lib;
USE cpu0_lib.types.alu_instruction;

ENTITY cu IS
   PORT( 
      ....
      op        : OUT    alu_instruction;
      ....
   );
END cu;

ARCHITECTURE rtl OF cu IS
BEGIN
  process(instr)
    begin
        ....
        if( instr(25 downto 24) = "00") then
          op <= add;
        else
          op <= sub;
        end if;
  .....

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

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
LIBRARY cpu0_lib;
USE cpu0_lib.types.alu_instruction;
auch nochmal über die Architecture zu schreiben.

Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
LIBRARY cpu0_lib;
USE cpu0_lib.types.alu_instruction;

ARCHITECTURE rtl OF cu IS
BEGIN
  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/mast...

Autor: Joee (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Duke Scarring (Gast)
Datum:

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

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

Duke

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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;

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.