Forum: FPGA, VHDL & Co. Komponenten über "generate" Instanziiert => untereinander verdrahten! Wie?


von Queck S. (Firma: Uni) (kiigass)


Lesenswert?

Hi Leutz

Ich habe heute folgenden Fall: Ich möchte ein Sub-Modul in einem 
übergeordneten Modul mehrere hundert Male als Component einbinden. Da 
dachte ich an "generate". Soweit so gut, nun möchte ich aber, dass die 
einzelnen Instanziierungen der Komponenten untereinander verbunden 
werden. Wie funktioniert das?

thx for help

greez Kiigass

PS: Wo wir grad dabei sind: Kann ich die Komponenten auch einzeln 
ansprechen? Das ist nicht soo wichtig, wäre aber nice to have.

von franke (Gast)


Lesenswert?

Hi

nimm std_logic_vector(en), hier kannst du deinen generate-Zählindex 
benutzen.

Wenn du schon Vectoren hast, musst du dir mehrdimensionale Typen 
definieren.
z.B.  type irdendwas is array(max1 downto 0) of std_logic_vector(max2 
downto 0);

Gruß

von Queck S. (Firma: Uni) (kiigass)


Lesenswert?

franke schrieb:
> Hi
>
> nimm std_logic_vector(en), hier kannst du deinen generate-Zählindex
> benutzen.
>
> Wenn du schon Vectoren hast, musst du dir mehrdimensionale Typen
> definieren.
> z.B.  type irdendwas is array(max1 downto 0) of std_logic_vector(max2
> downto 0);
>
> Gruß

Danke dir! Das hat mich auf Ideen gebracht.

von Queck S. (Firma: Uni) (kiigass)


Lesenswert?

Hmm leider gibt es jetzt ein kleines Typenproblem beim port map.

also beispielsweise:
1
...
2
component test
3
port( 
4
   port1 : in std_logic_vector(3 downto 0);
5
   ...
6
);
7
end component;
8
9
type iwas is array(3 downto 0) of std_logic_vector(3 downto 0);
10
11
begin
12
...
13
port map( port1 => iwas(2),...);

Da sagt er dann "type conversion does not match type std_logic_vector".

von berndl (Gast)


Lesenswert?

Queck Silber schrieb:
> type iwas is array(3 downto 0) of std_logic_vector(3 downto 0);

dann schreib da mal sowas drunter:
1
signal hugo: iwas := (others => (others => '0'));
und binde das an die Komponente an

von Queck S. (Firma: Uni) (kiigass)


Lesenswert?

berndl schrieb:
> Queck Silber schrieb:
>> type iwas is array(3 downto 0) of std_logic_vector(3 downto 0);
>
> dann schreib da mal sowas drunter:
>
1
> signal hugo: iwas := (others => (others => '0'));
2
>
> und binde das an die Komponente an

Danke für die Antwort, leider ist das Ergebnis folgende Fehlermeldung:

Type error near hugo ; current type iwas; expected type std_logic_vector

Edit: Ahh! Mom! Ich hab da grade was gefunden, wenn ich hugo indiziere 
gibt es zumindest nicht sofort ne Fehlermeldung. Ich probier das kurz 
und melde mich in wenigen Minuten wieder.

von Queck S. (Firma: Uni) (kiigass)


Lesenswert?

ja schade, edit geht nicht mehr, deshalb Doppelpost.

Danke an euch beide für die Antworten. Die Antwort von Berndl hat das 
Problem gelöst. Soweit ich das bisher getestet hab, gibts keine weiteren 
Fehler.

von franke (Gast)


Lesenswert?

hmm...
interessant, vielleicht kann ja jemand klären..

von meinem Code entnommen:
type coef_result_1_type is array(0 to 15) of std_logic_vector(24 downto 
0);
signal coef_result_1 : coef_result_1_type;

..
-- second adder stage
second_stage_adder: for i in 0 to 7 generate
  inst_coef_adder: piped_adder_25b
      port map(
          DataA => coef_result_1(2*i),
          DataB => coef_result_1(2*i+1),
..

geht ohne Probleme bei mir, auch drei dimensional.

Gruß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

franke schrieb:
> geht ohne Probleme bei mir, auch drei dimensional.
Ja klar, du verbindest ja auch das Signal:
1
type coef_result_1_type is ...
2
signal coef_result_1 : coef_result_1_type;  
3
  port map( DataA => coef_result_1(2*i), ...
Und nicht den Typ (wie Queck Silber das probierte):
1
type iwas is ...
2
  port map( port1 => iwas(2), ...

von Queck S. (Firma: Uni) (kiigass)


Lesenswert?

Lothar Miller schrieb:
> franke schrieb:
>> geht ohne Probleme bei mir, auch drei dimensional.
> Ja klar, du verbindest ja auch das Signal:
>
1
> type coef_result_1_type is ...
2
> signal coef_result_1 : coef_result_1_type;
3
>   port map( DataA => coef_result_1(2*i), ...
4
>
> Und nicht den Typ (wie Queck Silber das probierte):
>
1
> type iwas is ...
2
>   port map( port1 => iwas(2), ...
3
>

Ganz genau, aber mit Signalen funktionert es ja.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Queck Silber schrieb:
> Ganz genau, aber mit Signalen funktionert es ja.
Logisch, weil ja nur Signale über eine Port List weitergegeben werden 
können. Keinesfalls aber Typdefinitionen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.