Ise: generic und range = Fehler?

OP #707037
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.