Ise: generic und range = Fehler?

OP #707037
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?
OP #707123
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.

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