Hallo,
in meinem Code möchte ich dies hier machen (Konvertierung und Casting
der übersichtlichkeit halber weggelassen):
1 | signal a : std_logic_vector(15 downto 7);
|
2 | signal i : std_logic_vector(3 downto 0); // aber Wert >= 7 gilt immer
|
3 | ...
|
4 | a <= IN; -- 9 Bit Eingang
|
5 | ...
|
6 | s <= a(i);
|
Dazu liefert mir Xilinx (wohl zu recht)
1 | WARNING:Xst:790 - Index value(s) does not match array range, simulation mismatch.
|
Aber wird das auch falsch synthetisiert? Wenn nichts, was würde ein "out
of bounds" hier bewirken?
Und welche Alternativen gibt es? Mir fällt
1 | signal a : std_logic_vector(15 downto 0);
|
2 | signal i : std_logic_vector(3 downto 0); // aber Wert >= 7
|
3 | a <= IN & "0000000";
|
4 | s <= a(i);
|
ein, aber dann sind a(6 downto 0) konstant und werden herausoptimiert.
Stimmt das Syntheseergebnis dann überhaupt noch?
Oder ich schreibe
1 | signal a : std_logic_vector(8 downto 0);
|
2 | signal i : std_logic_vector(3 downto 0); // aber Wert >= 7
|
3 | a <= IN;
|
4 | s <= a(i - 7);
|
aber die Subtraktion kostet vielleicht zuviele Resourcen?
Was ist die optimale Lösung für dieses Problem?