Forum: FPGA, VHDL & Co. current type unsigned; expected type unsigned


von Burkhard K. (buks)


Lesenswert?

Dass die Fehlermeldungen des ISE HDL Compilers nicht immer die 
erhellendsten sind, ist bekannt - aber der hier hat das Zeug den 
Benutzer in den Wahnsinn zu treiben:

ERROR:HDLCompiler:1728 - 
"C:/Users/buk/FPGA/Pmods/OLED2/PmodOLED2_Source/gen_delay.vhd" Line 53: 
Type error near cnts ; current type unsigned; expected type unsigned

Dabei wird die Breite des unsigned Wertes per Generic Übergabe 
abgeglichen:
1
  
2
  signal cnts : unsigned(C_CNTS_WIDTH-1 downto 0);
3
4
  DELAY_COUNTER_UNIT: entity generics.gen_counter
5
    generic map ( C_CNTS_WIDTH )
6
    port map ( reset=>reset, clk=>clk, tick=>tick, en=>cntr_en, clr=>cntr_clr, *cnts=>cnts*, ovfl=>ovfl);

Welche Möglichkeit habe ich dem Compiler zu entlocken, was ihm nicht 
passt? Andere Module funktionieren mit der selben Konstruktion.

Gruß,
Burkhard

von Bitflüsterer (Gast)


Lesenswert?

Für eine lange Hin- und Her-Fragerei ist es immer gut, nur einen Teil 
des Codes und kein minimales aber komplettes Beispiel zu posten.

Das gibt noch mindesten 10 Einträge (die Trolle, Ahnungslosen und 
Besserwisser nicht mitgerechnet).

Nur eines ist an dem Code-Schnipsel wirklich auffällig: Eine 
widersprüchliche Bedeutung des Namens des Generics.
Bei Typen wie unsigned, wird nämlich nicht die Breite desjenigen 
Bitvektors angegeben, der die Zahlen darstellt sondern die höchste Zahl, 
die das Signal darstellen kann. "Width" deutet aber auf die Breite hin. 
Es sollte "Max" sein. Mag sein, dass Dein Problem darauf zurückzuführen 
ist.

von Burkhard K. (buks)


Lesenswert?

Erledigt.

Das Code-Beispiel war hinreichend vollständig um zu zeigen, dass die 
Compilermeldung unsinning oder zumindest unvollständig ist.

Meine Frage lautete im Übrigen: "Kann ich den Compiler dazu bewegen, den 
Fehler ausführlicher zu erläutern" - ich habe nicht darum gebeten, dass 
ein anderer Fehler in meinem Code für mich findet.

Indirekt hat Deine Antwort aber doch geholfen, den Fehler aufzulösen - 
es fehlte in obigen Modul tatsächlich ein
1
use ieee.numeric_std.all;
- damit klappt dann auch die unsigned Deklaration per Bitbreite.

(Was aber nichts daran ändert, dass eine Fehlermeldung "Error: type X 
equals type X" wenig hilfreich ist).

von Bitflüsterer (Gast)


Lesenswert?

Schön.

Das mit der Vektorbreite vs. höchster Wert war natürlich Unsinn.

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


Lesenswert?

Burkhard K. schrieb:
> es fehlte in obigen Modul tatsächlich ein use ieee.numeric_std.all;
Und was ist sonst noch alles drin? Die Synopsys Mathe-Packages auch?

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.