Can not determine the "others" values in aggregate.

Gast #2690712
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.
Gast #2691062
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."

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren