Forum: FPGA, VHDL & Co. Generate Anweisung (Vhdl)


von Christian (Gast)


Lesenswert?

Hallo,

ich habe eine frage zu der Generate Anweisung bzw. ich habe ein Problem 
damit. Ich möchte ein Addiererbaum bauen der von 4 werten auf einen 
runtergeht. Die Skizze soll das mal darstellen:

   ----
--|    |
  |    |- -
--|____|   |
           |    ----
            ---|    |
               |    |-
            ---|____|
   ----    |
--|    |   |
  |    |- -
--|____|

Dieses soll später auch Flexibel sein. Darum dachte ich kann ich das mit 
einer Generate Anweisung machen und Arrays.

Die Komponente wäre diese
1
component  Addier_Baustein is
2
    Port ( NUM1 : in  signed(4 downto 0);    
3
           NUM2 : in  signed(4 downto 0);    
4
           SUM : out  signed(5 downto 0));   
5
end component Addier_Baustein;
6
7
architecture Behavioral of Addier_Baustein is
8
begin
9
10
    SUM <= ('0' & NUM1) + ('0' & NUM2);
11
12
end Behavioral;
Jetzt wollte ich mir ein Array erstellen um die berechneten Werte zu 
speichern und an die Komponente zu übergeben
1
type Array1 is array (0 to 3 of signed(4 downto 0);  
2
Signal Array1Sig : Array1 :=(others => (others => '0'));
3
type Array2 is array (0 to 1 of signed(5 downto 0);  
4
Signal Array2Sig : Array2 :=(others => (others => '0'));
1
Adder1:  for i in 0 to 3 generate
2
 even: if i mod 2 = 0 generate 
3
   Addier_Baustein port map(Array1Sig(i), Array1Sig(i+1), Array2Sig); 
4
 end generate even;
5
end generate Adder1;

Jetzt bekomme ich Fehler beim Port map:

ERROR:HDLParsers:164 parse error, unexpected PORT, expecting OPENPAR or 
TICK or LSQBRACK


Deswegen meine Frage kann man Arrays beim Portmap benutzen oder kann das 
irgendwein andere Fehler sein? Oder kann das daran liegen, dass die 
Array werte signed sind und die von der komponenten std_logic_Vector?

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


Lesenswert?

Christian schrieb:
> kann das irgendwein andere Fehler sein?
Ja, er wird sogar gemeldet:
> unexpected PORT
Das Wort PORT darf an dieser Stelle nicht stehen...

Sieh dir mal an, wie Andere das machn:
http://www.ics.uci.edu/~jmoorkan/vhdlref/generate.html
Was kommt vor PORT? Und was davor?

von Evil (Gast)


Lesenswert?

Christian schrieb:
> type Array1 is array (0 to 3 of signed(4 downto 0);

Da fehlt eine Klammer.


> type Array2 is array (0 to 1 of signed(5 downto 0);

Da fehlt eine Klammer.

Evil

von äh (Gast)


Lesenswert?

1
   Addier_Baustein port map(Array1Sig(i), Array1Sig(i+1), Array2Sig);

Da fehlt eine Klammer.

von äh (Gast)


Lesenswert?

sorry verzält, - Da nicht

von Christian (Gast)


Lesenswert?

Lothar M. schrieb:
> Christian schrieb:
>> kann das irgendwein andere Fehler sein?
> Ja, er wird sogar gemeldet:
>> unexpected PORT
> Das Wort PORT darf an dieser Stelle nicht stehen...
>
> Sieh dir mal an, wie Andere das machn:
> http://www.ics.uci.edu/~jmoorkan/vhdlref/generate.html
> Was kommt vor PORT? Und was davor?

Oh man das war natürlich richtig dummer Fehler. Ja das es was mit dem 
Port zu tun hat dachte ich mir nur konnte den Fehler nicht deuten. War 
sogar auf der Seite und habe das nicht gesehen -.-. Danke für den 
Hinweis.

von Valko Z. (hydravliska)


Lesenswert?

Hi

wenn du SIGNED verwendest musst du auch die "Sign Extension" korrekt 
machen also nicht

('0' & NUM1)

sondern

(NUM1'HIGH & NUM1)


Gruß

von Christian (Gast)


Lesenswert?

Valko Z. schrieb:
> Hi
>
> wenn du SIGNED verwendest musst du auch die "Sign Extension" korrekt
> machen also nicht
>
> ('0' & NUM1)
>
> sondern
>
> (NUM1'HIGH & NUM1)
>
>
> Gruß
Danke für den Tip aber wenn das mache bekomme ich immer Fehler

ERROR:HDLCompiler:1731 - found '0' definitions of operator "&", cannot 
determine exact overloaded matching definition for "&"

von Valko Z. (hydravliska)


Lesenswert?

Hi

(NUM1'HIGH & NUM1)

muss

(NUM1(NUM1'HIGH) & NUM1)

heissen sorry

von Christian (Gast)


Lesenswert?

Valko Z. schrieb:
> Hi
>
> (NUM1'HIGH & NUM1)
>
> muss
>
> (NUM1(NUM1'HIGH) & NUM1)
>
> heissen sorry

Ah Danke jetzt geht :). Kein Problem Danke für die Hilfen bis jetzt 
kommen vllt nochmehr fragen ;)

von Duke Scarring (Gast)


Lesenswert?

Valko Z. schrieb:
> (NUM1'HIGH & NUM1)
>
> muss
>
> (NUM1(NUM1'HIGH) & NUM1)
Und warum nicht einfach ein resize?
Das macht das selbe, ist aber lesbarer.

Duke

von Valko Z. (hydravliska)


Lesenswert?

Duke Scarring schrieb:
> Valko Z. schrieb:
>> (NUM1'HIGH & NUM1)
>>
>> muss
>>
>> (NUM1(NUM1'HIGH) & NUM1)
> Und warum nicht einfach ein resize?
> Das macht das selbe, ist aber lesbarer.
>
> Duke

Weil ich nicht wusste welche libraries er verwendet :)

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.