Forum: FPGA, VHDL & Co. Can not determine the "others" values in aggregate.


von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Hallo,

ich habe, mal wieder, ein Problem mit der Befindlichkeit der ISE:

Wenn ich z.B. nachfolgendes Beispiel durch die Synthese schicke bekomme 
ich mehrfach die Fehlermeldung "Can not determine the "others" values in 
aggregate."
Wobei mir absolut nicht klar ist warum die ISE dafür zu blöd ist. Ich 
meine die Größe von jedem Signal ist bekannt und others sollte demnach 
doch wirklich damit klarkommen die Differenz zwischen z.B. STAGE1 und 
A(14  downto 0) mit Nullen aufzufüllen. Oder was sehe ich da was falsch?

1
entity LSL_BARRELSHIFTER is
2
  port (
3
    A :  in  STD_LOGIC_VECTOR (15 downto 0);
4
    pos :  in  STD_LOGIC_VECTOR (3 downto 0);
5
    Y :  out STD_LOGIC_VECTOR (15 downto 0)
6
  );
7
end LSL_BARRELSHIFTER;
8
9
architecture Behavioral of LSL_BARRELSHIFTER is
10
11
  signal STAGE1 : STD_LOGIC_VECTOR (15 downto 0);
12
  signal STAGE2 : STD_LOGIC_VECTOR (15 downto 0);
13
  signal STAGE3 : STD_LOGIC_VECTOR (15 downto 0);
14
15
begin
16
17
  STAGE1 <= A(14 downto 0) & (others => '0') when pos(0) = '1' else A;
18
  STAGE2 <= STAGE1(13 downto 0) & (others => '0') when pos(1) = '1' else STAGE1;
19
  STAGE3 <= STAGE2(11 downto 0) & (others => '0') when pos(2) = '1' else STAGE2;
20
  Y <= STAGE3(7 downto 0) & (others => '0') when pos(3) = '1' else STAGE3;
21
  
22
end Behavioral;

Achja, wenn ich händisch die Größen angebe die er auffüllen soll 
funktionierts natürlich.

von Marius W. (mw1987)


Lesenswert?

Probier mal sowas:
1
STAGE3 <= (15 downto 4 => STAGE2(11 downto 0), others => '0') ...

Das sollte eigentlich funktionieren (hoffe ich).

MfG
Marius

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Leider nein.

1
  STAGE3 <= (15 downto 4 => STAGE2(11 downto 0), others => '0') when pos(2) = '1' else STAGE2;

führt zu: "The type of the element in aggregate does not correspond to 
any array type."

von dito (Gast)


Lesenswert?

Ich bin mir nicht sicher, aber vielleicht musst du bei ISE einstellen, 
dass du VHDL-2008 verwenden willst.

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

Nein,

VHDL 200x bringt weder beim ursprünglichen Code noch beim Vorschlag von 
Marius irgendwelche Verbesserung.

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.