mikrocontroller.net

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


Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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:
entity ent is
generic(
  number      : integer range 1 to 31 := 2;
  main_options: std_logic_vector(number*4-1 downto 0) := x"48"
  );
  
[...]

component com is
  generic(
    options: std_logic_vector(3 downto 0);
    
[...]

gen: for i in 0 to number-1 generate
  inst : com
    generic map(
      options => main_options(i*4+3 downto i*4),

[...]

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?

Autor: Rick Dangerus (Gast)
Datum:

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

Rick

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.