www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Quartus interpretiert Array of std_logic_vector merkwürdig


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Peter Z. (starkstrompeter)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Zusammen,

ich arbeite gerade an einem VHDL-Design und komme mit dem, was Quartus 
II 11.1 mir erzeugt nicht ganz klar. Prinzipiell habe ich eine Entity, 
welche ein Array[0..127] von std_logic_vector(31 downto 0) in ihrem Port 
hat:
port(
   COE_OUTPUTS    : out io_array(0 to 127)  -- 0x80..0xff: Read/Write
);

Der Typ "io_array" ist in einem gesonderten Package definiert:
type io_array is array(natural range <>) of std_logic_vector(31 downto 0);

Von dieser Komponente habe ich nun in ein Block Symbol File (.bsf) 
erzeugt (File->Create/Update->Create symbol files for current file). 
Dieses verwende ich innerhalb eines Block Design Files, wobei der 
entsprechende Port in der grafischen Darstellung als 
"COE_OUTPUTS[0..127][31..0]" angezeigt wird.

Im nächsten Schritt wandle ich das BDF wieder in ein VHDL-File, um es im 
SOPC-Builder einzubinden (File->Create/Update->Create HDL design file 
for current file). Im generierten VHDL-File erscheint der Port nun in 
folgender Form:
COE_OUTPUTS : OUT STD_LOGIC_VECTOR(0 TO 127 , 31 DOWNTO 0)

Diese Schreibweise bemängelt mir der Syntax-Check beim Erstellen einer 
SOPC-Komponente mit der Fehlermeldung:

> Error: VHDL Indexed Name error at slave.vhd(53): array type "std_logic_vector" 
expects 1 index arguments File: d:/sopc/slave/slave.vhd Line: 53

Vielleicht hat mir jemand einen Tipp, warum beim Umwandeln des BDF-Files 
"ungültiger" VHDL-Code erzeugt wird, und wie ich das umgehen kann.

Peter

Autor: Duke Scarring (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Peter Z. schrieb:
> COE_OUTPUTS : OUT STD_LOGIC_VECTOR(0 TO 127 , 31 DOWNTO 0)
Du willst, daß Deine Komponente 32 * 128 = 4096 Ausgangsleitungen hat?

> Diese Schreibweise bemängelt mir der Syntax-Check beim Erstellen einer
> SOPC-Komponente mit der Fehlermeldung:
>
>> Error: VHDL Indexed Name error at slave.vhd(53): array type "std_logic_vector"
> expects 1 index arguments File: d:/sopc/slave/slave.vhd Line: 53
>
Da wird ein eindimensionales Array erwartet. Du erstellst ein 
zweidinemsionales VHDL-Array.

> Vielleicht hat mir jemand einen Tipp, warum beim Umwandeln des BDF-Files
> "ungültiger" VHDL-Code erzeugt wird, und wie ich das umgehen kann.
Das ist kein ungültiger VHDL-Code. Aber Dein Tool kommt mit dem 
Konstrukt offenbar nicht so richtig klar.

Duke

Autor: Peter Z. (starkstrompeter)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Danke für die Antwort!

> Du willst, daß Deine Komponente 32 * 128 = 4096 Ausgangsleitungen hat?

Nur im Extremfall :-) Das ganze soll eine allgemeine 
Avalon-Slave-Komponente werden, welche bis zu 128 Register als Eingänge 
und Ausgänge bereitstellt (also den kompletten vorgesehenen Adressraum). 
Im Normalfall werde ich davon nur einzelne nutzen, womit die Synthese 
hoffentlich sämtliche unnötigen Register eliminiert.

> Das ist kein ungültiger VHDL-Code. Aber Dein Tool kommt mit dem
> Konstrukt offenbar nicht so richtig klar.

Hm, gibt es da irgendeine Möglichkeit, Quartus zweidimensionale Arrays 
innerhalb eines Ports doch schmackhaft zu machen, oder muss ich darauf 
verzichten? Scheint ja nur ein Problem der Schreibweise zu sein, aber 
auf die habe ich bei einem automatisch generierten VHDL-File leider 
keinen Einfluss.

Peter

Autor: Osterhase (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Warum erzeugst Du eigentlich aus dem VHDL Code ein .bdf und dann aus dem 
.bdf VHDL Code?
>Im Normalfall werde ich davon nur einzelne nutzen, womit die Synthese
>hoffentlich sämtliche unnötigen Register eliminiert.
Da würde ich die Range im generic-Teil parametrisieren. Wenn man dann 
mit dem Component Editor aus dem VHDL Code eine Komponente für den SOPC 
Builder erzeugt, kann man die Range in der GUI ändern, wenn man die 
diese Komponente zu einem SOPC System hinzufügt

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net