Hallo,
inn der Entity sind folgende Ports deklariert:
1 | port(
|
2 | X: in std_logic_vector(15 downto 0);
|
3 | n: in std_logic_vector(3 downto 0);
|
4 | Y: out std_logic_vector(15 downto 0)
|
5 | );
|
Bei folgender Anweisung
1 | Y <= STD_LOGIC_VECTOR(SHIFT_RIGHT(SIGNED(X), TO_INTEGER(UNSIGNED(n))));
|
bekomme ich diese Fehlermeldung:
1 | the following signal(s) form a combinatorial loop: Y_shift0001<3>
|
Eingebunden sind IEEE.STD_LOGIC_1164.ALL und IEEE.NUMERIC_STD.ALL.
Wenn ich statt SIGNED(X) UNSIGNED(X) verwende oder die Anzahl
verschiebender Bits n statisch setze, tritt das Problem nicht auf.
Ich benötige aber einen SIGNED(X). Als Lösung fällt mir nur ein
Multiplexer ein, der ausgehend vom Wert Bits n den SHIFT_RIGHT() mit
konstantem Verschiebeoperator aufruft.
Ist jemandem das Problem oder eine Lösung bekannt?
Grüße Jan.