Datum:
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
Datum:
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
Datum:
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
Datum:
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