> Ich würde da gerne die shift Funktion verwenden.
Aufpassen:
Das ist kein Shift, den du da beschreibst, sondern ein Monster-Mux.
> Naja... 'Synopsys will das nicht synthetisieren' kann auch bedueten das
> er schon beim Syntax Check abbricht ;)
Ok, wenn man seine Tools nicht kennt...
Wenn DPIXrange ein Input ist, dann ist es vermutlich auch ein
std_logic_vector. Und die müssen für eine range-Angabe natürlich erst
mal in einen integer gewandelt werden. So gehts:
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 | use IEEE.NUMERIC_STD.ALL;
|
4 |
|
5 | entity VarMux is
|
6 | Port ( iv : in STD_LOGIC_VECTOR (15 downto 0);
|
7 | ov : out STD_LOGIC_VECTOR (15 downto 0);
|
8 | rng : in STD_LOGIC_VECTOR (3 downto 0));
|
9 | end VarMux;
|
10 |
|
11 | architecture Behavioral of VarMux is
|
12 | begin
|
13 | -- Original, so gehts nicht:
|
14 | ov(15 downto rng) <= iv(rng downto 0);
|
15 |
|
16 | -- So gehts:
|
17 | ov(15 downto (15-to_integer(unsigned(rng)))) <= iv(to_integer(unsigned(rng)) downto 0);
|
18 | end Behavioral;
|
> :=
Diese Variablenrechnerei gibt mir zu Denken....... :-/
> pix2(15 downto (15-DPIXrange)) := ...
Durch die unvollständige Beschreibung des Ausgangsvektors handelst du
dir 16 Latches ein. Ist dir das bewusst? Willst du das?