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.