Seltsamer ModelSim Compiler Fehler?

OP #1407345
Lesenswert?

Hallo!

Ich stehe vor einem mir unlösbaren Problem.

Wenn ich folgenden VHDL Code (nur relevante Teile angeführt) in ModelSim 
kompiliere wird die Fehlermeldung "Badly formed indexed name of "data". 
Index #2 is a range." ausgegeben.
1
type array2d0 is array (15 downto 0,15 downto 0) of std_logic;
2

3
signal data: array2d0;
4
signal lDat: std_logic_vector(15 downto 0);
5

6
lDat(15 downto 0) <= data(1, 15 downto 0);

Weiß jemand voran das liegen kann? Kompiliere ich den Code in Quartus II 
funktioniert es tadellos.

lg
Rooney
Moderator (Firma: Titel) Persönliche Seite #1407715
Lesenswert?

> Index #2 is a range
Das sagt schon alles, oder?
1
  data(1, 15 downto 0);
Modelsim stört sich an der Indizierung mit einem Range.

> Kompiliere ich den Code in Quartus II funktioniert es tadellos.
Funktioniert dann deine Hardware, oder verdaut Quartus nur den Code und 
macht ein Verdauungsprodukt daraus (ugs: Sch...e)?

> Ich stehe vor einem mir unlösbaren Problem.
Mach eine loop daraus.
1
   for i in 0 to 15 loop
2
      lDat(i) <= data(1, i);
3
   end loop;
OP #1415855
Lesenswert?

Okay, vielleicht zu früh gefreut.

Folgender Code funktioniert einwandfrei...
1
process(data)
2
begin
3
  for i in 0 to 15 loop
4
    lDat(i) <= data(1, i);
5
  end loop;
6
end process;

Wie macht man das aber, wenn man kein Sensitivity List hat, also wenn 
man einen konstanten Wert zuweisen möchte?
Moderator (Firma: Titel) Persönliche Seite #1416028
Lesenswert?

> Wie macht man das aber, wenn man kein Sensitivity List hat, also wenn
> man einen konstanten Wert zuweisen möchte?
Jeder Prozess wird bei der Initialisierung einmal bis zum ersten wait 
durchlaufen.

Wenn du keine Sensitiv-Liste hast, dann muß dein Prozess ein wait haben, 
sonst hagelt es Fehlermeldungen. Also mußt du zum Schluss ein wait 
einfügen:
1
process begin
2
  for i in 0 to 15 loop
3
    lDat(i) <= constantdata(1, i);
4
  end loop;
5
  wait; -- wait forever
6
end process;
OP #1416736
Lesenswert?

Also nur "wait" geht nicht, denn dann wird in Xilinx folgende 
Fehlermeldung ausgegeben:

Bad condition in wait statement, or only one clock per process.

Ein eindimensionales Objekt nehmen geht deswegen nicht, da ich in meinem 
Design ein fertiges Modul einsetze, das als Input leider ein 
mehrdimensionales Array erwartet. Würde mir gerne ersparen alles 
umzuschreiben.

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