Forum: FPGA, VHDL & Co. Ise: generic und range = Fehler?


von Jan M. (mueschel)


Lesenswert?

Ich habe ein Problem mit folgendem Code. In einer Hauptentity (ent) wird 
eine variable Anzahl (number) einer component (com) instanziiert, jede 
Instanz (inst) bekommt dabei einen generic (options) mit Optionen 
übergeben. Soweit kein Problem - ich wollte nun folgende, mir elegant 
erscheinende, Lösung verwenden:
1
entity ent is
2
generic(
3
  number      : integer range 1 to 31 := 2;
4
  main_options: std_logic_vector(number*4-1 downto 0) := x"48"
5
  );
6
  
7
[...]
8
9
component com is
10
  generic(
11
    options: std_logic_vector(3 downto 0);
12
    
13
[...]
14
15
gen: for i in 0 to number-1 generate
16
  inst : com
17
    generic map(
18
      options => main_options(i*4+3 downto i*4),
19
20
[...]

Die Xilinxtools fuse und isim (Ise 8.1) erzeugen bei der Simulation 
jedoch unterschiedliche Fehler, options erhält z.B. den Wert "uuu0" oder 
auch ein error, 41 wäre kein gültiger Wert für einen std_logic(!). Das 
ganze riecht für mich verdächtig nach einem internen Buffer-Overflow.
Das Problem tritt auf, sobald ich in der Zuweisung von options eine wie 
auch immer geartete range verwende.

Nehme ich allerdings statt dem std_logic_vector einen integer und hole 
mir die jeweils gebrauchten Werte mit arithmetischen Mitteln 
(main_options /16**i mod 16), so funktioniert es einwandfrei für bis zu 
8 components, danach reicht natürlich die Größe des integers nicht mehr 
aus.

Kann jemand dieses Problem bestätigen oder hat eine Idee, wie man das 
sonst elegant und benutzerfreundlich zuweisen könnte?

von Rick Dangerus (Gast)


Lesenswert?

Da hab ich mich auch schon geärgert. Du kannst auf "number" nicht im 
generic-Teil zugreifen, erst später.

Rick

von Jan M. (mueschel)


Lesenswert?

Da hätte ich natürlich auch schon früher drauf kommen können, wobei ich 
mir fast sicher bin, dass ich das vorhin schon ausprobiert hatte...
Zumal ich das im Prinzip schon oft verwendet habe, aber immer nur in der 
Form "integer range 0 to number" - und da fällt so ein Fehler nicht auf.
Eine Warnung wäre da aber wohl auch angebracht, aber ich erwarte wohl 
mal wieder zu viel von ise.
Danke Rick.

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.