current type unsigned; expected type unsigned

OP #3884634
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
Gast #3884646
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.
OP #3884742
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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren